<?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>69690</bug_id>
          
          <creation_ts>2011-10-07 20:36:48 -0700</creation_ts>
          <short_desc>DFG does not have flow-sensitive intraprocedural control flow analysis</short_desc>
          <delta_ts>2011-10-11 19:05:36 -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>barraclough</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>480454</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-07 20:36:48 -0700</bug_when>
    <thetext>Currently the DFG will reperform certain type and safety checks because it forgot that it had already performed them in a previous basic block.

It also sometimes forgets that it had performed checks in the same basic block, if those checks are not captured by either CSE or DataFormat.

One way to ensure that checks are precisely eliminated if all possible paths up to that check already contain that same check (or a stricter check) followed by operations that cannot change the property being checked.  Ascertaining this can be done with a flow-sensitive intraprocedural control flow analysis (CFA), which the DFG currently does not have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480455</commentid>
    <comment_count>1</comment_count>
      <attachid>110248</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-07 20:44:35 -0700</bug_when>
    <thetext>Created attachment 110248
work in progress

Still working on it.  Haven&apos;t measured performance yet.  Haven&apos;t implemented 32_64 support yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480456</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 20:47:56 -0700</bug_when>
    <thetext>Attachment 110248 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/DFGAbstractValue.h:119:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGAbstractValue.h:204:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGAbstractValue.h:253:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:95:  The parameter name &quot;codeBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:95:  The parameter name &quot;graph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:106:  The parameter name &quot;graph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:111:  The parameter name &quot;basicBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:134:  The parameter name &quot;mergeMode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:147:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:162:  The parameter name &quot;graph&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:162:  The parameter name &quot;basicBlock&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.h:171:  The parameter name &quot;nodeIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/dfg/DFGOSREntry.cpp:89:  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: 14 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>480460</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-07 20:52:12 -0700</bug_when>
    <thetext>This looks like it still needs work, but even now, it&apos;s a speed-up on V8.



Benchmark report for V8.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;CFA&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.

                       TipOfTree                  CFA                                       

crypto              71.8876+-0.2979    !    73.8087+-0.2691       ! definitely 1.0267x slower
deltablue          226.0413+-2.3269    ?   226.1569+-2.0996       ?
earley-boyer        90.5814+-0.4154    !    91.8870+-0.3324       ! definitely 1.0144x slower
raytrace            58.4061+-0.3131    !    59.3055+-0.3795       ! definitely 1.0154x slower
regexp             102.7642+-0.2884    ?   103.4826+-0.4524       ?
richards           204.4922+-0.8884    ^   175.1322+-0.3993       ^ definitely 1.1676x faster
splay               95.6563+-0.7585    ?    96.4660+-0.2593       ?

&lt;arithmetic&gt;       121.4042+-0.3672    ^   118.0341+-0.2739       ^ definitely 1.0286x faster
&lt;geometric&gt; *      108.1240+-0.2137    ^   106.8489+-0.1572       ^ definitely 1.0119x faster
&lt;harmonic&gt;          97.7987+-0.1951    ?    97.9595+-0.1685       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480462</commentid>
    <comment_count>4</comment_count>
      <attachid>110250</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-07 20:54:11 -0700</bug_when>
    <thetext>Created attachment 110250
work in progress - fix style, mostly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480463</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 20:56:48 -0700</bug_when>
    <thetext>Attachment 110250 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [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>480485</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-07 22:24:29 -0700</bug_when>
    <thetext>&gt; crypto              71.8876+-0.2979    !    73.8087+-0.2691       ! definitely 1.0267x slower

This 2% appears to be entirely due to the CFA itself!  The CFA code needs to be tuned up.  I&apos;ll play around with making it faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480490</commentid>
    <comment_count>7</comment_count>
      <attachid>110259</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-07 23:00:21 -0700</bug_when>
    <thetext>Created attachment 110259
work in progress - better performance

I did two things:

- Fixed OSR entry. If a variable is dead then the abstract value should be TOP. Internally, the abstract state machine treats dead variables as BOTTOM. That&apos;s necessary for making the analysis precise.

- Changed the abstract structure value representation. Previously it was basically Vector&lt;Structure*&gt;. Now it&apos;s just Structure*, where sets larger than 1 are turned to TOP. This works great, since most structure sets only contain one element anyway.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;CFA&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.

                                            TipOfTree                  CFA                                       
SunSpider:
   3d-cube                                7.3400+-0.2059          7.2108+-0.1398         might be 1.0179x faster
   3d-morph                               7.5851+-0.1400    ?     7.6501+-0.1387       ?
   3d-raytrace                            7.5752+-0.1830          7.5150+-0.1734       
   access-binary-trees                    1.7129+-0.0337    ?     1.7169+-0.0476       ?
   access-fannkuch                        6.2979+-0.0958    ?     6.5286+-0.1364       ? might be 1.0366x slower
   access-nbody                           3.4297+-0.0839    ?     3.5317+-0.0830       ? might be 1.0297x slower
   access-nsieve                          2.5318+-0.0516    ?     2.6022+-0.0786       ? might be 1.0278x slower
   bitops-3bit-bits-in-byte               1.6817+-0.0191    !     1.7452+-0.0250       ! definitely 1.0378x slower
   bitops-bits-in-byte                    2.7081+-0.0537    !     2.9258+-0.1245       ! definitely 1.0804x slower
   bitops-bitwise-and                     3.4372+-0.2532          3.3606+-0.0894         might be 1.0228x faster
   bitops-nsieve-bits                     5.4391+-0.0644          5.3109+-0.1139         might be 1.0241x faster
   controlflow-recursive                  2.0508+-0.0375          2.0316+-0.0499       
   crypto-aes                             6.5082+-0.1513    ?     6.7630+-0.1750       ? might be 1.0392x slower
   crypto-md5                             2.7830+-0.0851    ?     2.8322+-0.0706       ? might be 1.0177x slower
   crypto-sha1                            2.4498+-0.0714    ?     2.5556+-0.0867       ? might be 1.0432x slower
   date-format-tofte                      9.8098+-0.2208    ?     9.9895+-0.1587       ? might be 1.0183x slower
   date-format-xparb                      9.4492+-0.1745    !     9.8804+-0.2001       ! definitely 1.0456x slower
   math-cordic                            6.3737+-0.1416          6.3125+-0.0656       
   math-partial-sums                      7.5554+-0.1169          7.5150+-0.1276       
   math-spectral-norm                     2.7905+-0.0655    ?     2.8601+-0.0784       ? might be 1.0250x slower
   regexp-dna                            10.6186+-0.1482         10.5608+-0.1658       
   string-base64                          5.1063+-0.0828    ?     5.1827+-0.0692       ? might be 1.0150x slower
   string-fasta                           6.3348+-0.1140    ?     6.4154+-0.1134       ? might be 1.0127x slower
   string-tagcloud                       11.1755+-0.2087    ?    11.2236+-0.2715       ?
   string-unpack-code                    21.0133+-0.2257    !    21.6342+-0.2337       ! definitely 1.0295x slower
   string-validate-input                  6.2811+-0.1612          6.2791+-0.1612       

   &lt;arithmetic&gt; *                         6.1553+-0.0194    !     6.2359+-0.0193       ! definitely 1.0131x slower
   &lt;geometric&gt;                            5.0469+-0.0176    !     5.1180+-0.0158       ! definitely 1.0141x slower
   &lt;harmonic&gt;                             4.1371+-0.0257    !     4.2074+-0.0236       ! definitely 1.0170x slower

                                            TipOfTree                  CFA                                       
V8:
   crypto                                71.6115+-0.3106    !    72.6151+-0.5762       ! definitely 1.0140x slower
   deltablue                            227.0336+-3.5653        223.0970+-2.1287         might be 1.0176x faster
   earley-boyer                          90.4309+-0.3425    ?    90.9446+-0.2832       ?
   raytrace                              57.5184+-0.4610         57.4722+-0.2783       
   regexp                               102.7896+-0.3338    ?   102.8251+-0.5877       ?
   richards                             205.1041+-1.1592    ^   175.0092+-0.6119       ^ definitely 1.1720x faster
   splay                                 95.5634+-0.6248    ?    95.6634+-0.7130       ?

   &lt;arithmetic&gt;                         121.4359+-0.5050    ^   116.8038+-0.3613       ^ definitely 1.0397x faster
   &lt;geometric&gt; *                        107.9023+-0.2225    ^   105.5267+-0.2425       ^ definitely 1.0225x faster
   &lt;harmonic&gt;                            97.3732+-0.1490    ^    96.4890+-0.1988       ^ definitely 1.0092x faster

                                            TipOfTree                  CFA                                       
Kraken:
   ai-astar                             493.1064+-3.9254        492.3566+-3.0941       
   audio-beat-detection                 191.3132+-0.6433    ?   191.4514+-0.7850       ?
   audio-dft                            265.4996+-2.7456    ^   260.4941+-1.8597       ^ definitely 1.0192x faster
   audio-fft                            125.3307+-0.5836    ?   126.1825+-1.9849       ?
   audio-oscillator                     251.3514+-1.9030        249.7558+-2.0144       
   imaging-darkroom                     410.4260+-0.8666    !   413.6212+-1.1919       ! definitely 1.0078x slower
   imaging-desaturate                   230.1417+-0.5040    ^   216.3676+-0.4729       ^ definitely 1.0637x faster
   imaging-gaussian-blur                578.7784+-2.2247    ^   568.6758+-2.3888       ^ definitely 1.0178x faster
   json-parse-financial                  54.4313+-0.2379    ?    54.5051+-0.2106       ?
   json-stringify-tinderbox              69.6600+-0.8972    ^    68.1390+-0.2398       ^ definitely 1.0223x faster
   stanford-crypto-aes                  131.3154+-2.2640        130.2981+-1.6271       
   stanford-crypto-ccm                   99.8329+-0.9814    !   101.7389+-0.8432       ! definitely 1.0191x slower
   stanford-crypto-pbkdf2               187.8078+-0.7526    !   191.5040+-1.2973       ! definitely 1.0197x slower
   stanford-crypto-sha256-iterative      69.6199+-0.2190    ?    69.9535+-0.3764       ?

   &lt;arithmetic&gt; *                       225.6153+-0.5117    ^   223.9317+-0.4806       ^ definitely 1.0075x faster
   &lt;geometric&gt;                          176.2934+-0.4303    ^   175.3365+-0.4004       ^ definitely 1.0055x faster
   &lt;harmonic&gt;                           137.8627+-0.3810        137.4240+-0.3734       

                                            TipOfTree                  CFA                                       
All benchmarks:
   &lt;arithmetic&gt;                          88.6958+-0.1882    ^    87.5490+-0.1577       ^ definitely 1.0131x faster
   &lt;geometric&gt;                           22.9502+-0.0535    ?    23.0146+-0.0492       ?
   &lt;harmonic&gt;                             7.2778+-0.0442    !     7.3970+-0.0406       ! definitely 1.0164x slower

                                            TipOfTree                  CFA                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.1147+-0.0841    ^    52.8190+-0.0781       ^ definitely 1.0056x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480491</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-07 23:03:52 -0700</bug_when>
    <thetext>Attachment 110259 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/DFGAbstractValue.h:96:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/dfg/DFGAbstractState.cpp:48:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGAbstractState.cpp:65:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGAbstractState.cpp:82:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/dfg/DFGAbstractState.cpp:123:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 6 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>480514</commentid>
    <comment_count>9</comment_count>
      <attachid>110263</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 00:33:34 -0700</bug_when>
    <thetext>Created attachment 110263
work in progress - it&apos;s now pure win

This is now pure win.  This required a number of changes:

- CFA merging requires interrogating the successors of basic blocks. This was previously a binary search. Now it&apos;s not.

- The CFA is now pseudo-worklist based. It visits basic blocks in bytecode order (which is almost program order, and almost topological order), leading to a high probability that a block will not be visited unless its predecessors have been visited. But it does not visit a block if since the last time it was visited nothing has happened that would change the block&apos;s outcome.

- Bunch of little tweaks to reduce the costs of various CFA operations.


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc
&quot;CFA&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.

                                            TipOfTree                  CFA                                       
SunSpider:
   3d-cube                                7.1877+-0.1640    ?     7.2292+-0.1642       ?
   3d-morph                               7.5879+-0.1785          7.5121+-0.1356         might be 1.0101x faster
   3d-raytrace                            7.4148+-0.2026          7.3754+-0.1707       
   access-binary-trees                    1.7784+-0.0808          1.6926+-0.0562         might be 1.0507x faster
   access-fannkuch                        6.3277+-0.1237          6.3013+-0.1268       
   access-nbody                           3.5172+-0.0884          3.4572+-0.0941         might be 1.0174x faster
   access-nsieve                          2.5999+-0.0791          2.5825+-0.0877       
   bitops-3bit-bits-in-byte               1.7346+-0.0357          1.7115+-0.0327         might be 1.0135x faster
   bitops-bits-in-byte                    2.7539+-0.0720          2.7514+-0.0510       
   bitops-bitwise-and                     3.3173+-0.0725    ?     3.3754+-0.1000       ? might be 1.0175x slower
   bitops-nsieve-bits                     5.3589+-0.1009    ?     5.3927+-0.1290       ?
   controlflow-recursive                  2.0357+-0.0392    ?     2.0723+-0.0671       ? might be 1.0180x slower
   crypto-aes                             6.5654+-0.1839    ?     6.6289+-0.1744       ?
   crypto-md5                             2.7721+-0.0633    ?     2.8039+-0.0589       ? might be 1.0114x slower
   crypto-sha1                            2.4790+-0.1072    ?     2.4911+-0.0745       ?
   date-format-tofte                      9.8535+-0.2432    ?     9.9580+-0.2362       ? might be 1.0106x slower
   date-format-xparb                      9.4830+-0.1867    !    10.0138+-0.2298       ! definitely 1.0560x slower
   math-cordic                            6.3866+-0.1093    ?     6.5029+-0.1173       ? might be 1.0182x slower
   math-partial-sums                      7.6234+-0.1297          7.5099+-0.1406         might be 1.0151x faster
   math-spectral-norm                     2.8589+-0.0701          2.8198+-0.0660         might be 1.0139x faster
   regexp-dna                            10.5651+-0.2565         10.4409+-0.1349         might be 1.0119x faster
   string-base64                          5.0891+-0.1039    ?     5.2070+-0.1078       ? might be 1.0232x slower
   string-fasta                           6.4453+-0.1413          6.3143+-0.0977         might be 1.0207x faster
   string-tagcloud                       11.0358+-0.2692    ?    11.1644+-0.1814       ? might be 1.0117x slower
   string-unpack-code                    21.0071+-0.2760    ?    21.4615+-0.5199       ? might be 1.0216x slower
   string-validate-input                  6.2340+-0.1813    ?     6.3609+-0.1603       ? might be 1.0204x slower

   &lt;arithmetic&gt; *                         6.1543+-0.0155    ?     6.1973+-0.0322       ?
   &lt;geometric&gt;                            5.0642+-0.0192    ?     5.0771+-0.0246       ?
   &lt;harmonic&gt;                             4.1736+-0.0342          4.1643+-0.0360       

                                            TipOfTree                  CFA                                       
V8:
   crypto                                71.6260+-0.3327    ?    71.8717+-0.3132       ?
   deltablue                            226.0467+-1.9042    ^   221.1798+-1.0192       ^ definitely 1.0220x faster
   earley-boyer                          89.8473+-0.2783    !    90.9236+-0.3194       ! definitely 1.0120x slower
   raytrace                              57.7508+-0.2079    ?    58.0618+-0.2847       ?
   regexp                               102.4067+-0.2936    ?   103.1329+-0.4744       ?
   richards                             204.6559+-1.0139    ^   175.9648+-1.3114       ^ definitely 1.1631x faster
   splay                                 96.0001+-0.5870         95.7168+-0.2982       

   &lt;arithmetic&gt;                         121.1905+-0.2260    ^   116.6931+-0.2717       ^ definitely 1.0385x faster
   &lt;geometric&gt; *                        107.7836+-0.1350    ^   105.5294+-0.1963       ^ definitely 1.0214x faster
   &lt;harmonic&gt;                            97.3547+-0.1511    ^    96.5707+-0.1726       ^ definitely 1.0081x faster

                                            TipOfTree                  CFA                                       
Kraken:
   ai-astar                             491.8601+-2.3376        489.5730+-2.2160       
   audio-beat-detection                 190.6516+-0.7819    !   193.5275+-1.1763       ! definitely 1.0151x slower
   audio-dft                            268.0732+-3.6325    ^   259.3428+-1.9135       ^ definitely 1.0337x faster
   audio-fft                            124.9162+-0.4877        124.7628+-0.2686       
   audio-oscillator                     252.5326+-2.3092        249.5812+-1.6099         might be 1.0118x faster
   imaging-darkroom                     411.7627+-1.5812    ?   412.7726+-0.8839       ?
   imaging-desaturate                   229.9889+-0.7966    ^   216.8373+-0.8930       ^ definitely 1.0607x faster
   imaging-gaussian-blur                580.7792+-2.4572    ^   565.6115+-1.0252       ^ definitely 1.0268x faster
   json-parse-financial                  55.2379+-0.3316         55.1255+-0.5643       
   json-stringify-tinderbox              68.1584+-0.4261         67.6238+-0.1915       
   stanford-crypto-aes                  130.3048+-1.2905    ?   130.4318+-1.5252       ?
   stanford-crypto-ccm                   99.8189+-0.8939    !   102.0182+-0.9102       ! definitely 1.0220x slower
   stanford-crypto-pbkdf2               187.7075+-0.8696    !   190.3954+-1.0340       ! definitely 1.0143x slower
   stanford-crypto-sha256-iterative      70.1452+-0.4680    ?    70.3815+-0.4656       ?

   &lt;arithmetic&gt; *                       225.8527+-0.5194    ^   223.4275+-0.4581       ^ definitely 1.0109x faster
   &lt;geometric&gt;                          176.3357+-0.4920    ^   175.2288+-0.4434       ^ definitely 1.0063x faster
   &lt;harmonic&gt;                           137.8869+-0.4240        137.5821+-0.4486       

                                            TipOfTree                  CFA                                       
All benchmarks:
   &lt;arithmetic&gt;                          88.7294+-0.1670    ^    87.3610+-0.1625       ^ definitely 1.0157x faster
   &lt;geometric&gt;                           22.9916+-0.0565         22.9087+-0.0767       
   &lt;harmonic&gt;                             7.3403+-0.0588          7.3234+-0.0619       

                                            TipOfTree                  CFA                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.1110+-0.0676    ^    52.6706+-0.1069       ^ definitely 1.0084x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480515</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-08 00:36:03 -0700</bug_when>
    <thetext>Attachment 110263 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/DFGAbstractValue.h:96:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/JavaScriptCore/dfg/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 2 in 26 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>480517</commentid>
    <comment_count>11</comment_count>
      <attachid>110264</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 00:45:28 -0700</bug_when>
    <thetext>Created attachment 110264
the patch

Got it to work with 32_64.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480519</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-08 00:47:36 -0700</bug_when>
    <thetext>Attachment 110264 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/ChangeLog:3:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:4:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/ChangeLog:8:  Line contains tab character.  [whitespace/tab] [5]
Source/JavaScriptCore/dfg/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 4 in 26 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>480520</commentid>
    <comment_count>13</comment_count>
      <attachid>110265</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 00:49:30 -0700</bug_when>
    <thetext>Created attachment 110265
the patch

Oh, emacs, you and your tabs, which you like to put into ChangeLogs regardless of how many times I tell you not to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480521</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-08 00:53:18 -0700</bug_when>
    <thetext>Attachment 110265 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 26 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>480581</commentid>
    <comment_count>15</comment_count>
      <attachid>110265</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-10-08 11:28:40 -0700</bug_when>
    <thetext>Comment on attachment 110265
the patch

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

Should use a typedef for bool (*predictionCheck)(PredictedType), getBytecodeBegin shouldn&apos;t be taking an OwnPtr*, but it looks like that has just  been moved from one place to another.

Other than those style quirks I can&apos;t see any obvious problems.

I am slightly concerned with the potential maintenance problems caused by separating type flow logic from codegen, especially given the vast amount of code duplication we currently have :-(

I do think Gavin should also look at this though.

&gt; Source/JavaScriptCore/dfg/DFGBasicBlock.h:59
&gt; +    static inline BlockIndex getBytecodeBegin(OwnPtr&lt;BasicBlock&gt;* block)
&gt; +    {
&gt; +        return (*block)-&gt;bytecodeBegin;
&gt; +    }

This seems wrong, there&apos;s no transfer of ownership intended here, you should just be passing BasicBlock*

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:350
&gt; +void SpeculativeJIT::compileObjectEquality(Node&amp; node, void* vptr, bool (*predictionCheck)(PredictedType))

Would be nice to have a typedef for bool (*predictionCheck)(PredictedType)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480591</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 12:32:44 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 110265 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110265&amp;action=review
&gt; 
&gt; Should use a typedef for bool (*predictionCheck)(PredictedType), getBytecodeBegin shouldn&apos;t be taking an OwnPtr*, but it looks like that has just  been moved from one place to another.
&gt; 
&gt; Other than those style quirks I can&apos;t see any obvious problems.
&gt; 
&gt; I am slightly concerned with the potential maintenance problems caused by separating type flow logic from codegen, especially given the vast amount of code duplication we currently have :-(

I know.  I don&apos;t think I want to do this in this patch, but I think I&apos;ve got a solution for both this and register allocation: have named speculations (so just as we have an enum of node types, have an enum of speculation types), have attributes on nodes that describe what speculatiuons should be performed, have one phase in Propagator that deduces what those speculatins ought to be, and then while we&apos;re at it, have node attributes that specify what additional registers the codegen for a node will required.  And viola, we&apos;ll be able to do global register allocation and get rid of GenerationInfo entirely.

&gt; 
&gt; I do think Gavin should also look at this though.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGBasicBlock.h:59
&gt; &gt; +    static inline BlockIndex getBytecodeBegin(OwnPtr&lt;BasicBlock&gt;* block)
&gt; &gt; +    {
&gt; &gt; +        return (*block)-&gt;bytecodeBegin;
&gt; &gt; +    }
&gt; 
&gt; This seems wrong, there&apos;s no transfer of ownership intended here, you should just be passing BasicBlock*

I think that this code is exactly as it should be.  This is one of those gross stubs that we need for doing binary searches over Vector&lt;OwnPtr&lt;BasicBlock&gt;&gt;.  The WTF::binarySearch() function takes a function pointer for getting the search key; for a vector of the form Vector&lt;T&gt; it takes a function of the form U (*)(T*), where U is the search key.  For Vector&lt;OwnPtr&lt;BasicBlock&gt;&gt; we have T = OwnPtr&lt;BasicBlock&gt;, so the function must be of the form U (*)(OwnPtr&lt;BasicBlock&gt;*).

The only way to change this is to make Vector&lt;OwnPtr&lt;BasicBlock&gt;&gt; be something else, but I quite like the idea of a vector of pointers for basic blocks, since there are few basic blocks and the basic block data structure is rather large.

So while this looks yucky, and you&apos;d probably never want to call it directly, it&apos;s necessary to support binary searches of basic blocks by their bytecode index.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:350
&gt; &gt; +void SpeculativeJIT::compileObjectEquality(Node&amp; node, void* vptr, bool (*predictionCheck)(PredictedType))
&gt; 
&gt; Would be nice to have a typedef for bool (*predictionCheck)(PredictedType)

Agree, will add.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480602</commentid>
    <comment_count>17</comment_count>
      <attachid>110277</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 13:00:39 -0700</bug_when>
    <thetext>Created attachment 110277
the patch

Added a typedef for bool (*)(PredictedType).  Removed bytecode/ActionablePrediction.h because it&apos;s unused.  Updated some build files (though most of them make no reference to either DFG, or to any headers, so did not need to change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480604</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-08 13:03:44 -0700</bug_when>
    <thetext>Attachment 110277 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 28 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>480616</commentid>
    <comment_count>19</comment_count>
      <attachid>110281</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 13:59:35 -0700</bug_when>
    <thetext>Created attachment 110281
the patch - merge with 32_64 changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480617</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-08 14:01:50 -0700</bug_when>
    <thetext>Attachment 110281 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 28 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>480629</commentid>
    <comment_count>21</comment_count>
      <attachid>110283</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-08 15:30:24 -0700</bug_when>
    <thetext>Created attachment 110283
the patch - more perf improvements

- Did more tuning to the CFA itself. It now calls clobberStructures() less frequently. clobberStructures() is an expensive, but necessary, method. Likely any future work on improving CFA efficiency will focus on that method - how it&apos;s called, and what it does internally.

- Added better debugging support. Every graph dump will now print the CFA state in a concise and clear way.

- Fixed a bug where clobberStructures() was not being called for possibly-side-effecting operations like LogicalNot on questionable objects, and CompareXYZ on questionable objects.

- Did some investigation into what is going on in SunSpider. It turns out that date-format-xparb, among others, are still failing speculation like crazy. A lot of its is due to GetByVal not having a string property case. The exponential backoff in recompilation is doing its best, but since the benchmark is so short-running, any increase in DFG runtime will affect such short-running benchmarks that fail speculation systematically.

- Ran performance numbers on a separate machine, to find that the speed-up is smaller on my Mac Pro than it is on my MacBook Pro.  But it&apos;s a speed-up on both machines.

Current performance situation:

- Overall 0.5% speed-up in geomean of preferred means.

- Slight reproducible sub-1% slow-down on SunSpider

- Either a 2.4% or a 0.5% win on V8 depending on machine.

- 1% win on Kraken.

Recommendation: we should land this, since: it&apos;s already a net win, the losses on SunSpider are due to preexisting conditions for which we are currently uninsured, and this should only become a bigger win as we add more machinery to take advantage of it. (Like, we&apos;re not doing anything to take advantage of the always-double propagation that this thing is already doing, and I haven&apos;t yet implemented the is-constant propagation, which should be a win on function checks among other things.) Not to mention that classically, CFA is most profitable when combined with inlining.

Latest numbers on MacBook Pro:


Benchmark report for SunSpider, V8, and Kraken.

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

Collected 30 samples per benchmark/VM, with 10 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.

                                            TipOfTree                  CFA                                       
SunSpider:
   3d-cube                                7.2512+-0.1027          7.2506+-0.1160       
   3d-morph                               7.6656+-0.0813    ?     7.7124+-0.0978       ?
   3d-raytrace                            7.3843+-0.0984    ?     7.4021+-0.0967       ?
   access-binary-trees                    1.7302+-0.0287          1.6781+-0.0239         might be 1.0310x faster
   access-fannkuch                        6.3504+-0.0672          6.3159+-0.0640       
   access-nbody                           3.4521+-0.0469    ?     3.4932+-0.0531       ? might be 1.0119x slower
   access-nsieve                          2.5600+-0.0356    ?     2.5885+-0.0470       ? might be 1.0111x slower
   bitops-3bit-bits-in-byte               1.7154+-0.0262    ?     1.7434+-0.0319       ? might be 1.0163x slower
   bitops-bits-in-byte                    2.7388+-0.0391    ?     2.7447+-0.0359       ?
   bitops-bitwise-and                     3.3050+-0.0546    ?     3.3606+-0.0589       ? might be 1.0168x slower
   bitops-nsieve-bits                     5.4385+-0.0653          5.4370+-0.0711       
   controlflow-recursive                  2.0667+-0.0212    ?     2.0812+-0.0208       ?
   crypto-aes                             6.6382+-0.1104    ?     6.6709+-0.1017       ?
   crypto-md5                             2.8355+-0.0466          2.8343+-0.0453       
   crypto-sha1                            2.4700+-0.0373    ?     2.5155+-0.0443       ? might be 1.0184x slower
   date-format-tofte                      9.9355+-0.0996    ?     9.9652+-0.1371       ?
   date-format-xparb                      9.5529+-0.1560    !     9.9465+-0.1131       ! definitely 1.0412x slower
   math-cordic                            6.2958+-0.0680    ?     6.3863+-0.0523       ? might be 1.0144x slower
   math-partial-sums                      7.5041+-0.0695    ?     7.5846+-0.0878       ? might be 1.0107x slower
   math-spectral-norm                     2.8198+-0.0398    ?     2.8726+-0.0465       ? might be 1.0187x slower
   regexp-dna                            10.6842+-0.0893         10.6180+-0.1092       
   string-base64                          5.2352+-0.0858    ?     5.2951+-0.0554       ? might be 1.0114x slower
   string-fasta                           6.3476+-0.0765    ?     6.4334+-0.0947       ? might be 1.0135x slower
   string-tagcloud                       11.0721+-0.1259    ?    11.1451+-0.1129       ?
   string-unpack-code                    20.9296+-0.2131    ?    21.3736+-0.3461       ? might be 1.0212x slower
   string-validate-input                  6.3714+-0.1157          6.3281+-0.0869       

   &lt;arithmetic&gt; *                         6.1673+-0.0147    !     6.2222+-0.0173       ! definitely 1.0089x slower
   &lt;geometric&gt;                            5.0674+-0.0157    !     5.1036+-0.0164       ! definitely 1.0072x slower
   &lt;harmonic&gt;                             4.1647+-0.0213    ?     4.1880+-0.0207       ?

                                            TipOfTree                  CFA                                       
V8:
   crypto                                71.9306+-0.2217         71.6923+-0.2342       
   deltablue                            224.0349+-1.1196    ^   220.8591+-0.8745       ^ definitely 1.0144x faster
   earley-boyer                          90.8330+-0.2471    ?    91.0550+-0.6016       ?
   raytrace                              58.6492+-0.1942    ^    57.5860+-0.1636       ^ definitely 1.0185x faster
   regexp                               103.2842+-0.5738    ?   103.6217+-0.3030       ?
   richards                             204.7647+-0.4575    ^   178.8069+-0.4249       ^ definitely 1.1452x faster
   splay                                 93.9206+-0.3154         93.8991+-0.3847       

   &lt;arithmetic&gt;                         121.0596+-0.1853    ^   116.7886+-0.1891       ^ definitely 1.0366x faster
   &lt;geometric&gt; *                        107.9179+-0.1498    ^   105.3890+-0.1611       ^ definitely 1.0240x faster
   &lt;harmonic&gt;                            97.7053+-0.1498    ^    96.2554+-0.1560       ^ definitely 1.0151x faster

                                            TipOfTree                  CFA                                       
Kraken:
   ai-astar                             491.8722+-1.8657        491.6102+-2.1346       
   audio-beat-detection                 191.3896+-0.6444    !   193.1956+-0.5294       ! definitely 1.0094x slower
   audio-dft                            265.5784+-1.5956    ^   261.3193+-2.1896       ^ definitely 1.0163x faster
   audio-fft                            124.9334+-0.1853    ?   125.4338+-0.4450       ?
   audio-oscillator                     251.5153+-1.0876        250.4084+-1.0322       
   imaging-darkroom                     412.2875+-0.8770    ?   412.7251+-0.8786       ?
   imaging-desaturate                   229.8157+-0.4044    ^   216.2189+-0.3764       ^ definitely 1.0629x faster
   imaging-gaussian-blur                579.9277+-0.8575    ^   567.2564+-0.9921       ^ definitely 1.0223x faster
   json-parse-financial                  53.8428+-0.2035    ?    54.0464+-0.2093       ?
   json-stringify-tinderbox              67.6931+-0.2539    ?    67.7358+-0.2734       ?
   stanford-crypto-aes                  130.2188+-0.9518        129.4420+-0.8691       
   stanford-crypto-ccm                   99.4847+-0.3260    !   101.1548+-0.4164       ! definitely 1.0168x slower
   stanford-crypto-pbkdf2               187.6499+-0.8004    ?   188.8759+-1.0071       ?
   stanford-crypto-sha256-iterative      69.9878+-0.1863         69.6543+-0.1668       

   &lt;arithmetic&gt; *                       225.4426+-0.3118    ^   223.5055+-0.3132       ^ definitely 1.0087x faster
   &lt;geometric&gt;                          175.7162+-0.2682    ^   174.8010+-0.2755       ^ definitely 1.0052x faster
   &lt;harmonic&gt;                           136.9772+-0.2368        136.7825+-0.2282       

                                            TipOfTree                  CFA                                       
All benchmarks:
   &lt;arithmetic&gt;                          88.5950+-0.1068    ^    87.4122+-0.1004       ^ definitely 1.0135x faster
   &lt;geometric&gt;                           22.9797+-0.0474         22.9534+-0.0477       
   &lt;harmonic&gt;                             7.3245+-0.0367    ?     7.3629+-0.0354       ?

                                            TipOfTree                  CFA                                       
Geomean of preferred means:
   &lt;scaled-result&gt;                       53.1381+-0.0625    ^    52.7237+-0.0651       ^ definitely 1.0079x faster

Latest numbers on Mac Pro:


Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc
&quot;CFA&quot; at /Volumes/Data/fromMiniMe/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.

                                           TipOfTree                  CFA                                       
SunSpider:
  3d-cube                                7.9004+-0.0265    !     7.9902+-0.0335       ! definitely 1.0114x slower
  3d-morph                               8.4615+-0.1076    ?     8.4887+-0.1116       ?
  3d-raytrace                            8.0821+-0.1095          8.0724+-0.0618       
  access-binary-trees                    1.7927+-0.0033          1.7806+-0.0161       
  access-fannkuch                        7.6813+-0.0148    !     7.9859+-0.0254       ! definitely 1.0397x slower
  access-nbody                           4.1641+-0.0068    !     4.1778+-0.0037       ! definitely 1.0033x slower
  access-nsieve                          3.1422+-0.0032    !     3.1584+-0.0066       ! definitely 1.0052x slower
  bitops-3bit-bits-in-byte               1.7320+-0.0103    ?     1.7441+-0.0089       ?
  bitops-bits-in-byte                    5.2152+-0.0453    ?     5.2206+-0.0533       ?
  bitops-bitwise-and                     3.4118+-0.0640          3.3993+-0.0644       
  bitops-nsieve-bits                     5.6763+-0.0392          5.6438+-0.0351       
  controlflow-recursive                  2.2564+-0.0244          2.2509+-0.0028       
  crypto-aes                             6.9132+-0.0689    !     7.0664+-0.0630       ! definitely 1.0222x slower
  crypto-md5                             3.0181+-0.0343    ?     3.0585+-0.0331       ? might be 1.0134x slower
  crypto-sha1                            2.7090+-0.0109    !     2.7557+-0.0108       ! definitely 1.0172x slower
  date-format-tofte                     10.6874+-0.0850    ?    10.7886+-0.1017       ?
  date-format-xparb                     10.7804+-0.2653    ?    11.2082+-0.1793       ? might be 1.0397x slower
  math-cordic                            7.2695+-0.0506          7.2238+-0.0219       
  math-partial-sums                     10.4781+-0.0501         10.4767+-0.0339       
  math-spectral-norm                     3.2288+-0.0168    !     3.2505+-0.0036       ! definitely 1.0067x slower
  regexp-dna                            12.4863+-0.1218    ?    12.5624+-0.1253       ?
  string-base64                          5.4727+-0.0648    ?     5.5304+-0.0697       ? might be 1.0105x slower
  string-fasta                           7.3632+-0.0576          7.3506+-0.0232       
  string-tagcloud                       12.8958+-0.0586         12.8081+-0.0688       
  string-unpack-code                    23.9726+-0.1714    ?    24.2456+-0.1831       ? might be 1.0114x slower
  string-validate-input                  6.8011+-0.1062          6.7479+-0.0643       

  &lt;arithmetic&gt; *                         7.0612+-0.0244    !     7.1149+-0.0199       ! definitely 1.0076x slower
  &lt;geometric&gt;                            5.7812+-0.0155    !     5.8176+-0.0134       ! definitely 1.0063x slower
  &lt;harmonic&gt;                             4.6961+-0.0111    ?     4.7189+-0.0120       ?

                                           TipOfTree                  CFA                                       
V8:
  crypto                                80.3328+-0.2637         79.9557+-0.1580       
  deltablue                            252.4219+-1.5655    ?   253.0487+-1.3899       ?
  earley-boyer                         110.3867+-0.3100    !   111.4466+-0.2599       ! definitely 1.0096x slower
  raytrace                              66.3575+-0.3105    ^    64.6593+-0.1899       ^ definitely 1.0263x faster
  regexp                               123.6966+-0.5882        123.6552+-0.5325       
  richards                             221.5944+-0.9748    ^   215.4157+-1.0238       ^ definitely 1.0287x faster
  splay                                122.9378+-0.7662    ?   124.5312+-0.8843       ? might be 1.0130x slower

  &lt;arithmetic&gt;                         139.6754+-0.4149        138.9589+-0.3738       
  &lt;geometric&gt; *                        125.8663+-0.2769    ^   125.2510+-0.2812       ^ definitely 1.0049x faster
  &lt;harmonic&gt;                           114.2437+-0.1976    ^   113.5287+-0.2205       ^ definitely 1.0063x faster

                                           TipOfTree                  CFA                                       
Kraken:
  ai-astar                             832.8773+-0.4054        825.4636+-11.7787      
  audio-beat-detection                 214.1596+-1.7669        213.3784+-0.9437       
  audio-dft                            271.3054+-4.2497    ^   260.8641+-3.0615       ^ definitely 1.0400x faster
  audio-fft                            135.4391+-0.1603    !   139.2097+-1.1166       ! definitely 1.0278x slower
  audio-oscillator                     293.9338+-3.0579        292.1754+-1.9142       
  imaging-darkroom                     486.8431+-4.6328        484.2544+-3.7257       
  imaging-desaturate                   244.8629+-0.2524    ^   237.8543+-0.0918       ^ definitely 1.0295x faster
  imaging-gaussian-blur                641.8301+-0.2648    ^   611.2323+-0.2040       ^ definitely 1.0501x faster
  json-parse-financial                  68.4385+-0.1365    ?    68.6702+-0.2375       ?
  json-stringify-tinderbox              79.7739+-0.3035    ?    80.1401+-0.2522       ?
  stanford-crypto-aes                  152.6437+-1.2898        151.5830+-1.4340       
  stanford-crypto-ccm                  116.1246+-0.7775    ?   117.1616+-0.5738       ?
  stanford-crypto-pbkdf2               235.4855+-1.7872        232.6827+-1.6888         might be 1.0120x faster
  stanford-crypto-sha256-iterative      85.6205+-0.2548    ?    86.0403+-0.3846       ?

  &lt;arithmetic&gt; *                       275.6670+-0.6405    ^   271.4793+-0.9585       ^ definitely 1.0154x faster
  &lt;geometric&gt;                          208.1917+-0.4363    ^   206.5505+-0.5262       ^ definitely 1.0079x faster
  &lt;harmonic&gt;                           162.2625+-0.2764        162.1470+-0.4291       

                                           TipOfTree                  CFA                                       
All benchmarks:
  &lt;arithmetic&gt;                         106.8225+-0.2224    ^   105.4981+-0.2833       ^ definitely 1.0126x faster
  &lt;geometric&gt;                           26.6011+-0.0546    ?    26.6112+-0.0438       ?
  &lt;harmonic&gt;                             8.2687+-0.0192    ?     8.3073+-0.0206       ?

                                           TipOfTree                  CFA                                       
Geomean of preferred means:
  &lt;scaled-result&gt;                       62.5735+-0.1251    ^    62.3100+-0.0910       ^ definitely 1.0042x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480630</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-08 15:31:50 -0700</bug_when>
    <thetext>Attachment 110283 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 28 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>480747</commentid>
    <comment_count>23</comment_count>
      <attachid>110310</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-09 13:40:49 -0700</bug_when>
    <thetext>Created attachment 110310
the patch - merged with ByVal changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480748</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-09 13:43:09 -0700</bug_when>
    <thetext>Attachment 110310 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 28 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>480987</commentid>
    <comment_count>25</comment_count>
      <attachid>110310</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-10 10:03:04 -0700</bug_when>
    <thetext>Comment on attachment 110310
the patch - merged with ByVal changes

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

1/2 way through the review!

&gt; Source/JavaScriptCore/bytecode/PredictedType.cpp:47
&gt; +    bool isTop = true;

Could we not just test a mask &amp; early return here?

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:34
&gt; +namespace JSC { namespace DFG {

We normally only use ENABLE_* definitions in Platform.h (because this is included everywhere, and the way the macro works means a missed include won&apos;t result in a compile error).
It would be better to make this a regular define &amp; #if FOO check.

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:63
&gt; +    PROFILE(17);

Not a big issue, but it would probably be better to define these values rather than use magic numbers through the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480988</commentid>
    <comment_count>26</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-10 10:03:17 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=110310&amp;action=review

1/2 way through the review!

&gt; Source/JavaScriptCore/bytecode/PredictedType.cpp:47
&gt; +    bool isTop = true;

Could we not just test a mask &amp; early return here?

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:34
&gt; +namespace JSC { namespace DFG {

We normally only use ENABLE_* definitions in Platform.h (because this is included everywhere, and the way the macro works means a missed include won&apos;t result in a compile error).
It would be better to make this a regular define &amp; #if FOO check.

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:63
&gt; +    PROFILE(17);

Not a big issue, but it would probably be better to define these values rather than use magic numbers through the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481032</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 11:39:01 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110310&amp;action=review
&gt; 
&gt; 1/2 way through the review!
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/PredictedType.cpp:47
&gt; &gt; +    bool isTop = true;
&gt; 
&gt; Could we not just test a mask &amp; early return here?

That mask would be ever-changing and we&apos;d have to separately maintain it, as we&apos;d have to construct it manually by saying something like:

PredictFinalObject | PredictArray | PredictObjectOther | PredictString | PredictCellOther | PredictInt32 | PredictDouble | PredictBoolean | PredictOther

The reason why PredictTop doesn&apos;t do the job is that currently a top value will not have reserved bits set because nobody sets them, unless they use PredictTop directly (which happens, but rarely).  For example, we leave 0x0004 and 0x0008, and 0x0020 for additional object types.  Yet more bits are reserved if we ever wanted to get more specific about PredictOther (currently it means null-or-undefined but there is no separate null prediction or undefined prediction) or numbers (like int-represented-as-double).

What I&apos;m trying to do is to avoid a situation where the PredictTop mask would have to be changed to include newly used, previously reserved, bits every time we add support for predicting some new type.

Fortunately, it&apos;s almost never the case that someone wants to know if a PredictedType is top.  It only comes into play in the ToString function.  That function already has to have an &quot;if (foo &amp; PredictBar)&quot; statement for every type that it&apos;s capable of printing.  So it was natural to have an else statement that clears isTop, which gives a more easy to maintain approach to the top madness.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:34
&gt; &gt; +namespace JSC { namespace DFG {
&gt; 
&gt; We normally only use ENABLE_* definitions in Platform.h (because this is included everywhere, and the way the macro works means a missed include won&apos;t result in a compile error).
&gt; It would be better to make this a regular define &amp; #if FOO check.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:63
&gt; &gt; +    PROFILE(17);
&gt; 
&gt; Not a big issue, but it would probably be better to define these values rather than use magic numbers through the code.

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481059</commentid>
    <comment_count>28</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-10 12:26:20 -0700</bug_when>
    <thetext>&gt; I know.  I don&apos;t think I want to do this in this patch, but I think I&apos;ve got a solution for both this and register allocation: have named speculations (so just as we have an enum of node types, have an enum of speculation types), have attributes on nodes that describe what speculatiuons should be performed, have one phase in Propagator that deduces what those speculatins ought to be, and then while we&apos;re at it, have node attributes that specify what additional registers the codegen for a node will required.  And viola, we&apos;ll be able to do global register allocation and get rid of GenerationInfo entirely.

Not sure if this helps, but another possible option is to add explicit nodes for each speculation. We didn&apos;t do this originally because it made the graph not reusable for the non-speculative path, but now there is no non-speculative path.

&gt; &gt; &gt; +    static inline BlockIndex getBytecodeBegin(OwnPtr&lt;BasicBlock&gt;* block)
&gt; &gt; &gt; +    {
&gt; &gt; &gt; +        return (*block)-&gt;bytecodeBegin;
&gt; &gt; &gt; +    }

RE this vs binarySearch, perhaps the binarySearch template could be modified to pass T&amp; instead of T* to child functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481065</commentid>
    <comment_count>29</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 12:31:43 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; I know.  I don&apos;t think I want to do this in this patch, but I think I&apos;ve got a solution for both this and register allocation: have named speculations (so just as we have an enum of node types, have an enum of speculation types), have attributes on nodes that describe what speculatiuons should be performed, have one phase in Propagator that deduces what those speculatins ought to be, and then while we&apos;re at it, have node attributes that specify what additional registers the codegen for a node will required.  And viola, we&apos;ll be able to do global register allocation and get rid of GenerationInfo entirely.
&gt; 
&gt; Not sure if this helps, but another possible option is to add explicit nodes for each speculation. We didn&apos;t do this originally because it made the graph not reusable for the non-speculative path, but now there is no non-speculative path.

This would be a performance regression.  Our boolean speculations are done as part of testing the boolean, and often without using SpeculateBooleanOperand.  And then we have tests for object-or-undefined-or-null, where the speculation checks are embedded in the control flow of the node itself.

As the DFG gets more powerful, our nodes will have more sophisticated execution semantics, and our optimizations will have to have more sophisticated modeling of those execution semantics.  Better to just live with it.  I&apos;ve seen compiler hackers go down the path of trying to modularize this aspect of compilation and the results are invariably uglier than what we have.  You either have to introduce new opcodes for each micro operation, but then you get performance regressions unless you also introduce more basic blocks (we could model the object-or-undefined speculation by blowing each node that does that into a control flow diamond).  Or you can start to create a formal specification for your nodes.  But that fails because the formal specification becomes more hairy and complicated than the compiler you were going to write in the first place.

&gt; 
&gt; &gt; &gt; &gt; +    static inline BlockIndex getBytecodeBegin(OwnPtr&lt;BasicBlock&gt;* block)
&gt; &gt; &gt; &gt; +    {
&gt; &gt; &gt; &gt; +        return (*block)-&gt;bytecodeBegin;
&gt; &gt; &gt; &gt; +    }
&gt; 
&gt; RE this vs binarySearch, perhaps the binarySearch template could be modified to pass T&amp; instead of T* to child functions.

That would still make the style bot unhappy...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481196</commentid>
    <comment_count>30</comment_count>
      <attachid>110310</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-10 15:06:01 -0700</bug_when>
    <thetext>Comment on attachment 110310
the patch - merged with ByVal changes

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

couple more comments

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:63
&gt; +            m_structure = reinterpret_cast&lt;Structure*&gt;(1);

The magic value &apos;1&apos; should be named, either behind a static const or an ifdef.

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:235
&gt; +        if (reinterpret_cast&lt;uintptr_t&gt;(m_structure) &lt;= 1)

This should use &apos;isNeitherClearNorTop&apos;.

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:249
&gt; +    bool isNeitherClearNorTop() const { return reinterpret_cast&lt;uintptr_t&gt;(m_structure) &gt; 1; }

It would probably make the code more understandable to negate this - make this method isClearOrTop(), negate uses.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481245</commentid>
    <comment_count>31</comment_count>
      <attachid>110424</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 15:48:11 -0700</bug_when>
    <thetext>Created attachment 110424
the patch - address Gavin&apos;s most recent comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481265</commentid>
    <comment_count>32</comment_count>
      <attachid>110430</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-10 16:21:55 -0700</bug_when>
    <thetext>Created attachment 110430
the patch - merged up to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481267</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-10 16:25:55 -0700</bug_when>
    <thetext>Attachment 110430 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/DFGBasicBlock.h:56:  The parameter type should use PassOwnPtr instead of OwnPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 28 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>482028</commentid>
    <comment_count>34</comment_count>
      <attachid>110430</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-10-11 16:45:44 -0700</bug_when>
    <thetext>Comment on attachment 110430
the patch - merged up to ToT

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

r+.  I still don&apos;t think AbstractValue is really descriptive enough, but I don&apos;t have a better name to suggest.

&gt; Source/JavaScriptCore/dfg/DFGAbstractValue.h:312
&gt; +struct AbstractValue {

AbstractValue doesn&apos;t seem to be the right name for this class.  This struct can tell you a type, not a value - e.g. &quot;int&quot;, or &quot;object with properties x, y&quot;, not &apos;3&apos; or &apos;&quot;Hello, world&quot;&apos;.
This naming is confusing in it&apos;s uses, e.g. in GetLocal.

&gt; Source/JavaScriptCore/dfg/DFGNode.h:715
&gt; +    unsigned takenBytecodeOffsetDuringParsing()

This change could probably have been made as a separate patch, breaking up this review a bit would have helped! - probably no point doing so now though.
It&apos;s a bit unfortunate that the meaning of the branch&apos;s opInfos changes over time, it would be better if we could guard against error here.
We could consider extra state in debug builds that we can ASSERT on, or we could change reflect this in the node types (have a BranchDuringParse/JumpDuringParse that are updated as the successors are set, and never reach generation).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482158</commentid>
    <comment_count>35</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-10-11 19:05:36 -0700</bug_when>
    <thetext>Landed in r97218.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110248</attachid>
            <date>2011-10-07 20:44:35 -0700</date>
            <delta_ts>2011-10-07 20:54:11 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>cfa_patch_1.diff</filename>
            <type>text/plain</type>
            <size>120970</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM0IEBA
CisyMDExLTEwLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OkFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3Jz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZHVtcCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aXNWYWxpZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3Ap
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGRBbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6bGFzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZh
bHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNDbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFs
aWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2lj
QmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmdldEJ5
dGVjb2RlQmVnaW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpibG9jayk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6b3BlcmFuZElzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRW
YWx1ZVRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Om51bWJlck9mTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9w
ZXJhbmRzOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0QXJndW1lbnRGaXJzdFRpbWUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbEZpcnN0VGltZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T3BlcmFuZHM6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRz
OjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OmR1bXBPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVBcml0aE5vZGVGbGFncyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtRm9yd2FyZENGQSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Z2xvYmFsQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
Q2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZVNldDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
OiBBZGRlZC4KKwogMjAxMS0xMC0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBnZXRDYWxsRGF0YVZpcnR1YWwgbWV0aG9kcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEyIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYz
OEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAq
LzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEy
MDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FE
RDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNE
MzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi87IH07CiAJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CkBAIC04MDksNiArODE1LDEy
IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0
cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcwMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdP
cGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYW5kcy5o
OyBwYXRoID0gZGZnL0RGR09wZXJhbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0
MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI4Myw2ICsyMjk1LDEyIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBk
ZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKKwkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRjYyMDE3MTE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRjRCQjIxNDM5
NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yODc3LDYgKzI4OTUs
MTEgQEAKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xv
YmFsVGhpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNG
Q0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3
NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTM0MDgsNiArMzQzMSw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFB
ODAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwzMiArNDQsNTUgQEAgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5n
KFByZWRpY3RlZAogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogICAgIEJvdW5k
c0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgCisgICAg
Ym9vbCBpc1RvcCA9IHRydWU7CisgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdENlbGxPdGhl
cikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJjZWxsIik7CisgICAgZWxzZQorICAgICAgICBp
c1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikK
ICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9w
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEZpbmFsT2JqZWN0KQogICAg
ICAgICBwdHIuc3RyY2F0KCJGaW5hbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RBcnJheSkKICAgICAgICAgcHRyLnN0cmNhdCgi
QXJyYXkiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KHZhbHVlICYgUHJlZGljdFN0cmluZykKICAgICAgICAgcHRyLnN0cmNhdCgiU3RyaW5nIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RJbnQzMikKICAgICAgICAgcHRyLnN0cmNhdCgiSW50Iik7CisgICAgZWxzZQorICAgICAg
ICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3REb3VibGUpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIkRvdWJsZSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBm
YWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKICAgICAgICAgcHRy
LnN0cmNhdCgiQm9vbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T3RoZXIpCiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVy
Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIAorICAgIGlmIChpc1Rv
cCkKKyAgICAgICAgcmV0dXJuICJUb3AiOwogICAgIAogICAgICpwdHIrKyA9IDA7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMCBAQCBpbmxpbmUgYm9v
bCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9T
dHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAorLy8gTWVyZ2UgdHdvIHByZWRp
Y3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBkb2VzIGxlZnQgfCByaWdodC4g
SXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5LCBidXQgeW91IHdvdWxk
IGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2luY2UgdGhlIG1lcmdpbmcgcHJv
dG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIChhbmQgaGFzIGFscmVh
ZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlzdG9yeSkuCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVk
VHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0
U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0Fic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEdyYXBoJiBncmFwaCkKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
Z3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cywgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDApCit7Cit9CisKK0Fic3RyYWN0
U3RhdGU6On5BYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5C
YXNpY0Jsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCit7CisgICAgQVNTRVJUKCFtX2Jsb2Nr
KTsKKyAgICAKKyAgICBpZiAoYmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVnaW4gPiBt
X25vZGVzLnNpemUoKSkKKyAgICAgICAgbV9ub2Rlcy5yZXNpemUoYmFzaWNCbG9jay0+ZW5kIC0g
YmFzaWNCbG9jay0+YmVnaW4pOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9u
b2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOworICAgIG1fdmFy
aWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIAorICAgIG1fYmxvY2sgPSBi
YXNpY0Jsb2NrOworICAgIG1faXNWYWxpZCA9IHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZUFyZ3VtZW50cyhHcmFwaCYgZ3JhcGgpCit7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBncmFwaFtyb290LT52YXJpYWJsZXNBdEhlYWQu
YXJndW1lbnQoaSldLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
IGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBp
ZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RBcnJheSk7CisgICAgICAgIGVsc2UgaWYg
KGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAg
ICB9Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVy
Z2VNb2RlKQoreworICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2s7IC8vIFNhdmUgdGhlIGJsb2NrIGZvciBzdWNjZXNzb3IgbWVyZ2luZy4K
KyAgICAKKyAgICBpZiAoIW1faXNWYWxpZCkgeworICAgICAgICByZXNldCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAg
IAorICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50
KGFyZ3VtZW50KSwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpOyArK2xvY2FsKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWls
KGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2Nh
bCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIWNoYW5nZWQpOworICAgIAorICAg
IHJlc2V0KCk7CisgICAgCisgICAgaWYgKG1lcmdlTW9kZSAhPSBNZXJnZVRvU3VjY2Vzc29ycykK
KyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgCisgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNz
b3JzKG1fZ3JhcGgsIGJsb2NrKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKQorICAgICAg
ICBtX25vZGVzW2ldLmNsZWFyKCk7CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2Js
b2NrID0gMDsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgQVNTRVJUKG1fYmxvY2spOwor
ICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgICAgICAKKyAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAKKyAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgewor
ICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrLCBub2RlSW5kZXgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkp
OworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4p
OworICAgICAgICAKKyAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAg
ICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0
YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCisgICAgICAgIEFTU0VSVCghbV9ibG9jay0+
dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6Cisg
ICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2FzZSBCaXRMU2hpZnQ6
CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJ
bnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVy
OgorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBpZiAo
IW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVB
ZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmlu
ZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhNdWw6Cisg
ICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTWluOgorICAgIGNhc2UgQXJpdGhNYXg6
IHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCAhbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RE
b3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEFyaXRoU3FydDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBMb2dpY2FsTm90OiB7Cisg
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYg
KGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSB8fCAhY2hpbGQucHJlZGlj
dGlvbigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEJvb2xlYW4pOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNo
aWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKKyAgICAg
ICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgY2FzZSBDb21wYXJlTGVzc0Vx
OgorICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgor
ICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAgIE5vZGUmIGxlZnQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOworICAgICAgICBOb2RlJiByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV07
CisgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOworICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVk
aWN0SW50MzI7CisgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihs
ZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0TnVtYmVyOworICAgICAg
ICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdChsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0Rmlu
YWxPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RBcnJheTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGlj
dFRvcDsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoZmlsdGVyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU3Ry
aW5nQ2hhckF0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeVZhbDoK
KyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVB1c2g6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdE51bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBBcnJheVBvcDoKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBCcmFuY2g6IHsKKyAgICAgICAgLy8gVGhlcmUgaXMgcHJvYmFibHkgcHJvZml0IHRvIGJlIGZv
dW5kIGluIGRvaW5nIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudAorICAgICAgICAvLyBwcm9w
YWdhdGlvbiwgYW5kIHRvIHRha2UgaXQgb25lIHN0ZXAgZnVydGhlciwgd2hlcmUgYSB2YXJpYWJs
ZSdzIHZhbHVlCisgICAgICAgIC8vIGlzIHNwZWNpYWxpemVkIG9uIGVhY2ggZGlyZWN0aW9uIG9m
IGEgYnJhbmNoLiBGb3Igbm93LCB3ZSBkb24ndCBkbyB0aGlzLgorICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkgfHwgIWNoaWxkLnByZWRpY3Rpb24oKSkKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RCb29sZWFuKTsKKyAgICAg
ICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmpl
Y3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxh
dGVBcnJheU9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxk
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAg
IAorICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgorICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgIE5vZGUmIGNoaWxk
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgUHJlZGljdGVkVHlwZSB0eXBlID0gc291cmNlLm1fdHlwZTsKKyAgICAgICAg
aWYgKHR5cGUgJiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEJvb2xl
YW4pKSB7CisgICAgICAgICAgICB0eXBlICY9IChQcmVkaWN0TnVtYmVyIHwgUHJlZGljdFN0cmlu
ZyB8IFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgICAgIHR5cGUgfD0gUHJlZGljdFN0cmluZzsK
KyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgTmV3QXJyYXk6CisgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFy
cmF5U3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
TmV3UmVnZXhwOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlv
biA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoaXNPYmpl
Y3RQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbgorICAg
ICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhp
bmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4s
IHlvdSBuZXZlciBrbm93LgorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChpc090
aGVyUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBzb3VyY2Uu
ZmlsdGVyKFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGlj
dE9iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAg
ICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE9iamVjdE1hc2spOworICAgICAgICAgICAg
ZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICBkZXN0aW5h
dGlvbi5tZXJnZShQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2Ug
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHNvdXJjZS5maWx0
ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgIAorICAgICAgICBkZXN0aW5hdGlv
bi5zZXQoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAgICAgCisgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldENhbGxlZToKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U2NvcGVDaGFpbjoKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Q2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEdldFNjb3BlZFZhcjoKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgY2FzZSBHZXRNZXRob2Q6
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAg
ICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJy
YXkpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29u
c3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0aG9kOgor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1
Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5t
ZXRob2RDaGVja0RhdGFJbmRleCgpXS5zdHJ1Y3R1cmUpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2Uga25vdyB3aGF0IHRoZSBmdW5j
dGlvbiBpcy4KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5SWQ6
CisgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAgIC8vIEFn
YWluLCBzYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJ
bnN0YW5jZU9mCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RD
ZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdENlbGwp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUGhpOgorICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBSZXNvbHZlOgorICAgIGNhc2UgUmVzb2x2ZUJhc2U6CisgICAgY2FzZSBSZXNvbHZlQmFz
ZVN0cmljdFB1dDoKKyAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX2lzVmFs
aWQ7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9u
b2Rlc1tpXS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxl
cy5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICBtX3Zhcmlh
Ymxlcy5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworfQorCitib29sIEFic3RyYWN0U3Rh
dGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0
VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgQWJz
dHJhY3RWYWx1ZSogc291cmNlOworICAgICAgICAKKyAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOworICAgIGlmICghbm9kZS5yZWZDb3VudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgY2FzZSBQaGk6CisgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUg
ZnJvbSBoZWFkIHRvIHRhaWwuCisgICAgICAgIHNvdXJjZSA9ICZpblZhcmlhYmxlOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIC8vIFRo
ZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgor
ICAgICAgICBzb3VyY2UgPSAmZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIC8vIFRoZSBibG9jayBzZXRz
IHRoZSB2YXJpYWJsZSwgYW5kIHBvdGVudGlhbGx5IHJlZmluZXMgaXQsIGJvdGgKKyAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgorICAgICAgICBzb3VyY2UgPSAmZm9yTm9k
ZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBzb3VyY2UgPSAwOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgLy8gV2UgcmVhY2ggdGhpcyBwb2ludCBlaXRo
ZXIgaWYgdGhlcmUgd2FzIG5vIHN0cnVjdHVyZXMgY2xvYmJlcmluZyBldmVudCBkdXJpbmcgdGhp
cworICAgIC8vIGJhc2ljIGJsb2NrLCBvciBpZiB0aGUgbG9jYWwgdmFyaWFibGUgd2FzOgorICAg
IC8vIAorICAgIC8vIC0gVXNlZCBieSBhIEdldExvY2FsLCBpbiB3aGljaCBjYXNlIHRoZSBjbG9i
YmVyaW5nIHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuCisgICAgLy8gICBkb25lIGVpdGhlciB3aGVu
IEdldExvY2FsIGV4ZWN1dGVkIChieSBjaGVja2luZyBtX3N0cnVjdHVyZXNDbG9iYmVyZWQpIG9y
IGFmdGVyLgorICAgIC8vCisgICAgLy8gLSBTZXQgYnkgYSBTZXRMb2NhbCwgaW4gd2hpY2ggY2Fz
ZSB0aGUgc3RhdGUgd291bGQgaGF2ZSBiZWVuIGNsb2JiZXJlZAorICAgIC8vICAgZGlyZWN0bHkg
b24gdGhlIG5vZGUgdGhhdCBpcyB0aGUgc291cmNlIG9mIHRoZSBTZXRMb2NhbC4KKyAgICAgICAg
CisgICAgaWYgKGRlc3RpbmF0aW9uID09ICpzb3VyY2UpIHsKKyAgICAgICAgLy8gQWJzdHJhY3Qg
ZXhlY3V0aW9uIGRpZCBub3QgY2hhbmdlIHRoZSBvdXRwdXQgdmFsdWUgb2YgdGhlIHZhcmlhYmxl
LCBmb3IgdGhpcworICAgICAgICAvLyBiYXNpYyBibG9jaywgb24gdGhpcyBpdGVyYXRpb24uCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgICAgIAorICAgIC8vIEFic3RyYWN0IGV4
ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyBy
ZWFjaGVkIGFib3V0CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhp
cyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUg
dG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlv
biA9ICpzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6
bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQVNTRVJUKGZy
b20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IHRvLT52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAgQVNTRVJUKGZyb20tPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkxvY2FscygpID09IHRvLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2Nh
bHMoKSk7CisgICAgCisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAgZm9yIChz
aXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1i
ZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQorICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFy
aWFibGVCZXR3ZWVuQmxvY2tzKHRvLT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBm
cm9tLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpLCB0by0+dmFyaWFibGVzQXRIZWFk
LmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KSk7CisgICAgCisgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGZyb20tPnZh
cmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKQorICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKHRvLT52YWx1ZXNBdEhlYWQubG9jYWwobG9j
YWwpLCBmcm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCB0by0+dmFyaWFibGVzQXRIZWFk
LmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAg
CisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1
Y2Nlc3NvcnMoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoreworICAgIE5v
ZGUmIHRlcm1pbmFsID0gZ3JhcGhbYmFzaWNCbG9jay0+ZW5kIC0gMV07CisgICAgCisgICAgQVNT
RVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAgCisgICAgc3dpdGNoICh0ZXJtaW5hbC5v
cCkgeworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssICZn
cmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHRlcm1pbmFsLnRha2VuQnl0ZWNvZGVPZmZzZXQo
KSkpOworICAgICAgICAKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgcmV0dXJuIG1lcmdlKGJh
c2ljQmxvY2ssICZncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHRlcm1pbmFsLnRha2VuQnl0
ZWNvZGVPZmZzZXQoKSkpCisgICAgICAgICAgICB8IG1lcmdlKGJhc2ljQmxvY2ssICZncmFwaC5i
bG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHRlcm1pbmFsLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSkp
OworICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2Ug
VGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0
d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291
cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2Rl
SW5kZXgpCit7CisgICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVChzb3VyY2VOb2RlSW5kZXggIT0gTm9O
b2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29uZGl0
aW9uYWwgcHJvcGFnYXRpb24gaGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24ubWVy
Z2Uoc291cmNlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZHVt
cChGSUxFKiBvdXQpCit7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVzW2ld
LmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZmlyc3QpCisg
ICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcHJp
bnRmKG91dCwgIiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJAJWx1OiIsIGkgKyBtX2Jsb2Nr
LT5iZWdpbik7CisgICAgICAgIG1fbm9kZXNbaV0uZHVtcChvdXQpOworICAgIH0KK30KKyNlbmRp
ZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRlX2gK
KyNkZWZpbmUgREZHQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgor
I2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworbmFt
ZXNwYWNlIERGRyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOworCisvLyBUaGlzIGltcGxlbWVudHMg
dGhlIG5vdGlvbiBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5zaXRpdmUgaW50cmFw
cm9jZWR1cmFsCisvLyBjb250cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdpdGggYSBmb2N1cyBv
biB0aGUgZWxpbWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgorLy8gSXQgYWxzbyBp
bXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3QgaW50ZXJwcmV0YXRp
b24gdGhhdCBzdWNoIGFuCisvLyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMgY2xhc3Mgc2hvdWxk
IGJlIHVzZWQgaW4gdHdvIGlkaW9tczoKKy8vCisvLyAxKSBQZXJmb3JtaW5nIHRoZSBDRkEuIElu
IHRoaXMgY2FzZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgYWxsIGJhc2ljCisv
LyAgICBibG9ja3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyByZWFjaGVkLiBDb252
ZXJnZW5jZSBpcyBkZWZpbmVkIGJ5CisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6
Ok1lcmdlVG9TdWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBibG9ja3MuCisvLwor
Ly8gMikgUmVtYXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlvdXNseSBleGVjdXRl
ZCBDRkEuIEluIHRoaXMgY2FzZSwKKy8vICAgIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1biBv
dmVyIHdoYXRldmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGluIHVwCisvLyAgICB0
byB0aGUgcG9pbnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0byBpbnRlcnJvZ2F0
ZSB0aGUga25vd24gdHlwZQorLy8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBBdCB0aGlzIHBvaW50
IGl0J3Mgc2FmZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGlyZWx5LAorLy8gICAg
Y2FsbCByZXNldCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxvY2sg
YW5kIGNhbGwKKy8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6RG9udE1lcmdlKS4g
VGhlIGxhdHRlciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UKKy8vICAgIGl0IHBlcmZvcm1zIHNv
bWUgdXNlZnVsIGludGVncml0eSBjaGVja3MuCisvLworLy8gQWZ0ZXIgdGhlIENGQSBpcyBydW4s
IHRoZSBpbnRlci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMgYW5kIHRhaWxzIG9m
IGFsbAorLy8gYmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEtYmxvY2sgc3RhdGUg
dG8gYmUgcmVtYXRlcmlhbGl6ZWQgYnkganVzdAorLy8gZXhlY3V0aW5nIHRoZSBDRkEgZm9yIHRo
YXQgYmxvY2suIElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3RhdGUgb25seSwgdGhl
bgorLy8geW91IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2NrOjptX3ZhbHVlc0F0
SGVhZCBvciBtX3ZhbHVlc0F0VGFpbCBmaWVsZHMuCisvLworLy8gUnVubmluZyB0aGlzIGFuYWx5
c2lzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXItYmxvY2sgc3RhdGUK
Ky8vIG1lcmdpbmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50OgorLy8KKy8vIEFic3RyYWN0U3Rh
dGUgc3RhdGUoY29kZUJsb2NrLCBncmFwaCk7CisvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmFz
aWNCbG9jayk7CisvLyBib29sIGVuZFJlYWNoZWQgPSB0cnVlOworLy8gZm9yIChOb2RlSW5kZXgg
aWR4ID0gYmFzaWNCbG9jay5iZWdpbjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7Cisv
LyAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKGlkeCkpCisvLyAgICAgICAgIGJyZWFrOworLy8gfQor
Ly8gYm9vbCByZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVyZ2Ugb3IgRG9u
dE1lcmdlPik7CisKK2NsYXNzIEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIGVudW0gTWVy
Z2VNb2RlIHsKKyAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3Rh
dGUgd2l0aCBiYXNpYyBibG9ja3MuCisgICAgICAgIERvbnRNZXJnZSwKKyAgICAgICAgCisgICAg
ICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2Yg
dGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrIGJlaW5nIGFuYWx5emVkLgorICAgICAgICBNZXJn
ZVRvVGFpbCwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFj
dFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrLCBhbmQg
d2l0aCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29yIGJsb2Nrcy4KKyAgICAgICAgTWVyZ2VUb1N1Y2Nl
c3NvcnMKKyAgICB9OworICAgIAorICAgIEFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEdyYXBoJiBncmFwaCk7CisgICAgCisgICAgfkFic3RyYWN0U3RhdGUoKTsKKyAgICAKKyAg
ICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9ub2Rlc1tub2RlSW5kZXggLSBtX2Jsb2NrLT5iZWdpbl07CisgICAgfQor
ICAgIAorICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXpl
IHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKKyAgICAvLyBhcmd1bWVudHMuCisgICAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZUFyZ3VtZW50cyhHcmFwaCYgZ3JhcGgpOworCisgICAgLy8gU3RhcnQgYWJz
dHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUK
KyAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRv
IGJlIGF0IHRoZSBoZWFkCisgICAgLy8gb2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8g
dGhlIGJhc2ljIGJsb2NrJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIHZvaWQgYmVnaW5CYXNpY0Js
b2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spOworICAgIAorICAgIC8vIEZpbmlzaCBhYnN0cmFj
dGx5IGV4ZWN1dGluZyBhIGJhc2ljIGJsb2NrLiBJZiBNZXJnZVRvVGFpbCBvcgorICAgIC8vIE1l
cmdlVG9TdWNjZXNzb3JzIGlzIHBhc3NlZCwgdGhlbiB0aGlzIG1lcmdlcyBldmVyeXRoaW5nIHdl
IGhhdmUKKyAgICAvLyBsZWFybmVkIGFib3V0IGhvdyB0aGUgc3RhdGUgY2hhbmdlcyBkdXJpbmcg
dGhpcyBibG9jaydzIGV4ZWN1dGlvbiBpbnRvCisgICAgLy8gdGhlIGJsb2NrJ3MgZGF0YSBzdHJ1
Y3R1cmVzLiBUaGVyZSBhcmUgdGhyZWUgcmV0dXJuIG1vZGVzLCBkZXBlbmRpbmcKKyAgICAvLyBv
biB0aGUgdmFsdWUgb2YgbWVyZ2VNb2RlOgorICAgIC8vCisgICAgLy8gRG9udE1lcmdlOgorICAg
IC8vICAgIEFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIC8vCisgICAgLy8gTWVyZ2VUb1RhaWw6
CisgICAgLy8gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgYXQgdGhl
IHRhaWwgd2FzIGNoYW5nZWQuCisgICAgLy8gICAgVGhpcyBtZWFucyB0aGF0IHlvdSBtdXN0IGNh
bGwgbWVyZ2VUb1N1Y2Nlc3NvcnMoKSwgYW5kIGlmIHRoYXQKKyAgICAvLyAgICByZXR1cm5zIHRy
dWUsIHRoZW4geW91IG11c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAv
LyAgICBibG9ja3MuIEZhbHNlIHdpbGwgYWx3YXlzIGJlIHJldHVybmVkIGlmIHRoZSBibG9jayBp
cyB0ZXJtaW5hbAorICAgIC8vICAgIChpLmUuIGVuZHMgaW4gVGhyb3cgb3IgUmV0dXJuLCBvciBo
YXMgYSBGb3JjZU9TUkV4aXQgaW5zaWRlIGl0KS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9TdWNj
ZXNzb3JzOgorICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2Nr
IGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLAorICAgIC8vICAgIGFuZCwgaWYgdGhlIHN0YXRlIGF0
IHRoZSBoZWFkcyBvZiBzdWNjZXNzb3JzIHdhcyBjaGFuZ2VkLgorICAgIC8vICAgIEEgdHJ1ZSBy
ZXR1cm4gbWVhbnMgdGhhdCB5b3UgbXVzdCByZXZpc2l0IChhdCBsZWFzdCkgdGhlIHN1Y2Nlc3Nv
cgorICAgIC8vICAgIGJsb2Nrcy4KKyAgICBib29sIGVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlIG1l
cmdlTW9kZSk7CisgICAgCisgICAgLy8gUmVzZXQgdGhlIEFic3RyYWN0U3RhdGUuIFRoaXMgdGhy
b3dzIGF3YXkgYW55IHJlc3VsdHMsIGFuZCBhdCB0aGlzIHBvaW50CisgICAgLy8geW91IGNhbiBz
YWZlbHkgY2FsbCBiZWdpbkJhc2ljQmxvY2soKSBvbiBhbnkgYmFzaWMgYmxvY2suCisgICAgdm9p
ZCByZXNldCgpOworICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZXMgdGhlIGdpdmVuIG5v
ZGUuIFRoZSBuZXcgYWJzdHJhY3Qgc3RhdGUgaXMgc3RvcmVkIGludG8gYW4KKyAgICAvLyBhYnN0
cmFjdCByZWdpc3RlciBmaWxlIHN0b3JlZCBpbiAqdGhpcy4gTG9hZHMgb2YgbG9jYWwgdmFyaWFi
bGVzICh0aGF0IHNwYW4KKyAgICAvLyBiYXNpYyBibG9ja3MpIGludGVycm9nYXRlIHRoZSBiYXNp
YyBibG9jaydzIG5vdGlvbiBvZiB0aGUgc3RhdGUgYXQgdGhlIGhlYWQuCisgICAgLy8gU3RvcmVz
IHRvIGxvY2FsIHZhcmlhYmxlcyBhcmUgaGFuZGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkuIFRoaXMg
cmV0dXJucyB0cnVlCisgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRo
aXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQorICAgIC8vIGZvciBibG9jayB0
ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZh
cmlhbnRzCisgICAgLy8gb2YgVGhyb3cuCisgICAgYm9vbCBleGVjdXRlKE5vZGVJbmRleCBub2Rl
SW5kZXgpOworICAgIAorICAgIC8vIElzIHRoZSBleGVjdXRpb24gc3RhdGUgc3RpbGwgdmFsaWQ/
IFRoaXMgd2lsbCBiZSBmYWxzZSBpZiBleGVjdXRlKCkgaGFzCisgICAgLy8gcmV0dXJuZWQgZmFs
c2UgcHJldmlvdXNseS4KKyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFs
aWQ7IH0KKyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRo
ZSBmaXJzdCBibG9jaydzIHRhaWwgaW50byB0aGUgc2Vjb25kCisgICAgLy8gYmxvY2sncyBoZWFk
LiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlY29uZCBibG9jaydzIHN0YXRlIGNoYW5nZWQuIElmIHNv
LAorICAgIC8vIHRoYXQgYmxvY2sgbXVzdCBiZSBhYnN0cmFjdGx5IGludGVycHJldGVkIGFnYWlu
LgorICAgIHN0YXRpYyBib29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KTsKKyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBi
bG9jaydzIHRhaWwgaW50byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0
cnVlIGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAv
LyB0aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlm
IE1lcmdlTW9kZSBpcworICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIHN0YXRpYyBib29s
IG1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jayk7
CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAg
ICAKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpOworICAgIAorICAgIGJv
b2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RW
YWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCk7CisgICAgCisgICAgc3RhdGlj
IGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRp
b24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4
LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOworICAgIEdyYXBoJiBtX2dyYXBoOworICAgIAorICAgIFZlY3RvcjxBYnN0cmFjdFZh
bHVlLCAzMj4gbV9ub2RlczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxl
czsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIAorICAgIGJvb2wgbV9pc1ZhbGlkOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBERkdBYnN0cmFjdFZhbHVlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RWYWx1
ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5j
bHVkZSAiUHJlZGljdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CisKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgeworcHVibGljOgorICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUoKQorICAgICAgICA6IG1faXNUb3AoZmFsc2UpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQor
ICAgICAgICA6IG1fc2V0KHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2lzVG9wKGZhbHNlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1Y3R1
cmVTZXQmIHNldCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAgICwgbV9pc1RvcChmYWxz
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAg
bV9zZXQuY2xlYXIoKTsKKyAgICAgICAgbV9pc1RvcCA9IGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICAgICAg
bV9pc1RvcCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVl
OworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAg
ICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIW1faXNUb3ApOworICAgICAgICBtX3Nl
dC5hZGQoc3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhZGRBbGwoY29uc3QgU3Ry
dWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChtX2lzVG9wKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9zZXQuYWRkQWxsKG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpCisgICAgeworICAgICAgICBpZiAobV9pc1RvcCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKG90aGVyLm1faXNUb3ApIHsKKyAgICAgICAgICAgIG1ha2VUb3Ao
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBt
X3NldC5hZGRBbGwob3RoZXIubV9zZXQpOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5z
KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNUb3Ap
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmNvbnRhaW5z
KHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1
Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1faXNUb3ApCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90
aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbihT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2lzVG9wIHx8
IG1fc2V0LnNpemUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
IChtX3NldC5zaXplKCkgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBy
ZXR1cm4gbV9zZXRbMF0gPT0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Vw
ZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmlzU3VwZXJzZXRPZihvdGhlcik7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRP
Zihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChvdGhlci5tX2lzVG9wKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChtX2lzVG9wKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
bV9zZXQuaXNTdWJzZXRPZihvdGhlci5tX3NldCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNT
dXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2YoKnRoaXMpOworICAgIH0KKyAgICAK
KyAgICBib29sIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKG1faXNUb3ApIHsKKyAgICAgICAgICAgIG1fc2V0ID0gb3RoZXI7CisgICAgICAgICAg
ICBtX2lzVG9wID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2V0Lm1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKG1fc2V0Lm1fc3RydWN0dXJlc1tpXSkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
c2V0Lm1fc3RydWN0dXJlc1tpXSA9IG1fc2V0Lm1fc3RydWN0dXJlcy5sYXN0KCk7CisgICAgICAg
ICAgICBtX3NldC5tX3N0cnVjdHVyZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVl
JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5tX2lzVG9wKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gZmlsdGVyKG90aGVyLm1fc2V0KTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBmaWx0ZXIoUHJlZGljdGVkVHlwZSBvdGhlcikKKyAgICB7CisgICAg
ICAgIGlmICghKG90aGVyICYgUHJlZGljdENlbGwpKSB7CisgICAgICAgICAgICBpZiAoaXNDbGVh
cigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNsZWFyKCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9zZXQubV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHN0cnVjdHVyZVByZWRpY3Rpb24gPSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVy
ZShtX3NldC5tX3N0cnVjdHVyZXNbaV0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
c3RydWN0dXJlUHJlZGljdGlvbiAmIG90aGVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX3NldC5tX3N0cnVjdHVyZXNbaV0gPSBtX3NldC5t
X3N0cnVjdHVyZXMubGFzdCgpOworICAgICAgICAgICAgbV9zZXQubV9zdHJ1Y3R1cmVzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNUb3AoKSAmJiBzaXplKCkgPT0gMDsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1faXNUb3A7IH0K
KyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIW1f
aXNUb3ApOworICAgICAgICByZXR1cm4gbV9zZXQuc2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBT
dHJ1Y3R1cmUqIGF0KHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2lz
VG9wKTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmF0KGkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1
Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
IW1faXNUb3ApOworICAgICAgICByZXR1cm4gYXQoaSk7CisgICAgfQorICAgIAorICAgIFN0cnVj
dHVyZSogbGFzdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIW1faXNUb3ApOworICAg
ICAgICByZXR1cm4gbV9zZXQubGFzdCgpOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9p
c1RvcCkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Q2VsbDsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9pc1RvcCAhPSBvdGhlci5tX2lzVG9wKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAobV9pc1RvcCkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICByZXR1cm4gbV9zZXQgPT0gb3RoZXIubV9zZXQ7CisgICAgfQorICAgIAorI2lm
bmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgaWYg
KG1faXNUb3ApIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3NldC5zaXplKCkgPT0gMCk7CisgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgIlRPUCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBtX3NldC5kdW1wKG91dCk7CisgICAgfQorI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OworICAgIGJvb2wgbV9pc1RvcDsKK307
CisKK3N0cnVjdCBBYnN0cmFjdFZhbHVlIHsKKyAgICBBYnN0cmFjdFZhbHVlKCkKKyAgICAgICAg
OiBtX3R5cGUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFy
KCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IFByZWRpY3ROb25lOworICAgICAgICBtX3N0cnVj
dHVyZS5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdHlwZSA9PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFy
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBtX3R5
cGUgPSBQcmVkaWN0VG9wOworICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1f
dHlwZSAmIFByZWRpY3RDZWxsKSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VS
VChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG9wKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdFRvcCAmJiBtX3N0
cnVjdHVyZS5pc1RvcCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQWJzdHJhY3RWYWx1ZSB0
b3AoKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tYWtlVG9wKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigp
OworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5h
ZGQodmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fdHlw
ZSA9IHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNl
dChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFy
KCk7CisgICAgICAgIG1fc3RydWN0dXJlLmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAKKyAgICAg
ICAgbV90eXBlID0gcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBzZXQoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYg
KHR5cGUgJiBQcmVkaWN0Q2VsbCkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAg
bV90eXBlID0gdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFi
c3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9
PSBvdGhlci5tX3R5cGUgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAg
fQorICAgIAorICAgIGJvb2wgbWVyZ2UoY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKSB8
IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbWVyZ2UoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbWVyZ2VQcmVk
aWN0aW9uKG1fdHlwZSwgdHlwZSk7CisgICAgICAgIAorICAgICAgICBpZiAodHlwZSAmIFByZWRp
Y3RDZWxsKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgbV90eXBlICY9IG90aGVyLnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpOworICAgICAgICBt
X3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihQ
cmVkaWN0ZWRUeXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSBQcmVkaWN0VG9w
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3R5cGUgJj0gdHlwZTsKKyAgICAgICAg
bV9zdHJ1Y3R1cmUuZmlsdGVyKHR5cGUpOworICAgIH0KKyAgICAKKyAgICBib29sIHZhbGlkYXRl
KEpTVmFsdWUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobWVyZ2VQcmVkaWN0aW9u
cyhtX3R5cGUsIHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAg
ICAgZnByaW50ZihvdXQsICIoJXMsICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3R5cGUpKTsKKyAg
ICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBmcHJpbnRmKG91dCwgIikiKTsK
KyAgICB9CisjZW5kaWYKKworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7
CisgICAgUHJlZGljdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3RyYWN0
VmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYXNpY0Jsb2NrX2gKKyNkZWZp
bmUgREZHQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHT3Bl
cmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgdWludDMyX3Qg
QmxvY2tJbmRleDsKKwordHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29y
TGlzdDsKKworc3RydWN0IEJhc2ljQmxvY2sgeworICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0
ZWNvZGVCZWdpbiwgTm9kZUluZGV4IGJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2ln
bmVkIG51bUxvY2FscykKKyAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCisg
ICAgICAgICwgYmVnaW4oYmVnaW4pCisgICAgICAgICwgZW5kKE5vTm9kZSkKKyAgICAgICAgLCBp
c09TUlRhcmdldChmYWxzZSkKKyAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVt
TG9jYWxzKQorICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykK
KyAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgewor
ICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgQmxvY2tJbmRleCBnZXRCeXRlY29kZUJlZ2luKE93
blB0cjxCYXNpY0Jsb2NrPiogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKCpibG9jaykt
PmJ5dGVjb2RlQmVnaW47CisgICAgfQorCisgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKKyAg
ICBOb2RlSW5kZXggYmVnaW47CisgICAgTm9kZUluZGV4IGVuZDsKKyAgICBib29sIGlzT1NSVGFy
Z2V0OworCisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIAorICAgIE9w
ZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAg
T3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0VGFpbDsKKyAg
ICAKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CisgICAgT3BlcmFu
ZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCYXNp
Y0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUs
NyBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3Zl
LCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAgIE5vZGVJbmRleCBn
ZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZTsKKyAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubG9jYWwob3BlcmFuZCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsK
ICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBAIC0xNDQsMTUg
KzE0NCwxNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQ
aGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNr
LmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKICAg
ICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtv
cGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgCi0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVhZFtvcGVyYW5kXS5zZXRGaXJzdFRpbWUobm9k
ZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2Nh
bEZpcnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBO
b2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNB
dFRhaWxbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFy
aWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gYWRkVG9HcmFwaChTZXRMb2NhbCwg
T3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAK
ICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9w
ZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1l
dGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJU
KGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlOwor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05v
ZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBAIC0x
NzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwg
dG8gdGhlIFNldEFyZ3VtZW50LgogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2FsKCkg
PT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CiAgICAgICAgICAgICAg
ICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTg2LDkgKzE4Niw5IEBAIHByaXZhdGU6CiAgICAg
ICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNz
RGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnko
bV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRk
VG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBu
b2RlSW5kZXg7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1l
bnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUobm9kZUluZGV4KTsK
KyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0
VGltZShhcmd1bWVudCwgbm9kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBub2Rl
SW5kZXg7CiAgICAgfQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2ln
bmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVu
dCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVu
dHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBhZGRUb0dyYXBoKFNl
dExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwog
ICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9O
dW1iZXIgY29udmVyc2lvbiBvbiBpdC4KQEAgLTc4Myw4ICs3ODMsOCBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAg
ICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKICAgICAgICAg
ICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Ci0gICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0
VGltZShzZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVu
dHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFy
Z3VtZW50LCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTE2ODksMTYgKzE2ODksMTYgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRl
Y2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAK
LSAgICAgICAgICAgIFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbdmFyTm9dIDog
cHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdFRhaWxbdmFyTm9dOworICAgICAgICAgICAgTm9k
ZUluZGV4JiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNz
b3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vzc29yQmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7CiAKLSAgICAgICAgICAgIE5vZGVJbmRl
eCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7CisgICAgICAgICAgICBOb2RlSW5kZXgg
dmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwogICAgICAgICAgICAgaWYgKHZhbHVlSW5QcmVkZWNl
c3NvciA9PSBOb05vZGUpIHsKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBh
ZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0g
QXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAt
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSA6IHZhck5vKSkpOwotICAgICAgICAg
ICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAg
ICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgaWYgKHN0YWNr
VHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nv
ckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFt2YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVk
ZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsK
ICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxv
Y2stPm1fbG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29y
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFk
LnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAg
ICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZh
bHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ncmFw
aFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICAgICAg
Ly8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUgaWRl
bnRpY2FsIGJldHdlZW4gdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyRmlsZS5oIgpAQCAtNDMsMjkgKzQ0LDYgQEAgY2xhc3MgRXhlY1N0YXRlOwog
CiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZh
cnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJc0Fy
Z3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi10eXBlZGVmIHVp
bnQzMl90IEJsb2NrSW5kZXg7Ci0KLS8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3ZSB0cmFj
ayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCi0vLyBXZSB0cmFjayB0aGUg
Z2V0IHNvIHRoYXQgdGhlc2UgbWF5IGJlIHNoYXJlZCwgYW5kIHdlIHRyYWNrIHRoZSBzZXQgdG8K
LS8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgdG8gcmVmZXJlbmNlIHRoZSBmaW5h
bCBkZWZpbml0aW9uLgotc3RydWN0IFZhcmlhYmxlUmVjb3JkIHsKLSAgICBWYXJpYWJsZVJlY29y
ZCgpCi0gICAgICAgIDogdmFsdWUoTm9Ob2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCh2YWx1ZSA9PSBOb05vZGUpOwotICAgICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKLSAgICB9Ci0K
LSAgICBOb2RlSW5kZXggdmFsdWU7Ci19OwotCiBzdHJ1Y3QgTWV0aG9kQ2hlY2tEYXRhIHsKICAg
ICAvLyBJdCBpcyBzYWZlIHRvIHJlZmVyIHRvIHRoZXNlIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBh
cmUgc2hhZG93ZWQgYnkKICAgICAvLyB0aGUgb2xkIEpJVCdzIENvZGVCbG9jaydzIE1ldGhvZENh
bGxMaW5rSW5mby4KQEAgLTExMSw0MCArODksNiBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEg
ewogICAgIHVuc2lnbmVkIHJlc29sdmVJbmZvSW5kZXg7CiB9OwogCi10eXBlZGVmIFZlY3RvciA8
QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0OwotCi1zdHJ1Y3QgQmFzaWNCbG9jayB7Ci0g
ICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQotICAgICAgICA6IGJ5dGVj
b2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBiZWdpbihiZWdpbikKLSAgICAgICAg
LCBlbmQoTm9Ob2RlKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIG1f
YXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChu
dW1Mb2NhbHMpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQotICAg
ICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxvY2FscykKLSAgICB7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+
KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOwotICAgIE5vZGVJbmRleCBiZWdp
bjsKLSAgICBOb2RlSW5kZXggZW5kOwotICAgIGJvb2wgaXNPU1JUYXJnZXQ7Ci0KLSAgICBQcmVk
ZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7Ci0gICAgCi0gICAgVmVjdG9yPFZhcmlhYmxlUmVj
b3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2
PiBtX2xvY2Fsc0F0SGVhZDsKLSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1f
YXJndW1lbnRzQXRUYWlsOwotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxz
QXRUYWlsOwotfTsKLQogLy8gCiAvLyA9PT0gR3JhcGggPT09CiAvLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk3
MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzOTMsNiArMTM5MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpCisgICAgeworICAgICAgICByZXR1
cm4gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKKyAgICB9CisKICNpZm5k
ZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKGNvbnN0IGNoYXIqIGxhYmVsID0gMCk7CiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlz
aW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MDIsMjMgKzQwMiw3IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUo
REZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygp
LT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBkaWZmZXJl
bmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CiAgICAgICAgIAotICAgICAgICBB
Y3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2subV9h
cmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7
Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVu
dHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOwotICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rp
b25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUo
bV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
LSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJh
c2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOwotICAg
ICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgYWN0aW9u
YWJsZVByZWRpY3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVBy
ZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYWN0aW9uYWJsZVByZWRp
Y3Rpb25zLnBhY2soKTsKLSAgICAgICAgCi0gICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25zID0g
YWN0aW9uYWJsZVByZWRpY3Rpb25zOworICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9
IGJhc2ljQmxvY2sudmFsdWVzQXRIZWFkOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGJh
c2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
cmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDggQEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVm
aW5lIERGR05vZGVfaAogCi0jaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8
d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0j
aW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZv
cm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3Jh
cGhzLgogI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtNjcsNiArNjUsOCBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiREZHT3BlcmFuZHMuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKICNp
bmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1ZGUg
IlZhbHVlUHJvZmlsZS5oIgpAQCAtNzQsMTUgKzc0LDE0IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKIAotLy8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciAo
c3BpbGwgbG9jYXRpb24pLgotLy8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlwZS1jaGVj
a2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCi1lbnVtIFZp
cnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OwotQ09NUElMRV9B
U1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxSZWdp
c3Rlcl9pc18zMmJpdCk7Ci0KIC8vIFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9k
ZSBpbiB0aGUgZ3JhcGguCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25z
dCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKK3N0cnVjdCBOb2RlSW5kZXhUcmFpdHMg
eworICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2RlOyB9
Cit9OworCiAvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0aW9u
IHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKIC8vIGFuZCB0byBpbXBsZW1lbnQg
T1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KQEAg
LTExMCw1MSArMTA5LDYgQEAgcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXg7
CiB9OwogCi1jbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFi
bGVBY2Nlc3NEYXRhPiB7Ci1wdWJsaWM6Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAgICAg
ICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptaW4oKSkpCi0gICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQot
ICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCkKLSAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQotICAgICAgICAsIG1fcHJlZGljdGlv
bihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwp
OwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKLSAgICB9Ci0gICAgCi0gICAgaW50IG9wZXJhbmQo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7Ci0gICAg
fQotICAgIAotICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAg
ewotICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9uLCBw
cmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKLSAgICB9Ci0gICAg
Ci1wcml2YXRlOgotICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNp
bmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAotICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2Ft
ZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKLSAgICAv
LyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhw
ZWN0IERGRyBzcGFjZQotICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8g
YmUgc2lnbmlmaWNhbnQuCi0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBQcmVk
aWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKLX07Ci0KIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9u
RGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZTsKQEAgLTU2NCw2ICs1MTgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAg
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKKyAgICAg
ICAgQVNTRVJUKGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9vcEluZm8pLT5maW5kKCk7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRy
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDM0ICs3NywzNiBAQCB2b2lkKiBwcmVwYXJlT1NS
RW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBh
dGguIFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAg
IC8vICAgIE9TUiBhdCB0aGlzIHRpbWUuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsKLSAg
ICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rp
b25zLmFyZ3VtZW50KGkpOwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQ
cmVkaWN0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGkgPj0gZXhl
Yy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5hcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
ICAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3
YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgJXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRv
U3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFs
RGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBKU1Zh
bHVlIHZhbHVlOworICAgICAgICBpZiAoYXJndW1lbnQgPT0gMCkKKyAgICAgICAgICAgIHZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50IC0gMSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS52YWxpZGF0ZSh2YWx1
ZSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIs
IGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGlj
dGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgIiwgYXJndW1lbnQsIHZh
bHVlLmRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMu
YXJndW1lbnQoYXJndW1lbnQpLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiLlxu
Iik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAg
IAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJp
YWJsZVVwcGVyQm91bmQoKTsgKytpKSB7Ci0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHBy
ZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZShpKTsKLSAgICAgICAgaWYg
KHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxE
YXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb24pKSB7CisgICAg
Zm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51
bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3Rl
ZFZhbHVlcy5sb2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpz
VmFsdWUoKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJp
bnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAl
cy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBh
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHBy
aW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQg
IiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24o
KSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkuZHVt
cChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBACiAjaWZuZGVm
IERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSAiQWN0aW9u
YWJsZVByZWRpY3Rpb24uaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVk
ZSAiREZHT3BlcmFuZHMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDcgKzQwLDcgQEAg
bmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsKLSAgICBBY3Rp
b25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogfTsKIAogaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5
RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR09wZXJhbmRzX2gKKyNkZWZpbmUgREZHT3BlcmFuZHNfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxwZXIg
ZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRz
LgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgPCAwOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPcGVyYW5kVmFsdWVU
cmFpdHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKKyAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBUKCk7IH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxU
PiA+CitjbGFzcyBPcGVyYW5kcyB7CitwdWJsaWM6CisgICAgT3BlcmFuZHMoKSB7IH0KKyAgICAK
KyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1
ZSgpLCBudW1Bcmd1bWVudHMpOworICAgICAgICBtX2xvY2Fscy5maWxsKFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCksIG51bUxvY2Fscyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHNpemVf
dCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzLnNpemUoKTsgfQorICAg
IAorICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fYXJndW1lbnRzW2lkeF07
IH0KKyAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2Fy
Z3VtZW50c1tpZHhdOyB9CisgICAgCisgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV9sb2NhbHNbaWR4XTsgfQorICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KKyAgICAKKyAgICB2b2lkIHNldExvY2FsKHNpemVfdCBp
ZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fscy5z
aXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOwor
ICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZh
bHVlKCkpOworICAgICAgICBhcmd1bWVudChpZHgpID0gdmFsdWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0TG9jYWxGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoaWR4ID49IG1fbG9jYWxzLnNpemUoKSB8fCBtX2xvY2Fsc1tpZHhd
ID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVu
dF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tvcGVyYW5k
XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMp
LT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2Fy
Z3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAg
ICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Fy
Z3VtZW50c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tp
XSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBW
ZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFQsIDE2PiBtX2xvY2FsczsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGR1bXBPcGVyYW5kcyhPcGVyYW5kczxUPiYg
b3BlcmFuZHMsIEZJTEUqIG91dCkKK3sKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFy
Z3VtZW50IDwgb3BlcmFuZHMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAg
ICAgICBpZiAoYXJndW1lbnQpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAg
ICAgb3BlcmFuZHMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAob3V0KTsKKyAgICB9CisgICAgZnBy
aW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgb3Bl
cmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAobG9jYWwpCisg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMubG9jYWwobG9j
YWwpLmR1bXAob3V0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT3BlcmFuZHNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlz
aW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
ICNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4K
QEAgLTU1LDQ1ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXhwb2ludCgpCiAgICAgewog
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICBtX2dyYXBoLmR1
bXAobV9jb2RlQmxvY2spOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2Vu
ZGlmCiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
IG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBVcCBoZXJlIHdlIHN0YXJ0
IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0aGF0IHRvIGJlCi0gICAg
ICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5v
ZGVGbGFnc0JhY2t3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0ZvcndhcmQoKTsKLSAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGgg
dG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUu
Ci0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKLSAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29k
IHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25l
c3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93
LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRl
dGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAgICAgICAgICAgIC8vIGZvdW5kIGEgc291
bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgotICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9u
c0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgICAgIAorICAg
ICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpOworICAgICAgICBwcm9wYWdhdGVQcmVkaWN0
aW9ucygpOwogICAgICAgICBmaXh1cCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0RFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTAsNiArNzcsMTMgQEAgcHVibGljOgogCiAgICAg
ICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOwogCisjaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxv
Y2spOworI2VuZGlmCisKKyAgICAgICAgZ2xvYmFsQ0ZBKCk7CisKICNpZiBFTkFCTEUoREZHX0RF
QlVHX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb246XG4i
KTsKICAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKQEAgLTI3NCw2ICsyNDgsMjUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVBcml0aE5v
ZGVGbGFncygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFVwIGhl
cmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0IHRoYXQg
dG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgIHByb3Bh
Z2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2Vk
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzRm9yd2Fy
ZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBib29s
IHNldFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKQEAgLTYwOCw3ICs2
MDEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiJXMgIiwgcHJlZGljdGlvblRvU3RyaW5n
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOworICAgICAgICBwcmludGYo
IiVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGlj
dGlvbigpKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2Vk
OwpAQCAtNjMyLDYgKzYyNSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlTm9k
ZVByZWRpY3Rpb25zKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9ucygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3Ro
IHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2Rl
LgorICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7CisgICAgICAgICAg
ICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9v
ZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNhdXNlIHNsb3du
ZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxv
dy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBk
ZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBmb3VuZCBhIHNv
dW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlv
bnNCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKQEAgLTE0MjQsNiAr
MTQ0MCw2OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogICAgIH0KICAgICAKKyAgICB2b2lkIHBlcmZv
cm1CbG9ja0NGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSwgQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
KyAgICAgICAgcHJpbnRmKCIgICBCbG9jayAjJXUgKGJjIyV1KTpcbiIsIGJsb2NrSW5kZXgsIGJs
b2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxv
Y2soYmxvY2spOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAg
ICAgICAgcHJpbnRmKCIgICAgICBoZWFkIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMo
YmxvY2stPnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2Vu
ZGlmCisgICAgICAgIGZvciAoTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5iZWdpbjsgbm9k
ZUluZGV4IDwgYmxvY2stPmVuZDsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9n
cmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAg
ICAgcHJpbnRmKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5k
ZXhdLm9wKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHN0YXRlLmR1bXAoc3Rkb3V0KTsKKyAg
ICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFzdGF0ZS5l
eGVjdXRlKG5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNp
ZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50Zigi
ICAgICAgdGFpbCByZWdzOiAiKTsKKyAgICAgICAgc3RhdGUuZHVtcChzdGRvdXQpOworICAgICAg
ICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9jaGFuZ2VkIHw9IHN0YXRlLmVuZEJh
c2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpOworI2lmIEVOQUJMRShE
RkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAgICB0YWls
IHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFpbCwgc3Rk
b3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZv
aWQgcGVyZm9ybUZvcndhcmRDRkEoQWJzdHJhY3RTdGF0ZSYgc3RhdGUpCisgICAgeworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJDRkEg
WyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9j
aykKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwgYmxvY2spOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGdsb2JhbENGQSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAg
CisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVBcmd1bWVudHMobV9ncmFwaCk7Cisg
ICAgICAgIAorICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fY29kZUJsb2NrLCBtX2dyYXBo
KTsKKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNl
OworICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoc3RhdGUpOworICAgICAgICB9IHdoaWxl
IChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBKU0ds
b2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw3ICs0NTAsNyBAQCBKSVRD
b21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJl
cjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUm
IG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1
YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJl
ZGljdGVkVHlwZSkpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKQEAgLTQ2MCw4ICs0NjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgR1BSUmVnIHJl
c3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAg
aWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlw
ZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBvcDFHUFIsIG9wMkdQUik7CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1
bHRHUFIpOwpAQCAtNTAxLDkgKzUwMyw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUo
Tm9kZSYgbm9kZSwKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9
PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5j
aGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFs
aXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAg
ICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAgIGVsc2UgaWYgKG5vZGUu
b3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hp
bGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0
eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGls
ZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlz
QXJyYXlQcmVkaWN0aW9uKTsKICAgICBlbHNlCiAgICAgICAgIG5vblNwZWN1bGF0aXZlTm9uUGVl
cGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAKQEAgLTUyOSw3
ICs1MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBu
b2RlSW5kZXgsIHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCAqdnB0ciwgYm9vbCBu
ZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlSW5kZXgpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC01MzcsNyArNTM5
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC01NDUsNyArNTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIAogICAgIG1faml0Lm1vdmUodmFsdWVHUFIs
IHJlc3VsdEdQUik7CiAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
VmFsdWVOdWxsKSkpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1f
aml0KTsKQEAgLTU2NiwxMSArNTcwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29t
cGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0
VlB0ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAg
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dp
Y2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFp
c0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKQEAgLTYzMCwxOSArNjM0LDIxIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVu
Q2FsbGVkRXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RP
ck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2Nr
SW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBC
bG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNr
KQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BS
UmVnIHZhbHVlR1BSID0gdmFsdWUuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5v
dENlbGwubGluaygmbV9qaXQpOwogICAgIAogICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCB2YWx1ZUdQUik7Ci0gICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1
ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oVmFsdWVOdWxsKSkpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsg
MSkpCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAKQEAg
LTY3Myw5ICs2NzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5v
CiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgfSBlbHNl
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIo
KSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtl
biwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAg
ICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFr
ZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0
T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
OwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlP
ck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEo
KSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAg
ICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRh
a2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CiAgICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAg
ICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CkBAIC03MDgsOSArNzE0LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBpZiAocHJlZGljdEJv
b2xlYW4pIHsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjpl
bmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRh
a2VuKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7
CisKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuanVtcCgpKTsKICAgICAgICAg
ICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNzQ4LDE1ICs3NTIsMTYgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBHZXRM
b2NhbDogewogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVl
ID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKIAogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3Qg
YXR0ZW1wdCB0byBjb21waWxlLgotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9u
ZSkgeworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1ZS5pc0Ns
ZWFyKCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rp
b24pKSB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKSB7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2Nh
bCgpKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgLy8gTGlrZSBpbnRlZ2VyUmVzdWx0
LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywKQEAg
LTc3NSw5ICs3ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNw
aWxsT3JkZXJKUyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmIChp
c0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rp
b24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7
Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAg
ICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKQEAgLTgyMCw3ICs4MjUsOCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxP
cGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2Vs
bEdQUiA9IGNlbGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAg
bV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTQwOCw3
ICsxNDE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAg
ICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkg
aXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAg
IC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNh
biBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEo
KSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsK
IApAQCAtMTQ0Miw3ICsxNDQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRo
YXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0
aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUg
YXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXko
bm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CkBA
IC0xNTI0LDcgKzE1MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIAogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5v
ZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxk
MSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSks
IHN0b3JhZ2VHUFIpOwpAQCAtMTU2Nyw3ICsxNTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2Uu
Z3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkp
KQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3Rv
cmFnZUdQUik7CkBAIC0xNzk1LDkgKzE4MDEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNW
YWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICAgICAgaWYgKCFpc090aGVyUHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwp
KSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BS
LCBtX2NvbXBpbGVJbmRleCk7CkBAIC0xODA3LDcgKzE4MTUsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24o
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwor
ICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlz
VmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3Vs
dCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTg0Nyw5ICsxODU2LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgLy8gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdG90eXBlIGlzIGFu
IG9iamVjdC4gSWYgd2UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZQogICAgICAgICAvLyB0aGF0IGl0
J3MgYSBGaW5hbE9iamVjdCB0aGVuIHdlIHNwZWN1bGF0ZSBvbiB0aGF0IGRpcmVjdGx5LiBPdGhl
cndpc2Ugd2UKICAgICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNlZCkgY2hlY2su
Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dCgpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIpKSk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKCFpc0Zp
bmFsT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0cikpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKICAgICAgICAgfQpAQCAtMTk3OCw3ICsxOTg4
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHJlc3VsdEdQUik7CkBAIC0xOTk3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFp
c1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CkBAIC0y
MDEyLDYgKzIwMjIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAg
ICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vi
c2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpIHsKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAKICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKQEAgLTIx
MzEsNyArMjE0Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOworICAgICAgICBpZiAo
IW1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5kb2VzTm90Q29udGFp
bkFueU90aGVyVGhhbihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CiAg
ICAgICAgIGlmIChtZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlw
ZS0+c3RydWN0dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRo
b2RDaGVja0RhdGEucHJvdG90eXBlU3RydWN0dXJlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk3MDAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzNyw3ICsxMzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVEb3ViCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHko
Tm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cikKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0aW9u
Q2hlY2spKFByZWRpY3RlZFR5cGUpKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFu
Y2hOb2RlSW5kZXgpOwogICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CkBAIC0xNTgsOCArMTU4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamUKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIg
PSBvcDIuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGlj
dGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihj
b25kaXRpb24sIG9wMUdQUiwgb3AyR1BSKSwgdGFrZW4pOwogICAgIGlmIChub3RUYWtlbiAhPSAo
bV9ibG9jayArIDEpKQpAQCAtMjE5LDExICsyMjEsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUu
Y2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVw
SG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmpl
Y3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNG
aW5hbE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVz
ZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxh
dGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAg
ICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgs
IG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICAgICAgY29tcGlsZVBl
ZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgICAgICAgICB1c2Uo
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IH0gZWxzZQpAQCAtMjU2LDE4ICsyNTgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShCYXNpY0Jsb2NrJgogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogCi0gICAgQVNT
RVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkp
OworICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1
bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
Lm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOwogICAgICAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2Uo
VmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYXJndW1l
bnRzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24oYXQobm9kZUluZGV4KS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKG1f
dmFyaWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIG1f
c3RhdGUucmVzZXQoKTsKKyAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOworICAg
IAorICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mTG9jYWxzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJs
ZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1f
bG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxv
Y2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5v
Tm9kZSkKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJl
Z2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UKQEAgLTMzNyw2ICszNDIsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
XG4iKTsKICNlbmRpZgogICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFi
c3RyYWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVkIGZvciB0aGUgbmV4dCBub2RlLgorICAgICAg
ICBtX3N0YXRlLmV4ZWN1dGUobV9jb21waWxlSW5kZXgpOworICAgICAgICAKICAgICAgICAgaWYg
KG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsK
ICAgICB9CkBAIC01MzcsNyArNTQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dENoYXJDb2RlQQogICAgIEdQUlJlZyBzdHJpbmdSZWcgPSBzdHJpbmcuZ3ByKCk7CiAgICAgR1BS
UmVnIGluZGV4UmVnID0gaW5kZXguZ3ByKCk7CiAgICAgCi0gICAgaWYgKCFpc0tub3duU3RyaW5n
KG5vZGUuY2hpbGQxKCkpKQorICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cmluZ1JlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgIAogICAgIC8vIHVuc2lnbmVkIGNvbXBh
cmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0
aGF0IGFyZSB0b28gbGFyZ2UKQEAgLTU2Niw3ICs1NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwog
ICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgaWYgKCFpc0tu
b3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNv
bXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNl
cyB0aGF0IGFyZSB0b28gbGFyZ2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgPGRmZy9ERkdBYnN0cmFj
dFN0YXRlLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDE3LDQzICs0MTgsMTYgQEAgcHJpdmF0ZToK
ICAgICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9v
bCBpc0tub3duQXJyYXkoTm9kZUluZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUg
PSBhdChvcDEpOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBHZXRM
b2NhbDoKLSAgICAgICAgICAgIHJldHVybiBpc0FycmF5UHJlZGljdGlvbihub2RlLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
TmV3QXJyYXk6Ci0gICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0tub3duU3RyaW5nKE5v
ZGVJbmRleCBvcDEpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0KG9wMSkub3ApIHsKLSAgICAg
ICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAot
ICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgfQotICAgIAogICAgIGJvb2wgY29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFpfREZHT3Bl
cmF0aW9uX0VKSik7CiAgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSYsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29u
ZGl0aW9uLCBaX0RGR09wZXJhdGlvbl9FSkopOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50
ZWdlckJyYW5jaChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJh
bmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91Ymxl
Q29uZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUm
LCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKTsKLSAgICB2b2lkIGNvbXBp
bGVPYmplY3RFcXVhbGl0eShOb2RlJiwgdm9pZCogdnB0cik7CisgICAgdm9pZCBjb21waWxlUGVl
cEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9p
ZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpOworICAgIHZv
aWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyLCBib29sICgqcHJlZGlj
dGlvbkNoZWNrKShQcmVkaWN0ZWRUeXBlKSk7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9k
ZSYpOwotICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCB2
YWx1ZSwgdm9pZCogdnB0cik7CisgICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxO
b3QoTm9kZUluZGV4IHZhbHVlLCB2b2lkKiB2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNr
KTsKICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUmKTsKLSAgICB2b2lkIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJ
bmRleCBub3RUYWtlbiwgdm9pZCAqdnB0cik7CisgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChOb2RlSW5kZXggdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFr
ZW4sIHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgZW1p
dEJyYW5jaChOb2RlJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2Rl
Jik7CkBAIC01NzUsNiArNTQ5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFu
ZDsKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CiAgICAgCisgICAgQWJzdHJh
Y3RTdGF0ZSBtX3N0YXRlOworICAgIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVj
b3ZlcnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0
ZVZhbHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCkBAIC04MDcsNiArNzgzLDcgQEAgaW5saW5l
IFNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV92YXJpYWJsZXMoaml0
LmdyYXBoKCkubV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpu
dW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgICwgbV9zdGF0ZShtX2ppdC5jb2Rl
QmxvY2soKSwgbV9qaXQuZ3JhcGgoKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDYgKzI2LDEyIEBACiAjaWZuZGVmIERGR1N0cnVjdHVyZVNldF9oCiAjZGVmaW5lIERGR1N0cnVj
dHVyZVNldF9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM0LDYgKzQwLDgg
QEAgY2xhc3MgU3RydWN0dXJlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZTsKKwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1
Y3R1cmVTZXQoKSB7IH0KQEAgLTQzLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9zdHJ1
Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNsZWFyKCkK
KyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlcy5jbGVhcigpOworICAgIH0KKyAgICAKICAgICB2
b2lkIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghY29u
dGFpbnMoc3RydWN0dXJlKSk7CkBAIC0xMDQsMTAgKzExNyw1MCBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmxhc3QoKTsg
fQogCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSByZXN1bHQgPSBQcmVkaWN0Tm9uZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHJlc3VsdCwgcHJlZGljdGlvbkZyb21T
dHJ1Y3R1cmUobV9zdHJ1Y3R1cmVzW2ldKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZXMuc2l6ZSgpICE9
IG90aGVyLm1fc3RydWN0dXJlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNb
aV0pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2
b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsICJbIik7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7
CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmVzW2ldKTsKKyAgICAg
ICAgfQorICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKyAgICAKIHBy
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisgICAgCiAg
ICAgVmVjdG9yPFN0cnVjdHVyZSosIDI+IG1fc3RydWN0dXJlczsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAjZW5kaWYgLy8g
REZHU3RydWN0dXJlU2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAorI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGFfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCisvLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGls
bCBsb2NhdGlvbikuCisvLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQg
YXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KK2VudW0gVmlydHVh
bFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07CitDT01QSUxFX0FTU0VS
VChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVy
X2lzXzMyYml0KTsKKworY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5k
PFZhcmlhYmxlQWNjZXNzRGF0YT4geworcHVibGljOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgp
CisgICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0
Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwpCisgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3By
ZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5t
X2xvY2FsKTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGludCBv
cGVyYW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkp
OworICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGlj
dGlvbiwgcHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbigpCisgICAgeworICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNp
ZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUg
dGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0
CisgICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRv
bid0IGV4cGVjdCBERkcgc3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5v
ZGVzIGRvIGJlIHNpZ25pZmljYW50LgorCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Cisg
ICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1Zhcmlh
YmxlQWNjZXNzRGF0YV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110250</attachid>
            <date>2011-10-07 20:54:11 -0700</date>
            <delta_ts>2011-10-07 23:00:21 -0700</delta_ts>
            <desc>work in progress - fix style, mostly</desc>
            <filename>cfa_patch_2.diff</filename>
            <type>text/plain</type>
            <size>120399</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM0IEBA
CisyMDExLTEwLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OkFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3Jz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZHVtcCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aXNWYWxpZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3Ap
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGRBbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6bGFzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZh
bHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNDbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFs
aWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2lj
QmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmdldEJ5
dGVjb2RlQmVnaW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpibG9jayk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6b3BlcmFuZElzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRW
YWx1ZVRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Om51bWJlck9mTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9w
ZXJhbmRzOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0QXJndW1lbnRGaXJzdFRpbWUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbEZpcnN0VGltZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T3BlcmFuZHM6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRz
OjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OmR1bXBPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVBcml0aE5vZGVGbGFncyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtRm9yd2FyZENGQSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Z2xvYmFsQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
Q2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZVNldDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
OiBBZGRlZC4KKwogMjAxMS0xMC0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBnZXRDYWxsRGF0YVZpcnR1YWwgbWV0aG9kcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEyIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYz
OEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAq
LzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEy
MDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FE
RDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNE
MzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi87IH07CiAJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CkBAIC04MDksNiArODE1LDEy
IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0
cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcwMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdP
cGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYW5kcy5o
OyBwYXRoID0gZGZnL0RGR09wZXJhbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0
MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI4Myw2ICsyMjk1LDEyIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBk
ZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKKwkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRjYyMDE3MTE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRjRCQjIxNDM5
NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yODc3LDYgKzI4OTUs
MTEgQEAKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xv
YmFsVGhpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNG
Q0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3
NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTM0MDgsNiArMzQzMSw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFB
ODAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwzMiArNDQsNTUgQEAgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5n
KFByZWRpY3RlZAogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogICAgIEJvdW5k
c0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgCisgICAg
Ym9vbCBpc1RvcCA9IHRydWU7CisgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdENlbGxPdGhl
cikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJjZWxsIik7CisgICAgZWxzZQorICAgICAgICBp
c1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikK
ICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9w
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEZpbmFsT2JqZWN0KQogICAg
ICAgICBwdHIuc3RyY2F0KCJGaW5hbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RBcnJheSkKICAgICAgICAgcHRyLnN0cmNhdCgi
QXJyYXkiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KHZhbHVlICYgUHJlZGljdFN0cmluZykKICAgICAgICAgcHRyLnN0cmNhdCgiU3RyaW5nIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RJbnQzMikKICAgICAgICAgcHRyLnN0cmNhdCgiSW50Iik7CisgICAgZWxzZQorICAgICAg
ICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3REb3VibGUpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIkRvdWJsZSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBm
YWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKICAgICAgICAgcHRy
LnN0cmNhdCgiQm9vbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T3RoZXIpCiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVy
Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIAorICAgIGlmIChpc1Rv
cCkKKyAgICAgICAgcmV0dXJuICJUb3AiOwogICAgIAogICAgICpwdHIrKyA9IDA7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMCBAQCBpbmxpbmUgYm9v
bCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9T
dHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAorLy8gTWVyZ2UgdHdvIHByZWRp
Y3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBkb2VzIGxlZnQgfCByaWdodC4g
SXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5LCBidXQgeW91IHdvdWxk
IGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2luY2UgdGhlIG1lcmdpbmcgcHJv
dG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIChhbmQgaGFzIGFscmVh
ZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlzdG9yeSkuCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVk
VHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2OTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0
U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0Fic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEdyYXBoJiBncmFwaCkKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
Z3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cywgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDApCit7Cit9CisKK0Fic3RyYWN0
U3RhdGU6On5BYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5C
YXNpY0Jsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCit7CisgICAgQVNTRVJUKCFtX2Jsb2Nr
KTsKKyAgICAKKyAgICBpZiAoYmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVnaW4gPiBt
X25vZGVzLnNpemUoKSkKKyAgICAgICAgbV9ub2Rlcy5yZXNpemUoYmFzaWNCbG9jay0+ZW5kIC0g
YmFzaWNCbG9jay0+YmVnaW4pOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9u
b2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOworICAgIG1fdmFy
aWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIAorICAgIG1fYmxvY2sgPSBi
YXNpY0Jsb2NrOworICAgIG1faXNWYWxpZCA9IHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0
ZTo6aW5pdGlhbGl6ZUFyZ3VtZW50cyhHcmFwaCYgZ3JhcGgpCit7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdldCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBncmFwaFtyb290LT52YXJpYWJsZXNBdEhlYWQu
YXJndW1lbnQoaSldLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
IGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZh
bHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBp
ZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RBcnJheSk7CisgICAgICAgIGVsc2UgaWYg
KGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAg
ICB9Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVy
Z2VNb2RlKQoreworICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IG1fYmxvY2s7IC8vIFNhdmUgdGhlIGJsb2NrIGZvciBzdWNjZXNzb3IgbWVyZ2luZy4K
KyAgICAKKyAgICBpZiAoIW1faXNWYWxpZCkgeworICAgICAgICByZXNldCgpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAg
IAorICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgICAg
IGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50
KGFyZ3VtZW50KSwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxv
Y2FscygpOyArK2xvY2FsKQorICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWls
KGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2Nh
bCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIWNoYW5nZWQpOworICAgIAorICAg
IHJlc2V0KCk7CisgICAgCisgICAgaWYgKG1lcmdlTW9kZSAhPSBNZXJnZVRvU3VjY2Vzc29ycykK
KyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgCisgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNz
b3JzKG1fZ3JhcGgsIGJsb2NrKTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCit7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKQorICAgICAg
ICBtX25vZGVzW2ldLmNsZWFyKCk7CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKyAgICBtX2Js
b2NrID0gMDsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKworYm9vbCBBYnN0cmFjdFN0YXRl
OjpleGVjdXRlKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgQVNTRVJUKG1fYmxvY2spOwor
ICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgICAgICAKKyAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtub2RlSW5kZXhdOworICAgICAgICAKKyAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgewor
ICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2dy
YXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrLCBub2RlSW5kZXgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOiB7CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNldExvY2FsOiB7CisgICAgICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkp
OworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4p
OworICAgICAgICAKKyAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpID0g
Zm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAg
ICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0
YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCisgICAgICAgIEFTU0VSVCghbV9ibG9jay0+
dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6Cisg
ICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2FzZSBCaXRMU2hpZnQ6
CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJ
bnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVy
OgorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICBpZiAo
IW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKQorICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAgICAgICAgaWYgKG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVB
ZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCld
KSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9k
ZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmlu
ZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOgorICAgIGNhc2UgQXJpdGhNdWw6Cisg
ICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTWluOgorICAgIGNhc2UgQXJpdGhNYXg6
IHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobV9ncmFwaFtub2Rl
LmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAg
ICAgICAKKyAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hp
bGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCBtX2dyYXBoW25vZGUuY2hpbGQy
KCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCAhbm9kZS5jYW5TcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RE
b3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgp
XS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEFyaXRoU3FydDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBMb2dpY2FsTm90OiB7Cisg
ICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYg
KGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSB8fCAhY2hpbGQucHJlZGlj
dGlvbigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEJvb2xlYW4pOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNo
aWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKKyAgICAg
ICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgY2FzZSBDb21wYXJlTGVzc0Vx
OgorICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlckVxOgor
ICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAgIE5vZGUmIGxlZnQgPSBtX2dyYXBoW25vZGUu
Y2hpbGQxKCldOworICAgICAgICBOb2RlJiByaWdodCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV07
CisgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOworICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVk
aWN0SW50MzI7CisgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihs
ZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0TnVtYmVyOworICAgICAg
ICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdChsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0Rmlu
YWxPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RBcnJheTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGlj
dFRvcDsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoZmlsdGVyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU3Ry
aW5nQ2hhckF0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICBp
ZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtl
VG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeVZhbDoK
KyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBBcnJheVB1c2g6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdE51bWJlcik7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBBcnJheVBvcDoKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBCcmFuY2g6IHsKKyAgICAgICAgLy8gVGhlcmUgaXMgcHJvYmFibHkgcHJvZml0IHRvIGJlIGZv
dW5kIGluIGRvaW5nIHNwYXJzZSBjb25kaXRpb25hbCBjb25zdGFudAorICAgICAgICAvLyBwcm9w
YWdhdGlvbiwgYW5kIHRvIHRha2UgaXQgb25lIHN0ZXAgZnVydGhlciwgd2hlcmUgYSB2YXJpYWJs
ZSdzIHZhbHVlCisgICAgICAgIC8vIGlzIHNwZWNpYWxpemVkIG9uIGVhY2ggZGlyZWN0aW9uIG9m
IGEgYnJhbmNoLiBGb3Igbm93LCB3ZSBkb24ndCBkbyB0aGlzLgorICAgICAgICBOb2RlJiBjaGls
ZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkgfHwgIWNoaWxkLnByZWRpY3Rpb24oKSkKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RCb29sZWFuKTsKKyAgICAg
ICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0RmluYWxPYmpl
Y3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxh
dGVBcnJheU9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxk
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3Vs
ZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAg
IAorICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgorICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIFRvUHJpbWl0aXZlOiB7CisgICAgICAgIE5vZGUmIGNoaWxk
ID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgUHJlZGljdGVkVHlwZSB0eXBlID0gc291cmNlLm1fdHlwZTsKKyAgICAgICAg
aWYgKHR5cGUgJiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEJvb2xl
YW4pKSB7CisgICAgICAgICAgICB0eXBlICY9IChQcmVkaWN0TnVtYmVyIHwgUHJlZGljdFN0cmlu
ZyB8IFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgICAgIHR5cGUgfD0gUHJlZGljdFN0cmluZzsK
KyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbi5zZXQodHlwZSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgTmV3QXJyYXk6CisgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmFy
cmF5U3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
TmV3UmVnZXhwOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5n
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlv
biA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoaXNPYmpl
Y3RQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbgorICAg
ICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhp
bmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4s
IHlvdSBuZXZlciBrbm93LgorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChpc090
aGVyUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBzb3VyY2Uu
ZmlsdGVyKFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGlj
dE9iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAg
ICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE9iamVjdE1hc2spOworICAgICAgICAgICAg
ZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICBkZXN0aW5h
dGlvbi5tZXJnZShQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2Ug
PSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoY2hp
bGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHNvdXJjZS5maWx0
ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgIAorICAgICAgICBkZXN0aW5hdGlv
bi5zZXQoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAgICAgCisgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldENhbGxlZToKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U2NvcGVDaGFpbjoKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Q2VsbE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEdldFNjb3BlZFZhcjoKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5SWQ6CisgICAgY2FzZSBHZXRNZXRob2Q6
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAg
ICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFycmF5
TGVuZ3RoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJy
YXkpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29u
c3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihub2RlLnN0cnVjdHVyZVNldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFy
KCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlP
ZmZzZXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0aG9kOgor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1
Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5t
ZXRob2RDaGVja0RhdGFJbmRleCgpXS5zdHJ1Y3R1cmUpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgY2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxk
IGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2Uga25vdyB3aGF0IHRoZSBmdW5j
dGlvbiBpcy4KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5SWQ6
CisgICAgY2FzZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAgIC8vIEFn
YWluLCBzYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJ
bnN0YW5jZU9mCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RD
ZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdENlbGwp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUGhpOgorICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBSZXNvbHZlOgorICAgIGNhc2UgUmVzb2x2ZUJhc2U6CisgICAgY2FzZSBSZXNvbHZlQmFz
ZVN0cmljdFB1dDoKKyAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CisgICAgICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
UGhhbnRvbToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX2lzVmFs
aWQ7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMoKQoreworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7ICsraSkKKyAgICAgICAgbV9u
b2Rlc1tpXS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxl
cy5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICBtX3Zhcmlh
Ymxlcy5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworfQorCitib29sIEFic3RyYWN0U3Rh
dGU6Om1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0
VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgQWJz
dHJhY3RWYWx1ZSogc291cmNlOworICAgICAgICAKKyAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtu
b2RlSW5kZXhdOworICAgIGlmICghbm9kZS5yZWZDb3VudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgY2FzZSBQaGk6CisgICAgY2Fz
ZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gVGhlIGJsb2NrIHRyYW5zZmVycyB0aGUgdmFsdWUg
ZnJvbSBoZWFkIHRvIHRhaWwuCisgICAgICAgIHNvdXJjZSA9ICZpblZhcmlhYmxlOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6CisgICAgICAgIC8vIFRo
ZSBibG9jayByZWZpbmVzIHRoZSB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgc3BlY3VsYXRpb25zLgor
ICAgICAgICBzb3VyY2UgPSAmZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgIC8vIFRoZSBibG9jayBzZXRz
IHRoZSB2YXJpYWJsZSwgYW5kIHBvdGVudGlhbGx5IHJlZmluZXMgaXQsIGJvdGgKKyAgICAgICAg
Ly8gYmVmb3JlIGFuZCBhZnRlciBzZXR0aW5nIGl0LgorICAgICAgICBzb3VyY2UgPSAmZm9yTm9k
ZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBzb3VyY2UgPSAwOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGRlc3RpbmF0aW9uID09ICpzb3VyY2Up
IHsKKyAgICAgICAgLy8gQWJzdHJhY3QgZXhlY3V0aW9uIGRpZCBub3QgY2hhbmdlIHRoZSBvdXRw
dXQgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCBmb3IgdGhpcworICAgICAgICAvLyBiYXNpYyBibG9j
aywgb24gdGhpcyBpdGVyYXRpb24uCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
ICAgIAorICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24g
YWJvdXQgdGhlIHNwZWN1bGF0aW9ucyByZWFjaGVkIGFib3V0CisgICAgLy8gdGhpcyB2YXJpYWJs
ZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwg
YW5kIHJldHVybgorICAgIC8vIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVz
dCBnbyBvbiEKKyAgICBkZXN0aW5hdGlvbiA9ICpzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9j
ayogdG8pCit7CisgICAgQVNTRVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3Vt
ZW50cygpID09IHRvLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CisgICAg
QVNTRVJUKGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpID09IHRvLT52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgCisgICAgYm9vbCBjaGFuZ2VkID0g
ZmFsc2U7CisgICAgCisgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGZy
b20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQorICAg
ICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKHRvLT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpLCB0by0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAgCisgICAgZm9yIChzaXplX3QgbG9j
YWwgPSAwOyBsb2NhbCA8IGZyb20tPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyAr
K2xvY2FsKQorICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKHRv
LT52YWx1ZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YWx1ZXNBdFRhaWwubG9jYWwobG9j
YWwpLCB0by0+dmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKGxvY2FsKSk7CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2Jvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2Nr
KiBiYXNpY0Jsb2NrKQoreworICAgIE5vZGUmIHRlcm1pbmFsID0gZ3JhcGhbYmFzaWNCbG9jay0+
ZW5kIC0gMV07CisgICAgCisgICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7CisgICAg
CisgICAgc3dpdGNoICh0ZXJtaW5hbC5vcCkgeworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgcmV0
dXJuIG1lcmdlKGJhc2ljQmxvY2ssICZncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHRlcm1p
bmFsLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICAKKyAgICBjYXNlIEJyYW5jaDoK
KyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssICZncmFwaC5ibG9ja0ZvckJ5dGVjb2Rl
T2Zmc2V0KHRlcm1pbmFsLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpCisgICAgICAgICAgICB8IG1l
cmdlKGJhc2ljQmxvY2ssICZncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KHRlcm1pbmFsLm5v
dFRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAg
ICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBBYnN0cmFj
dFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCit7CisgICAgaWYgKGRlc3RpbmF0aW9uTm9k
ZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VS
VF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAg
ICAKKyAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29uZGl0aW9uYWwgcHJv
cGFnYXRpb24gaGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24ubWVyZ2Uoc291cmNl
KTsKK30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZHVtcChGSUxFKiBv
dXQpCit7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVzW2ldLmlzQ2xlYXIo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAg
ICBmaXJzdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcHJpbnRmKG91dCwg
IiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJAJWx1OiIsIGkgKyBtX2Jsb2NrLT5iZWdpbik7
CisgICAgICAgIG1fbm9kZXNbaV0uZHVtcChvdXQpOworICAgIH0KK30KKyNlbmRpZgorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRlX2gKKyNkZWZpbmUg
REZHQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUg
IkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERG
RyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIG5vdGlv
biBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFs
CisvLyBjb250cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdpdGggYSBmb2N1cyBvbiB0aGUgZWxp
bWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgorLy8gSXQgYWxzbyBpbXBsZW1lbnRz
IG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24gdGhhdCBz
dWNoIGFuCisvLyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIHVzZWQg
aW4gdHdvIGlkaW9tczoKKy8vCisvLyAxKSBQZXJmb3JtaW5nIHRoZSBDRkEuIEluIHRoaXMgY2Fz
ZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgYWxsIGJhc2ljCisvLyAgICBibG9j
a3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyByZWFjaGVkLiBDb252ZXJnZW5jZSBp
cyBkZWZpbmVkIGJ5CisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9T
dWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBibG9ja3MuCisvLworLy8gMikgUmVt
YXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlvdXNseSBleGVjdXRlZCBDRkEuIElu
IHRoaXMgY2FzZSwKKy8vICAgIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1biBvdmVyIHdoYXRl
dmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGluIHVwCisvLyAgICB0byB0aGUgcG9p
bnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0byBpbnRlcnJvZ2F0ZSB0aGUga25v
d24gdHlwZQorLy8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBBdCB0aGlzIHBvaW50IGl0J3Mgc2Fm
ZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGlyZWx5LAorLy8gICAgY2FsbCByZXNl
dCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxvY2sgYW5kIGNhbGwK
Ky8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6RG9udE1lcmdlKS4gVGhlIGxhdHRl
ciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UKKy8vICAgIGl0IHBlcmZvcm1zIHNvbWUgdXNlZnVs
IGludGVncml0eSBjaGVja3MuCisvLworLy8gQWZ0ZXIgdGhlIENGQSBpcyBydW4sIHRoZSBpbnRl
ci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMgYW5kIHRhaWxzIG9mIGFsbAorLy8g
YmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEtYmxvY2sgc3RhdGUgdG8gYmUgcmVt
YXRlcmlhbGl6ZWQgYnkganVzdAorLy8gZXhlY3V0aW5nIHRoZSBDRkEgZm9yIHRoYXQgYmxvY2su
IElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3RhdGUgb25seSwgdGhlbgorLy8geW91
IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2NrOjptX3ZhbHVlc0F0SGVhZCBvciBt
X3ZhbHVlc0F0VGFpbCBmaWVsZHMuCisvLworLy8gUnVubmluZyB0aGlzIGFuYWx5c2lzIGludm9s
dmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXItYmxvY2sgc3RhdGUKKy8vIG1lcmdp
bmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50OgorLy8KKy8vIEFic3RyYWN0U3RhdGUgc3RhdGUo
Y29kZUJsb2NrLCBncmFwaCk7CisvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmFzaWNCbG9jayk7
CisvLyBib29sIGVuZFJlYWNoZWQgPSB0cnVlOworLy8gZm9yIChOb2RlSW5kZXggaWR4ID0gYmFz
aWNCbG9jay5iZWdpbjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7CisvLyAgICAgaWYg
KCFzdGF0ZS5leGVjdXRlKGlkeCkpCisvLyAgICAgICAgIGJyZWFrOworLy8gfQorLy8gYm9vbCBy
ZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVyZ2Ugb3IgRG9udE1lcmdlPik7
CisKK2NsYXNzIEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIGVudW0gTWVyZ2VNb2RlIHsK
KyAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCBi
YXNpYyBibG9ja3MuCisgICAgICAgIERvbnRNZXJnZSwKKyAgICAgICAgCisgICAgICAgIC8vIE1l
cmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2lj
CisgICAgICAgIC8vIGJsb2NrIGJlaW5nIGFuYWx5emVkLgorICAgICAgICBNZXJnZVRvVGFpbCwK
KyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdp
dGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrLCBhbmQgd2l0aCB0aGUg
aGVhZHMgb2Ygc3VjY2Vzc29yIGJsb2Nrcy4KKyAgICAgICAgTWVyZ2VUb1N1Y2Nlc3NvcnMKKyAg
ICB9OworICAgIAorICAgIEFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiwgR3JhcGgmKTsKKyAgICAK
KyAgICB+QWJzdHJhY3RTdGF0ZSgpOworICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUo
Tm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbbm9kZUluZGV4IC0gbV9i
bG9jay0+YmVnaW5dOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lu
bmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCisgICAgLy8gYXJn
dW1lbnRzLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBcmd1bWVudHMoR3JhcGgmKTsKKwor
ICAgIC8vIFN0YXJ0IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRoZSBnaXZlbiBiYXNpYyBibG9jay4g
SW5pdGlhbGl6ZXMgdGhlCisgICAgLy8gbm90aW9uIG9mIGFic3RyYWN0IHN0YXRlIHRvIHdoYXQg
d2UgYmVsaWV2ZSBpdCB0byBiZSBhdCB0aGUgaGVhZAorICAgIC8vIG9mIHRoZSBiYXNpYyBibG9j
aywgYWNjb3JkaW5nIHRvIHRoZSBiYXNpYyBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4KKyAgICB2
b2lkIGJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKik7CisgICAgCisgICAgLy8gRmluaXNoIGFi
c3RyYWN0bHkgZXhlY3V0aW5nIGEgYmFzaWMgYmxvY2suIElmIE1lcmdlVG9UYWlsIG9yCisgICAg
Ly8gTWVyZ2VUb1N1Y2Nlc3NvcnMgaXMgcGFzc2VkLCB0aGVuIHRoaXMgbWVyZ2VzIGV2ZXJ5dGhp
bmcgd2UgaGF2ZQorICAgIC8vIGxlYXJuZWQgYWJvdXQgaG93IHRoZSBzdGF0ZSBjaGFuZ2VzIGR1
cmluZyB0aGlzIGJsb2NrJ3MgZXhlY3V0aW9uIGludG8KKyAgICAvLyB0aGUgYmxvY2sncyBkYXRh
IHN0cnVjdHVyZXMuIFRoZXJlIGFyZSB0aHJlZSByZXR1cm4gbW9kZXMsIGRlcGVuZGluZworICAg
IC8vIG9uIHRoZSB2YWx1ZSBvZiBtZXJnZU1vZGU6CisgICAgLy8KKyAgICAvLyBEb250TWVyZ2U6
CisgICAgLy8gICAgQWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgLy8KKyAgICAvLyBNZXJnZVRv
VGFpbDoKKyAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBh
dCB0aGUgdGFpbCB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBUaGlzIG1lYW5zIHRoYXQgeW91IG11
c3QgY2FsbCBtZXJnZVRvU3VjY2Vzc29ycygpLCBhbmQgaWYgdGhhdAorICAgIC8vICAgIHJldHVy
bnMgdHJ1ZSwgdGhlbiB5b3UgbXVzdCByZXZpc2l0IChhdCBsZWFzdCkgdGhlIHN1Y2Nlc3Nvcgor
ICAgIC8vICAgIGJsb2Nrcy4gRmFsc2Ugd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQgaWYgdGhlIGJs
b2NrIGlzIHRlcm1pbmFsCisgICAgLy8gICAgKGkuZS4gZW5kcyBpbiBUaHJvdyBvciBSZXR1cm4s
IG9yIGhhcyBhIEZvcmNlT1NSRXhpdCBpbnNpZGUgaXQpLgorICAgIC8vCisgICAgLy8gTWVyZ2VU
b1N1Y2Nlc3NvcnM6CisgICAgLy8gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGUg
YmxvY2sgYXQgdGhlIHRhaWwgd2FzIGNoYW5nZWQsCisgICAgLy8gICAgYW5kLCBpZiB0aGUgc3Rh
dGUgYXQgdGhlIGhlYWRzIG9mIHN1Y2Nlc3NvcnMgd2FzIGNoYW5nZWQuCisgICAgLy8gICAgQSB0
cnVlIHJldHVybiBtZWFucyB0aGF0IHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUgc3Vj
Y2Vzc29yCisgICAgLy8gICAgYmxvY2tzLgorICAgIGJvb2wgZW5kQmFzaWNCbG9jayhNZXJnZU1v
ZGUpOworICAgIAorICAgIC8vIFJlc2V0IHRoZSBBYnN0cmFjdFN0YXRlLiBUaGlzIHRocm93cyBh
d2F5IGFueSByZXN1bHRzLCBhbmQgYXQgdGhpcyBwb2ludAorICAgIC8vIHlvdSBjYW4gc2FmZWx5
IGNhbGwgYmVnaW5CYXNpY0Jsb2NrKCkgb24gYW55IGJhc2ljIGJsb2NrLgorICAgIHZvaWQgcmVz
ZXQoKTsKKyAgICAKKyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGVzIHRoZSBnaXZlbiBub2RlLiBU
aGUgbmV3IGFic3RyYWN0IHN0YXRlIGlzIHN0b3JlZCBpbnRvIGFuCisgICAgLy8gYWJzdHJhY3Qg
cmVnaXN0ZXIgZmlsZSBzdG9yZWQgaW4gKnRoaXMuIExvYWRzIG9mIGxvY2FsIHZhcmlhYmxlcyAo
dGhhdCBzcGFuCisgICAgLy8gYmFzaWMgYmxvY2tzKSBpbnRlcnJvZ2F0ZSB0aGUgYmFzaWMgYmxv
Y2sncyBub3Rpb24gb2YgdGhlIHN0YXRlIGF0IHRoZSBoZWFkLgorICAgIC8vIFN0b3JlcyB0byBs
b2NhbCB2YXJpYWJsZXMgYXJlIGhhbmRsZWQgaW4gZW5kQmFzaWNCbG9jaygpLiBUaGlzIHJldHVy
bnMgdHJ1ZQorICAgIC8vIGlmIGV4ZWN1dGlvbiBzaG91bGQgY29udGludWUgcGFzdCB0aGlzIG5v
ZGUuIE5vdGFibHksIGl0IHdpbGwgcmV0dXJuIHRydWUKKyAgICAvLyBmb3IgYmxvY2sgdGVybWlu
YWxzLCBzbyBsb25nIGFzIHRob3NlIHRlcm1pbmFscyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50
cworICAgIC8vIG9mIFRocm93LgorICAgIGJvb2wgZXhlY3V0ZShOb2RlSW5kZXgpOworICAgIAor
ICAgIC8vIElzIHRoZSBleGVjdXRpb24gc3RhdGUgc3RpbGwgdmFsaWQ/IFRoaXMgd2lsbCBiZSBm
YWxzZSBpZiBleGVjdXRlKCkgaGFzCisgICAgLy8gcmV0dXJuZWQgZmFsc2UgcHJldmlvdXNseS4K
KyAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICAKKyAg
ICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBmaXJzdCBibG9jaydz
IHRhaWwgaW50byB0aGUgc2Vjb25kCisgICAgLy8gYmxvY2sncyBoZWFkLiBSZXR1cm5zIHRydWUg
aWYgdGhlIHNlY29uZCBibG9jaydzIHN0YXRlIGNoYW5nZWQuIElmIHNvLAorICAgIC8vIHRoYXQg
YmxvY2sgbXVzdCBiZSBhYnN0cmFjdGx5IGludGVycHJldGVkIGFnYWluLgorICAgIHN0YXRpYyBi
b29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKyAgICAKKyAgICAv
LyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBibG9jaydzIHRhaWwgaW50
byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0
aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAvLyB0aGF0IHRoaXMgaXMg
YXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1lcmdlTW9kZSBpcwor
ICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIHN0YXRpYyBib29sIG1lcmdlVG9TdWNjZXNz
b3JzKEdyYXBoJiwgQmFzaWNCbG9jayopOworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVt
cChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xvYmJlclN0
cnVjdHVyZXMoKTsKKyAgICAKKyAgICBib29sIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCk7Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RW
YWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3Rp
bmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsKKyAgICAKKyAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEdyYXBoJiBtX2dyYXBoOworICAgIAorICAgIFZl
Y3RvcjxBYnN0cmFjdFZhbHVlLCAzMj4gbV9ub2RlczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiBtX3ZhcmlhYmxlczsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIAorICAgIGJv
b2wgbV9pc1ZhbGlkOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFN0YXRlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFZhbHVlX2gKKyNkZWZpbmUg
REZHQWJzdHJhY3RWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCisjaW5jbHVkZSAi
SlNDZWxsLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgeworcHVibGlj
OgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQorICAgICAgICA6IG1faXNUb3AoZmFsc2Up
CisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IG1fc2V0KHN0cnVjdHVyZSkKKyAgICAgICAgLCBtX2lz
VG9wKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZShjb25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICAgICAgOiBtX3NldChzZXQpCisgICAgICAg
ICwgbV9pc1RvcChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgbV9zZXQuY2xlYXIoKTsKKyAgICAgICAgbV9pc1RvcCA9IGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV9zZXQuY2xl
YXIoKTsKKyAgICAgICAgbV9pc1RvcCA9IHRydWU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIHZhbHVlOworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7CisgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIW1faXNUb3Ap
OworICAgICAgICBtX3NldC5hZGQoc3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBh
ZGRBbGwoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChtX2lz
VG9wKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9zZXQuYWRk
QWxsKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhZGRBbGwoY29uc3QgU3RydWN0dXJl
QWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAobV9pc1RvcCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyLm1faXNUb3ApIHsKKyAgICAg
ICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX3NldC5hZGRBbGwob3RoZXIubV9zZXQpOworICAgIH0KKyAgICAKKyAg
ICBib29sIGNvbnRhaW5zKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJu
IG1fc2V0LmNvbnRhaW5zKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJz
ZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3Nl
dC5pc1N1YnNldE9mKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBkb2VzTm90Q29udGFp
bkFueU90aGVyVGhhbihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX2lzVG9wIHx8IG1fc2V0LnNpemUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGlmICghbV9zZXQuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBtX3NldFswXSA9PSBzdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9pc1RvcCkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbV9zZXQuaXNTdXBlcnNldE9mKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKG90aGVyLm1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKG1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBtX3NldC5pc1N1YnNldE9mKG90aGVyLm1fc2V0KTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAobV9pc1RvcCkgeworICAgICAgICAgICAgbV9zZXQgPSBvdGhlcjsK
KyAgICAgICAgICAgIG1faXNUb3AgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zZXQubV9zdHJ1Y3R1cmVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAob3RoZXIuY29udGFpbnMobV9zZXQubV9zdHJ1
Y3R1cmVzW2ldKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9zZXQubV9zdHJ1Y3R1cmVzW2ldID0gbV9zZXQubV9zdHJ1Y3R1cmVzLmxhc3Qo
KTsKKyAgICAgICAgICAgIG1fc2V0Lm1fc3RydWN0dXJlcy5yZW1vdmVMYXN0KCk7CisgICAgICAg
ICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IGNoYW5nZWQ7CisgICAgfQorICAgIAorICAgIGJvb2wgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLm1faXNUb3ApCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBmaWx0ZXIob3RoZXIubV9z
ZXQpOworICAgIH0KKyAgICAKKyAgICBib29sIGZpbHRlcihQcmVkaWN0ZWRUeXBlIG90aGVyKQor
ICAgIHsKKyAgICAgICAgaWYgKCEob3RoZXIgJiBQcmVkaWN0Q2VsbCkpIHsKKyAgICAgICAgICAg
IGlmIChpc0NsZWFyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAobV9pc1RvcCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3NldC5tX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIFByZWRpY3RlZFR5cGUgc3RydWN0dXJlUHJlZGljdGlvbiA9IHByZWRpY3Rpb25G
cm9tU3RydWN0dXJlKG1fc2V0Lm1fc3RydWN0dXJlc1tpXSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmIChzdHJ1Y3R1cmVQcmVkaWN0aW9uICYgb3RoZXIpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fc2V0Lm1fc3RydWN0dXJlc1tp
XSA9IG1fc2V0Lm1fc3RydWN0dXJlcy5sYXN0KCk7CisgICAgICAgICAgICBtX3NldC5tX3N0cnVj
dHVyZXMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIH0KKyAgICAKKyAgICBi
b29sIGlzQ2xlYXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1RvcCgpICYmICFz
aXplKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX2lz
VG9wOyB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2lzVG9wKTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LnNpemUoKTsKKyAgICB9CisgICAg
CisgICAgU3RydWN0dXJlKiBhdChzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9pc1RvcCk7CisgICAgICAgIHJldHVybiBtX3NldC5hdChpKTsKKyAgICB9CisgICAgCisg
ICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFtX2lzVG9wKTsKKyAgICAgICAgcmV0dXJuIGF0KGkpOworICAgIH0KKyAgICAKKyAg
ICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2lzVG9w
KTsKKyAgICAgICAgcmV0dXJuIG1fc2V0Lmxhc3QoKTsKKyAgICB9CisgICAgCisgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1faXNUb3ApCisgICAgICAgICAgICByZXR1cm4gUHJlZGljdENlbGw7CisgICAgICAgIHJl
dHVybiBtX3NldC5wcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1faXNUb3AgIT0gb3RoZXIubV9pc1RvcCkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG1faXNUb3ApCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0ID09IG90aGVyLm1fc2V0OworICAgIH0KKyAg
ICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAg
ICAgIGlmIChtX2lzVG9wKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fc2V0LnNpemUoKSk7Cisg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIlRPUCIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NldC5kdW1wKG91dCk7CisgICAgfQorI2VuZGlm
CisKK3ByaXZhdGU6CisgICAgU3RydWN0dXJlU2V0IG1fc2V0OworICAgIGJvb2wgbV9pc1RvcDsK
K307CisKK3N0cnVjdCBBYnN0cmFjdFZhbHVlIHsKKyAgICBBYnN0cmFjdFZhbHVlKCkKKyAgICAg
ICAgOiBtX3R5cGUoUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IFByZWRpY3ROb25lOworICAgICAgICBtX3N0
cnVjdHVyZS5jbGVhcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5pc0Ns
ZWFyKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBt
X3R5cGUgPSBQcmVkaWN0VG9wOworICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fdHlwZSAmIFByZWRpY3RDZWxsKSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChtX3N0cnVjdHVyZS5pc0NsZWFyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG9w
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdFRvcCAmJiBt
X3N0cnVjdHVyZS5pc1RvcCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQWJzdHJhY3RWYWx1
ZSB0b3AoKQorICAgIHsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tYWtlVG9wKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVh
cigpOworICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBtX3N0cnVjdHVy
ZS5hZGQodmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgCisgICAgICAgIG1f
dHlwZSA9IHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IHNldChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlLmNs
ZWFyKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAKKyAg
ICAgICAgbV90eXBlID0gcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXQoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
aWYgKHR5cGUgJiBQcmVkaWN0Q2VsbCkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3Ao
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAg
ICAgbV90eXBlID0gdHlwZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlw
ZSA9PSBvdGhlci5tX3R5cGUgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgbWVyZ2UoY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBl
KSB8IG1fc3RydWN0dXJlLmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbWVyZ2UoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbWVyZ2VQ
cmVkaWN0aW9uKG1fdHlwZSwgdHlwZSk7CisgICAgICAgIAorICAgICAgICBpZiAodHlwZSAmIFBy
ZWRpY3RDZWxsKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgbV90eXBlICY9IG90aGVyLnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpOworICAgICAg
ICBtX3N0cnVjdHVyZS5maWx0ZXIob3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRl
cihQcmVkaWN0ZWRUeXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSBQcmVkaWN0
VG9wKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX3R5cGUgJj0gdHlwZTsKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKHR5cGUpOworICAgIH0KKyAgICAKKyAgICBib29sIHZhbGlk
YXRlKEpTVmFsdWUgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobWVyZ2VQcmVkaWN0
aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNDZWxs
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAg
ICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3R5cGUpKTsK
KyAgICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBmcHJpbnRmKG91dCwgIiki
KTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1
cmU7CisgICAgUHJlZGljdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3Ry
YWN0VmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYXNpY0Jsb2NrX2gKKyNk
ZWZpbmUgREZHQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZH
T3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgdWludDMy
X3QgQmxvY2tJbmRleDsKKwordHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vz
c29yTGlzdDsKKworc3RydWN0IEJhc2ljQmxvY2sgeworICAgIEJhc2ljQmxvY2sodW5zaWduZWQg
Ynl0ZWNvZGVCZWdpbiwgTm9kZUluZGV4IGJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVu
c2lnbmVkIG51bUxvY2FscykKKyAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4p
CisgICAgICAgICwgYmVnaW4oYmVnaW4pCisgICAgICAgICwgZW5kKE5vTm9kZSkKKyAgICAgICAg
LCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1l
bnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywg
bnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2Fs
cykKKyAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgQmxvY2tJbmRleCBnZXRCeXRlY29kZUJlZ2lu
KE93blB0cjxCYXNpY0Jsb2NrPiogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4gKCpibG9j
ayktPmJ5dGVjb2RlQmVnaW47CisgICAgfQorCisgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsK
KyAgICBOb2RlSW5kZXggYmVnaW47CisgICAgTm9kZUluZGV4IGVuZDsKKyAgICBib29sIGlzT1NS
VGFyZ2V0OworCisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIAorICAg
IE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7Cisg
ICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0VGFpbDsK
KyAgICAKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CisgICAgT3Bl
cmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdC
YXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsx
MjUsNyBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFi
b3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAgIE5vZGVJbmRl
eCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZTsK
KyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwob3BlcmFuZCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUp
IHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBAIC0xNDQs
MTUgKzE0NCwxNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFw
aChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0
YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsK
ICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFp
bFtvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAgCi0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVhZFtvcGVyYW5kXS5zZXRGaXJzdFRpbWUo
bm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRM
b2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5k
LCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2Nh
bHNBdFRhaWxbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3
VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gYWRkVG9HcmFwaChTZXRMb2Nh
bCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9
CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhl
IG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNT
RVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVl
OworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBO
b05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBA
IC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9j
YWwgdG8gdGhlIFNldEFyZ3VtZW50LgogICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2Fs
KCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CiAgICAgICAgICAg
ICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFi
bGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAg
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTg2LDkgKzE4Niw5IEBAIHByaXZhdGU6CiAg
ICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKICAgICAgICAgbm9kZUluZGV4ID0g
YWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0g
ICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJn
dW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUobm9kZUluZGV4
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZp
cnN0VGltZShhcmd1bWVudCwgbm9kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBu
b2RlSW5kZXg7CiAgICAgfQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVu
c2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMg
KyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1
bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1
bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZv
KG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBhZGRUb0dyYXBo
KFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUp
OwogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIv
VG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KQEAgLTc4Myw4ICs3ODMsOCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGZvciAodW5zaWduZWQgYXJn
dW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAg
ICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBP
cEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVt
UGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKICAgICAg
ICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZp
cnN0VGltZShzZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1
bWVudHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1l
KGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFy
aWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2ODksMTYgKzE2ODksMTYgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7
CiAKLSAgICAgICAgICAgIFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3Vt
ZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbdmFyTm9d
IDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdFRhaWxbdmFyTm9dOworICAgICAgICAgICAg
Tm9kZUluZGV4JiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVj
ZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vzc29y
QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7CiAKLSAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7CisgICAgICAgICAgICBOb2RlSW5k
ZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwogICAgICAgICAgICAgaWYgKHZhbHVlSW5QcmVk
ZWNlc3NvciA9PSBOb05vZGUpIHsKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3Ig
PSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUg
PT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSA6IHZhck5vKSkpOwotICAgICAg
ICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAg
ICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNl
c3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFt2YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5Q
cmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29y
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29y
QmxvY2stPm1fbG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vz
c29yKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRI
ZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAg
ICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ss
IHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9n
cmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICAg
ICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUg
aWRlbnRpY2FsIGJldHdlZW4gdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklU
KQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgog
I2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2lu
Y2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgpAQCAtNDMsMjkgKzQ0LDYgQEAgY2xhc3MgRXhlY1N0YXRl
OwogCiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNo
IHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJ
c0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi10eXBlZGVm
IHVpbnQzMl90IEJsb2NrSW5kZXg7Ci0KLS8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3ZSB0
cmFjayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCi0vLyBXZSB0cmFjayB0
aGUgZ2V0IHNvIHRoYXQgdGhlc2UgbWF5IGJlIHNoYXJlZCwgYW5kIHdlIHRyYWNrIHRoZSBzZXQg
dG8KLS8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgdG8gcmVmZXJlbmNlIHRoZSBm
aW5hbCBkZWZpbml0aW9uLgotc3RydWN0IFZhcmlhYmxlUmVjb3JkIHsKLSAgICBWYXJpYWJsZVJl
Y29yZCgpCi0gICAgICAgIDogdmFsdWUoTm9Ob2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAg
dm9pZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVCh2YWx1ZSA9PSBOb05vZGUpOwotICAgICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKLSAgICB9
Ci0KLSAgICBOb2RlSW5kZXggdmFsdWU7Ci19OwotCiBzdHJ1Y3QgTWV0aG9kQ2hlY2tEYXRhIHsK
ICAgICAvLyBJdCBpcyBzYWZlIHRvIHJlZmVyIHRvIHRoZXNlIGRpcmVjdGx5IGJlY2F1c2UgdGhl
eSBhcmUgc2hhZG93ZWQgYnkKICAgICAvLyB0aGUgb2xkIEpJVCdzIENvZGVCbG9jaydzIE1ldGhv
ZENhbGxMaW5rSW5mby4KQEAgLTExMSw0MCArODksNiBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERh
dGEgewogICAgIHVuc2lnbmVkIHJlc29sdmVJbmZvSW5kZXg7CiB9OwogCi10eXBlZGVmIFZlY3Rv
ciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0OwotCi1zdHJ1Y3QgQmFzaWNCbG9jayB7
Ci0gICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4s
IHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQotICAgICAgICA6IGJ5
dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBiZWdpbihiZWdpbikKLSAgICAg
ICAgLCBlbmQoTm9Ob2RlKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAs
IG1fYXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fsc0F0SGVh
ZChudW1Mb2NhbHMpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQot
ICAgICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxvY2FscykKLSAgICB7Ci0gICAgfQotCi0gICAg
c3RhdGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxv
Y2s+KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdp
bjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOwotICAgIE5vZGVJbmRleCBi
ZWdpbjsKLSAgICBOb2RlSW5kZXggZW5kOwotICAgIGJvb2wgaXNPU1JUYXJnZXQ7Ci0KLSAgICBQ
cmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7Ci0gICAgCi0gICAgVmVjdG9yPFZhcmlhYmxl
UmVjb3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQs
IDE2PiBtX2xvY2Fsc0F0SGVhZDsKLSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+
IG1fYXJndW1lbnRzQXRUYWlsOwotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9j
YWxzQXRUYWlsOwotfTsKLQogLy8gCiAvLyA9PT0gR3JhcGggPT09CiAvLwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9u
IDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzOTMsNiArMTM5MywxMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIH0KICAgICB9CiAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS5nZXQoKTsKKyAgICB9CisKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKGNvbnN0IGNoYXIqIGxhYmVsID0gMCk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJl
dmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsMjMgKzQwMiw3IEBAIHB1YmxpYzoKICNpZiBFTkFC
TEUoREZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9j
aygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBkaWZm
ZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CiAgICAgICAgIAotICAgICAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2su
bV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUo
KSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1
bWVudHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOwotICAgICAgICAgICAg
aWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRp
Y3Rpb25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5
cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkp
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOwot
ICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgYWN0
aW9uYWJsZVByZWRpY3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJv
bVByZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5w
cmVkaWN0aW9uKCkpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYWN0aW9uYWJsZVBy
ZWRpY3Rpb25zLnBhY2soKTsKLSAgICAgICAgCi0gICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25z
ID0gYWN0aW9uYWJsZVByZWRpY3Rpb25zOworICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVl
cyA9IGJhc2ljQmxvY2sudmFsdWVzQXRIZWFkOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFN
KGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDggQEAKICNpZm5kZWYgREZHTm9kZV9oCiAj
ZGVmaW5lIERGR05vZGVfaAogCi0jaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVk
ZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
Ci0jaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBp
bmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cg
Z3JhcGhzLgogI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtNjcsNiArNjUs
OCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5j
bHVkZSAiREZHT3BlcmFuZHMuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIK
ICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1
ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtNzQsMTUgKzc0LDE0IEBACiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKIAotLy8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJl
ciAoc3BpbGwgbG9jYXRpb24pLgotLy8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlwZS1j
aGVja2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCi1lbnVt
IFZpcnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OwotQ09NUElM
RV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxS
ZWdpc3Rlcl9pc18zMmJpdCk7Ci0KIC8vIFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIg
bm9kZSBpbiB0aGUgZ3JhcGguCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBj
b25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKK3N0cnVjdCBOb2RlSW5kZXhUcmFp
dHMgeworICAgIHN0YXRpYyBOb2RlSW5kZXggZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2Rl
OyB9Cit9OworCiAvLyBJbmZvcm1hdGlvbiB1c2VkIHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0
aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZvcm1hdGlvbiwKIC8vIGFuZCB0byBpbXBsZW1l
bnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1lbnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4K
QEAgLTExMCw1MSArMTA5LDYgQEAgcHJpdmF0ZToKICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5k
ZXg7CiB9OwogCi1jbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFy
aWFibGVBY2Nlc3NEYXRhPiB7Ci1wdWJsaWM6Ci0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAg
ICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25l
KQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKLSAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQotICAgICAgICAsIG1fcHJlZGlj
dGlvbihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCgpCi0gICAgewotICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9j
YWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsKLSAgICB9Ci0gICAgCi0gICAgaW50IG9wZXJh
bmQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7Ci0g
ICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0g
ICAgewotICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9u
LCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0gICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKLSAgICB9Ci0g
ICAgCi1wcml2YXRlOgotICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQs
IHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAotICAgIC8vIHdpbGwgaGF2ZSB0aGUg
c2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKLSAg
ICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3Qg
ZXhwZWN0IERGRyBzcGFjZQotICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMg
ZG8gYmUgc2lnbmlmaWNhbnQuCi0KLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBQ
cmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKLX07Ci0KIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0
aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2aW91c1N0cnVjdHVyZTsKICAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZTsKQEAgLTU2NCw2ICs1MTgsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
CiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKKyAg
ICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlQWNjZXNzRGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NEYXRhKj4obV9vcEluZm8pLT5maW5kKCk7CiAg
ICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
bnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDM0ICs3NywzNiBAQCB2b2lkKiBwcmVwYXJl
T1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5
IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAog
ICAgIC8vICAgIE9TUiBhdCB0aGlzIHRpbWUuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsK
LSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRp
Y3Rpb25zLmFyZ3VtZW50KGkpOwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGkgPj0g
ZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09T
UikKICAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAl
dSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgJXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlv
blRvU3RyaW5nKHByZWRpY3Rpb24pKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xv
YmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBK
U1ZhbHVlIHZhbHVlOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgdmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVl
ID0gZXhlYy0+YXJndW1lbnQoYXJndW1lbnQgLSAxKTsKKyAgICAgICAgCisgICAgICAgIGlmICgh
ZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLnZhbGlkYXRlKHZhbHVl
KSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYoIiAg
ICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxuIiwg
aSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0
aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFs
dWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5h
cmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4i
KTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlh
YmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJl
ZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOwotICAgICAgICBpZiAo
cHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2JhbERh
dGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsKKyAgICBm
b3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVt
YmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVk
VmFsdWVzLmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNW
YWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmlu
dGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVkICVz
LlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCksIGFj
dGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICAgICAgcHJp
bnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAi
LCBsb2NhbCwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigp
KTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5kdW1w
KHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRW50cnkuaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5kZWYg
REZHT1NSRW50cnlfaAogI2RlZmluZSBERkdPU1JFbnRyeV9oCiAKLSNpbmNsdWRlICJBY3Rpb25h
YmxlUHJlZGljdGlvbi5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRl
ICJERkdPcGVyYW5kcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksNyArNDAsNyBAQCBu
YW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAgIHVuc2lnbmVkIG1fYnl0
ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OwotICAgIEFjdGlv
bmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOworICAgIE9wZXJhbmRzPEFic3RyYWN0VmFs
dWU+IG1fZXhwZWN0ZWRWYWx1ZXM7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50cnlE
YXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgREZHT3BlcmFuZHNfaAorI2RlZmluZSBERkdPcGVyYW5kc19oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIGhlbHBlciBm
dW5jdGlvbiB0byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMu
CitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3Bl
cmFuZCA8IDA7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1ZVRy
YWl0czsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHMg
eworICAgIHN0YXRpYyBUIGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIFQoKTsgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzID0gT3BlcmFuZFZhbHVlVHJhaXRzPFQ+
ID4KK2NsYXNzIE9wZXJhbmRzIHsKK3B1YmxpYzoKKyAgICBPcGVyYW5kcygpIHsgfQorICAgIAor
ICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1Mb2Nh
bHMpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5maWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVl
KCksIG51bUFyZ3VtZW50cyk7CisgICAgICAgIG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZhdWx0
VmFsdWUoKSwgbnVtTG9jYWxzKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9mQXJn
dW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgc2l6ZV90
IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHMuc2l6ZSgpOyB9CisgICAg
CisgICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9hcmd1bWVudHNbaWR4XTsg
fQorICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fYXJn
dW1lbnRzW2lkeF07IH0KKyAgICAKKyAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVybiBt
X2xvY2Fsc1tpZHhdOyB9CisgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQorICAgIAorICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90IGlk
eCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxzLnNp
emUoKSkgeworICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fscy5zaXplKCk7Cisg
ICAgICAgICAgICBtX2xvY2Fscy5yZXNpemUoaWR4ICsgMSk7CisgICAgICAgICAgICBmb3IgKHNp
emVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
ICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbV9sb2NhbHNbaWR4XSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0gPT0gVHJhaXRzOjpkZWZhdWx0VmFs
dWUoKSk7CisgICAgICAgIGFyZ3VtZW50KGlkeCkgPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRMb2NhbEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpIHx8IG1fbG9jYWxzW2lkeF0g
PT0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIHNldExvY2FsKGlkeCwgdmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAgICAg
ICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJn
dW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3VtZW50
XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW29wZXJhbmRd
OworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBjb25zdCB7
IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhpcykt
Pm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgCisgICAgdm9pZCBzZXRPcGVyYW5kKGludCBvcGVy
YW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVu
dChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJn
dW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAg
ICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRMb2NhbChvcGVyYW5kLCB2YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYXJn
dW1lbnRzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fbG9jYWxzW2ld
ID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZl
Y3RvcjxULCA4PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VCwgMTY+IG1fbG9jYWxzOworfTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZHVtcE9wZXJhbmRzKE9wZXJhbmRzPFQ+JiBv
cGVyYW5kcywgRklMRSogb3V0KQoreworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBvcGVyYW5kcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAg
ICAgIGlmIChhcmd1bWVudCkKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAgICAg
ICBvcGVyYW5kcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChvdXQpOworICAgIH0KKyAgICBmcHJp
bnRmKG91dCwgIiA6ICIpOworICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBvcGVy
YW5kcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgIGlmIChsb2NhbCkKKyAg
ICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAgICAgICBvcGVyYW5kcy5sb2NhbChsb2Nh
bCkuZHVtcChvdXQpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPcGVyYW5kc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2aXNp
b24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgog
I2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5oPgpA
QCAtNTUsNDUgKzU2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpeHBvaW50KCkKICAgICB7CiAj
aWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgIG1fZ3JhcGguZHVt
cChtX2NvZGVCbG9jayk7CisgICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9jayk7CiAjZW5k
aWYKIAotI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAg
bV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9jaGFuZ2Vk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQg
d2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0IHRoYXQgdG8gYmUKLSAgICAg
ICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KLSAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9k
ZUZsYWdzQmFja3dhcmQoKTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxz
ZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzRm9yd2FyZCgpOwotICAgICAg
ICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAgICAg
IGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICAvLyBGb3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXItb3B0aW1hbCBmb3IgYm90aCB0
b3BvbG9naWNhbGx5LXNvcnRlZCBhbmQKLSAgICAgICAgICAgIC8vIERGUy1zb3J0ZWQgY29kZS4K
LSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zRm9yd2FyZCgpOwotICAgICAgICAgICAg
aWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2Qg
dGhhdCBwYXRob2xvZ2ljYWwgY29kZSB3aWxsCi0gICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVz
cy4gTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cu
Ci0gICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0
ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAotICAgICAgICAgICAgLy8gZm91bmQgYSBzb3Vu
ZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCi0gICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25z
QmFja3dhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCisgICAg
ICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKCk7CisgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rp
b25zKCk7CiAgICAgICAgIGZpeHVwKCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTExMCw2ICs3NywxMyBAQCBwdWJsaWM6CiAKICAgICAg
ICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgdmlydHVhbCBy
ZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9j
ayk7CisjZW5kaWYKKworICAgICAgICBnbG9iYWxDRkEoKTsKKwogI2lmIEVOQUJMRShERkdfREVC
VUdfVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbjpcbiIp
OwogICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpAQCAtMjc0LDYgKzI0OCwyNSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MobV9ncmFwaFtt
X2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUFyaXRoTm9k
ZUZsYWdzKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAgICAgICBkbyB7CisgICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVXAgaGVy
ZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dhcmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhhdCB0
byBiZQorICAgICAgICAgICAgLy8gbW9yZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgcHJvcGFn
YXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJk
KCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgfQorICAgIAogICAgIGJvb2wg
c2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAgICAgICBB
U1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOwpAQCAtNjA4LDcgKzYw
MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBwcmVkaWN0aW9uVG9TdHJpbmco
bV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSk7CisgICAgICAgIHByaW50Zigi
JXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0
aW9uKCkpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5nZWQ7
CkBAIC02MzIsNiArNjI1LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwcm9wYWdhdGVOb2Rl
UHJlZGljdGlvbnMobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKKyAgICB2
b2lkIHByb3BhZ2F0ZVByZWRpY3Rpb25zKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGgg
dG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUu
CisgICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKKyAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29k
IHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAorICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25l
c3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93
LgorICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRl
dGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKKyAgICAgICAgICAgIC8vIGZvdW5kIGEgc291
bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgorICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9u
c0JhY2t3YXJkKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgfQorICAgIAog
ICAgIHZvaWQgdG9Eb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAgIGlm
IChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikgewpAQCAtMTQyNCw2ICsx
NDQwLDY4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxsZWVS
ZWdpc3RlcnMgPSBjYWxsZWVSZWdpc3RlcnM7CiAgICAgfQogICAgIAorICAgIHZvaWQgcGVyZm9y
bUJsb2NrQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisg
ICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJ
bmRleF0uZ2V0KCk7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQor
ICAgICAgICBwcmludGYoIiAgIEJsb2NrICMldSAoYmMjJXUpOlxuIiwgYmxvY2tJbmRleCwgYmxv
Y2stPmJ5dGVjb2RlQmVnaW4pOworI2VuZGlmCisgICAgICAgIHN0YXRlLmJlZ2luQmFzaWNCbG9j
ayhibG9jayk7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICBwcmludGYoIiAgICAgIGhlYWQgdmFyczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhi
bG9jay0+dmFsdWVzQXRIZWFkLCBzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5k
aWYKKyAgICAgICAgZm9yIChOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmJlZ2luOyBub2Rl
SW5kZXggPCBibG9jay0+ZW5kOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgaWYgKCFtX2dy
YXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgICAg
ICBwcmludGYoIiAgICAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRl
eF0ub3ApLCBub2RlSW5kZXgpOworICAgICAgICAgICAgc3RhdGUuZHVtcChzdGRvdXQpOworICAg
ICAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIXN0YXRlLmV4
ZWN1dGUobm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2lm
IEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIg
ICAgICB0YWlsIHJlZ3M6ICIpOworICAgICAgICBzdGF0ZS5kdW1wKHN0ZG91dCk7CisgICAgICAg
IHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICBtX2NoYW5nZWQgfD0gc3RhdGUuZW5kQmFz
aWNCbG9jayhBYnN0cmFjdFN0YXRlOjpNZXJnZVRvU3VjY2Vzc29ycyk7CisjaWYgRU5BQkxFKERG
R19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICAgIHRhaWwg
dmFyczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRUYWlsLCBzdGRv
dXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICB9CisgICAgCisgICAgdm9p
ZCBwZXJmb3JtRm9yd2FyZENGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSkKKyAgICB7CisjaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIkNGQSBb
JXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBmb3IgKEJsb2Nr
SW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2Nr
KQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKHN0YXRlLCBibG9jayk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZ2xvYmFsQ0ZBKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAgICAgICAK
KyAgICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZUFyZ3VtZW50cyhtX2dyYXBoKTsKKyAg
ICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGUgc3RhdGUobV9jb2RlQmxvY2ssIG1fZ3JhcGgp
OworICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICBwZXJmb3JtRm9yd2FyZENGQShzdGF0ZSk7CisgICAgICAgIH0gd2hpbGUg
KG1fY2hhbmdlZCk7CisgICAgfQorICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEpTR2xv
YmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUwLDcgKzQ1MCw3IEBAIEpJVENv
bXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1cm4gbm90TnVtYmVy
OwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYg
bm9kZSwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVh
bGl0eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyLCBib29sICgqcHJlZGljdGlvbkNoZWNrKShQcmVk
aWN0ZWRUeXBlKSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KCkpOwpAQCAtNDYwLDggKzQ2MCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0RXF1YWxpCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBp
ZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKFZhbHVlVHJ1ZSksIHJlc3Vs
dEdQUik7CkBAIC01MDEsOSArNTAzLDkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShO
b2RlJiBub2RlLAogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgfSBlbHNlIGlmIChub2RlLm9wID09
IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxp
dHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAg
IGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAgICAgZWxzZSBpZiAobm9kZS5v
cCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGls
ZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5
KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxl
T2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgaXNB
cnJheVByZWRpY3Rpb24pOwogICAgIGVsc2UKICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVw
aG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgIApAQCAtNTI5LDcg
KzUzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBq
c1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5v
ZGVJbmRleCwgdm9pZCAqdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lkICp2cHRyLCBib29sIG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGVJbmRleCk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKQEAgLTUzNyw3ICs1Mzks
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIp
KSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTU0NSw3ICs1NDgsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwg
cmVzdWx0R1BSKTsKICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxs
KSkpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihW
YWx1ZU51bGwpKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluaygmbV9q
aXQpOwpAQCAtNTY2LDExICs1NzAsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z2ljYWxOb3QoTgogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21w
aWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RW
UHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAg
Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgIWlz
QXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewpAQCAtNjMwLDE5ICs2MzQsMjEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJ
bmRleCBub3RUYWtlbiwgdm9pZCAqdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJs
b2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2sp
CiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJS
ZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIp
KSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90
Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHZhbHVlR1BSKTsKLSAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihWYWx1ZU51bGwpKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAx
KSkKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwogICAgIApAQCAt
NjczLDkgKzY3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8K
ICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICB9IGVsc2Ug
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigp
KSB7Ci0gICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2Vu
LCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAg
ICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtl
biwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RP
ck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7
CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9y
T3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgp
LCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAg
ICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFr
ZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAg
ICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKQEAgLTcwOCw5ICs3MTQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgIGlmIChwcmVkaWN0Qm9v
bGVhbikgewogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CiAgICAgICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFr
ZW4pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsK
KwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5qdW1wKCkpOwogICAgICAgICAg
ICAgdmFsdWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03NDgsMTUgKzc1MiwxNiBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIEdldExv
Y2FsOiB7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUg
PSBibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpOwogCiAgICAgICAg
IC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBh
dHRlbXB0IHRvIGNvbXBpbGUuCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25l
KSB7CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lIHx8IHZhbHVlLmlzQ2xl
YXIoKSkgewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlv
bikpIHsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpIHsKICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2Fs
KCkpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICAvLyBMaWtlIGludGVnZXJSZXN1bHQs
IGJ1dCBkb24ndCB1c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLApAQCAt
Nzc1LDkgKzc4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckpTKTsKIAogICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgaWYgKGlz
QXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoaXNDZWxsUHJlZGljdGlv
bih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsK
LSAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAg
ICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAg
ICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQm9vbGVhbjsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTOwpAQCAtODIwLDcgKzgyNSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5
UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxs
R1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBt
X2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2Fs
KCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBl
bHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xNDA4LDcg
KzE0MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBp
cyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2Fu
IHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwog
CkBAIC0xNDQyLDcgKzE0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhh
dCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3Ro
KS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBh
cnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShu
b2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKQEAg
LTE1MjQsNyArMTUzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgCiAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9k
ZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0
b3JhZ2VMZW5ndGhHUFIpOwogCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQx
KCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
c3RvcmFnZUdQUik7CkBAIC0xNTY3LDcgKzE1NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkp
CisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9y
YWdlR1BSKTsKQEAgLTE3OTUsOSArMTgwMSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1Zh
bHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2Ny
YXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICBpZiAoIWlzT3RoZXJQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICAg
ICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAg
IG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmlu
ZWQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkp
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9i
amVjdCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hHUFIs
IG1fY29tcGlsZUluZGV4KTsKQEAgLTE4MDcsNyArMTgxNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihh
dChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7Cisg
ICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNW
YWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjZWxsUmVzdWx0
KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBA
IC0xODQ3LDkgKzE4NTYsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4g
b2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCiAgICAgICAgIC8vIHRoYXQgaXQn
cyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVy
d2lzZSB3ZQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4K
LSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
KCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2Jq
ZWN0VlB0cikpKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoIWlzRmlu
YWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyKSkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwogICAgICAgICB9CkBAIC0xOTc4LDcgKzE5ODgs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hp
bGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgp
KSwgcmVzdWx0R1BSKTsKQEAgLTE5OTcsNyArMjAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigp
OwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlz
U3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkp
OwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKQEAgLTIw
MTIsNiArMjAyMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAg
ICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJz
ZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKSkgeworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgIAogICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwpAQCAtMjEz
MSw3ICsyMTQ2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3Jh
dGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CisgICAgICAgIGlmICgh
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmRvZXNOb3RDb250YWlu
QW55T3RoZXJUaGFuKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKQorICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKICAg
ICAgICAgaWYgKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgIT0gbV9qaXQuY29kZUJsb2NrKCkt
Pmdsb2JhbE9iamVjdCgpLT5tZXRob2RDYWxsRHVtbXkoKSkgewogICAgICAgICAgICAgbV9qaXQu
bW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEucHJvdG90eXBl
LT5zdHJ1Y3R1cmVBZGRyZXNzKCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhv
ZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTcwMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZURvdWIKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwog
fQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShO
b2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKQordm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwg
Tm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25D
aGVjaykoUHJlZGljdGVkVHlwZSkpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5j
aE5vZGVJbmRleCk7CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsK
QEAgLTE1OCw4ICsxNTgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
T2JqZQogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAgICAgR1BSUmVnIG9wMkdQUiA9
IG9wMi5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0
aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNv
bmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CiAgICAgaWYgKG5vdFRha2VuICE9ICht
X2Jsb2NrICsgMSkpCkBAIC0yMTksMTEgKzIyMSwxMSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVCcmFuCiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAg
ICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9
PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5j
aGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAgICAgICAgY29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVj
dEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Zp
bmFsT2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAgICAgICAgICAgdXNl
KG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAg
ICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgICAgICBjb21waWxlUGVl
cEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVzZShu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAg
fSBlbHNlCkBAIC0yNTYsMTggKzI1OCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KEJhc2ljQmxvY2smCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCiAKLSAgICBBU1NF
UlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSk7
CisgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3Vt
ZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2su
bV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBibG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CiAgICAgICAgIGlmIChub2RlSW5k
ZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShW
YWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hcmd1bWVu
dHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92
YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7CisgICAgbV9z
dGF0ZS5yZXNldCgpOworICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKCZibG9jayk7CisgICAg
CisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9s
b2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9O
b2RlKQogICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVn
aXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQpAQCAtMzM3LDYgKzM0Miw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJc
biIpOwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJz
dHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCisgICAgICAg
IG1fc3RhdGUuZXhlY3V0ZShtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIAogICAgICAgICBpZiAo
bm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwog
ICAgIH0KQEAgLTUzNyw3ICs1NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
Q2hhckNvZGVBCiAgICAgR1BSUmVnIHN0cmluZ1JlZyA9IHN0cmluZy5ncHIoKTsKICAgICBHUFJS
ZWcgaW5kZXhSZWcgPSBpbmRleC5ncHIoKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25TdHJpbmco
bm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RyaW5nUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgCiAgICAgLy8gdW5zaWduZWQgY29tcGFy
aXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRo
YXQgYXJlIHRvbyBsYXJnZQpAQCAtNTY2LDcgKzU3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAg
ICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICBpZiAoIWlzS25v
d25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogCiAgICAgLy8gdW5zaWduZWQgY29t
cGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2Vz
IHRoYXQgYXJlIHRvbyBsYXJnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSA8ZGZnL0RGR0Fic3RyYWN0
U3RhdGUuaD4KICNpbmNsdWRlIDxkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MTcsNDMgKzQxOCwxNiBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gaW5mby5pc0pTSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29s
IGlzS25vd25BcnJheShOb2RlSW5kZXggb3AxKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9
IGF0KG9wMSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNlIEdldExv
Y2FsOgotICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0aW9uKG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBO
ZXdBcnJheToKLSAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzS25vd25TdHJpbmcoTm9k
ZUluZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQob3AxKS5vcCkgewotICAgICAg
ICBjYXNlIFN0ckNhdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgCiAgICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgWl9ERkdPcGVy
YXRpb25fRUpKKTsKICAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25k
aXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRl
Z2VyQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFu
Y2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVD
b25kaXRpb24pOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIpOwotICAgIHZvaWQgY29tcGls
ZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVQZWVw
SG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lk
KiB2cHRyLCBib29sICgqcHJlZGljdGlvbkNoZWNrKShQcmVkaWN0ZWRUeXBlKSk7CisgICAgdm9p
ZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0
aW9uQ2hlY2spKFByZWRpY3RlZFR5cGUpKTsKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2Rl
Jik7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IHZh
bHVlLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5v
dChOb2RlSW5kZXggdmFsdWUsIHZvaWQqIHZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2sp
OwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYpOwotICAgIHZvaWQgZW1pdE9iamVj
dE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0lu
ZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKTsKKyAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJh
bmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtl
biwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CiAgICAgdm9pZCBlbWl0
QnJhbmNoKE5vZGUmKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUm
KTsKQEAgLTU3NSw2ICs1NDksOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RTZXRPcGVyYW5k
OwogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsKICAgICAKKyAgICBBYnN0cmFj
dFN0YXRlIG1fc3RhdGU7CisgICAgCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNv
dmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRl
VmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKQEAgLTgwNyw2ICs3ODMsNyBAQCBpbmxpbmUg
U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQu
Z3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmlj
X2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgLCBtX3N0YXRlKG1faml0LmNvZGVC
bG9jaygpLCBtX2ppdC5ncmFwaCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NiArMjYsMTIgQEAKICNpZm5kZWYgREZHU3RydWN0dXJlU2V0X2gKICNkZWZpbmUgREZHU3RydWN0
dXJlU2V0X2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzQsNiArNDAsOCBA
QCBjbGFzcyBTdHJ1Y3R1cmU7CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOworCiBjbGFzcyBTdHJ1Y3R1cmVTZXQgewogcHVibGljOgogICAgIFN0cnVj
dHVyZVNldCgpIHsgfQpAQCAtNDMsNiArNTEsMTEgQEAgcHVibGljOgogICAgICAgICBtX3N0cnVj
dHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmNsZWFyKCk7CisgICAgfQorICAgIAogICAgIHZv
aWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFjb250
YWlucyhzdHJ1Y3R1cmUpKTsKQEAgLTEwNCwxMCArMTE3LDUwIEBAIHB1YmxpYzoKICAgICAKICAg
ICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZXMubGFzdCgpOyB9
CiAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHJlc3VsdCA9IFByZWRpY3ROb25lOworICAgICAg
ICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocmVzdWx0LCBwcmVkaWN0aW9uRnJvbVN0
cnVjdHVyZShtX3N0cnVjdHVyZXNbaV0pKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlcy5zaXplKCkgIT0g
b3RoZXIubV9zdHJ1Y3R1cmVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUo
KTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlc1tp
XSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZv
aWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsK
KyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXAiLCBtX3N0cnVjdHVyZXNbaV0pOworICAgICAg
ICB9CisgICAgICAgIGZwcmludGYob3V0LCAiXSIpOworICAgIH0KKyNlbmRpZgorICAgIAogcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKKyAgICAKICAg
ICBWZWN0b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1Y3R1cmVzOwogfTsKIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRwogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNlbmRpZiAvLyBE
RkdTdHJ1Y3R1cmVTZXRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCisjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKKy8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxs
IGxvY2F0aW9uKS4KKy8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tlZCBh
dCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgorZW51bSBWaXJ0dWFs
UmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gLTEgfTsKK0NPTVBJTEVfQVNTRVJU
KHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNpemVvZihpbnQpLCBWaXJ0dWFsUmVnaXN0ZXJf
aXNfMzJiaXQpOworCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8
VmFyaWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkK
KyAgICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3RO
b25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxS
ZWdpc3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICAsIG1fcHJl
ZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdp
c3RlciBsb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1f
bG9jYWwpOworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9CisgICAgCisgICAgaW50IG9w
ZXJhbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7
CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CisgICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0
aW9uLCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2ll
bnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0
aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQK
KyAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9u
J3QgZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9k
ZXMgZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAg
ICBQcmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFi
bGVBY2Nlc3NEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110259</attachid>
            <date>2011-10-07 23:00:21 -0700</date>
            <delta_ts>2011-10-08 00:33:34 -0700</delta_ts>
            <desc>work in progress - better performance</desc>
            <filename>cfa_patch_3.diff</filename>
            <type>text/plain</type>
            <size>122982</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM0IEBA
CisyMDExLTEwLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OkFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3Jz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZHVtcCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aXNWYWxpZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3Ap
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGRBbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6bGFzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZh
bHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNDbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFs
aWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2lj
QmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmdldEJ5
dGVjb2RlQmVnaW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpibG9jayk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6b3BlcmFuZElzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRW
YWx1ZVRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Om51bWJlck9mTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9w
ZXJhbmRzOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0QXJndW1lbnRGaXJzdFRpbWUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbEZpcnN0VGltZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T3BlcmFuZHM6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRz
OjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OmR1bXBPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVBcml0aE5vZGVGbGFncyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtRm9yd2FyZENGQSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Z2xvYmFsQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
Q2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZVNldDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
OiBBZGRlZC4KKwogMjAxMS0xMC0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBnZXRDYWxsRGF0YVZpcnR1YWwgbWV0aG9kcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEyIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYz
OEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAq
LzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEy
MDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FE
RDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNE
MzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi87IH07CiAJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CkBAIC04MDksNiArODE1LDEy
IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0
cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcwMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdP
cGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYW5kcy5o
OyBwYXRoID0gZGZnL0RGR09wZXJhbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0
MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI4Myw2ICsyMjk1LDEyIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBk
ZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKKwkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRjYyMDE3MTE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRjRCQjIxNDM5
NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yODc3LDYgKzI4OTUs
MTEgQEAKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xv
YmFsVGhpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNG
Q0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3
NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTM0MDgsNiArMzQzMSw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFB
ODAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwzMiArNDQsNTUgQEAgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5n
KFByZWRpY3RlZAogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogICAgIEJvdW5k
c0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgCisgICAg
Ym9vbCBpc1RvcCA9IHRydWU7CisgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdENlbGxPdGhl
cikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJjZWxsIik7CisgICAgZWxzZQorICAgICAgICBp
c1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikK
ICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9w
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEZpbmFsT2JqZWN0KQogICAg
ICAgICBwdHIuc3RyY2F0KCJGaW5hbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RBcnJheSkKICAgICAgICAgcHRyLnN0cmNhdCgi
QXJyYXkiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KHZhbHVlICYgUHJlZGljdFN0cmluZykKICAgICAgICAgcHRyLnN0cmNhdCgiU3RyaW5nIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RJbnQzMikKICAgICAgICAgcHRyLnN0cmNhdCgiSW50Iik7CisgICAgZWxzZQorICAgICAg
ICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3REb3VibGUpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIkRvdWJsZSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBm
YWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKICAgICAgICAgcHRy
LnN0cmNhdCgiQm9vbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T3RoZXIpCiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVy
Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIAorICAgIGlmIChpc1Rv
cCkKKyAgICAgICAgcmV0dXJuICJUb3AiOwogICAgIAogICAgICpwdHIrKyA9IDA7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMCBAQCBpbmxpbmUgYm9v
bCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9T
dHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAorLy8gTWVyZ2UgdHdvIHByZWRp
Y3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBkb2VzIGxlZnQgfCByaWdodC4g
SXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5LCBidXQgeW91IHdvdWxk
IGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2luY2UgdGhlIG1lcmdpbmcgcHJv
dG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIChhbmQgaGFzIGFscmVh
ZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlzdG9yeSkuCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVk
VHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0
U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK0Fic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEdyYXBoJiBncmFwaCkKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
Z3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cywgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDApCit7Cit9CisKK0Fic3RyYWN0
U3RhdGU6On5BYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5C
YXNpY0Jsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCit7CisgICAgLy9TYW1wbGluZ0ZsYWdz
OjpTY29wZWRGbGFnIGZsYWcoMTcpOworICAgIAorICAgIEFTU0VSVCghbV9ibG9jayk7CisgICAg
CisgICAgaWYgKGJhc2ljQmxvY2stPmVuZCAtIGJhc2ljQmxvY2stPmJlZ2luID4gbV9ub2Rlcy5z
aXplKCkpCisgICAgICAgIG1fbm9kZXMucmVzaXplKGJhc2ljQmxvY2stPmVuZCAtIGJhc2ljQmxv
Y2stPmJlZ2luKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6
ZSgpOyArK2kpCisgICAgICAgIG1fbm9kZXNbaV0uY2xlYXIoKTsKKyAgICBtX3ZhcmlhYmxlcyA9
IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAgICAKKyAgICBtX2Jsb2NrID0gYmFzaWNCbG9j
azsKKyAgICBtX2lzVmFsaWQgPSB0cnVlOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRp
YWxpemVBcmd1bWVudHMoR3JhcGgmIGdyYXBoKQoreworICAgIC8vU2FtcGxpbmdGbGFnczo6U2Nv
cGVkRmxhZyBmbGFnKDE3KTsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gZ3JhcGgubV9ibG9ja3Nb
MF0uZ2V0KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKV0udmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
LnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5z
ZXQoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5z
ZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgIH0KK30KKworYm9vbCBBYnN0cmFj
dFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSBtZXJnZU1vZGUpCit7CisgICAgLy9TYW1w
bGluZ0ZsYWdzOjpTY29wZWRGbGFnIGZsYWcoMTcpOworICAgIEFTU0VSVChtX2Jsb2NrKTsKKyAg
ICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2s7IC8vIFNhdmUgdGhlIGJsb2NrIGZv
ciBzdWNjZXNzb3IgbWVyZ2luZy4KKyAgICAKKyAgICBpZiAoIW1faXNWYWxpZCkgeworICAgICAg
ICByZXNldCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wg
Y2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGlmIChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8
ICFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBh
cmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+
dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgbV92YXJpYWJsZXMuYXJndW1lbnQoYXJn
dW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGJsb2NrLT52YWx1ZXNBdFRhaWwubG9jYWwobG9jYWwpLCBt
X3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwobG9j
YWwpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwg
IWNoYW5nZWQpOworICAgIAorICAgIHJlc2V0KCk7CisgICAgCisgICAgaWYgKG1lcmdlTW9kZSAh
PSBNZXJnZVRvU3VjY2Vzc29ycykKKyAgICAgICAgcmV0dXJuIGNoYW5nZWQ7CisgICAgCisgICAg
cmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzKG1fZ3JhcGgsIGJsb2NrKTsKK30KKwordm9pZCBBYnN0
cmFjdFN0YXRlOjpyZXNldCgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vZGVz
LnNpemUoKTsgKytpKQorICAgICAgICBtX25vZGVzW2ldLmNsZWFyKCk7CisgICAgbV92YXJpYWJs
ZXMuY2xlYXIoKTsKKyAgICBtX2Jsb2NrID0gMDsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30K
KworYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKE5vZGVJbmRleCBub2RlSW5kZXgpCit7Cisg
ICAgLy9TYW1wbGluZ0ZsYWdzOjpTY29wZWRGbGFnIGZsYWcoMTcpOworICAgIEFTU0VSVChtX2Js
b2NrKTsKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICAgICAgCisgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgCisgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKKyAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaywgbm9kZUluZGV4KSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkgPSBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXRMb2NhbDogewor
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNz
RGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rl
ZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEFycmF5KTsKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RC
b29sZWFuKTsKKyAgICAgICAgCisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2Nh
bCgpKSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIEFzc2VydCB0aGF0
IHRoZSBzdGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgorICAgICAgICBBU1NFUlQoIW1f
YmxvY2stPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkuaXNDbGVhcigpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJp
dE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgQml0UlNoaWZ0OgorICAgIGNhc2UgQml0
TFNoaWZ0OgorICAgIGNhc2UgQml0VVJTaGlmdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigp
KS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBVSW50MzJU
b051bWJlcjoKKyAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAg
ICAgaWYgKCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIo
KSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJl
cik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBWYWx1ZVRvRG91YmxlOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFZhbHVlQWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNo
aWxkMigpXSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX2dy
YXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RTdHJpbmcgfCBQcmVkaWN0SW50MzIgfCBQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aFN1YjoKKyAgICBjYXNlIEFyaXRo
TXVsOgorICAgIGNhc2UgQXJpdGhEaXY6CisgICAgY2FzZSBBcml0aE1pbjoKKyAgICBjYXNlIEFy
aXRoTWF4OiB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pICYmIG5vZGUuY2FuU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
UHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBBcml0aE1vZDogeworICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgbV9ncmFwaFtub2Rl
LmNoaWxkMigpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkgfHwgIW5vZGUuY2FuU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAgICAgCisgICAgY2FzZSBBcml0aEFiczoKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5j
aGlsZDEoKV0uc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBBcml0aFNxcnQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RE
b3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgTG9naWNhbE5v
dDogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAg
ICAgIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkgfHwgIWNoaWxk
LnByZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAg
ICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgIGNhc2UgQ29tcGFy
ZUxlc3NFcToKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyOgorICAgIGNhc2UgQ29tcGFyZUdyZWF0
ZXJFcToKKyAgICBjYXNlIENvbXBhcmVFcTogeworICAgICAgICBOb2RlJiBsZWZ0ID0gbV9ncmFw
aFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgTm9kZSYgcmlnaHQgPSBtX2dyYXBoW25vZGUuY2hp
bGQyKCldOworICAgICAgICBQcmVkaWN0ZWRUeXBlIGZpbHRlcjsKKyAgICAgICAgaWYgKE5vZGU6
OnNob3VsZFNwZWN1bGF0ZUludGVnZXIobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVy
ID0gUHJlZGljdEludDMyOworICAgICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVO
dW1iZXIobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdE51bWJlcjsK
KyAgICAgICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlRmluYWxPYmplY3QobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJl
ZGljdEZpbmFsT2JqZWN0OworICAgICAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAm
JiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBm
aWx0ZXIgPSBQcmVkaWN0QXJyYXk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RUb3A7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRl
cik7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdFN0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeVZhbDoKKyAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpID09IFByZWRpY3RT
dHJpbmcpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RTdHJpbmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0
cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0
QnlWYWw6CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlQdXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RO
dW1iZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJyYXlQb3A6
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBKdW1wOgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgIC8vIFRoZXJlIGlzIHByb2JhYmx5IHByb2ZpdCB0
byBiZSBmb3VuZCBpbiBkb2luZyBzcGFyc2UgY29uZGl0aW9uYWwgY29uc3RhbnQKKyAgICAgICAg
Ly8gcHJvcGFnYXRpb24sIGFuZCB0byB0YWtlIGl0IG9uZSBzdGVwIGZ1cnRoZXIsIHdoZXJlIGEg
dmFyaWFibGUncyB2YWx1ZQorICAgICAgICAvLyBpcyBzcGVjaWFsaXplZCBvbiBlYWNoIGRpcmVj
dGlvbiBvZiBhIGJyYW5jaC4gRm9yIG5vdywgd2UgZG9uJ3QgZG8gdGhpcy4KKyAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhl
cigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZp
bmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGls
ZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhy
b3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICBOb2Rl
JiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIGlmIChjaGlsZC5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IHNvdXJjZS5tX3R5cGU7Cisg
ICAgICAgIGlmICh0eXBlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdFN0cmluZyB8IFByZWRp
Y3RCb29sZWFuKSkgeworICAgICAgICAgICAgdHlwZSAmPSAoUHJlZGljdE51bWJlciB8IFByZWRp
Y3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICB0eXBlIHw9IFByZWRpY3RT
dHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb24uc2V0KHR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIE5ld0FycmF5OgorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIE5ld1JlZ2V4cDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVC
bG9jay0+Z2xvYmFsT2JqZWN0KCktPnJlZ0V4cFN0cnVjdHVyZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgIE5vZGUmIGNo
aWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291
cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVz
dGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYg
KGlzT2JqZWN0UHJlZGljdGlvbihzb3VyY2UubV90eXBlKSkgeworICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMg
YW4KKyAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRv
bid0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCisgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVu
IGFnYWluLCB5b3UgbmV2ZXIga25vdy4KKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBp
ZiAoaXNPdGhlclByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAg
c291cmNlLmZpbHRlcihQcmVkaWN0T3RoZXIpOworICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0
KFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkp
KSB7CisgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFByZWRpY3RPYmplY3RNYXNrKTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAg
ZGVzdGluYXRpb24ubWVyZ2UoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDcmVhdGVUaGlzOiB7CisgICAgICAgIE5vZGUm
IGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
c291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCisgICAgICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVz
dGluYXRpb24uc2V0KFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgICAgIAorICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1
cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRDYWxsZWU6
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFNjb3BlQ2hhaW46CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdENlbGxPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBQdXRTY29wZWRWYXI6CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeUlkOgorICAgIGNhc2UgR2V0
TWV0aG9kOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2Vs
bCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBH
ZXRBcnJheUxlbmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3Ro
OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRz
IG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKCk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVlLgorICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0Q2VsbCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBDaGVja01l
dGhvZDoKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0
aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHByb3RvdHlwZXMpLgorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihtX2dyYXBoLm1fbWV0aG9kQ2hlY2tEYXRh
W25vZGUubWV0aG9kQ2hlY2tEYXRhSW5kZXgoKV0uc3RydWN0dXJlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgLy8gRklYTUU6
IFNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2hhdCB0
aGUgZnVuY3Rpb24gaXMuCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQ
dXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJlcygp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0R2xvYmFsVmFyOgor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICAvLyBTYWRseSwgd2UgZG9u
J3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBDaGVja0hhc0luc3RhbmNlCisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAg
ICAvLyBBZ2Fpbiwgc2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3Zl
IGRvbmUgSW5zdGFuY2VPZgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRp
Y3RDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFBoaToKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0
OgorICAgIGNhc2UgUmVzb2x2ZToKKyAgICBjYXNlIFJlc29sdmVCYXNlOgorICAgIGNhc2UgUmVz
b2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgorICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcygpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAg
ICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFBoYW50b206CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4g
bV9pc1ZhbGlkOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1Y3R1cmVzKCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6ZSgpOyArK2kpCisgICAg
ICAgIG1fbm9kZXNbaV0uY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdmFyaWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgbV92
YXJpYWJsZXMuYXJndW1lbnQoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAg
bV92YXJpYWJsZXMubG9jYWwoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKK30KKworYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIGlm
IChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsKKyAgICAgICAgCisgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAoIW5vZGUucmVmQ291bnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgUGhpOgor
ICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhl
IHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgICAgICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0
aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxv
Y2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCisg
ICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBpdC4KKyAgICAgICAgc291cmNlID0g
JmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc291cmNlID0g
MDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChkZXN0aW5hdGlvbiA9PSAq
c291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBkaWQgbm90IGNoYW5nZSB0
aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9yIHRoaXMKKyAgICAgICAgLy8gYmFz
aWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgICAgICAKKyAgICAvLyBBYnN0cmFjdCBleGVjdXRpb24gcmVhY2hlZCBhIG5ldyBjb25j
bHVzaW9uIGFib3V0IHRoZSBzcGVjdWxhdGlvbnMgcmVhY2hlZCBhYm91dAorICAgIC8vIHRoaXMg
dmFyaWFibGUgYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoaXMgYmFzaWMgYmxvY2suIFVwZGF0ZSB0aGUg
c3RhdGUsIGFuZCByZXR1cm4KKyAgICAvLyB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpeHBv
aW50IG11c3QgZ28gb24hCisgICAgZGVzdGluYXRpb24gPSAqc291cmNlOworICAgIHJldHVybiB0
cnVlOworfQorCitib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKQoreworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkp
OworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0
by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIAorICAgIGJvb2wgY2hh
bmdlZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1l
bnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVu
dCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFs
dWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50
KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20t
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIAorICAgIGZvciAoc2l6
ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2Nh
bHMoKTsgKytsb2NhbCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJs
b2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFsdWVzQXRUYWlsLmxv
Y2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlh
Ymxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgIAorICAgIHJldHVybiBjaGFuZ2VkOworfQor
Citib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFz
aWNCbG9jayogYmFzaWNCbG9jaykKK3sKKyAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jhc2lj
QmxvY2stPmVuZCAtIDFdOworICAgIAorICAgIEFTU0VSVCh0ZXJtaW5hbC5pc1Rlcm1pbmFsKCkp
OworICAgIAorICAgIHN3aXRjaCAodGVybWluYWwub3ApIHsKKyAgICBjYXNlIEp1bXA6CisgICAg
ICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCAmZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNl
dCh0ZXJtaW5hbC50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgY2FzZSBC
cmFuY2g6CisgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCAmZ3JhcGguYmxvY2tGb3JC
eXRlY29kZU9mZnNldCh0ZXJtaW5hbC50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpKQorICAgICAgICAg
ICAgfCBtZXJnZShiYXNpY0Jsb2NrLCAmZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNldCh0ZXJt
aW5hbC5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgCisgICAgY2FzZSBSZXR1
cm46CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wg
QWJzdHJhY3RTdGF0ZTo6bWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9u
Tm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KQoreworICAgIGlmIChkZXN0aW5h
dGlvbk5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGVJbmRleCwgc291cmNlTm9kZUluZGV4ICE9IE5vTm9k
ZSk7CisgICAgCisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlv
bmFsIHByb3BhZ2F0aW9uIGhlcmUhCisgICAgCisgICAgcmV0dXJuIGRlc3RpbmF0aW9uLm1lcmdl
KHNvdXJjZSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCit2b2lkIEFic3RyYWN0U3RhdGU6OmR1bXAo
RklMRSogb3V0KQoreworICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9ub2Rlc1tpXS5p
c0NsZWFyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGZpcnN0KQorICAg
ICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnByaW50
ZihvdXQsICIgIik7CisgICAgICAgIGZwcmludGYob3V0LCAiQCVsdToiLCBpICsgbV9ibG9jay0+
YmVnaW4pOworICAgICAgICBtX25vZGVzW2ldLmR1bXAob3V0KTsKKyAgICB9Cit9CisjZW5kaWYK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQWJzdHJhY3RTdGF0ZV9oCisj
ZGVmaW5lIERGR0Fic3RyYWN0U3RhdGVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNp
bmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK25hbWVz
cGFjZSBERkcgeworCitzdHJ1Y3QgQmFzaWNCbG9jazsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRo
ZSBub3Rpb24gb2YgYW4gYWJzdHJhY3Qgc3RhdGUgZm9yIGZsb3ctc2Vuc2l0aXZlIGludHJhcHJv
Y2VkdXJhbAorLy8gY29udHJvbCBmbG93IGFuYWx5c2lzIChDRkEpLCB3aXRoIGEgZm9jdXMgb24g
dGhlIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCB0eXBlIGNoZWNrcy4KKy8vIEl0IGFsc28gaW1w
bGVtZW50cyBtb3N0IG9mIHRoZSBtZWNoYW5pc21zIG9mIGFic3RyYWN0IGludGVycHJldGF0aW9u
IHRoYXQgc3VjaCBhbgorLy8gYW5hbHlzaXMgd291bGQgdXNlLiBUaGlzIGNsYXNzIHNob3VsZCBi
ZSB1c2VkIGluIHR3byBpZGlvbXM6CisvLworLy8gMSkgUGVyZm9ybWluZyB0aGUgQ0ZBLiBJbiB0
aGlzIGNhc2UsIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1biBvdmVyIGFsbCBiYXNpYworLy8g
ICAgYmxvY2tzIHJlcGVhdGVkbHkgdW50aWwgY29udmVyZ2VuY2UgaXMgcmVhY2hlZC4gQ29udmVy
Z2VuY2UgaXMgZGVmaW5lZCBieQorLy8gICAgZW5kQmFzaWNCbG9jayhBYnN0cmFjdFN0YXRlOjpN
ZXJnZVRvU3VjY2Vzc29ycykgcmV0dXJuaW5nIGZhbHNlIGZvciBhbGwgYmxvY2tzLgorLy8KKy8v
IDIpIFJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdWx0cyBvZiBhIHByZXZpb3VzbHkgZXhlY3V0ZWQg
Q0ZBLiBJbiB0aGlzIGNhc2UsCisvLyAgICBBYnN0cmFjdFN0YXRlIHNob3VsZCBiZSBydW4gb3Zl
ciB3aGF0ZXZlciBiYXNpYyBibG9jayB5b3UncmUgaW50ZXJlc3RlZCBpbiB1cAorLy8gICAgdG8g
dGhlIHBvaW50IG9mIHRoZSBub2RlIGF0IHdoaWNoIHlvdSdkIGxpa2UgdG8gaW50ZXJyb2dhdGUg
dGhlIGtub3duIHR5cGUKKy8vICAgIG9mIGFsbCBvdGhlciBub2Rlcy4gQXQgdGhpcyBwb2ludCBp
dCdzIHNhZmUgdG8gZGlzY2FyZCB0aGUgQWJzdHJhY3RTdGF0ZSBlbnRpcmVseSwKKy8vICAgIGNh
bGwgcmVzZXQoKSwgb3IgdG8gcnVuIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGJhc2ljIGJsb2NrIGFu
ZCBjYWxsCisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6OkRvbnRNZXJnZSkuIFRo
ZSBsYXR0ZXIgb3B0aW9uIGlzIHNhZmVzdCBiZWNhdXNlCisvLyAgICBpdCBwZXJmb3JtcyBzb21l
IHVzZWZ1bCBpbnRlZ3JpdHkgY2hlY2tzLgorLy8KKy8vIEFmdGVyIHRoZSBDRkEgaXMgcnVuLCB0
aGUgaW50ZXItYmxvY2sgc3RhdGUgaXMgc2F2ZWQgYXQgdGhlIGhlYWRzIGFuZCB0YWlscyBvZiBh
bGwKKy8vIGJhc2ljIGJsb2Nrcy4gVGhpcyBhbGxvd3MgdGhlIGludHJhLWJsb2NrIHN0YXRlIHRv
IGJlIHJlbWF0ZXJpYWxpemVkIGJ5IGp1c3QKKy8vIGV4ZWN1dGluZyB0aGUgQ0ZBIGZvciB0aGF0
IGJsb2NrLiBJZiB5b3UgbmVlZCB0byBrbm93IGludGVyLWJsb2NrIHN0YXRlIG9ubHksIHRoZW4K
Ky8vIHlvdSBvbmx5IG5lZWQgdG8gZXhhbWluZSB0aGUgQmFzaWNCbG9jazo6bV92YWx1ZXNBdEhl
YWQgb3IgbV92YWx1ZXNBdFRhaWwgZmllbGRzLgorLy8KKy8vIFJ1bm5pbmcgdGhpcyBhbmFseXNp
cyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nLCBtb2R1bG8gdGhlIGludGVyLWJsb2NrIHN0YXRlCisv
LyBtZXJnaW5nIGFuZCBjb252ZXJnZW5jZSBmaXhwb2ludDoKKy8vCisvLyBBYnN0cmFjdFN0YXRl
IHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOworLy8gc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJhc2lj
QmxvY2spOworLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsKKy8vIGZvciAoTm9kZUluZGV4IGlk
eCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxvY2suZW5kOyArK2lkeCkgeworLy8g
ICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gICAgICAgICBicmVhazsKKy8vIH0KKy8v
IGJvb2wgcmVzdWx0ID0gc3RhdGUuZW5kQmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRN
ZXJnZT4pOworCitjbGFzcyBBYnN0cmFjdFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIE1lcmdl
TW9kZSB7CisgICAgICAgIC8vIERvbid0IG1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRl
IHdpdGggYmFzaWMgYmxvY2tzLgorICAgICAgICBEb250TWVyZ2UsCisgICAgICAgIAorICAgICAg
ICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRo
ZSBiYXNpYworICAgICAgICAvLyBibG9jayBiZWluZyBhbmFseXplZC4KKyAgICAgICAgTWVyZ2VU
b1RhaWwsCisgICAgICAgIAorICAgICAgICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RT
dGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNpYworICAgICAgICAvLyBibG9jaywgYW5kIHdp
dGggdGhlIGhlYWRzIG9mIHN1Y2Nlc3NvciBibG9ja3MuCisgICAgICAgIE1lcmdlVG9TdWNjZXNz
b3JzCisgICAgfTsKKyAgICAKKyAgICBBYnN0cmFjdFN0YXRlKENvZGVCbG9jayosIEdyYXBoJik7
CisgICAgCisgICAgfkFic3RyYWN0U3RhdGUoKTsKKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBm
b3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9ub2Rl
c1tub2RlSW5kZXggLSBtX2Jsb2NrLT5iZWdpbl07CisgICAgfQorICAgIAorICAgIC8vIENhbGwg
dGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1
ZXMgb2YKKyAgICAvLyBhcmd1bWVudHMuCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFyZ3Vt
ZW50cyhHcmFwaCYpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdp
dmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rpb24gb2YgYWJzdHJh
Y3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBoZWFkCisgICAgLy8g
b2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJsb2NrJ3MgZGF0YSBz
dHJ1Y3R1cmVzLgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICAK
KyAgICAvLyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBibG9jay4gSWYgTWVy
Z2VUb1RhaWwgb3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNzZWQsIHRoZW4gdGhp
cyBtZXJnZXMgZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBhYm91dCBob3cgdGhl
IHN0YXRlIGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24gaW50bworICAgIC8v
IHRoZSBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVlIHJldHVybiBtb2Rl
cywgZGVwZW5kaW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9kZToKKyAgICAvLwor
ICAgIC8vIERvbnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICAv
LworICAgIC8vIE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3Rh
dGUgb2YgdGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAgIC8vICAgIFRoaXMg
bWVhbnMgdGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCksIGFuZCBpZiB0aGF0
CisgICAgLy8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0
KSB0aGUgc3VjY2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxsIGFsd2F5cyBiZSBy
ZXR1cm5lZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAoaS5lLiBlbmRzIGlu
IFRocm93IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lkZSBpdCkuCisgICAg
Ly8KKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYg
dGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdlZCwKKyAgICAvLyAg
ICBhbmQsIGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29ycyB3YXMgY2hhbmdl
ZC4KKyAgICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11c3QgcmV2aXNpdCAo
YXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuCisgICAgYm9vbCBlbmRC
YXNpY0Jsb2NrKE1lcmdlTW9kZSk7CisgICAgCisgICAgLy8gUmVzZXQgdGhlIEFic3RyYWN0U3Rh
dGUuIFRoaXMgdGhyb3dzIGF3YXkgYW55IHJlc3VsdHMsIGFuZCBhdCB0aGlzIHBvaW50CisgICAg
Ly8geW91IGNhbiBzYWZlbHkgY2FsbCBiZWdpbkJhc2ljQmxvY2soKSBvbiBhbnkgYmFzaWMgYmxv
Y2suCisgICAgdm9pZCByZXNldCgpOworICAgIAorICAgIC8vIEFic3RyYWN0bHkgZXhlY3V0ZXMg
dGhlIGdpdmVuIG5vZGUuIFRoZSBuZXcgYWJzdHJhY3Qgc3RhdGUgaXMgc3RvcmVkIGludG8gYW4K
KyAgICAvLyBhYnN0cmFjdCByZWdpc3RlciBmaWxlIHN0b3JlZCBpbiAqdGhpcy4gTG9hZHMgb2Yg
bG9jYWwgdmFyaWFibGVzICh0aGF0IHNwYW4KKyAgICAvLyBiYXNpYyBibG9ja3MpIGludGVycm9n
YXRlIHRoZSBiYXNpYyBibG9jaydzIG5vdGlvbiBvZiB0aGUgc3RhdGUgYXQgdGhlIGhlYWQuCisg
ICAgLy8gU3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcmUgaGFuZGxlZCBpbiBlbmRCYXNpY0Js
b2NrKCkuIFRoaXMgcmV0dXJucyB0cnVlCisgICAgLy8gaWYgZXhlY3V0aW9uIHNob3VsZCBjb250
aW51ZSBwYXN0IHRoaXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1ZQorICAgIC8v
IGZvciBibG9jayB0ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxzIGFyZSBub3Qg
UmV0dXJuIG9yIHZhcmlhbnRzCisgICAgLy8gb2YgVGhyb3cuCisgICAgYm9vbCBleGVjdXRlKE5v
ZGVJbmRleCk7CisgICAgCisgICAgLy8gSXMgdGhlIGV4ZWN1dGlvbiBzdGF0ZSBzdGlsbCB2YWxp
ZD8gVGhpcyB3aWxsIGJlIGZhbHNlIGlmIGV4ZWN1dGUoKSBoYXMKKyAgICAvLyByZXR1cm5lZCBm
YWxzZSBwcmV2aW91c2x5LgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNW
YWxpZDsgfQorICAgIAorICAgIC8vIE1lcmdlIHRoZSBhYnN0cmFjdCBzdGF0ZSBzdG9yZWQgYXQg
dGhlIGZpcnN0IGJsb2NrJ3MgdGFpbCBpbnRvIHRoZSBzZWNvbmQKKyAgICAvLyBibG9jaydzIGhl
YWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2Vjb25kIGJsb2NrJ3Mgc3RhdGUgY2hhbmdlZC4gSWYg
c28sCisgICAgLy8gdGhhdCBibG9jayBtdXN0IGJlIGFic3RyYWN0bHkgaW50ZXJwcmV0ZWQgYWdh
aW4uCisgICAgc3RhdGljIGJvb2wgbWVyZ2UoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayog
dG8pOworICAgIAorICAgIC8vIE1lcmdlIHRoZSBhYnN0cmFjdCBzdGF0ZSBzdG9yZWQgYXQgdGhl
IGJsb2NrJ3MgdGFpbCBpbnRvIGFsbCBvZiBpdHMKKyAgICAvLyBzdWNjZXNzb3JzLiBSZXR1cm5z
IHRydWUgaWYgYW55IG9mIHRoZSBzdWNjZXNzb3JzJyBzdGF0ZXMgY2hhbmdlZC4gTm90ZQorICAg
IC8vIHRoYXQgdGhpcyBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkg
aWYgTWVyZ2VNb2RlIGlzCisgICAgLy8gTWVyZ2VUb1N1Y2Nlc3NvcnMuCisgICAgc3RhdGljIGJv
b2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgmLCBCYXNpY0Jsb2NrKik7CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6Cisg
ICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpOworICAgIAorICAgIGJvb2wgbWVyZ2VTdGF0ZUF0
VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJs
ZSwgTm9kZUluZGV4KTsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNl
LCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5k
ZXgpOworICAgIAorICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgR3JhcGgmIG1fZ3Jh
cGg7CisgICAgCisgICAgVmVjdG9yPEFic3RyYWN0VmFsdWUsIDMyPiBtX25vZGVzOworICAgIE9w
ZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFyaWFibGVzOworICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CisgICAgCisgICAgYm9vbCBtX2lzVmFsaWQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3Ry
YWN0U3RhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fic3RyYWN0
VmFsdWVfaAorI2RlZmluZSBERkdBYnN0cmFjdFZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVT
ZXQuaCIKKyNpbmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSB7CitwdWJsaWM6CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpCisgICAgICAg
IDogbV9zdHJ1Y3R1cmUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3Ry
dWN0dXJlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShj
b25zdCBTdHJ1Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2V0LnNpemUo
KSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICBtX3N0cnVjdHVyZSA9IHNldFswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8U3RydWN0dXJlKj4oMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlID0g
MDsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYWtlVG9wKCkKKyAgICB7CisgICAgICAgIG1fc3Ry
dWN0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKKyAgICB7CisgICAgICAgIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgIHZhbHVlLm1ha2VUb3AoKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJlKSAm
JiAhaXNUb3AoKSk7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIG1ha2VU
b3AoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7
CisgICAgfQorICAgIAorICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIp
CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSB8fCBvdGhlci5zaXplKCkgPT0gMCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKKyAg
ICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
b3RoZXJbMF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsK
KyAgICAgICAgaWYgKCFvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChvdGhlci5pc1RvcCgpKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVy
Lm1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtX3N0cnVj
dHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVy
ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0
dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFvdGhlci5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYg
KG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0
T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7CisgICAgfQorICAgIAorICAgIGJv
b2wgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAo
IW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAgIG1fc3Ry
dWN0dXJlID0gb3RoZXJbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG90
aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgCisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICghb3RoZXIubV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAg
IGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNUb3AoKSkgeworICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVj
dHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSAw
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBmaWx0ZXIoUHJl
ZGljdGVkVHlwZSBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc0NsZWFyKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCEob3RoZXIgJiBQcmVkaWN0Q2VsbCkp
IHsKKyAgICAgICAgICAgIGNsZWFyKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAoIShwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZSht
X3N0cnVjdHVyZSkgJiBvdGhlcikpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1
cmUqPigxKTsgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIHJldHVybiAhIW1fc3RydWN0dXJlOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChpLCAhaSk7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGF0KGkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGxhc3Qo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICAKKyAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Q2VsbDsKKyAgICAg
ICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAg
ICAgcmV0dXJuIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJ
TEUqIG91dCkKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBmcHJp
bnRmKG91dCwgIlRPUCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKQor
ICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1fc3RydWN0dXJlKTsKKyAgICAgICAgZnBy
aW50ZihvdXQsICJdIik7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBj
YW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KKyAgICBTdHJ1Y3R1cmUq
IG1fc3RydWN0dXJlOworfTsKKworc3RydWN0IEFic3RyYWN0VmFsdWUgeworICAgIEFic3RyYWN0
VmFsdWUoKQorICAgICAgICA6IG1fdHlwZShQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV90eXBlID0gUHJlZGljdE5vbmU7
CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXND
bGVhcigpCisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3ROb25lICYmIG1f
c3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYWtlVG9wKCkKKyAg
ICB7CisgICAgICAgIG1fdHlwZSA9IFByZWRpY3RUb3A7CisgICAgICAgIG1fc3RydWN0dXJlLm1h
a2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpCisgICAg
eworICAgICAgICBpZiAobV90eXBlICYgUHJlZGljdENlbGwpIHsKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNUb3AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBQ
cmVkaWN0VG9wICYmIG1fc3RydWN0dXJlLmlzVG9wKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlLmFkZCh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOworICAgICAg
ICAKKyAgICAgICAgbV90eXBlID0gcHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuYWRkKHN0cnVjdHVyZSk7
CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChQcmVkaWN0ZWRUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICBpZiAodHlwZSAmIFByZWRpY3RDZWxsKQorICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5j
bGVhcigpOworICAgICAgICBtX3R5cGUgPSB0eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZSAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5t
X3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZShjb25zdCBBYnN0cmFjdFZh
bHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV90eXBl
LCBvdGhlci5tX3R5cGUpIHwgbV9zdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fc3RydWN0dXJlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZShQcmVkaWN0ZWRUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obV90eXBlLCB0eXBlKTsKKyAgICAgICAgCisgICAgICAg
IGlmICh0eXBlICYgUHJlZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBtX3R5cGUgJj0gb3RoZXIucHJlZGljdGlvbkZyb21TdHJ1Y3R1
cmVzKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmICh0
eXBlID09IFByZWRpY3RUb3ApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fdHlwZSAm
PSB0eXBlOworICAgICAgICBtX3N0cnVjdHVyZS5maWx0ZXIodHlwZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBp
ZiAobWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpKSAh
PSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV90
eXBlICYgUHJlZGljdENlbGwpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRh
aW5zKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9p
ZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGZwcmludGYob3V0LCAiKCVzLCAiLCBw
cmVkaWN0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAgIG1fc3RydWN0dXJlLmR1bXAob3V0
KTsKKyAgICAgICAgZnByaW50ZihvdXQsICIpIik7CisgICAgfQorI2VuZGlmCisKKyAgICBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJlOworICAgIFByZWRpY3RlZFR5cGUgbV90eXBl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFZhbHVlX2gKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHQmFzaWNCbG9ja19oCisjZGVmaW5lIERGR0Jhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR09wZXJhbmRzLmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7CisKK3R5cGVkZWYgVmVj
dG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisKK3N0cnVjdCBCYXNpY0Jsb2Nr
IHsKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJbmRleCBiZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisgICAgICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAgICAsIGJlZ2luKGJlZ2luKQorICAg
ICAgICAsIGVuZChOb05vZGUpCisgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCisgICAgICAg
ICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZh
cmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAgICAgLCB2YWx1ZXNB
dEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFsdWVzQXRUYWlsKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgaW5saW5l
IEJsb2NrSW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbihPd25QdHI8QmFzaWNCbG9jaz4qIGJsb2NrKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICgqYmxvY2spLT5ieXRlY29kZUJlZ2luOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW47CisgICAgTm9kZUluZGV4IGJlZ2luOworICAgIE5v
ZGVJbmRleCBlbmQ7CisgICAgYm9vbCBpc09TUlRhcmdldDsKKworICAgIFByZWRlY2Vzc29yTGlz
dCBtX3ByZWRlY2Vzc29yczsKKyAgICAKKyAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRl
eFRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOworICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUlu
ZGV4VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAgCisgICAgT3BlcmFuZHM8QWJzdHJhY3RW
YWx1ZT4gdmFsdWVzQXRIZWFkOworICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0
VGFpbDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmFzaWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiA5
NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBVc2Vk
IGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYSBs
b2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCkK
ICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9s
b2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwogCiAgICAg
ICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBub2RlID0g
bV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTQ0LDE1ICsxNDQsMTUgQEAgcHJpdmF0ZToKICAgICAg
ICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NE
YXRhKSk7CiAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1
cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7CiAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3Jh
cGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAgICAgICBt
X2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUgPSBub2RlSW5kZXg7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkg
PSBub2RlSW5kZXg7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNB
dEhlYWRbb3BlcmFuZF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwgbm9kZUlu
ZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQogICAgIHZv
aWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAgIHsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gYWRk
VG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSks
IHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChv
cGVyYW5kKSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRp
bmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3VtZW50LgpAQCAt
MTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3Bl
cmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRz
KTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fYXJn
dW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpOwog
CiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4KICAgICAg
ICAgICAgICAgICBBU1NFUlQobm9kZS5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1YWxSZWdp
c3Rlcj4ob3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgo
R2V0TG9jYWwsIE9wSW5mbyhub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUluZGV4KTsK
LSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1l
bnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwogICAgICAgICAg
ICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTE4Niw5ICsxODYsOSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9H
cmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9hcmd1bWVu
dFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIGFyZ3Vt
ZW50KSk7CiAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2
YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1
bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsK
ICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1
bWVudF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGVJbmRleCk7
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KQEAgLTE5Nyw3ICsx
OTcsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBt
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9
IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFu
ZCkpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJn
dW1lbnQoYXJndW1lbnQpID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxl
QWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBHZXQgYW4gb3Bl
cmFuZCwgYW5kIHBlcmZvcm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24gaXQuCkBA
IC03ODMsOCArNzgzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBtX251bUFy
Z3VtZW50czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgTm9kZUluZGV4IHNldEFyZ3VtZW50
ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShh
cmd1bWVudCAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNh
bGxGcmFtZUhlYWRlclNpemUpKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1lbnRzW2Fy
Z3VtZW50XSA9IHNldEFyZ3VtZW50OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJn
dW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQpOwotICAgICAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS5zZXRGaXJz
dFRpbWUoc2V0QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOworICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVudEZpcnN0
VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xNjg5
LDE2ICsxNjg5LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjaygpCiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwogCi0gICAgICAgICAgICBWYXJpYWJsZVJlY29y
ZCYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxv
Y2stPm1fYXJndW1lbnRzQXRUYWlsW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxz
QXRUYWlsW3Zhck5vXTsKKyAgICAgICAgICAgIE5vZGVJbmRleCYgdmFyID0gKHN0YWNrVHlwZSA9
PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
dmFyTm8pOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFy
LnZhbHVlOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhcjsK
ICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7CiAgICAgICAg
ICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyhuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyB2YXJObyAt
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemUgOiB2YXJObykpKTsKLSAgICAgICAgICAgICAgICB2YXIuc2V0Rmlyc3RUaW1lKHZh
bHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgdmFyID0gdmFsdWVJblByZWRlY2Vz
c29yOwogICAgICAgICAgICAgICAgIGlmIChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykK
LSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRb
dmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAg
ICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRp
bWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0SGVhZFt2YXJOb10u
c2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHBy
ZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZSh2YXJObywg
dmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBlbmQoUGhp
U3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZhck5vKSk7
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29yXS5vcCA9
PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQg
dGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVk
ZSAiUHJlZGljdGlvblRyYWNrZXIuaCIKICNpbmNsdWRlICJSZWdpc3RlckZpbGUuaCIKQEAgLTQz
LDI5ICs0NCw2IEBAIGNsYXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLS8vIGhl
bHBlciBmdW5jdGlvbiB0byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1
bWVudHMuCi1pbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1
cm4gb3BlcmFuZCA8IDA7IH0KLQotdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4OwotCi0vLyBG
b3IgZXZlcnkgbG9jYWwgdmFyaWFibGUgd2UgdHJhY2sgYW55IGV4aXN0aW5nIGdldCBvciBzZXQg
b2YgdGhlIHZhbHVlLgotLy8gV2UgdHJhY2sgdGhlIGdldCBzbyB0aGF0IHRoZXNlIG1heSBiZSBz
aGFyZWQsIGFuZCB3ZSB0cmFjayB0aGUgc2V0IHRvCi0vLyByZXRyaWV2ZSB0aGUgY3VycmVudCB2
YWx1ZSwgYW5kIHRvIHJlZmVyZW5jZSB0aGUgZmluYWwgZGVmaW5pdGlvbi4KLXN0cnVjdCBWYXJp
YWJsZVJlY29yZCB7Ci0gICAgVmFyaWFibGVSZWNvcmQoKQotICAgICAgICA6IHZhbHVlKE5vTm9k
ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0Rmlyc3RUaW1lKE5vZGVJbmRleCBu
b2RlSW5kZXgpCi0gICAgewotICAgICAgICBBU1NFUlQodmFsdWUgPT0gTm9Ob2RlKTsKLSAgICAg
ICAgdmFsdWUgPSBub2RlSW5kZXg7Ci0gICAgfQotCi0gICAgTm9kZUluZGV4IHZhbHVlOwotfTsK
LQogc3RydWN0IE1ldGhvZENoZWNrRGF0YSB7CiAgICAgLy8gSXQgaXMgc2FmZSB0byByZWZlciB0
byB0aGVzZSBkaXJlY3RseSBiZWNhdXNlIHRoZXkgYXJlIHNoYWRvd2VkIGJ5CiAgICAgLy8gdGhl
IG9sZCBKSVQncyBDb2RlQmxvY2sncyBNZXRob2RDYWxsTGlua0luZm8uCkBAIC0xMTEsNDAgKzg5
LDYgQEAgc3RydWN0IFJlc29sdmVHbG9iYWxEYXRhIHsKICAgICB1bnNpZ25lZCByZXNvbHZlSW5m
b0luZGV4OwogfTsKIAotdHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29y
TGlzdDsKLQotc3RydWN0IEJhc2ljQmxvY2sgewotICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0
ZWNvZGVCZWdpbiwgTm9kZUluZGV4IGJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2ln
bmVkIG51bUxvY2FscykKLSAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCi0g
ICAgICAgICwgYmVnaW4oYmVnaW4pCi0gICAgICAgICwgZW5kKE5vTm9kZSkKLSAgICAgICAgLCBp
c09TUlRhcmdldChmYWxzZSkKLSAgICAgICAgLCBtX2FyZ3VtZW50c0F0SGVhZChudW1Bcmd1bWVu
dHMpCi0gICAgICAgICwgbV9sb2NhbHNBdEhlYWQobnVtTG9jYWxzKQotICAgICAgICAsIG1fYXJn
dW1lbnRzQXRUYWlsKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fsc0F0VGFpbChudW1M
b2NhbHMpCi0gICAgewotICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgQmxvY2tJbmRleCBnZXRC
eXRlY29kZUJlZ2luKE93blB0cjxCYXNpY0Jsb2NrPiogYmxvY2spCi0gICAgewotICAgICAgICBy
ZXR1cm4gKCpibG9jayktPmJ5dGVjb2RlQmVnaW47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYnl0
ZWNvZGVCZWdpbjsKLSAgICBOb2RlSW5kZXggYmVnaW47Ci0gICAgTm9kZUluZGV4IGVuZDsKLSAg
ICBib29sIGlzT1NSVGFyZ2V0OwotCi0gICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3Jz
OwotICAgIAotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdEhlYWQ7
Ci0gICAgVmVjdG9yPFZhcmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHNBdEhlYWQ7Ci0gICAgCi0g
ICAgVmVjdG9yPFZhcmlhYmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50c0F0VGFpbDsKLSAgICBWZWN0
b3I8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2Fsc0F0VGFpbDsKLX07Ci0KIC8vIAogLy8gPT09
IEdyYXBoID09PQogLy8KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkzLDYg
KzEzOTMsMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCisgICAgQmFzaWNCbG9j
ayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10uZ2V0KCk7CisgICAgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcChj
b25zdCBjaGFyKiBsYWJlbCA9IDApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDIz
ICs0MDIsMTkgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBP
U1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShi
YXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUs
IGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBhY3Rp
b25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCksIGJh
c2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9hcmd1bWVudHNB
dEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKLSAg
ICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0QXJndW1lbnQoaSwgYWN0aW9u
YWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICB9CisgICAgICAgIGVudHJ5
LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay52YWx1ZXNBdEhlYWQ7CiAgICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVh
ZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2lj
QmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4
ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0VmFy
aWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25v
ZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAv
LyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFi
bGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCisgICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBbXSku
IEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJlYWxs
eQorICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZVRvcCgpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Js
b2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAg
ICAgICBpZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpID09IE5vTm9k
ZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCku
bWFrZVRvcCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhY3Rpb25hYmxlUHJlZGlj
dGlvbnMucGFjaygpOwotICAgICAgICAKLSAgICAgICAgZW50cnktPm1fcHJlZGljdGlvbnMgPSBh
Y3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oYmFzaWNC
bG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOCBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUg
REZHTm9kZV9oCiAKLSNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlIDx3dGYv
Qm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNs
dWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0
aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMu
CiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC02Nyw2ICs2NSw4IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdPcGVyYW5kcy5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2luY2x1
ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVmFs
dWVQcm9maWxlLmgiCkBAIC03NCwxNSArNzQsMTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGls
bCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQg
YXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KLWVudW0gVmlydHVh
bFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07Ci1DT01QSUxFX0FTU0VS
VChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVy
X2lzXzMyYml0KTsKLQogLy8gVHlwZSBmb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2RlIGlu
IHRoZSBncmFwaC4KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3RhdGljIGNvbnN0IE5v
ZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAorc3RydWN0IE5vZGVJbmRleFRyYWl0cyB7Cisg
ICAgc3RhdGljIE5vZGVJbmRleCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBOb05vZGU7IH0KK307
CisKIC8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8g
YW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLAogLy8gYW5kIHRvIGltcGxlbWVudCBPU1Iu
CiAvLyAoUHJlc2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgpAQCAtMTEw
LDUxICsxMDksNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsKIH07
CiAKLWNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFj
Y2Vzc0RhdGE+IHsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAgICAgICA6
IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpKSkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCi0gICAg
ewotICAgIH0KLSAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxv
Y2FsKQotICAgICAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgICAgICwgbV9wcmVkaWN0aW9uKFBy
ZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2Fs
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7Ci0g
ICAgICAgIHJldHVybiBtX2xvY2FsOwotICAgIH0KLSAgICAKLSAgICBpbnQgb3BlcmFuZCgpCi0g
ICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKLSAgICB9Ci0g
ICAgCi0gICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5tX3ByZWRpY3Rpb24sIHByZWRp
Y3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24oKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9uOwotICAgIH0KLSAgICAKLXBy
aXZhdGU6Ci0gICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2luY2Ug
YW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCi0gICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1lIG9w
ZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1dAotICAgIC8vIHB1
dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3Qg
REZHIHNwYWNlCi0gICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBz
aWduaWZpY2FudC4KLQotICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFByZWRpY3Rl
ZFR5cGUgbV9wcmVkaWN0aW9uOwotfTsKLQogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRh
IHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbmV3
U3RydWN0dXJlOwpAQCAtNTY0LDYgKzUxOCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBW
YXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgeworICAgICAgICBB
U1NFUlQoaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihtX29wSW5mbyktPmZpbmQoKTsKICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2
aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzcsMzQgKzc3LDM4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRy
eShFeGVjU3RhdGUqIGV4ZWMsIEMKICAgICAvLyAgICBpbnRvIGEgbGVzcy1saWtlbHkgcGF0aC4g
U28sIHRoZSB3aXNlc3QgY291cnNlIG9mIGFjdGlvbiBpcyB0byBzaW1wbHkgbm90CiAgICAgLy8g
ICAgT1NSIGF0IHRoaXMgdGltZS4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
ZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnRVcHBlckJvdW5kKCk7ICsraSkgewotICAgICAg
ICBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMu
YXJndW1lbnQoaSk7Ci0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRp
Y3Rpb24pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaSA+PSBleGVjLT5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSB7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnQg
PSAwOyBhcmd1bWVudCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mQXJndW1lbnRz
KCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50ID49IGV4ZWMtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAg
ICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IHdhcyBu
b3QgcGFzc2VkLCBleHBlY3RlZCAlcy5cbiIsIGksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJp
bmcocHJlZGljdGlvbikpOworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNh
dXNlIGFyZ3VtZW50ICVsdSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgIiwgYXJndW1lbnQpOwor
ICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLmR1
bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYKICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2Jl
eXNQcmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlv
bikpIHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAg
ICAgICAgICAgIHZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50IC0gMSk7CisgICAgICAg
IAorICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50
KS52YWxpZGF0ZSh2YWx1ZSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAg
ICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBl
eHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBh
Y3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHBy
aW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlbHUgaXMgJXMsIGV4cGVjdGVk
ICIsIGFyZ3VtZW50LCB2YWx1ZS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGVudHJ5LT5t
X2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKHN0ZG91dCk7CisgICAgICAg
ICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgfQogICAgIH0KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cnktPm1f
cHJlZGljdGlvbnMudmFyaWFibGVVcHBlckJvdW5kKCk7ICsraSkgewotICAgICAgICBBY3Rpb25h
YmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMudmFyaWFibGUo
aSk7Ci0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1By
ZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVk
aWN0aW9uKSkgeworICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9l
eHBlY3RlZFZhbHVlcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgIGlmICgh
ZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lz
dGVycygpW2xvY2FsXS5qc1ZhbHVlKCkpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikK
LSAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBp
cyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCku
ZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7
CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJWx1
IGlzICVzLCBleHBlY3RlZCAiLCBsb2NhbCwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFs
dWUoKS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
LmxvY2FsKGxvY2FsKS5kdW1wKHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5cbiIpOwog
I2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcg
KzI2LDggQEAKICNpZm5kZWYgREZHT1NSRW50cnlfaAogI2RlZmluZSBERkdPU1JFbnRyeV9oCiAK
LSNpbmNsdWRlICJBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0
VmFsdWUuaCIKKyNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMzksNyArNDAsNyBAQCBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JFbnRyeURhdGEgewog
ICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2Rl
T2Zmc2V0OwotICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOworICAgIE9w
ZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fZXhwZWN0ZWRWYWx1ZXM7CiB9OwogCiBpbmxpbmUgdW5z
aWduZWQgZ2V0T1NSRW50cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5
RGF0YSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT3BlcmFuZHNfaAorI2RlZmluZSBERkdPcGVyYW5k
c19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKKy8vIGhlbHBlciBmdW5jdGlvbiB0byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJp
ZXMgZnJvbSBhcmd1bWVudHMuCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3Bl
cmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Ry
dWN0IE9wZXJhbmRWYWx1ZVRyYWl0czsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBP
cGVyYW5kVmFsdWVUcmFpdHMgeworICAgIHN0YXRpYyBUIGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJu
IFQoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzID0gT3Bl
cmFuZFZhbHVlVHJhaXRzPFQ+ID4KK2NsYXNzIE9wZXJhbmRzIHsKK3B1YmxpYzoKKyAgICBPcGVy
YW5kcygpIHsgfQorICAgIAorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVu
dHMsIHNpemVfdCBudW1Mb2NhbHMpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5maWxsKFRy
YWl0czo6ZGVmYXVsdFZhbHVlKCksIG51bUFyZ3VtZW50cyk7CisgICAgICAgIG1fbG9jYWxzLmZp
bGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtTG9jYWxzKTsKKyAgICB9CisgICAgCisgICAg
c2l6ZV90IG51bWJlck9mQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6
ZSgpOyB9CisgICAgc2l6ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9sb2Nh
bHMuc2l6ZSgpOyB9CisgICAgCisgICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV9hcmd1bWVudHNbaWR4XTsgfQorICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNv
bnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzW2lkeF07IH0KKyAgICAKKyAgICBUJiBsb2NhbChzaXpl
X3QgaWR4KSB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CisgICAgY29uc3QgVCYgbG9jYWwoc2l6
ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQorICAgIAorICAgIHZvaWQg
c2V0TG9jYWwoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
aWR4ID49IG1fbG9jYWxzLnNpemUoKSkgeworICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBt
X2xvY2Fscy5zaXplKCk7CisgICAgICAgICAgICBtX2xvY2Fscy5yZXNpemUoaWR4ICsgMSk7Cisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsg
KytpKQorICAgICAgICAgICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9sb2NhbHNbaWR4XSA9IHZhbHVlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNv
bnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0gPT0g
VHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIGFyZ3VtZW50KGlkeCkgPSB2YWx1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRMb2NhbEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25z
dCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpZHggPj0gbV9sb2NhbHMuc2l6ZSgp
IHx8IG1fbG9jYWxzW2lkeF0gPT0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIHNl
dExvY2FsKGlkeCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYW5kKGludCBvcGVy
YW5kKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7Cisg
ICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1f
YXJndW1lbnRzW2FyZ3VtZW50XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IG1fbG9jYWxzW29wZXJhbmRdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYW5kKGlu
dCBvcGVyYW5kKSBjb25zdCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0
PE9wZXJhbmRzKj4odGhpcyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgCisgICAgdm9pZCBz
ZXRPcGVyYW5kKGludCBvcGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
IChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50
ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHZhbHVlOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRMb2Nh
bChvcGVyYW5kLCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIFZlY3RvcjxULCA4PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VCwg
MTY+IG1fbG9jYWxzOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZHVtcE9wZXJh
bmRzKE9wZXJhbmRzPFQ+JiBvcGVyYW5kcywgRklMRSogb3V0KQoreworICAgIGZvciAoc2l6ZV90
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBvcGVyYW5kcy5udW1iZXJPZkFyZ3VtZW50cygpOyAr
K2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChhcmd1bWVudCkKKyAgICAgICAgICAgIGZwcmludGYo
b3V0LCAiICIpOworICAgICAgICBvcGVyYW5kcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChvdXQp
OworICAgIH0KKyAgICBmcHJpbnRmKG91dCwgIiA6ICIpOworICAgIGZvciAoc2l6ZV90IGxvY2Fs
ID0gMDsgbG9jYWwgPCBvcGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAg
ICAgIGlmIChsb2NhbCkKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAgICAgICBv
cGVyYW5kcy5sb2NhbChsb2NhbCkuZHVtcChvdXQpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBE
RkdPcGVyYW5kc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9w
YWdhdG9yLmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1Byb3BhZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNs
dWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlIDx3
dGYvRml4ZWRBcnJheS5oPgpAQCAtNTUsNDUgKzU2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGZp
eHBvaW50KCkKICAgICB7CiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9jayk7CisgICAgICAgIG1fZ3JhcGguZHVtcCht
X2NvZGVCbG9jayk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05f
VkVSQk9TRSkKLSAgICAgICAgbV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8v
IFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0
IHRoYXQgdG8gYmUKLSAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KLSAgICAgICAgICAg
IHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKLSAgICAgICAgICAgIGlmICghbV9j
aGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdz
Rm9yd2FyZCgpOwotICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAgICAgICAKLSNpZiBF
TkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIG1fY291bnQgPSAw
OwotI2VuZGlmCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBGb3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXIt
b3B0aW1hbCBmb3IgYm90aCB0b3BvbG9naWNhbGx5LXNvcnRlZCBhbmQKLSAgICAgICAgICAgIC8v
IERGUy1zb3J0ZWQgY29kZS4KLSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zRm9yd2Fy
ZCgpOwotICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVj
ZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBwYXRob2xvZ2ljYWwgY29kZSB3aWxsCi0gICAgICAgICAg
ICAvLyBjYXVzZSBzbG93bmVzcy4gTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2Vt
YmxlIGJhY2t3YXJkIGZsb3cuCi0gICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdv
IGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAotICAgICAgICAg
ICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3
YXJkIGZsb3cuCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHBy
b3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2Vk
KTsKLSAgICAgICAgCisgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKCk7CisgICAgICAg
IHByb3BhZ2F0ZVByZWRpY3Rpb25zKCk7CiAgICAgICAgIGZpeHVwKCk7CiAgICAgICAgIAogI2lm
IEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTExMCw2ICs3NywxMyBA
QCBwdWJsaWM6CiAKICAgICAgICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyNpZiBF
TkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiR3Jh
cGggYWZ0ZXIgdmlydHVhbCByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgIG1fZ3Jh
cGguZHVtcChtX2NvZGVCbG9jayk7CisjZW5kaWYKKworICAgICAgICBnbG9iYWxDRkEoKTsKKwog
I2lmIEVOQUJMRShERkdfREVCVUdfVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRl
ciBwcm9wYWdhdGlvbjpcbiIpOwogICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpA
QCAtMjc0LDYgKzI0OCwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhO
b2RlRmxhZ3MobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKKyAgICB2b2lk
IHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gVXAgaGVyZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dhcmQgcGFzcyBiZWNhdXNl
IHdlIHN1c3BlY3QgdGhhdCB0byBiZQorICAgICAgICAgICAgLy8gbW9yZSBwcm9maXRhYmxlLgor
ICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpOworICAgICAgICAg
ICAgaWYgKCFtX2NoYW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlQXJp
dGhOb2RlRmxhZ3NGb3J3YXJkKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAg
fQorICAgIAogICAgIGJvb2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24p
CiAgICAgewogICAgICAgICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0
KCkpOwpAQCAtNjA4LDcgKzYwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogI2lmIEVOQUJM
RShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBw
cmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSk7
CisgICAgICAgIHByaW50ZigiJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW21fY29t
cGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9j
aGFuZ2VkIHw9IGNoYW5nZWQ7CkBAIC02MzIsNiArNjI1LDI5IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBwcm9wYWdhdGVOb2RlUHJlZGljdGlvbnMobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwog
ICAgIH0KICAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZVByZWRpY3Rpb25zKCkKKyAgICB7CisjaWYg
RU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0g
MDsKKyNlbmRpZgorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFy
LW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAv
LyBERlMtc29ydGVkIGNvZGUuCisgICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0Zvcndh
cmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1
Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAorICAgICAgICAg
ICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNl
bWJsZSBiYWNrd2FyZCBmbG93LgorICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3
byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKKyAgICAgICAg
ICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNr
d2FyZCBmbG93LgorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBw
cm9wYWdhdGVQcmVkaWN0aW9uc0JhY2t3YXJkKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdl
ZCk7CisgICAgfQorICAgIAogICAgIHZvaWQgdG9Eb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkK
ICAgICB7CiAgICAgICAgIGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJl
cikgewpAQCAtMTQyNCw2ICsxNDQwLDY4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2NvZGVC
bG9jay0+bV9udW1DYWxsZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdpc3RlcnM7CiAgICAgfQogICAg
IAorICAgIHZvaWQgcGVyZm9ybUJsb2NrQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlLCBCbG9ja0lu
ZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9Q
QUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgIEJsb2NrICMldSAoYmMjJXUpOlxu
IiwgYmxvY2tJbmRleCwgYmxvY2stPmJ5dGVjb2RlQmVnaW4pOworI2VuZGlmCisgICAgICAgIHN0
YXRlLmJlZ2luQmFzaWNCbG9jayhibG9jayk7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdB
VElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICAgIGhlYWQgdmFyczogIik7CisgICAg
ICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBzdGRvdXQpOworICAgICAgICBw
cmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgZm9yIChOb2RlSW5kZXggbm9kZUluZGV4ID0g
YmxvY2stPmJlZ2luOyBub2RlSW5kZXggPCBibG9jay0+ZW5kOyArK25vZGVJbmRleCkgeworICAg
ICAgICAgICAgaWYgKCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgICAgICBwcmludGYoIiAgICAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFt
ZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgpOworICAgICAgICAgICAgc3RhdGUu
ZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAg
ICAgICBpZiAoIXN0YXRlLmV4ZWN1dGUobm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
KyAgICAgICAgcHJpbnRmKCIgICAgICB0YWlsIHJlZ3M6ICIpOworICAgICAgICBzdGF0ZS5kdW1w
KHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICBtX2NoYW5n
ZWQgfD0gc3RhdGUuZW5kQmFzaWNCbG9jayhBYnN0cmFjdFN0YXRlOjpNZXJnZVRvU3VjY2Vzc29y
cyk7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBw
cmludGYoIiAgICAgIHRhaWwgdmFyczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+
dmFsdWVzQXRUYWlsLCBzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAg
ICB9CisgICAgCisgICAgdm9pZCBwZXJmb3JtRm9yd2FyZENGQShBYnN0cmFjdFN0YXRlJiBzdGF0
ZSkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICBwcmludGYoIkNGQSBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIAor
ICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9j
a3Muc2l6ZSgpOyArK2Jsb2NrKQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKHN0YXRlLCBi
bG9jayk7CisgICAgfQorICAgIAorICAgIHZvaWQgZ2xvYmFsQ0ZBKCkKKyAgICB7CisjaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsK
KyNlbmRpZgorICAgICAgICAKKyAgICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZUFyZ3Vt
ZW50cyhtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGUgc3RhdGUobV9j
b2RlQmxvY2ssIG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwZXJmb3JtRm9yd2FyZENGQShzdGF0ZSk7
CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgfQorICAgIAogICAgIEdyYXBoJiBt
X2dyYXBoOwogICAgIEpTR2xvYmFsRGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayog
bV9jb2RlQmxvY2s7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUw
LDcgKzQ1MCw3IEBAIEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAg
ICByZXR1cm4gbm90TnVtYmVyOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyLCBib29sICgqcHJl
ZGljdGlvbkNoZWNrKShQcmVkaWN0ZWRUeXBlKSkKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtNDYwLDggKzQ2MCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIo
KTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAotICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hl
Y2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKEltbTMy
KFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CkBAIC01MDEsOSArNTAzLDkgQEAgYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgfSBl
bHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5h
bE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBj
b21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2Jq
ZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAg
ICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRl
QXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29t
cGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIp
OworICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rpb24pOwogICAgIGVsc2UKICAgICAgICAgbm9u
U3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24p
OwogICAgIApAQCAtNTI5LDcgKzUzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVW
YWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCAqdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2
b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVPcGVy
YW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlz
KTsKQEAgLTUzNyw3ICs1MzksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
T3JPdGhlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0g
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTU0NSw3ICs1NDgsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgbV9q
aXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwogICAgIAog
ICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNTY2LDExICs1NzAsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIo
KSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEo
KSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90
aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hp
bGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewpAQCAtNjMwLDE5
ICs2MzQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9v
bGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJ
bmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0cikKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2RlSW5kZXgsIEJs
b2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIsIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZUluZGV4KTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0g
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtl
bik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgCiAgICAgbV9qaXQuYW5k
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHZhbHVl
R1BSKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRp
b25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICBpZiAobm90VGFr
ZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90
VGFrZW4pOwogICAgIApAQCAtNjczLDkgKzY3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5v
ZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQx
KCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0
ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxk
MSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFp
c0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpIHsKICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKQEAgLTcwOCw5
ICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAg
ICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6
SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CiAg
ICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbih0cnVlKSkpKSwgdGFrZW4pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAo
cHJlZGljdEJvb2xlYW4pIHsKKwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5q
dW1wKCkpOwogICAgICAgICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03
NDgsMTUgKzc1MiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
biA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJz
dHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxv
Y2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBs
b2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCi0gICAgICAgIGlmIChwcmVkaWN0
aW9uID09IFByZWRpY3ROb25lKSB7CisgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3RO
b25lIHx8IHZhbHVlLmlzQ2xlYXIoKSkgewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBpZiAoaXNJbnQzMlBy
ZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHZh
bHVlLm1fdHlwZSkpIHsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcihub2RlLmxvY2FsKCkpLCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICAvLyBM
aWtlIGludGVnZXJSZXN1bHQsIGJ1dCBkb24ndCB1c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBh
cmUgcGhpIG5vZGVzLApAQCAtNzc1LDkgKzc4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZp
cnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKIAogICAgICAgICBEYXRhRm9ybWF0IGZvcm1h
dDsKLSAgICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBp
ZiAoaXNDZWxsUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgZm9ybWF0ID0g
RGF0YUZvcm1hdEpTQ2VsbDsKLSAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih2YWx1ZS5t
X3R5cGUpKQogICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQm9vbGVhbjsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTOwpAQCAtODIwLDcgKzgy
NSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
fSBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlz
QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIp
KSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CkBAIC0xNDA4LDcgKzE0MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBh
bmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9y
TGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUg
dHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25B
cnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwogCkBAIC0xNDQyLDcgKzE0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9y
ICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhl
IGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBp
ZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAg
ICAgYmFzZS51c2UoKTsKQEAgLTE1MjQsNyArMTUzMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIHdyaXRlQmFycmllcihiYXNl
R1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nl
c3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCi0gICAgICAgIGlmICghaXNLbm93
bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6
c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNTY3LDcgKzE1NzMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9y
YWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIg
PSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJy
YXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9y
YWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE3OTUsOSArMTgwMSwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgdGhp
c1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5tb3Zl
KHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5hbmRQdHIoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICBpZiAo
IWlzT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIp
OworICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNj
cmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29k
ZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBjZWxs
UmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTE4MDcsNyArMTgxNSw4IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGlz
T2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVl
LmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xODQ3LDkgKzE4NTYsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRo
ZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCiAg
ICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRo
YXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0
dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOworICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwogICAgICAgICB9
CkBAIC0xOTc4LDcgKzE5ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BS
UmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNL
bm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKQEAgLTE5OTcsNyArMjAwNyw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hpbGQxKCkp
KQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwg
cmVzdWx0R1BSKTsKQEAgLTIwMTIsNiArMjAyMiwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENoZWNr
U3RydWN0dXJlOiB7CisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKSkgeworICAgICAgICAg
ICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQo
KS5zaXplKCkpOwpAQCAtMjEzMSw3ICsyMTQ2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUp
KSk7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0
dXJlLmRvZXNOb3RDb250YWluQW55T3RoZXJUaGFuKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUp
KQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRh
LnN0cnVjdHVyZSkpKTsKICAgICAgICAgaWYgKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgIT0g
bV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5tZXRob2RDYWxsRHVtbXkoKSkgewog
ICAgICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RD
aGVja0RhdGEucHJvdG90eXBlLT5zdHJ1Y3R1cmVBZGRyZXNzKCkpLCBzY3JhdGNoR1BSKTsKICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUpKSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
cmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWIKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1
bXAoKSwgbm90VGFrZW4pOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2
b2lkKiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0ciwg
Ym9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpCiB7CiAgICAgTm9kZSYgYnJh
bmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7CiAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5C
eXRlY29kZU9mZnNldCgpKTsKQEAgLTE1OCw4ICsxNTgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAg
ICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7
Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7
CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkp
Lm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBhZGRCcmFuY2go
bV9qaXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CiAgICAg
aWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBAIC0yMTksMTEgKzIyMSwxMSBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgICAgICAgICB1c2Uobm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4
LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgICAgIGNv
bXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24p
OwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxk
MigpKSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUs
IGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAg
ICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5k
ZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsK
ICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNo
aWxkMigpKTsKICAgICAgICAgfSBlbHNlCkBAIC0yNTYsMTggKzI1OCwyMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwog
I2VuZGlmCiAKLSAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLm1fYXJndW1l
bnRzQXRIZWFkLnNpemUoKSk7CisgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9j
ay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gYmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CiAg
ICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV9hcmd1bWVudHNb
aV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChu
b2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwogICAgIH0KICAg
ICAKLSAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLm1fbG9jYWxzQXRIZWFk
LnNpemUoKSk7CisgICAgbV9zdGF0ZS5yZXNldCgpOworICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Js
b2NrKCZibG9jayk7CisgICAgCisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9j
ay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gYmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CiAgICAgICAgIGlm
IChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1
ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQpAQCAtMzM3LDYgKzM0
Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICAvLyBNYWtl
IHN1cmUgdGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBu
ZXh0IG5vZGUuCisgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShtX2NvbXBpbGVJbmRleCk7CisgICAg
ICAgIAogICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTUzNyw3ICs1NDUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0Q2hhckNvZGVBCiAgICAgR1BSUmVnIHN0cmluZ1JlZyA9IHN0cmlu
Zy5ncHIoKTsKICAgICBHUFJSZWcgaW5kZXhSZWcgPSBpbmRleC5ncHIoKTsKICAgICAKLSAgICBp
ZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgCiAgICAg
Ly8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRp
Y2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpAQCAtNTY2LDcgKzU3NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgYmFzZVJl
ZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7
CiAKLSAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0
cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogCiAg
ICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBp
bmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTcwMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVk
ZSA8ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaD4KICNpbmNsdWRlIDxkZmcvREZHSklUQ29kZUdlbmVy
YXRvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MTcsNDMgKzQx
OCwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gaW5mby5pc0pTSW50ZWdlcigpOwogICAg
IH0KICAgICAKLSAgICBib29sIGlzS25vd25BcnJheShOb2RlSW5kZXggb3AxKQotICAgIHsKLSAg
ICAgICAgTm9kZSYgbm9kZSA9IGF0KG9wMSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewot
ICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0
aW9uKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29s
IGlzS25vd25TdHJpbmcoTm9kZUluZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQo
b3AxKS5vcCkgewotICAgICAgICBjYXNlIFN0ckNhdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNv
bmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKKTsKICAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJy
YW5jaChOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNz
ZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSik7CiAgICAgdm9pZCBj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUlu
ZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxl
UGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJ
VENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24pOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2Jq
ZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIp
OwotICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyKTsKKyAg
ICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyLCBib29sICgqcHJlZGljdGlvbkNoZWNrKShQcmVkaWN0
ZWRUeXBlKSk7CisgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZw
dHIsIGJvb2wgKCpwcmVkaWN0aW9uQ2hlY2spKFByZWRpY3RlZFR5cGUpKTsKICAgICB2b2lkIGNv
bXBpbGVWYWx1ZUFkZChOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoTm9kZUluZGV4IHZhbHVlLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVPYmpl
Y3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggdmFsdWUsIHZvaWQqIHZwdHIsIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYpOwot
ICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0lu
ZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKTsKKyAgICB2b2lkIGVt
aXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVj
ayk7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUmKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVH
ZXRDaGFyQ29kZUF0KE5vZGUmKTsKQEAgLTU3NSw2ICs1NDksOCBAQCBwcml2YXRlOgogICAgIGlu
dCBtX2xhc3RTZXRPcGVyYW5kOwogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsK
ICAgICAKKyAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CisgICAgCiAgICAgVmFsdWVSZWNvdmVy
eSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKQEAgLTgwNyw2
ICs3ODMsNyBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAg
LCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9w
ZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJ
bmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgLCBt
X3N0YXRlKG1faml0LmNvZGVCbG9jaygpLCBtX2ppdC5ncmFwaCgpKQogewogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDk3
MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5kZWYgREZHU3RydWN0dXJlU2V0X2gK
ICNkZWZpbmUgREZHU3RydWN0dXJlU2V0X2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5j
bHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtMzQsNiArNDAsOCBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiAKIG5hbWVzcGFjZSBERkcgewog
CitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworCiBjbGFzcyBTdHJ1Y3R1cmVTZXQgewog
cHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpIHsgfQpAQCAtNDMsNiArNTEsMTEgQEAgcHVibGlj
OgogICAgICAgICBtX3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmNsZWFyKCk7Cisg
ICAgfQorICAgIAogICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpKTsKQEAgLTEwNCwxMCArMTE3LDUwIEBA
IHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3N0
cnVjdHVyZXMubGFzdCgpOyB9CiAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3Ry
dWN0dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHJlc3VsdCA9IFBy
ZWRpY3ROb25lOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0
cnVjdHVyZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocmVzdWx0
LCBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZXNbaV0pKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3Ry
dWN0dXJlcy5zaXplKCkgIT0gb3RoZXIubV9zdHJ1Y3R1cmVzLnNpemUoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRh
aW5zKG1fc3RydWN0dXJlc1tpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisjaWZu
ZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBmcHJp
bnRmKG91dCwgIlsiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVy
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIGZw
cmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXAiLCBtX3N0cnVj
dHVyZXNbaV0pOworICAgICAgICB9CisgICAgICAgIGZwcmludGYob3V0LCAiXSIpOworICAgIH0K
KyNlbmRpZgorICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTsKKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1Y3R1cmVzOwog
fTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKICNlbmRpZiAvLyBERkdTdHJ1Y3R1cmVTZXRfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCisjZGVmaW5l
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdp
c3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9uKS4KKy8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0
aGlzIHR5cGUtY2hlY2tlZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJy
b3JzLgorZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gLTEg
fTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNpemVvZihpbnQp
LCBWaXJ0dWFsUmVnaXN0ZXJfaXNfMzJiaXQpOworCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6
IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKCkKKyAgICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxS
ZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9w
cmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2Fs
KQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9s
b2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9
CisgICAgCisgICAgaW50IG9wZXJhbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4obG9jYWwoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9u
KGZpbmQoKS0+bV9wcmVkaWN0aW9uLCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1f
cHJlZGljdGlvbjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0
bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAor
ICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2Ft
ZSBwcmVkaWN0aW9uLiBCdXQKKyAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRo
ZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2
YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9sb2NhbDsKKyAgICBQcmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110263</attachid>
            <date>2011-10-08 00:33:34 -0700</date>
            <delta_ts>2011-10-08 00:45:28 -0700</delta_ts>
            <desc>work in progress - it&apos;s now pure win</desc>
            <filename>cfa_patch_4.diff</filename>
            <type>text/plain</type>
            <size>137155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTM0IEBA
CisyMDExLTEwLTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OkFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemVBcmd1bWVudHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3Jz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZHVtcCk6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0
ZTo6aXNWYWxpZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3Ap
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcCk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGRBbGwpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTo6bGFzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZH
OjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZh
bHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNDbGVhcik6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFs
aWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2lj
QmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmdldEJ5
dGVjb2RlQmVnaW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlT
dGFjayk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgICogZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpibG9jayk6CisgICAgICAgICogZGZn
L0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Om5vdGlj
ZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
Ojp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RW50cnkuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6b3BlcmFuZElzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRW
YWx1ZVRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkFyZ3VtZW50
cyk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Om51bWJlck9mTG9jYWxzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9w
ZXJhbmRzOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldExvY2FsKToK
KyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0QXJndW1lbnRGaXJzdFRpbWUpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbEZpcnN0VGltZSk6CisgICAgICAgIChK
U0M6OkRGRzo6T3BlcmFuZHM6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRz
OjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OmR1bXBPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVBcml0aE5vZGVGbGFncyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAg
ICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVQcmVkaWN0aW9ucyk6CisgICAg
ICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpT
Qzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtRm9yd2FyZENGQSk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6Z2xvYmFsQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
Q2hhckNvZGVBdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uU3RyaW5nKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5oOgor
ICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZVNldDo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OlN0
cnVjdHVyZVNldDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
OiBBZGRlZC4KKwogMjAxMS0xMC0wNyAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBnZXRDYWxsRGF0YVZpcnR1YWwgbWV0aG9kcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEyIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYz
OEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAq
LzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEy
MDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FE
RDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNE
MzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi87IH07CiAJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CkBAIC04MDksNiArODE1LDEy
IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0
cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcwMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdP
cGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYW5kcy5o
OyBwYXRoID0gZGZnL0RGR09wZXJhbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0
MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI4Myw2ICsyMjk1LDEyIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBk
ZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKKwkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRjYyMDE3MTE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRjRCQjIxNDM5
NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yODc3LDYgKzI4OTUs
MTEgQEAKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xv
YmFsVGhpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNG
Q0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3
NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTM0MDgsNiArMzQzMSw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFB
ODAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwzMiArNDQsNTUgQEAgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5n
KFByZWRpY3RlZAogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogICAgIEJvdW5k
c0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgCisgICAg
Ym9vbCBpc1RvcCA9IHRydWU7CisgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdENlbGxPdGhl
cikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJjZWxsIik7CisgICAgZWxzZQorICAgICAgICBp
c1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikK
ICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9w
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEZpbmFsT2JqZWN0KQogICAg
ICAgICBwdHIuc3RyY2F0KCJGaW5hbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RBcnJheSkKICAgICAgICAgcHRyLnN0cmNhdCgi
QXJyYXkiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KHZhbHVlICYgUHJlZGljdFN0cmluZykKICAgICAgICAgcHRyLnN0cmNhdCgiU3RyaW5nIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RJbnQzMikKICAgICAgICAgcHRyLnN0cmNhdCgiSW50Iik7CisgICAgZWxzZQorICAgICAg
ICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3REb3VibGUpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIkRvdWJsZSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBm
YWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKICAgICAgICAgcHRy
LnN0cmNhdCgiQm9vbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T3RoZXIpCiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVy
Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIAorICAgIGlmIChpc1Rv
cCkKKyAgICAgICAgcmV0dXJuICJUb3AiOwogICAgIAogICAgICpwdHIrKyA9IDA7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMCBAQCBpbmxpbmUgYm9v
bCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9T
dHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAorLy8gTWVyZ2UgdHdvIHByZWRp
Y3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBkb2VzIGxlZnQgfCByaWdodC4g
SXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5LCBidXQgeW91IHdvdWxk
IGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2luY2UgdGhlIG1lcmdpbmcgcHJv
dG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIChhbmQgaGFzIGFscmVh
ZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlzdG9yeSkuCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVk
VHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0
U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKyNkZWZpbmUgRU5BQkxFX0NGQV9QUk9GSUxJTkcgMAorCisjaWYgRU5BQkxFKENG
QV9QUk9GSUxJTkcpCisjZGVmaW5lIFBST0ZJTEUoZmxhZykgU2FtcGxpbmdGbGFnczo6U2NvcGVk
RmxhZyBmbGFnKGZsYWcpCisjZWxzZQorI2RlZmluZSBQUk9GSUxFKGZsYWcpIGRvIHsgfSB3aGls
ZSAoZmFsc2UpCisjZW5kaWYKKworQWJzdHJhY3RTdGF0ZTo6QWJzdHJhY3RTdGF0ZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgR3JhcGgmIGdyYXBoKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQorICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAsIG1fdmFyaWFibGVzKGNvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzLCBncmFwaC5tX2xvY2FsVmFycykKKyAgICAsIG1fYmxvY2soMCkKK3sKKyAg
ICBzaXplX3QgbWF4QmxvY2tTaXplID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
Z3JhcGgubV9ibG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChibG9jay0+ZW5kIC0gYmxvY2st
PmJlZ2luID4gbWF4QmxvY2tTaXplKQorICAgICAgICAgICAgbWF4QmxvY2tTaXplID0gYmxvY2st
PmVuZCAtIGJsb2NrLT5iZWdpbjsKKyAgICB9CisgICAgbV9ub2Rlcy5yZXNpemUobWF4QmxvY2tT
aXplKTsKK30KKworQWJzdHJhY3RTdGF0ZTo6fkFic3RyYWN0U3RhdGUoKSB7IH0KKwordm9pZCBB
YnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK3sK
KyAgICBQUk9GSUxFKDE3KTsKKyAgICAKKyAgICBBU1NFUlQoIW1fYmxvY2spOworICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVn
aW47ICsraSkKKyAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOworICAgIG1fdmFyaWFibGVzID0g
YmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIAorICAgIGJhc2ljQmxvY2stPmNmYVNob3Vs
ZFJldmlzaXQgPSBmYWxzZTsKKyAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsK
KyAgICBtX2Jsb2NrID0gYmFzaWNCbG9jazsKKyAgICBtX2lzVmFsaWQgPSB0cnVlOworfQorCit2
b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyYXBoKQoreworICAgIFBST0ZJ
TEUoMTcpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsK
KyAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAg
ICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gZ3JhcGhbcm9vdC0+dmFyaWFibGVzQXRI
ZWFkLmFyZ3VtZW50KGkpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290
LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGVs
c2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQcmVkaWN0QXJyYXkpOworICAgICAgICBlbHNl
IGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7
CisgICAgfQorfQorCitib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2Rl
IG1lcmdlTW9kZSkKK3sKKyAgICBQUk9GSUxFKDE4KTsKKyAgICBBU1NFUlQobV9ibG9jayk7Cisg
ICAgCisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrOyAvLyBTYXZlIHRoZSBibG9jayBm
b3Igc3VjY2Vzc29yIG1lcmdpbmcuCisgICAgCisgICAgaWYgKCFtX2lzVmFsaWQpIHsKKyAgICAg
ICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8
fCAhQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
YXJndW1lbnQpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoYmxvY2st
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFy
Z3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwg
bV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8
ICFjaGFuZ2VkKTsKKyAgICAKKyAgICByZXNldCgpOworICAgIAorICAgIGlmIChtZXJnZU1vZGUg
IT0gTWVyZ2VUb1N1Y2Nlc3NvcnMpCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIAorICAg
IHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dyYXBoLCBibG9jayk7Cit9CisKK3ZvaWQgQWJz
dHJhY3RTdGF0ZTo6cmVzZXQoKQoreworICAgIG1fYmxvY2sgPSAwOworICAgIG1faXNWYWxpZCA9
IGZhbHNlOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUoTm9kZUluZGV4IG5vZGVJ
bmRleCkKK3sKKyAgICBQUk9GSUxFKDE5KTsKKyAgICBBU1NFUlQobV9ibG9jayk7CisgICAgQVNT
RVJUKG1faXNWYWxpZCk7CisgICAgICAgIAorICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07CisgICAgICAgIAorICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgY2Fz
ZSBKU0NvbnN0YW50OgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAg
ICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAg
ICAgIAorICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KKyAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNB
dEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNl
IEJpdFhvcjoKKyAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICBjYXNlIEJpdExTaGlmdDoKKyAgICBj
YXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRp
Y3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAg
ICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGlmICghbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgorICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
VmFsdWVUb0RvdWJsZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJs
ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUFkZDoKKyAg
ICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pICYmIG5v
ZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNoaWxk
MSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nIHwgUHJl
ZGljdEludDMyIHwgUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNl
IEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQx
KCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIo
KSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hv
dWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJl
cik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVt
YmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAg
IGNhc2UgQXJpdGhBYnM6CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhT
cXJ0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAg
Tm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29s
ZWFuUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVh
bik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JP
dGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAg
ICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAg
Y2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2Fz
ZSBDb21wYXJlRXE6IHsKKyAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV07CisgICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAg
ICAgUHJlZGljdGVkVHlwZSBmaWx0ZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RJbnQz
MjsKKyAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJp
Z2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7CisgICAgICAgIGVsc2Ug
aWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9iamVj
dDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxk
U3BlY3VsYXRlQXJyYXkobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGlj
dEFycmF5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOwor
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFy
QXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcp
OworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0U3RyaW5nKSB7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5VmFsOgorICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5
UHVzaDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5
KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0TnVtYmVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgSnVtcDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJyYW5j
aDogeworICAgICAgICAvLyBUaGVyZSBpcyBwcm9iYWJseSBwcm9maXQgdG8gYmUgZm91bmQgaW4g
ZG9pbmcgc3BhcnNlIGNvbmRpdGlvbmFsIGNvbnN0YW50CisgICAgICAgIC8vIHByb3BhZ2F0aW9u
LCBhbmQgdG8gdGFrZSBpdCBvbmUgc3RlcCBmdXJ0aGVyLCB3aGVyZSBhIHZhcmlhYmxlJ3MgdmFs
dWUKKyAgICAgICAgLy8gaXMgc3BlY2lhbGl6ZWQgb24gZWFjaCBkaXJlY3Rpb24gb2YgYSBicmFu
Y2guIEZvciBub3csIHdlIGRvbid0IGRvIHRoaXMuCisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hp
bGQucHJlZGljdGlvbigpKSB8fCAhY2hpbGQucHJlZGljdGlvbigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFBy
ZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5
T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAg
Y2FzZSBSZXR1cm46CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOworICAgICAgICBpZiAodHlw
ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbikpIHsK
KyAgICAgICAgICAgIHR5cGUgJj0gKFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0U3RyaW5nIHwgUHJl
ZGljdEJvb2xlYW4pOworICAgICAgICAgICAgdHlwZSB8PSBQcmVkaWN0U3RyaW5nOworICAgICAg
ICB9CisgICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAgICAgCisgICAgY2FzZSBTdHJDYXQ6CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBOZXdBcnJheToKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1
Y3R1cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdSZWdl
eHA6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9y
Tm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChpc09iamVjdFByZWRp
Y3Rpb24oc291cmNlLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNpbXBs
ZSBjYXNlLiBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgc291cmNlIGlzIGFuCisgICAgICAgICAg
ICAvLyBvYmplY3QsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gSSBkb24ndCB0aGluayB0aGlz
IGNhc2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgaGl0LCBidXQgdGhlbiBhZ2FpbiwgeW91IG5l
dmVyIGtub3cuCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGlzT3RoZXJQcmVk
aWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIo
UHJlZGljdE90aGVyKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldChQcmVkaWN0T2JqZWN0
T3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChpc09iamVjdFByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICAg
ICAgc291cmNlLmZpbHRlcihQcmVkaWN0T2JqZWN0TWFzayk7CisgICAgICAgICAgICBkZXN0aW5h
dGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIGRlc3RpbmF0aW9uLm1l
cmdlKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
ICAgIAorICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChjaGlsZC5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQorICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVk
aWN0RmluYWxPYmplY3QpOworICAgICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uLnNldChQ
cmVkaWN0RmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAK
KyAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCkpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZUNoYWluOgorICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgR2V0U2NvcGVkVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U2Nv
cGVkVmFyOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlJZDoKKyAgICBjYXNlIEdldE1ldGhv
ZDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFN0cmluZ0xl
bmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUg
c2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4K
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgQ2hlY2tNZXRob2Q6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5
cGVzKS4KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIobV9ncmFwaC5tX21l
dGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLnN0cnVjdHVyZSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3
ZSBrbm93IHdoYXQgdGhlIGZ1bmN0aW9uIGlzLgorICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgUHV0QnlJZDoKKyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgY2xvYmJl
clN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAg
ICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRv
bmUgQ2hlY2tIYXNJbnN0YW5jZQorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgSW5zdGFuY2VPZjoKKyAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdh
dGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQaGk6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBCcmVha3BvaW50OgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2Fs
bDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIFJlc29sdmU6CisgICAgY2FzZSBSZXNv
bHZlQmFzZToKKyAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgIGNhc2UgUmVzb2x2
ZUdsb2JhbDoKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1faXNWYWxpZDsKK30KKworaW5saW5lIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMoTm9kZUluZGV4IG5vZGVJbmRleCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gbm9kZUluZGV4IC0gbV9ibG9jay0+YmVnaW4gKyAxOyBp
LS0gPiAwOykKKyAgICAgICAgbV9ub2Rlc1tpXS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KQorICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKQorICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwor
fQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgg
bm9kZUluZGV4KQoreworICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsKKyAgICAgICAg
CisgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAoIW5vZGUucmVm
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobm9kZS5v
cCkgeworICAgIGNhc2UgUGhpOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRo
ZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgICAgICBz
b3VyY2UgPSAmaW5WYXJpYWJsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0
aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9k
ZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxs
eSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBp
dC4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgc291cmNlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGlmIChkZXN0aW5hdGlvbiA9PSAqc291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1
dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9y
IHRoaXMKKyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBy
ZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyByZWFjaGVkIGFi
b3V0CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBiYXNpYyBi
bG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlvbiA9ICpzb3Vy
Y2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEFTU0VSVChmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCkpOworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJv
bS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2Fs
KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5s
b2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworCisgICAg
aWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgCisg
ICAgdG8tPmNmYVNob3VsZFJldmlzaXQgfD0gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gY2hh
bmdlZDsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMo
R3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoreworICAgIFBST0ZJTEUoMjAp
OworCisgICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5lbmQgLSAxXTsKKyAg
ICAKKyAgICBBU1NFUlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHRlcm1pbmFsLm9wKSB7CisgICAgY2FzZSBKdW1wOgorICAgICAgICByZXR1cm4gbWVyZ2UoYmFz
aWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgp
KTsKKyAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIHJldHVybiBtZXJnZShiYXNp
Y0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkp
CisgICAgICAgICAgICB8IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
Lm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIAorICAgIGNhc2UgUmV0dXJu
OgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZh
bHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGlu
YXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCit7CisgICAgaWYgKGRl
c3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0g
Tm9Ob2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29u
ZGl0aW9uYWwgcHJvcGFnYXRpb24gaGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24u
bWVyZ2Uoc291cmNlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6
ZHVtcChGSUxFKiBvdXQpCit7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVz
W2ldLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZmlyc3Qp
CisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJAJWx1OiIsIGkgKyBtX2Js
b2NrLT5iZWdpbik7CisgICAgICAgIG1fbm9kZXNbaV0uZHVtcChvdXQpOworICAgIH0KK30KKyNl
bmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRl
X2gKKyNkZWZpbmUgREZHQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKwor
bmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOworCisvLyBUaGlzIGltcGxlbWVu
dHMgdGhlIG5vdGlvbiBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5zaXRpdmUgaW50
cmFwcm9jZWR1cmFsCisvLyBjb250cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdpdGggYSBmb2N1
cyBvbiB0aGUgZWxpbWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgorLy8gSXQgYWxz
byBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3QgaW50ZXJwcmV0
YXRpb24gdGhhdCBzdWNoIGFuCisvLyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMgY2xhc3Mgc2hv
dWxkIGJlIHVzZWQgaW4gdHdvIGlkaW9tczoKKy8vCisvLyAxKSBQZXJmb3JtaW5nIHRoZSBDRkEu
IEluIHRoaXMgY2FzZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgYWxsIGJhc2lj
CisvLyAgICBibG9ja3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyByZWFjaGVkLiBD
b252ZXJnZW5jZSBpcyBkZWZpbmVkIGJ5CisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3Rh
dGU6Ok1lcmdlVG9TdWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBibG9ja3MuCisv
LworLy8gMikgUmVtYXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlvdXNseSBleGVj
dXRlZCBDRkEuIEluIHRoaXMgY2FzZSwKKy8vICAgIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1
biBvdmVyIHdoYXRldmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGluIHVwCisvLyAg
ICB0byB0aGUgcG9pbnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0byBpbnRlcnJv
Z2F0ZSB0aGUga25vd24gdHlwZQorLy8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBBdCB0aGlzIHBv
aW50IGl0J3Mgc2FmZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGlyZWx5LAorLy8g
ICAgY2FsbCByZXNldCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxv
Y2sgYW5kIGNhbGwKKy8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6RG9udE1lcmdl
KS4gVGhlIGxhdHRlciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UKKy8vICAgIGl0IHBlcmZvcm1z
IHNvbWUgdXNlZnVsIGludGVncml0eSBjaGVja3MuCisvLworLy8gQWZ0ZXIgdGhlIENGQSBpcyBy
dW4sIHRoZSBpbnRlci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMgYW5kIHRhaWxz
IG9mIGFsbAorLy8gYmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEtYmxvY2sgc3Rh
dGUgdG8gYmUgcmVtYXRlcmlhbGl6ZWQgYnkganVzdAorLy8gZXhlY3V0aW5nIHRoZSBDRkEgZm9y
IHRoYXQgYmxvY2suIElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3RhdGUgb25seSwg
dGhlbgorLy8geW91IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2NrOjptX3ZhbHVl
c0F0SGVhZCBvciBtX3ZhbHVlc0F0VGFpbCBmaWVsZHMuCisvLworLy8gUnVubmluZyB0aGlzIGFu
YWx5c2lzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXItYmxvY2sgc3Rh
dGUKKy8vIG1lcmdpbmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50OgorLy8KKy8vIEFic3RyYWN0
U3RhdGUgc3RhdGUoY29kZUJsb2NrLCBncmFwaCk7CisvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2so
YmFzaWNCbG9jayk7CisvLyBib29sIGVuZFJlYWNoZWQgPSB0cnVlOworLy8gZm9yIChOb2RlSW5k
ZXggaWR4ID0gYmFzaWNCbG9jay5iZWdpbjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7
CisvLyAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKGlkeCkpCisvLyAgICAgICAgIGJyZWFrOworLy8g
fQorLy8gYm9vbCByZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVyZ2Ugb3Ig
RG9udE1lcmdlPik7CisKK2NsYXNzIEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIGVudW0g
TWVyZ2VNb2RlIHsKKyAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0
U3RhdGUgd2l0aCBiYXNpYyBibG9ja3MuCisgICAgICAgIERvbnRNZXJnZSwKKyAgICAgICAgCisg
ICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwg
b2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrIGJlaW5nIGFuYWx5emVkLgorICAgICAgICBN
ZXJnZVRvVGFpbCwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0
cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrLCBh
bmQgd2l0aCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29yIGJsb2Nrcy4KKyAgICAgICAgTWVyZ2VUb1N1
Y2Nlc3NvcnMKKyAgICB9OworICAgIAorICAgIEFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiwgR3Jh
cGgmKTsKKyAgICAKKyAgICB+QWJzdHJhY3RTdGF0ZSgpOworICAgIAorICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJlZ2luXTsKKyAgICB9CisgICAgCisgICAgLy8g
Q2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0
IHZhbHVlcyBvZgorICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2Nr
cyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKKyAgICAvLyBleGVjdXRpb24uCisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZShHcmFwaCYpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVj
dXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rp
b24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBo
ZWFkCisgICAgLy8gb2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJs
b2NrJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFT
aG91bGRSZXZpc2l0IHRvIGZhbHNlLgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxv
Y2sqKTsKKyAgICAKKyAgICAvLyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBi
bG9jay4gSWYgTWVyZ2VUb1RhaWwgb3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNz
ZWQsIHRoZW4gdGhpcyBtZXJnZXMgZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBh
Ym91dCBob3cgdGhlIHN0YXRlIGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24g
aW50bworICAgIC8vIHRoZSBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVl
IHJldHVybiBtb2RlcywgZGVwZW5kaW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9k
ZToKKyAgICAvLworICAgIC8vIERvbnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBm
YWxzZS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1
ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAg
IC8vICAgIFRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCks
IGFuZCBpZiB0aGF0CisgICAgLy8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlz
aXQgKGF0IGxlYXN0KSB0aGUgc3VjY2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxs
IGFsd2F5cyBiZSByZXR1cm5lZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAo
aS5lLiBlbmRzIGluIFRocm93IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lk
ZSBpdCkuCisgICAgLy8KKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1
cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdl
ZCwKKyAgICAvLyAgICBhbmQsIGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29y
cyB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11
c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIFRo
aXMgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCisg
ICAgLy8gICAgdGhhdCBtdXN0IGJlIHZpc2l0ZWQgbmV4dC4KKyAgICBib29sIGVuZEJhc2ljQmxv
Y2soTWVyZ2VNb2RlKTsKKyAgICAKKyAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhp
cyB0aHJvd3MgYXdheSBhbnkgcmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKKyAgICAvLyB5b3Ug
Y2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgLy8gQWJzdHJhY3RseSBleGVjdXRlcyB0aGUgZ2l2
ZW4gbm9kZS4gVGhlIG5ldyBhYnN0cmFjdCBzdGF0ZSBpcyBzdG9yZWQgaW50byBhbgorICAgIC8v
IGFic3RyYWN0IHJlZ2lzdGVyIGZpbGUgc3RvcmVkIGluICp0aGlzLiBMb2FkcyBvZiBsb2NhbCB2
YXJpYWJsZXMgKHRoYXQgc3BhbgorICAgIC8vIGJhc2ljIGJsb2NrcykgaW50ZXJyb2dhdGUgdGhl
IGJhc2ljIGJsb2NrJ3Mgbm90aW9uIG9mIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZC4KKyAgICAvLyBT
dG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGluIGVuZEJhc2ljQmxvY2soKS4g
VGhpcyByZXR1cm5zIHRydWUKKyAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBh
c3QgdGhpcyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCisgICAgLy8gZm9yIGJs
b2NrIHRlcm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4g
b3IgdmFyaWFudHMKKyAgICAvLyBvZiBUaHJvdy4KKyAgICBib29sIGV4ZWN1dGUoTm9kZUluZGV4
KTsKKyAgICAKKyAgICAvLyBJcyB0aGUgZXhlY3V0aW9uIHN0YXRlIHN0aWxsIHZhbGlkPyBUaGlz
IHdpbGwgYmUgZmFsc2UgaWYgZXhlY3V0ZSgpIGhhcworICAgIC8vIHJldHVybmVkIGZhbHNlIHBy
ZXZpb3VzbHkuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9
CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIGFic3RyYWN0IHN0YXRlIHN0b3JlZCBhdCB0aGUgZmly
c3QgYmxvY2sncyB0YWlsIGludG8gdGhlIHNlY29uZAorICAgIC8vIGJsb2NrJ3MgaGVhZC4gUmV0
dXJucyB0cnVlIGlmIHRoZSBzZWNvbmQgYmxvY2sncyBzdGF0ZSBjaGFuZ2VkLiBJZiBzbywKKyAg
ICAvLyB0aGF0IGJsb2NrIG11c3QgYmUgYWJzdHJhY3RseSBpbnRlcnByZXRlZCBhZ2Fpbi4gVGhp
cyBhbHNvIHNldHMKKyAgICAvLyB0by0+Y2ZhU2hvdWxkUmV2aXNpdCB0byB0cnVlLCBpZiBpdCBy
ZXR1cm5zIHRydWUsIG9yIGlmIHRvIGhhcyBub3QgYmVlbgorICAgIC8vIHZpc2l0ZWQgeWV0Lgor
ICAgIHN0YXRpYyBib29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsK
KyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBibG9j
aydzIHRhaWwgaW50byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVl
IGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAvLyB0
aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1l
cmdlTW9kZSBpcworICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIHN0YXRpYyBib29sIG1l
cmdlVG9TdWNjZXNzb3JzKEdyYXBoJiwgQmFzaWNCbG9jayopOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZv
aWQgY2xvYmJlclN0cnVjdHVyZXMoTm9kZUluZGV4KTsKKyAgICAKKyAgICBib29sIG1lcmdlU3Rh
dGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFy
aWFibGUsIE5vZGVJbmRleCk7CisgICAgCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJl
dHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNv
dXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9k
ZUluZGV4KTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEdyYXBoJiBt
X2dyYXBoOworICAgIAorICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAzMj4gbV9ub2RlczsKKyAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxlczsKKyAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOworICAgIAorICAgIGJvb2wgbV9pc1ZhbGlkOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdB
YnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0
cmFjdFZhbHVlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU3RydWN0
dXJlU2V0LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgeworcHVibGljOgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQorICAg
ICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNldC5z
aXplKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSByZWludGVy
cHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0cnVjdHVy
ZSA9IDA7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBt
X3N0cnVjdHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAg
ICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVy
ZSkgJiYgIWlzVG9wKCkpOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBt
YWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkgfHwgb3RoZXIuc2l6ZSgpID09IDApCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKSB7
CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIW1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICBtX3N0cnVjdHVy
ZSA9IG90aGVyWzBdOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyWzBdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICghb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAgICAgICAgICAgbWFrZVRvcCgpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc3RydWN0dXJl
KSB7CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbWFrZVRvcCgpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBv
dGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAobV9z
dHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0
cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gb3RoZXIuY29udGFpbnMobV9zdHJ1
Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIGRvZXNOb3RDb250YWluQW55T3RoZXJUaGFu
KFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IHN0
cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghb3RoZXIuc2l6ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvdGhlci5zaXplKCkgPiAxKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF07
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAg
IGlmIChvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdXBl
cnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2YoKnRoaXMpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG90aGVyLnNpemUoKSkgeworICAg
ICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclswXTsKKyAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgCisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9CisgICAgCisgICAg
dm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgewor
ICAgICAgICBpZiAoaXNUb3AoKSkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5t
X3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBt
X3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5
cGUgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIShvdGhlciAmIFByZWRpY3RDZWxsKSkgewor
ICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N0cnVjdHVy
ZSkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoIShwcmVkaWN0aW9u
RnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSkgJiBvdGhlcikpCisgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNDbGVhcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG9w
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1
cmUqPigxKTsgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIHJldHVybiAhIW1fc3RydWN0dXJlOworICAgIH0K
KyAgICAKKyAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlKTsKKyAgICAgICAg
QVNTRVJUX1VOVVNFRChpLCAhaSk7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGF0KGkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGxhc3Qo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0KKyAgICAKKyAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Q2VsbDsKKyAgICAg
ICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0Tm9uZTsKKyAgICAg
ICAgcmV0dXJuIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1f
c3RydWN0dXJlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJ
TEUqIG91dCkKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBmcHJp
bnRmKG91dCwgIlRPUCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlKQor
ICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1fc3RydWN0dXJlKTsKKyAgICAgICAgZnBy
aW50ZihvdXQsICJdIik7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBj
YW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KKyAgICBTdHJ1Y3R1cmUq
IG1fc3RydWN0dXJlOworfTsKKworc3RydWN0IEFic3RyYWN0VmFsdWUgeworICAgIEFic3RyYWN0
VmFsdWUoKQorICAgICAgICA6IG1fdHlwZShQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV90eXBlID0gUHJlZGljdE5vbmU7
CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXND
bGVhcigpCisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3ROb25lICYmIG1f
c3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtYWtlVG9wKCkKKyAg
ICB7CisgICAgICAgIG1fdHlwZSA9IFByZWRpY3RUb3A7CisgICAgICAgIG1fc3RydWN0dXJlLm1h
a2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcygpCisgICAg
eworICAgICAgICBpZiAobV90eXBlICYgUHJlZGljdENlbGwpIHsKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNUb3AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBQ
cmVkaWN0VG9wICYmIG1fc3RydWN0dXJlLmlzVG9wKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyBBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBBYnN0cmFjdFZhbHVlIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
c3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlLmFkZCh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCkpOworICAgICAg
ICAKKyAgICAgICAgbV90eXBlID0gcHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1ZSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAgICAg
bV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuYWRkKHN0cnVjdHVyZSk7
CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShzdHJ1
Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChQcmVkaWN0ZWRUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICBpZiAodHlwZSAmIFByZWRpY3RDZWxsKQorICAgICAgICAgICAgbV9zdHJ1
Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5j
bGVhcigpOworICAgICAgICBtX3R5cGUgPSB0eXBlOworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZSAmJiBtX3N0cnVjdHVyZSA9PSBvdGhlci5t
X3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZShjb25zdCBBYnN0cmFjdFZh
bHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24obV90eXBl
LCBvdGhlci5tX3R5cGUpIHwgbV9zdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1fc3RydWN0dXJlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZShQcmVkaWN0ZWRUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBtZXJnZVByZWRpY3Rpb24obV90eXBlLCB0eXBlKTsKKyAgICAgICAgCisgICAgICAg
IGlmICh0eXBlICYgUHJlZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9w
KCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3Ro
ZXIpCisgICAgeworICAgICAgICBtX3R5cGUgJj0gb3RoZXIucHJlZGljdGlvbkZyb21TdHJ1Y3R1
cmVzKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmICh0
eXBlID09IFByZWRpY3RUb3ApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fdHlwZSAm
PSB0eXBlOworICAgICAgICBtX3N0cnVjdHVyZS5maWx0ZXIodHlwZSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBp
ZiAobWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25Gcm9tVmFsdWUodmFsdWUpKSAh
PSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAgICBBU1NFUlQobV90
eXBlICYgUHJlZGljdENlbGwpOworICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlLmNvbnRh
aW5zKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9p
ZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGZwcmludGYob3V0LCAiKCVzLCAiLCBw
cmVkaWN0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAgIG1fc3RydWN0dXJlLmR1bXAob3V0
KTsKKyAgICAgICAgZnByaW50ZihvdXQsICIpIik7CisgICAgfQorI2VuZGlmCisKKyAgICBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJlOworICAgIFByZWRpY3RlZFR5cGUgbV90eXBl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFZhbHVlX2gKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHQmFzaWNCbG9ja19oCisjZGVmaW5lIERGR0Jhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVk
ZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR09wZXJhbmRzLmgiCisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit0eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JM
aXN0OworCitzdHJ1Y3QgQmFzaWNCbG9jayB7CisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRl
Y29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWdu
ZWQgbnVtTG9jYWxzKQorICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAg
ICAgICAgLCBiZWdpbihiZWdpbikKKyAgICAgICAgLCBlbmQoTm9Ob2RlKQorICAgICAgICAsIGlz
T1NSVGFyZ2V0KGZhbHNlKQorICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFsc2UpCisgICAgICAg
ICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKKyAgICAgICAgLCB2YXJpYWJsZXNBdEhlYWQobnVt
QXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFyaWFibGVzQXRUYWlsKG51bUFyZ3Vt
ZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51
bUxvY2FscykKKyAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMp
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgQmxvY2tJbmRleCBnZXRCeXRlY29k
ZUJlZ2luKE93blB0cjxCYXNpY0Jsb2NrPiogYmxvY2spCisgICAgeworICAgICAgICByZXR1cm4g
KCpibG9jayktPmJ5dGVjb2RlQmVnaW47CisgICAgfQorCisgICAgdW5zaWduZWQgYnl0ZWNvZGVC
ZWdpbjsKKyAgICBOb2RlSW5kZXggYmVnaW47CisgICAgTm9kZUluZGV4IGVuZDsKKyAgICBib29s
IGlzT1NSVGFyZ2V0OworICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKKyAgICBib29sIGNmYVNob3Vs
ZFJldmlzaXQ7CisgICAgCisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAg
IAorICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdEhl
YWQ7CisgICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0
VGFpbDsKKyAgICAKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdEhlYWQ7Cisg
ICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9z
ZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlhYmxlLgogICAgIE5v
ZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52
YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBO
b05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBA
IC0xNDQsMTUgKzE0NCwxNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggcGhpID0gYWRk
VG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9sb2Nh
bFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGksIG9wZXJh
bmQpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZh
cmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fs
c0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRleDsKICAgICAgICAg
Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVhZFtvcGVyYW5kXS5zZXRGaXJz
dFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5zZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBv
cGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gYWRkVG9HcmFwaChT
ZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsK
ICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hl
cmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAg
ICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRd
LnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAgaWYgKG5vZGVJbmRl
eCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRl
eF07CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyB0aGUg
R2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgogICAgICAgICAgICAgICAgIEFTU0VSVChub2Rl
LmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVyYW5kKSk7CiAgICAg
ICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOwotICAgICAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7
CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRl
eDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTg2LDkgKzE4Niw5IEBAIHByaXZh
dGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0
YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKICAgICAgICAgbm9kZUlu
ZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBo
aSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0u
dmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUobm9k
ZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1
bWVudEZpcnN0VGltZShhcmd1bWVudCwgbm9kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiBub2RlSW5kZXg7CiAgICAgfQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFt
ZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VS
VChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFwaChTZXRMb2NhbCwg
T3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBhZGRU
b0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwg
dmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRv
SW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KQEAgLTc4Myw4ICs3ODMsOCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyArK2FyZ3VtZW50KSB7
CiAgICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dyYXBoKFNldEFyZ3Vt
ZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0gbV9jb2RlQmxvY2st
Pm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsK
ICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0gc2V0QXJndW1lbnQ7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRd
LnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+
bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmly
c3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9j
ay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1
bWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2ODksMTYgKzE2ODksMTYgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0u
Z2V0KCk7CiAKLSAgICAgICAgICAgIFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAoc3RhY2tUeXBlID09
IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxb
dmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdFRhaWxbdmFyTm9dOworICAgICAg
ICAgICAgTm9kZUluZGV4JiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8g
cHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZhck5vKSA6IHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7CiAKLSAgICAgICAgICAg
IE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7CisgICAgICAgICAgICBO
b2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwogICAgICAgICAgICAgaWYgKHZhbHVl
SW5QcmVkZWNlc3NvciA9PSBOb05vZGUpIHsKICAgICAgICAgICAgICAgICB2YWx1ZUluUHJlZGVj
ZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFj
a1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9jb2RlQmxvY2stPm1fbnVtUGFy
YW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSA6IHZhck5vKSkpOwot
ICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAg
ICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAgICAgICAgICAgICAg
aWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAgICAgICAgICAgICBw
cmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFt2YXJOb10uc2V0Rmlyc3RUaW1lKHZh
bHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywgdmFsdWVJblByZWRl
Y2Vzc29yKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yQmxvY2stPm1fbG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblBy
ZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwog
ICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KHByZWRlY2Vzc29y
QmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2FsKSB7CiAgICAgICAg
ICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRh
cyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCkBAIC0xNzU4LDExICsxNzU4LDE0IEBAIHZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OnNldHVwUHJlZGVjZXNzb3JzKCkKICAgICAgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFs
KCkpOwogCi0gICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAgICAgICAgICAgbV9ncmFwaC5i
bG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRl
Y2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkp
IHsKLSAgICAgICAgICAgIG1fZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKLSAgICAgICAg
ICAgIG1fZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgaWYgKG5vZGUu
aXNKdW1wKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGgu
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldER1cmlu
Z1BhcnNpbmcoKSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxv
Y2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgfSBlbHNl
IGlmIChub2RlLmlzQnJhbmNoKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICAgICAgbm9kZS5zZXROb3RUYWtlbkJs
b2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtl
bkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1f
YmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5k
ZXgpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKICAgICAgICAgfQogICAgIH0KIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiA5NzAw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODgsMTEgKzE4OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2Rl
SW5kZXgsIENvCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICBpZiAgKG5v
ZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAgIHByaW50ZigiJXNUOiMl
dSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChu
b2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICBwcmludGYoIiVzVDojJXUiLCBo
YXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAg
aGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpKSB7Ci0g
ICAgICAgIHByaW50ZigiJXNGOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpOworICAg
ICAgICBwcmludGYoIiVzRjojJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAg
ICh2b2lkKWhhc1ByaW50ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyRmlsZS5oIgpAQCAtNDMsMjkgKzQ0LDYgQEAgY2xhc3MgRXhlY1N0YXRlOwog
CiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZh
cnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJc0Fy
Z3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi10eXBlZGVmIHVp
bnQzMl90IEJsb2NrSW5kZXg7Ci0KLS8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3ZSB0cmFj
ayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCi0vLyBXZSB0cmFjayB0aGUg
Z2V0IHNvIHRoYXQgdGhlc2UgbWF5IGJlIHNoYXJlZCwgYW5kIHdlIHRyYWNrIHRoZSBzZXQgdG8K
LS8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgdG8gcmVmZXJlbmNlIHRoZSBmaW5h
bCBkZWZpbml0aW9uLgotc3RydWN0IFZhcmlhYmxlUmVjb3JkIHsKLSAgICBWYXJpYWJsZVJlY29y
ZCgpCi0gICAgICAgIDogdmFsdWUoTm9Ob2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCh2YWx1ZSA9PSBOb05vZGUpOwotICAgICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKLSAgICB9Ci0K
LSAgICBOb2RlSW5kZXggdmFsdWU7Ci19OwotCiBzdHJ1Y3QgTWV0aG9kQ2hlY2tEYXRhIHsKICAg
ICAvLyBJdCBpcyBzYWZlIHRvIHJlZmVyIHRvIHRoZXNlIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBh
cmUgc2hhZG93ZWQgYnkKICAgICAvLyB0aGUgb2xkIEpJVCdzIENvZGVCbG9jaydzIE1ldGhvZENh
bGxMaW5rSW5mby4KQEAgLTExMSw0MCArODksNiBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEg
ewogICAgIHVuc2lnbmVkIHJlc29sdmVJbmZvSW5kZXg7CiB9OwogCi10eXBlZGVmIFZlY3RvciA8
QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0OwotCi1zdHJ1Y3QgQmFzaWNCbG9jayB7Ci0g
ICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQotICAgICAgICA6IGJ5dGVj
b2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBiZWdpbihiZWdpbikKLSAgICAgICAg
LCBlbmQoTm9Ob2RlKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIG1f
YXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChu
dW1Mb2NhbHMpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQotICAg
ICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxvY2FscykKLSAgICB7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+
KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOwotICAgIE5vZGVJbmRleCBiZWdp
bjsKLSAgICBOb2RlSW5kZXggZW5kOwotICAgIGJvb2wgaXNPU1JUYXJnZXQ7Ci0KLSAgICBQcmVk
ZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7Ci0gICAgCi0gICAgVmVjdG9yPFZhcmlhYmxlUmVj
b3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2
PiBtX2xvY2Fsc0F0SGVhZDsKLSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1f
YXJndW1lbnRzQXRUYWlsOwotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxz
QXRUYWlsOwotfTsKLQogLy8gCiAvLyA9PT0gR3JhcGggPT09CiAvLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTMsOCArMTE5Myw4IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJh
bmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUm
IGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJs
b2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewog
ICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMTI1NCw4ICsxMjU0LDggQEAgYm9vbCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFpfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7
CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24g
PSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtMTM5Niw4ICsxMzk2LDggQEAgdm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5j
aE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJy
YW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJs
b2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAg
ICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxv
Y2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4g
JiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3I2NC5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMxLDggKzExMzEs
OCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBv
cGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBO
b2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2pp
dC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFr
ZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkp
IHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKQEAgLTExOTIsOCArMTE5Miw4IEBAIGJvb2wg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVDb20KIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBa
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9k
ZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0
KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgp
OworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0
aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTEzMjEsOCArMTMyMSw4IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBh
dChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsK
KyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
IAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2Vu
IGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRh
a2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2gu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw2ICsxMzkzLDExIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAorICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgp
OworICAgIH0KKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogbGFi
ZWwgPSAwKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwyMyArNDAyLDE5IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50cnlEYXRhKiBl
bnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRl
Y29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CiAg
ICAgICAgIAotICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rp
b25zKGJhc2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9j
YWxzQXRIZWFkLnNpemUoKSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJh
c2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVl
OwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
YWN0aW9uYWJsZVByZWRpY3Rpb25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9u
RnJvbVByZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgfQorICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcyA9IGJhc2ljQmxvY2sudmFsdWVzQXRIZWFkOwogICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxz
QXRIZWFkW2ldLnZhbHVlOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0g
ICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlv
bmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgLy8gRml4IHRoZSBleHBl
Y3RlZCB2YWx1ZXM6IGluIG91ciBwcm90b2NvbCwgYSBkZWFkIHZhcmlhYmxlIHdpbGwgaGF2ZSBh
biBleHBlY3RlZAorICAgICAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhlIG9sZCBK
SVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKKyAgICAgICAgLy8g
bmVlZCAoVG9wLCBUT1ApLgorICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFy
Z3VtZW50KGFyZ3VtZW50KSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgZW50cnktPm1fZXhw
ZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLm1ha2VUb3AoKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAgICAgaWYgKGJhc2lj
QmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSA9PSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLm1ha2VUb3AoKTsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnBhY2soKTsK
LSAgICAgICAgCi0gICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25zID0gYWN0aW9uYWJsZVByZWRp
Y3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2ljQmxvY2spOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTcwMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTAgKzI2LDggQEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVmaW5lIERGR05vZGVfaAogCi0j
aW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQ
b2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaW9u
RmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdn
aW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgogI2RlZmluZSBFTkFC
TEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtNjcsNiArNjUsOCBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIK
KyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgi
CiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpA
QCAtNzQsMTUgKzc0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
Ly8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pLgot
Ly8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlwZS1jaGVja2VkIGF0IGNvbXBpbGUgdGlt
ZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCi1lbnVtIFZpcnR1YWxSZWdpc3RlciB7IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OwotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1
YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxSZWdpc3Rlcl9pc18zMmJpdCk7Ci0K
IC8vIFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCiB0
eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2Rl
ID0gVUlOVF9NQVg7CiAKK3R5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKKworc3RydWN0IE5v
ZGVJbmRleFRyYWl0cyB7CisgICAgc3RhdGljIE5vZGVJbmRleCBkZWZhdWx0VmFsdWUoKSB7IHJl
dHVybiBOb05vZGU7IH0KK307CisKIC8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJv
bSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLAogLy8gYW5k
IHRvIGltcGxlbWVudCBPU1IuCiAvLyAoUHJlc2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNv
ZGUgaW5kZXgpLgpAQCAtMTEwLDUxICsxMTEsNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1f
Ynl0ZWNvZGVJbmRleDsKIH07CiAKLWNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVu
aW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEoKQotICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24o
UHJlZGljdE5vbmUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgICAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgICAg
ICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZp
bmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOwotICAgIH0KLSAgICAKLSAg
ICBpbnQgb3BlcmFuZCgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihs
b2NhbCgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5t
X3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9u
OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1p
bmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCi0gICAgLy8gd2ls
bCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rp
b24uIEJ1dAotICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFu
ZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCi0gICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFj
Y2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KLQotICAgIFZpcnR1YWxSZWdpc3RlciBtX2xv
Y2FsOwotICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOwotfTsKLQogc3RydWN0IFN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpAQCAtNTY0LDYgKzUyMCw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgp
CiAgICAgeworICAgICAgICBBU1NFUlQoaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihtX29wSW5mbykt
PmZpbmQoKTsKICAgICB9CiAgICAgCkBAIC03NTUsMTMgKzcxMiwzNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBvcCAmIE5vZGVJc1Rlcm1pbmFsOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIHRha2VuQnl0ZWNvZGVPZmZzZXQoKQorICAgIHVuc2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZz
ZXREdXJpbmdQYXJzaW5nKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlz
SnVtcCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IG5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKQorICAgIHVuc2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXREdXJpbmdQYXJzaW5nKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRUYWtl
bkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAgICBtX29wSW5mbyA9IGJsb2NrSW5kZXg7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKKyAgICAgICAg
bV9vcEluZm8yID0gYmxvY2tJbmRleDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCB0YWtl
bkJsb2NrSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1w
KCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm87CisgICAgfQorICAgIAorICAgIEJsb2NrSW5k
ZXggbm90VGFrZW5CbG9ja0luZGV4KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgp
KTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywzNCArNzcs
MzggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vICAg
IGludG8gYSBsZXNzLWxpa2VseSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9u
IGlzIHRvIHNpbXBseSBub3QKICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgogICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudFVw
cGVyQm91bmQoKTsgKytpKSB7Ci0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rp
b24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudChpKTsKLSAgICAgICAgaWYgKHByZWRp
Y3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChpID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsK
KyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAo
YXJndW1lbnQgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgYXJndW1lbnQgJXUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwg
YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJWx1IHdhcyBub3QgcGFzc2Vk
LCBleHBlY3RlZCAiLCBhcmd1bWVudCk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRm
KCIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+
YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlOwor
ICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlID0gZXhlYy0+YXJndW1l
bnQoYXJndW1lbnQgLSAxKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLnZhbGlkYXRlKHZhbHVlKSkgewogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJl
Y2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1l
bnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJl
ZGljdGlvbikpOworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFy
Z3VtZW50ICVsdSBpcyAlcywgZXhwZWN0ZWQgIiwgYXJndW1lbnQsIHZhbHVlLmRlc2NyaXB0aW9u
KCkpOworICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1l
bnQpLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZVVwcGVyQm91bmQo
KTsgKytpKSB7Ci0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRy
eS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZShpKTsKLSAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5yZWdp
c3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb24pKSB7CisgICAgZm9yIChzaXplX3QgbG9j
YWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7
ICsrbG9jYWwpIHsKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChs
b2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSkpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGlj
dGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlbHUgaXMgJXMsIGV4cGVjdGVkICIsIGxvY2FsLCBleGVj
LT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCkpOworICAgICAgICAg
ICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLmR1bXAoc3Rkb3V0KTsKKyAg
ICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShy
ZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBERkdPU1JFbnRyeV9o
CiAjZGVmaW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1ZGUgIkFjdGlvbmFibGVQcmVkaWN0aW9u
LmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR09wZXJhbmRz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3ICs0MCw3IEBAIG5hbWVzcGFjZSBERkcg
ewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4Owog
ICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgQWN0aW9uYWJsZVByZWRpY3Rp
b25zIG1fcHJlZGljdGlvbnM7CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV9leHBlY3Rl
ZFZhbHVlczsKIH07CiAKIGlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUlu
ZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPcGVy
YW5kc19oCisjZGVmaW5lIERGR09wZXJhbmRzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRp
c3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGluZSBib29s
IG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CisgICAgc3RhdGlj
IFQgZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gVCgpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBPcGVyYW5kVmFsdWVUcmFpdHM8VD4gPgorY2xhc3MgT3Bl
cmFuZHMgeworcHVibGljOgorICAgIE9wZXJhbmRzKCkgeyB9CisgICAgCisgICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykKKyAgICB7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtQXJndW1l
bnRzKTsKKyAgICAgICAgbV9sb2NhbHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBudW1M
b2NhbHMpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fscy5zaXplKCk7IH0KKyAgICAKKyAgICBUJiBhcmd1
bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX2FyZ3VtZW50c1tpZHhdOyB9CisgICAgY29uc3Qg
VCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNbaWR4XTsg
fQorICAgIAorICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07
IH0KKyAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2xvY2Fs
c1tpZHhdOyB9CisgICAgCisgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgICAgIG1f
bG9jYWxzLnJlc2l6ZShpZHggKyAxKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRT
aXplOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9sb2NhbHNb
aV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2xvY2Fsc1tpZHhdID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1l
bnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAg
ICAgYXJndW1lbnQoaWR4KSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldExvY2Fs
Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkgfHwgbV9sb2NhbHNbaWR4XSA9PSBUcmFpdHM6OmRl
ZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgc2V0TG9jYWwoaWR4LCB2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJh
bmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9sb2NhbHNbb3BlcmFuZF07CisgICAgfQorICAg
IAorICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVy
YW5kKSk7IH0KKyAgICAKKyAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7
CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgp
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgbV9hcmd1
bWVudHNbYXJndW1lbnRdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHNldExvY2FsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRl
ZmF1bHRWYWx1ZSgpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQsIDg+IG1f
YXJndW1lbnRzOworICAgIFZlY3RvcjxULCAxNj4gbV9sb2NhbHM7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBkdW1wT3BlcmFuZHMoT3BlcmFuZHM8VD4mIG9wZXJhbmRzLCBGSUxF
KiBvdXQpCit7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG9wZXJh
bmRzLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKGFyZ3Vt
ZW50KQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIgIik7CisgICAgICAgIG9wZXJhbmRzLmFy
Z3VtZW50KGFyZ3VtZW50KS5kdW1wKG91dCk7CisgICAgfQorICAgIGZwcmludGYob3V0LCAiIDog
Iik7CisgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IG9wZXJhbmRzLm51bWJlck9m
TG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAgICAgZnBy
aW50ZihvdXQsICIgIik7CisgICAgICAgIG9wZXJhbmRzLmxvY2FsKGxvY2FsKS5kdW1wKG91dCk7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09wZXJhbmRzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
REZHQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
U2NvcmVCb2FyZC5oIgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CkBAIC01NSw0NSArNTYs
MTEgQEAgcHVibGljOgogICAgIHZvaWQgZml4cG9pbnQoKQogICAgIHsKICNpZiBFTkFCTEUoREZH
X0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKICNlbmRpZgogCi0jaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0gMDsK
LSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gVXAgaGVyZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dh
cmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhhdCB0byBiZQotICAgICAgICAgICAgLy8gbW9y
ZSBwcm9maXRhYmxlLgotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2Fy
ZCgpOwotICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgbV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZv
cndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHkt
c29ydGVkIGFuZAotICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgotICAgICAgICAgICAg
cHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdl
ZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
QmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9n
aWNhbCBjb2RlIHdpbGwKLSAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNw
ZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KLSAgICAgICAgICAg
IC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBm
b3J3YXJkIGZpeHBvaW50Ci0gICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFu
ZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KLSAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpOwot
ICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAgICAgICAKKyAgICAgICAgcHJvcGFnYXRl
QXJpdGhOb2RlRmxhZ3MoKTsKKyAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnMoKTsKICAgICAg
ICAgZml4dXAoKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQpAQCAtMTEwLDYgKzc3LDEzIEBAIHB1YmxpYzoKIAogICAgICAgICBhbGxvY2F0ZVZp
cnR1YWxSZWdpc3RlcnMoKTsKIAorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9j
YXRpb246XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNlbmRpZgor
CisgICAgICAgIGdsb2JhbENGQSgpOworCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQog
ICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHByb3BhZ2F0aW9uOlxuIik7CiAgICAgICAgIG1f
Z3JhcGguZHVtcChtX2NvZGVCbG9jayk7CkBAIC0yNzQsNiArMjQ4LDI1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncyhtX2dyYXBoW21fY29tcGlsZUluZGV4
XSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MoKQorICAg
IHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIG1f
Y291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBVcCBoZXJlIHdlIHN0YXJ0IHdp
dGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0aGF0IHRvIGJlCisgICAgICAg
ICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVG
bGFnc0JhY2t3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0ZvcndhcmQoKTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBo
W21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CkBAIC02MDgsNyArNjAxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBwcmludGYoIiVzICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW21fY29t
cGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgcHJlZGlj
dGlvblRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOwogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKQEAgLTYzMiw2ICs2
MjUsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyht
X2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcHJvcGFnYXRl
UHJlZGljdGlvbnMoKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
b3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXItb3B0aW1hbCBmb3IgYm90aCB0b3BvbG9naWNhbGx5
LXNvcnRlZCBhbmQKKyAgICAgICAgICAgIC8vIERGUy1zb3J0ZWQgY29kZS4KKyAgICAgICAgICAg
IHByb3BhZ2F0ZVByZWRpY3Rpb25zRm9yd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5n
ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBwYXRob2xv
Z2ljYWwgY29kZSB3aWxsCisgICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVzcy4gTG9vcHMgKGVz
cGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAg
ICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUg
Zm9yd2FyZCBmaXhwb2ludAorICAgICAgICAgICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1dGlvbiBh
bmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQoKTsK
KyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0b0Rv
dWJsZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCA9PSBWYWx1ZVRvTnVtYmVyKSB7CkBAIC0xNDI0LDYgKzE0NDAsODEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA9IGNh
bGxlZVJlZ2lzdGVyczsKICAgICB9CiAgICAgCisgICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQWJz
dHJhY3RTdGF0ZSYgc3RhdGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHBy
aW50ZigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBibG9ja0luZGV4LCBibG9jay0+Ynl0ZWNv
ZGVCZWdpbik7CisjZW5kaWYKKyAgICAgICAgc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsK
KyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50
ZigiICAgICAgaGVhZCB2YXJzOiAiKTsKKyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1
ZXNBdEhlYWQsIHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAg
ICBmb3IgKE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YmVnaW47IG5vZGVJbmRleCA8IGJs
b2NrLT5lbmQ7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUlu
ZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIHByaW50Zigi
ICAgICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCksIG5v
ZGVJbmRleCk7CisgICAgICAgICAgICBzdGF0ZS5kdW1wKHN0ZG91dCk7CisgICAgICAgICAgICBw
cmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghc3RhdGUuZXhlY3V0ZShub2Rl
SW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgRU5BQkxFKERG
R19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICAgIHRhaWwg
cmVnczogIik7CisgICAgICAgIHN0YXRlLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJc
biIpOworI2VuZGlmCisgICAgICAgIG1fY2hhbmdlZCB8PSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKEFi
c3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgICAgdGFpbCB2YXJzOiAiKTsK
KyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIHN0ZG91dCk7CisgICAg
ICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1G
b3J3YXJkQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiQ0ZBIFsldV1cbiIsICsr
bV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
ayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCisgICAgICAg
ICAgICBwZXJmb3JtQmxvY2tDRkEoc3RhdGUsIGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBnbG9iYWxDRkEoKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIAorICAgICAgICAv
LyBUaGlzIGltcGxlbWVudHMgYSBwc2V1ZG8td29ya2xpc3QtYmFzZWQgZm9yd2FyZCBDRkEsIGV4
Y2VwdCB0aGF0IHRoZSB2aXNpdCBvcmRlcgorICAgICAgICAvLyBvZiBibG9ja3MgaXMgdGhlIGJ5
dGVjb2RlIHByb2dyYW0gb3JkZXIgKHdoaWNoIGlzIG5lYXJseSB0b3BvbG9naWNhbCksIGFuZAor
ICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgd29ya2xpc3Qgd2UganVzdCB3YWxrIGFsbCBiYXNpYyBi
bG9ja3MgY2hlY2tpbmcgaWYgY2ZhU2hvdWxkUmV2aXNpdAorICAgICAgICAvLyBpcyBzZXQgdG8g
dHJ1ZS4gVGhpcyBpcyBsaWtlbHkgdG8gYmFsYW5jZSB0aGUgZWZmaWNpZW5jeSBwcm9wZXJ0aWVz
IG9mIGJvdGgKKyAgICAgICAgLy8gd29ya2xpc3QtYmFzZWQgYW5kIGZvcndhcmQgZml4cG9pbnQt
YmFzZWQgYXBwcm9hY2hlcy4gTGlrZSBhIHdvcmtsaXN0LWJhc2VkCisgICAgICAgIC8vIGFwcHJv
YWNoLCBpdCB3b24ndCB2aXNpdCBjb2RlIGlmIGl0J3MgbWVhbmluZ2xlc3MgdG8gZG8gc28gKG5v
dGhpbmcgY2hhbmdlZCBhdAorICAgICAgICAvLyB0aGUgaGVhZCBvZiB0aGUgYmxvY2sgb3IgdGhl
IHByZWRlY2Vzc29ycyBoYXZlIG5vdCBiZWVuIHZpc2l0ZWQpLiBMaWtlIGEgZm9yd2FyZAorICAg
ICAgICAvLyBmaXhwb2ludC1iYXNlZCBhcHByb2FjaCwgaXQgaGFzIGEgaGlnaCBwcm9iYWJpbGl0
eSBvZiBvbmx5IHZpc2l0aW5nIGEgYmxvY2sKKyAgICAgICAgLy8gYWZ0ZXIgYWxsIHByZWRlY2Vz
c29ycyBoYXZlIGJlZW4gdmlzaXRlZC4gT25seSBsb29wcyB3aWxsIGNhdXNlIHRoaXMgYW5hbHlz
aXMgdG8KKyAgICAgICAgLy8gcmV2aXNpdCBibG9ja3MsIGFuZCB0aGUgYW1vdW50IG9mIHJldmlz
aXRpbmcgaXMgcHJvcG9ydGlvbmFsIHRvIGxvb3AgZGVwdGguCisgICAgICAgIAorICAgICAgICBB
YnN0cmFjdFN0YXRlOjppbml0aWFsaXplKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgQWJz
dHJhY3RTdGF0ZSBzdGF0ZShtX2NvZGVCbG9jaywgbV9ncmFwaCk7CisgICAgICAgIAorICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHBlcmZv
cm1Gb3J3YXJkQ0ZBKHN0YXRlKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9
CisgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERh
dGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
OTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjQsOCArNTY0LDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUmIG5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCku
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsK
LSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gRklYTUU6IEFkZCBmYXN0
IGNhc2VzIGZvciBrbm93biBCb29sZWFuIQogCkBAIC0xNTA0LDcgKzE1MDQsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6
Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJ
bmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAg
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgIGlm
ICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1
bXAoKSwgdGFrZW4pOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CkBAIC0xNTE1
LDggKzE1MTUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50
ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NzAw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1MCw3ICs0NTAsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVj
dWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwg
dm9pZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpCiB7CiAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTQ2MCw4ICs0
NjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQ
UlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwor
ICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hl
Y2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7
CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwpAQCAtNTAxLDkg
KzUwMyw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKIAogICAg
ICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERhdGFGb3Jt
YXRKU0Jvb2xlYW4pOwogICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUu
Y2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmds
b2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0RXF1
YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5h
bE9iamVjdFByZWRpY3Rpb24pOwogICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYm
IE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNo
aWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5v
ZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsK
ICAgICBlbHNlCiAgICAgICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKG5vZGUs
IGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAKQEAgLTUyOSw3ICs1MzEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQgKnZw
dHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qo
Tm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVj
aykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC01MzcsNyArNTM5LDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1
bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAg
ICAgCkBAIC01NDUsNyArNTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZQogICAgIAogICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAg
bV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHJlc3VsdEdQUik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgaWYgKG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUp
KSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTU2NiwxMSAr
NTcwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJM
b2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGls
ZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmpl
Y3RPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQx
KCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKQEAgLTYzMCwxOSArNjM0LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KE4KICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJ
bmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZv
aWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChO
b2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2Vu
LCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgYWRkQnJh
bmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQp
OwogICAgIAogICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5U
YWdCaXRVbmRlZmluZWQpLCB2YWx1ZUdQUik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsK
KyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgIGFkZEJy
YW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAKQEAgLTY1NCw4ICs2NjAsOCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgSlNWYWx1ZU9wZXJh
bmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHZhbHVlR1BSID0gdmFs
dWUuZ3ByKCk7CiAgICAgCi0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGlmIChpc0tub3duQm9vbGVh
bihub2RlLmNoaWxkMSgpKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwpAQCAtNjczLDkgKzY3OSw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgCiAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAg
IGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNl
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewot
ICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90
VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBlbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9v
bCBpbnZlcnQgPSBmYWxzZTsKQEAgLTcwOCw5ICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgewogICAg
ICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJ
bW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsKKwogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgdmFsdWUudXNl
KCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03NDgsMTUgKzc1MiwxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAg
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9jaygpLT52
YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhh
dmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNv
bXBpbGUuCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7CisgICAgICAg
IGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lIHx8IHZhbHVlLmlzQ2xlYXIoKSkgewogICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRo
aXMpOwotICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsKKyAgICAg
ICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpIHsKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpLCByZXN1bHQu
Z3ByKCkpOwogCiAgICAgICAgICAgICAvLyBMaWtlIGludGVnZXJSZXN1bHQsIGJ1dCBkb24ndCB1
c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLApAQCAtNzc1LDkgKzc4MCw5
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9n
cHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsK
IAogICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgaWYgKGlzQXJyYXlQcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoaXNDZWxsUHJlZGljdGlvbih2YWx1ZS5tX3R5
cGUpKQogICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKLSAgICAgICAgZWxz
ZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgZWxzZSBpZiAo
aXNCb29sZWFuUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgZm9ybWF0ID0g
RGF0YUZvcm1hdEpTQm9vbGVhbjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZm9ybWF0ID0g
RGF0YUZvcm1hdEpTOwpAQCAtODIwLDcgKzgyNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5n
cHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0
cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jv
b2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xNDA4LDcgKzE0MTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hl
Y2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQg
d2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2
ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNo
ZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAg
aWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCkBAIC0xNDQyLDcg
KzE0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBp
cyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2Fu
IHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTE1MjQsNyArMTUz
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
CiAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwg
V3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhH
UFIpOwogCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7
CkBAIC0xNTY3LDcgKzE1NzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlm
ICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAg
LTE2MTAsNyArMTYxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDogewotICAgICAgICBCbG9ja0luZGV4IHRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtl
bkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtl
bkJsb2NrSW5kZXgoKTsKICAgICAgICAgaWYgKHRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAg
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKQEAgLTE2MjEsOCArMTYyNyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5j
aGlsZDEoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0
LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9m
ZnNldCgpKTsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQo
KSk7CisgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgo
KTsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJ
bmRleCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0
Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAg
ICAgCkBAIC0xNzk1LDkgKzE4MDEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNWYWx1ZS5n
cHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hH
UFIpOwotICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihWYWx1ZU51bGwpKSkpOworICAgICAgICAgICAgaWYgKCFpc090aGVyUHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAgICBtX2pp
dC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwg
c2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3Qo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BSLCBtX2Nv
bXBpbGVJbmRleCk7CkBAIC0xODA3LDcgKzE4MTUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oYXQobm9k
ZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1
YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAg
ICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUu
Z3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
U3RyaW5nVlB0cikpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlz
VmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTg0
Nyw5ICsxODU2LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgLy8gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdG90eXBlIGlzIGFuIG9iamVj
dC4gSWYgd2UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZQogICAgICAgICAvLyB0aGF0IGl0J3MgYSBG
aW5hbE9iamVjdCB0aGVuIHdlIHNwZWN1bGF0ZSBvbiB0aGF0IGRpcmVjdGx5LiBPdGhlcndpc2Ug
d2UKICAgICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNlZCkgY2hlY2suCi0gICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQ
dHIpKSk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKCFpc0ZpbmFsT2Jq
ZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0
VlB0cikpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g4
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQ
UiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKICAgICAgICAgfQpAQCAtMTk3OCw3ICsxOTg4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJl
c3VsdEdQUik7CkBAIC0xOTk3LDcgKzIwMDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAg
IGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc1N0cmlu
Z1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CkBAIC0yMDEyLDYg
KzIwMjIsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICBp
ZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yo
bm9kZS5zdHJ1Y3R1cmVTZXQoKSkpIHsKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAK
ICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKQEAgLTIxMzEsNyAr
MjE0Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQ
UiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3Rl
ZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOworICAgICAgICBpZiAoIW1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5kb2VzTm90Q29udGFpbkFueU90
aGVyVGhhbihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CiAgICAgICAg
IGlmIChtZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNvZGVCbG9jaygpLT5nbG9i
YWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUo
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZS0+c3Ry
dWN0dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVj
a0RhdGEucHJvdG90eXBlU3RydWN0dXJlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyNSw4ICsxMjUsOCBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25z
dAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUm
IG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25k
aXRpb24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2Rl
SW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAg
QmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0lu
ZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVj
dWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTEzNywxMSAr
MTM3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWIKICAgICAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwogfQogCi12b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5v
ZGVJbmRleCwgdm9pZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlw
ZSkpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAg
QmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNo
Tm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBi
cmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBi
cmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwogICAg
IApAQCAtMTU4LDggKzE1OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplCiAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BS
ID0gb3AyLmdwcigpOwogICAgIAotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRp
Y3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIo
Y29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0g
KG1fYmxvY2sgKyAxKSkKQEAgLTE2OSw4ICsxNzEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVPYmplCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJ
bnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENv
bXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBicmFu
Y2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9q
aXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5
dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRv
IHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4g
d2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFs
bCB0aHJvdWdoLgpAQCAtMjE5LDExICsyMjEsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0g
Q29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hp
bGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9s
ZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RF
cXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5h
bE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVzZShu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAg
fSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVB
cnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAgICAg
ICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICAgICAgY29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgICAgICAgICB1c2Uobm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0g
ZWxzZQpAQCAtMjU2LDE4ICsyNTgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShC
YXNpY0Jsb2NrJgogICAgIG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogCi0gICAgQVNTRVJU
KG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkpOwor
ICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51
bWJlck9mQXJndW1lbnRzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVu
dHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1f
YXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
YmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpOwogICAgICAgICBpZiAobm9kZUluZGV4
ID09IE5vTm9kZSkKICAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFs
dWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYXJndW1lbnRz
W2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRpY3Rpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKG1fdmFy
aWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIG1fc3Rh
dGUucmVzZXQoKTsKKyAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOworICAgIAor
ICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51
bWJlck9mTG9jYWxzKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9j
YWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2su
dmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKICAgICAgICAgICAgIG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lz
dGVyRmlsZSk7CiAgICAgICAgIGVsc2UKQEAgLTMzNyw2ICszNDIsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4i
KTsKICNlbmRpZgogICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3Ry
YWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVkIGZvciB0aGUgbmV4dCBub2RlLgorICAgICAgICBt
X3N0YXRlLmV4ZWN1dGUobV9jb21waWxlSW5kZXgpOworICAgICAgICAKICAgICAgICAgaWYgKG5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAg
ICB9CkBAIC01MzcsNyArNTQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENo
YXJDb2RlQQogICAgIEdQUlJlZyBzdHJpbmdSZWcgPSBzdHJpbmcuZ3ByKCk7CiAgICAgR1BSUmVn
IGluZGV4UmVnID0gaW5kZXguZ3ByKCk7CiAgICAgCi0gICAgaWYgKCFpc0tub3duU3RyaW5nKG5v
ZGUuY2hpbGQxKCkpKQorICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0cmluZ1JlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlz
b24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0
IGFyZSB0b28gbGFyZ2UKQEAgLTU2Niw3ICs1NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAg
IEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgaWYgKCFpc0tub3du
U3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBh
cmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0
aGF0IGFyZSB0b28gbGFyZ2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgPGRmZy9ERkdBYnN0cmFjdFN0
YXRlLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAtNDE3LDQzICs0MTgsMTYgQEAgcHJpdmF0ZToKICAg
ICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBp
c0tub3duQXJyYXkoTm9kZUluZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBh
dChvcDEpOwotICAgICAgICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKLSAgICAgICAgICAgIHJldHVybiBpc0FycmF5UHJlZGljdGlvbihub2RlLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3
QXJyYXk6Ci0gICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0tub3duU3RyaW5nKE5vZGVJ
bmRleCBvcDEpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGF0KG9wMSkub3ApIHsKLSAgICAgICAg
Y2FzZSBTdHJDYXQ6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotICAgIAogICAgIGJvb2wgY29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFpfREZHT3BlcmF0
aW9uX0VKSik7CiAgICAgYm9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSYsIE1hY3JvQXNz
ZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0
aW9uLCBaX0RGR09wZXJhdGlvbl9FSkopOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50ZWdl
ckJyYW5jaChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNo
KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91YmxlQ29u
ZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKTsKLSAgICB2b2lkIGNvbXBpbGVP
YmplY3RFcXVhbGl0eShOb2RlJiwgdm9pZCogdnB0cik7CisgICAgdm9pZCBjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCog
dnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpOworICAgIHZvaWQg
Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyLCBib29sICgqcHJlZGljdGlv
bkNoZWNrKShQcmVkaWN0ZWRUeXBlKSk7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSYp
OwotICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCB2YWx1
ZSwgdm9pZCogdnB0cik7CisgICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qo
Tm9kZUluZGV4IHZhbHVlLCB2b2lkKiB2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsK
ICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUmKTsKLSAgICB2b2lkIGVtaXRPYmplY3RP
ck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRl
eCBub3RUYWtlbiwgdm9pZCAqdnB0cik7CisgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChOb2RlSW5kZXggdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgZW1pdEJy
YW5jaChOb2RlJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7
CkBAIC01NzUsNiArNTQ5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsK
ICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CiAgICAgCisgICAgQWJzdHJhY3RT
dGF0ZSBtX3N0YXRlOworICAgIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCkBAIC04MDcsNiArNzgzLDcgQEAgaW5saW5lIFNw
ZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV92YXJpYWJsZXMoaml0Lmdy
YXBoKCkubV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgICwgbV9zdGF0ZShtX2ppdC5jb2RlQmxv
Y2soKSwgbV9qaXQuZ3JhcGgoKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDEyIEBACiAjaWZuZGVmIERGR1N0cnVjdHVyZVNldF9oCiAjZGVmaW5lIERGR1N0cnVjdHVy
ZVNldF9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM0LDYgKzQwLDggQEAg
Y2xhc3MgU3RydWN0dXJlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTsKKwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1
cmVTZXQoKSB7IH0KQEAgLTQzLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9zdHJ1Y3R1
cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fc3RydWN0dXJlcy5jbGVhcigpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghY29udGFp
bnMoc3RydWN0dXJlKSk7CkBAIC0xMDQsMTAgKzExNyw1MCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
U3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmxhc3QoKTsgfQog
CisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSByZXN1bHQgPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHJlc3VsdCwgcHJlZGljdGlvbkZyb21TdHJ1
Y3R1cmUobV9zdHJ1Y3R1cmVzW2ldKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZXMuc2l6ZSgpICE9IG90
aGVyLm1fc3RydWN0dXJlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNbaV0p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsICJbIik7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7Cisg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmVzW2ldKTsKKyAgICAgICAg
fQorICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKyAgICAKIHByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisgICAgCiAgICAg
VmVjdG9yPFN0cnVjdHVyZSosIDI+IG1fc3RydWN0dXJlczsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAjZW5kaWYgLy8gREZH
U3RydWN0dXJlU2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAorI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBs
b2NhdGlvbikuCisvLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQgYXQg
Y29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KK2VudW0gVmlydHVhbFJl
Z2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07CitDT01QSUxFX0FTU0VSVChz
aXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVyX2lz
XzMyYml0KTsKKworY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZh
cmlhYmxlQWNjZXNzRGF0YT4geworcHVibGljOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCisg
ICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCkpKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9u
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwpCisgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xv
Y2FsKTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGludCBvcGVy
YW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlv
biwgcHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bigpCisgICAgeworICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50
LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUgdGhl
IHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0Cisg
ICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0
IGV4cGVjdCBERkcgc3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVz
IGRvIGJlIHNpZ25pZmljYW50LgorCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7CisgICAg
UHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110264</attachid>
            <date>2011-10-08 00:45:28 -0700</date>
            <delta_ts>2011-10-08 00:49:30 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfa_patch_5.diff</filename>
            <type>text/plain</type>
            <size>154259</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYxIEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKwlERkcgZG9l
cyBub3QgaGF2ZSBmbG93LXNlbnNpdGl2ZSBpbnRyYXByb2NlZHVyYWwgY29udHJvbCBmbG93IGFu
YWx5c2lzCisJaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NjkwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwlUaGlzIGlzIGEgMiUgd2lu
IG9uIFY4IGFuZCBhIDElIHdpbiBvbiBLcmFrZW4uCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9uVG9TdHJpbmcpOgorICAgICAgICAq
IGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OkFic3RyYWN0
U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRl
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2spOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAo
SlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpjbG9iYmVy
U3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0
ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVyZ2UpOgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZHVtcCk6CisgICAgICAgICogZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6aXNWYWxp
ZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om1ha2VUb3ApOgorICAgICAg
ICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnRvcCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGRBbGwpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVj
dHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbik6CisgICAgICAgIChK
U0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdXBlcnNldE9mKToKKyAgICAgICAg
KEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlND
OjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6bGFzdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpjbGVh
cik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6aXNDbGVhcik6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjp0
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OnNldCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6
OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dmFsaWRhdGUpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1bXApOgorICAgICAgICAqIGRmZy9E
RkdCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OkJh
c2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmdldEJ5dGVjb2RlQmVn
aW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldEFy
Z3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFjayk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldHVwUHJlZGVjZXNzb3JzKToKKyAg
ICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpkdW1w
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OmJsb2NrKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2Vu
ZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9s
ZVN0cmljdEVxKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3Bl
Y3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVy
YXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb21waWxlcjo6bm90aWNlT1NS
RW50cnkpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZUluZGV4VHJhaXRzOjpkZWZhdWx0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZh
cmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dGFrZW5CeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Om5vdFRha2Vu
Qnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpz
ZXRUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnNldE5vdFRha2Vu
QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dGFrZW5CbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZU9TUkVudHJ5
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAgICAgICAgKiBkZmcvREZHT3BlcmFu
ZHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6b3BlcmFuZElzQXJndW1lbnQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRWYWx1ZVRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpPcGVyYW5kczo6T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpERkc6Ok9w
ZXJhbmRzOjpudW1iZXJPZkFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6
Om51bWJlck9mTG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6YXJndW1lbnQp
OgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpsb2NhbCk6CisgICAgICAgIChKU0M6OkRG
Rzo6T3BlcmFuZHM6OnNldExvY2FsKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0
QXJndW1lbnRGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2Nh
bEZpcnN0VGltZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Om9wZXJhbmQpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZH
OjpPcGVyYW5kczo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OmR1bXBPcGVyYW5kcyk6Cisg
ICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6OmZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdh
dGVBcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFn
YXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwcm9w
YWdhdGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6cGVyZm9y
bUJsb2NrQ0ZBKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpwZXJmb3JtRm9yd2Fy
ZENGQSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRvcjo6Z2xvYmFsQ0ZBKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVC
cmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQpOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmlu
Zyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6Y2xlYXIp
OgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1
cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oOiBBZGRlZC4KKwogMjAxMS0xMC0wNyAgWXVxaWFuZyBYaWFuICA8
eXVxaWFuZy54aWFuQGludGVsLmNvbT4KIAogICAgICAgICBidWcgZml4ZXMgZm9yIEFycmF5UHVz
aCBhbmQgQXJyYXlQb3AgaW4gMzJfNjQgREZHIEpJVApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDEyIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4
MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYxNkQ3MjYxNDJD
MzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzQx
NDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdD
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNEMzcwMDY4Qjc3QyAvKiBERkdPcGVy
YW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdD
IC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzcx
NDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBE
RkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZF
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3Rh
dGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYz
NkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi87IH07CiAJCTBGNjM2
REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEQTExNDJEMjdFRDAwQjJF
NjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07CiAJCTBGNzcwMDkyMTQwMkZGM0Mw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5n
Q291bnRlci5jcHAgKi87IH07CkBAIC04MDksNiArODE1LDEyIEBACiAJCTBCRjI4QTI4MTFBMzNE
QzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVz
dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkQxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTZFMTQzRkNEMkYw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNp
Y0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Jhc2ljQmxvY2su
aDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYW5kcy5oOyBwYXRoID0gZGZnL0RGR09wZXJh
bmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcyMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBhdGggPSBkZmcvREZHVmFyaWFibGVB
Y2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM2RDlGMTQyRDI3
RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25hYmxlUHJlZGljdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyogU2Ft
cGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBsaW5n
Q291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI4Myw2ICsyMjk1LDEy
IEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKKwkJCQkwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0Mg
LyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8q
IERGR0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
T3BlcmFuZHMuaCAqLywKKwkJCQkwRjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRjRCQjIxNDM5NTVFNjAwNjU1QkMwIC8qIERGR1N0
cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5
dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yODc3LDYgKzI4OTUsMTEgQEAKIAkJCQkwRkUyMjhFRDE0
MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRjRC
QjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNGQ0QzNzAwNjhCNzdDIC8qIERGR09w
ZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyog
REZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIwMTc4MTQz
RkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM0
MDgsNiArMzQzMSw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFBODAwQjA4RDQyIC8qIERGR0pJVENv
ZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBC
MDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUy
MjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJl
ZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCwzMiArNDQs
NTUgQEAgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZAogICAgIHN0YXRp
YyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogICAgIEJvdW5kc0NoZWNrZWRQb2ludGVyPGNoYXI+
IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgCisgICAgYm9vbCBpc1RvcCA9IHRydWU7Cisg
ICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdENlbGxPdGhlcikKICAgICAgICAgcHRyLnN0cmNh
dCgiT3RoZXJjZWxsIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAog
ICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikKICAgICAgICAgcHRyLnN0cmNhdCgi
T3RoZXJvYmoiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAg
aWYgKHZhbHVlICYgUHJlZGljdEZpbmFsT2JqZWN0KQogICAgICAgICBwdHIuc3RyY2F0KCJGaW5h
bCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKIAogICAgIGlmICh2YWx1ZSAm
IFByZWRpY3RBcnJheSkKICAgICAgICAgcHRyLnN0cmNhdCgiQXJyYXkiKTsKKyAgICBlbHNlCisg
ICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdFN0cmlu
ZykKICAgICAgICAgcHRyLnN0cmNhdCgiU3RyaW5nIik7CisgICAgZWxzZQorICAgICAgICBpc1Rv
cCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RJbnQzMikKICAgICAgICAg
cHRyLnN0cmNhdCgiSW50Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAg
IAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3REb3VibGUpCiAgICAgICAgIHB0ci5zdHJjYXQoIkRv
dWJsZSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAo
dmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKICAgICAgICAgcHRyLnN0cmNhdCgiQm9vbCIpOworICAg
IGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVk
aWN0T3RoZXIpCiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVyIik7CisgICAgZWxzZQorICAgICAg
ICBpc1RvcCA9IGZhbHNlOworICAgIAorICAgIGlmIChpc1RvcCkKKyAgICAgICAgcmV0dXJuICJU
b3AiOwogICAgIAogICAgICpwdHIrKyA9IDA7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJKHJldmlzaW9uIDk3MDAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTE1LDYgKzExNSwxMCBAQCBpbmxpbmUgYm9vbCBpc090aGVyUHJlZGljdGlvbihQ
cmVkaWN0ZWRUCiBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2
YWx1ZSk7CiAjZW5kaWYKIAorLy8gTWVyZ2UgdHdvIHByZWRpY3Rpb25zLiBOb3RlIHRoYXQgY3Vy
cmVudGx5IHRoaXMganVzdCBkb2VzIGxlZnQgfCByaWdodC4gSXQgbWF5CisvLyBzZWVtIHRlbXB0
aW5nIHRvIGRvIHNvIGRpcmVjdGx5LCBidXQgeW91IHdvdWxkIGJlIGRvaW5nIHNvIGF0IHlvdXIg
b3duIHBlcmlsLAorLy8gc2luY2UgdGhlIG1lcmdpbmcgcHJvdG9jb2wgUHJlZGljdGVkVHlwZSBt
YXkgY2hhbmdlIGF0IGFueSB0aW1lIChhbmQgaGFzIGFscmVhZHkKKy8vIGNoYW5nZWQgc2V2ZXJh
bCB0aW1lcyBpbiBpdHMgaGlzdG9yeSkuCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJnZVByZWRp
Y3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKICAgICBy
ZXR1cm4gbGVmdCB8IHJpZ2h0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKKworI2lmIEVOQUJM
RShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNkZWZpbmUgRU5B
QkxFX0NGQV9QUk9GSUxJTkcgMAorCisjaWYgRU5BQkxFKENGQV9QUk9GSUxJTkcpCisjZGVmaW5l
IFBST0ZJTEUoZmxhZykgU2FtcGxpbmdGbGFnczo6U2NvcGVkRmxhZyBmbGFnKGZsYWcpCisjZWxz
ZQorI2RlZmluZSBQUk9GSUxFKGZsYWcpIGRvIHsgfSB3aGlsZSAoZmFsc2UpCisjZW5kaWYKKwor
QWJzdHJhY3RTdGF0ZTo6QWJzdHJhY3RTdGF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgR3JhcGgm
IGdyYXBoKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9ncmFwaChncmFw
aCkKKyAgICAsIG1fdmFyaWFibGVzKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBncmFwaC5t
X2xvY2FsVmFycykKKyAgICAsIG1fYmxvY2soMCkKK3sKKyAgICBzaXplX3QgbWF4QmxvY2tTaXpl
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbaV0uZ2V0
KCk7CisgICAgICAgIGlmIChibG9jay0+ZW5kIC0gYmxvY2stPmJlZ2luID4gbWF4QmxvY2tTaXpl
KQorICAgICAgICAgICAgbWF4QmxvY2tTaXplID0gYmxvY2stPmVuZCAtIGJsb2NrLT5iZWdpbjsK
KyAgICB9CisgICAgbV9ub2Rlcy5yZXNpemUobWF4QmxvY2tTaXplKTsKK30KKworQWJzdHJhY3RT
dGF0ZTo6fkFic3RyYWN0U3RhdGUoKSB7IH0KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJh
c2ljQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK3sKKyAgICBQUk9GSUxFKDE3KTsKKyAg
ICAKKyAgICBBU1NFUlQoIW1fYmxvY2spOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgYmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVnaW47ICsraSkKKyAgICAgICAgbV9u
b2Rlc1tpXS5jbGVhcigpOworICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRI
ZWFkOworICAgIAorICAgIGJhc2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAg
ICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsKKyAgICBtX2Jsb2NrID0gYmFzaWNC
bG9jazsKKyAgICBtX2lzVmFsaWQgPSB0cnVlOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6Omlu
aXRpYWxpemUoR3JhcGgmIGdyYXBoKQoreworICAgIFBST0ZJTEUoMTcpOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsKKyAgICByb290LT5jZmFTaG91bGRS
ZXZpc2l0ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uID0gZ3JhcGhbcm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpXS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlByZWRp
Y3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1l
bnQoaSkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldChQcmVkaWN0QXJyYXkpOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3Qt
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7CisgICAgfQorfQorCitib29sIEFi
c3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlIG1lcmdlTW9kZSkKK3sKKyAgICBQ
Uk9GSUxFKDE4KTsKKyAgICBBU1NFUlQobV9ibG9jayk7CisgICAgCisgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBtX2Jsb2NrOyAvLyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdpbmcu
CisgICAgCisgICAgaWYgKCFtX2lzVmFsaWQpIHsKKyAgICAgICAgcmVzZXQoKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBpZiAobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7
CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCksIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChz
aXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFp
bChibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgbV92YXJpYWJsZXMubG9jYWwobG9j
YWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgfQorICAgIAor
ICAgIEFTU0VSVChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFjaGFuZ2VkKTsKKyAgICAKKyAg
ICByZXNldCgpOworICAgIAorICAgIGlmIChtZXJnZU1vZGUgIT0gTWVyZ2VUb1N1Y2Nlc3NvcnMp
CisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIAorICAgIHJldHVybiBtZXJnZVRvU3VjY2Vz
c29ycyhtX2dyYXBoLCBibG9jayk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQor
eworICAgIG1fYmxvY2sgPSAwOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBQUk9GSUxF
KDE5KTsKKyAgICBBU1NFUlQobV9ibG9jayk7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAg
ICAgIAorICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgIAorICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb2Rl
QmxvY2ssIG5vZGVJbmRleCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgR2V0TG9jYWw6IHsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gbV92YXJpYWJsZXMu
b3BlcmFuZChub2RlLmxvY2FsKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAor
ICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBl
ID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBpZiAo
aXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChpc0Fy
cmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVh
blByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIAorICAgICAgICBtX3Zhcmlh
Ymxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldEFyZ3VtZW50Ogor
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNl
dC4KKyAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxv
Y2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIEJp
dFJTaGlmdDoKKyAgICBjYXNlIEJpdExTaGlmdDoKKyAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgICAgIGlmICghbm9kZS5jYW5TcGVj
dWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91
bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBW
YWx1ZVRvTnVtYmVyOgorICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRO
b3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGlj
dEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMy
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChOb2RlOjpzaG91
bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNo
aWxkMigpXSkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
UHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJlZGljdE51
bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJp
dGhTdWI6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2Ug
QXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hp
bGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51
bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhNb2Q6IHsK
KyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50
ZWdlcigpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdl
cigpIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhBYnM6CisgICAg
ICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAm
JiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihjaGlsZC5w
cmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVsc2UgaWYg
KGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJlZGlj
dE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90
aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVO
dW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFu
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDb21wYXJl
TGVzczoKKyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoK
KyAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAgICAg
ICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIE5vZGUmIHJp
Z2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBmaWx0
ZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0
KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgZWxzZSBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZp
bHRlciA9IFByZWRpY3ROdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFy
ZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkKKyAg
ICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9iamVjdDsKKyAgICAgICAgZWxzZSBpZiAo
bm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkobGVmdCwg
cmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdEFycmF5OworICAgICAgICBlbHNl
CisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOworICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RC
b29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBD
b21wYXJlU3RyaWN0RXE6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJv
b2xlYW4pOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFyQ29k
ZUF0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5n
KTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnBy
ZWRpY3Rpb24oKSA9PSBQcmVkaWN0U3RyaW5nKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsK
KyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFB1dEJ5VmFsOgorICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgSnVtcDoKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICAvLyBUaGVy
ZSBpcyBwcm9iYWJseSBwcm9maXQgdG8gYmUgZm91bmQgaW4gZG9pbmcgc3BhcnNlIGNvbmRpdGlv
bmFsIGNvbnN0YW50CisgICAgICAgIC8vIHByb3BhZ2F0aW9uLCBhbmQgdG8gdGFrZSBpdCBvbmUg
c3RlcCBmdXJ0aGVyLCB3aGVyZSBhIHZhcmlhYmxlJ3MgdmFsdWUKKyAgICAgICAgLy8gaXMgc3Bl
Y2lhbGl6ZWQgb24gZWFjaCBkaXJlY3Rpb24gb2YgYSBicmFuY2guIEZvciBub3csIHdlIGRvbid0
IGRvIHRoaXMuCisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsK
KyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSB8fCAh
Y2hpbGQucHJlZGljdGlvbigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVj
dWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAg
IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwgUHJlZGljdE90
aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
KyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBSZXR1cm46CisgICAgY2Fz
ZSBUaHJvdzoKKyAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgIG1faXNWYWxp
ZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVG9Qcmlt
aXRpdmU6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBQcmVkaWN0ZWRUeXBlIHR5
cGUgPSBzb3VyY2UubV90eXBlOworICAgICAgICBpZiAodHlwZSAmIH4oUHJlZGljdE51bWJlciB8
IFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbikpIHsKKyAgICAgICAgICAgIHR5cGUgJj0g
KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEJvb2xlYW4pOworICAgICAg
ICAgICAgdHlwZSB8PSBQcmVkaWN0U3RyaW5nOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0
aW9uLnNldCh0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAg
Y2FzZSBTdHJDYXQ6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdBcnJheToKKyAg
ICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1f
Y29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1
cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBDb252ZXJ0VGhp
czogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oc291cmNlLm1fdHlwZSkp
IHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNpbXBsZSBjYXNlLiBXZSBhbHJlYWR5IGtu
b3cgdGhhdCB0aGUgc291cmNlIGlzIGFuCisgICAgICAgICAgICAvLyBvYmplY3QsIHNvIHRoZXJl
J3Mgbm90aGluZyB0byBkby4gSSBkb24ndCB0aGluayB0aGlzIGNhc2Ugd2lsbAorICAgICAgICAg
ICAgLy8gYmUgaGl0LCBidXQgdGhlbiBhZ2FpbiwgeW91IG5ldmVyIGtub3cuCisgICAgICAgICAg
ICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgaWYgKGlzT3RoZXJQcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rp
b24oKSkpIHsKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE90aGVyKTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uLnNldChQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rp
b24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVk
aWN0T2JqZWN0TWFzayk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVzdGluYXRp
b24gPSBzb3VyY2U7CisgICAgICAgIGRlc3RpbmF0aW9uLm1lcmdlKFByZWRpY3RPYmplY3RPdGhl
cik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ3JlYXRl
VGhpczogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dCgpKQorICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOworICAg
ICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uLnNldChQcmVkaWN0RmluYWxPYmplY3QpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIE5ld09iamVjdDoK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0
KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFBy
ZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBHZXRTY29wZUNoYWluOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RD
ZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U2Nv
cGVkVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgR2V0QnlJZDoKKyAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBjbG9iYmVyU3RydWN0
dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6Cisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKKyAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGku
ZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKG5v
ZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIo
KTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5t
YWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9m
ZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tNZXRob2Q6Cisg
ICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVj
dHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KKyAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIobV9ncmFwaC5tX21ldGhvZENoZWNrRGF0YVtub2RlLm1l
dGhvZENoZWNrRGF0YUluZGV4KCldLnN0cnVjdHVyZSk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGZ1bmN0
aW9uIGlzLgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlJZDoK
KyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEdsb2JhbFZhcjoK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgLy8gU2FkbHksIHdlIGRv
bid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgSW5zdGFuY2VPZjoKKyAgICAg
ICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2
ZSBkb25lIEluc3RhbmNlT2YKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVk
aWN0Q2VsbCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQaGk6Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBCcmVha3BvaW50OgorICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICBjYXNlIFJlc29sdmU6CisgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICBjYXNlIFJl
c29sdmVCYXNlU3RyaWN0UHV0OgorICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKKyAgICAgICAgY2xv
YmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIG1faXNWYWxpZDsKK30KKworaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xv
YmJlclN0cnVjdHVyZXMoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBmb3IgKHNpemVfdCBp
ID0gbm9kZUluZGV4IC0gbV9ibG9jay0+YmVnaW4gKyAxOyBpLS0gPiAwOykKKyAgICAgICAgbV9u
b2Rlc1tpXS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxl
cy5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICBtX3Zhcmlh
Ymxlcy5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworfQorCitpbmxpbmUgYm9vbCBBYnN0
cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIGlm
IChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAor
ICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsKKyAgICAgICAgCisgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAoIW5vZGUucmVmQ291bnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgUGhpOgor
ICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhl
IHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgICAgICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOgorICAgICAg
ICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0
aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxv
Y2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCisg
ICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBpdC4KKyAgICAgICAgc291cmNlID0g
JmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc291cmNlID0g
MDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChkZXN0aW5hdGlvbiA9PSAq
c291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBkaWQgbm90IGNoYW5nZSB0
aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9yIHRoaXMKKyAgICAgICAgLy8gYmFz
aWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNp
b24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyByZWFjaGVkIGFib3V0CisgICAgLy8gdGhpcyB2YXJp
YWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0
ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQg
bXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlvbiA9ICpzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20s
IEJhc2ljQmxvY2sqIHRvKQoreworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVt
YmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCkpOworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9
PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIAorICAgIGJvb2wg
Y2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJn
dW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1
bWVudCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3Vt
ZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZy
b20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIAorICAgIGZvciAo
c2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFsdWVzQXRUYWls
LmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZh
cmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworCisgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRl
ZCkKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgCisgICAgdG8tPmNmYVNob3VsZFJldmlz
aXQgfD0gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworaW5saW5lIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgmIGdyYXBoLCBCYXNpY0Js
b2NrKiBiYXNpY0Jsb2NrKQoreworICAgIFBST0ZJTEUoMjApOworCisgICAgTm9kZSYgdGVybWlu
YWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5lbmQgLSAxXTsKKyAgICAKKyAgICBBU1NFUlQodGVybWlu
YWwuaXNUZXJtaW5hbCgpKTsKKyAgICAKKyAgICBzd2l0Y2ggKHRlcm1pbmFsLm9wKSB7CisgICAg
Y2FzZSBKdW1wOgorICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9j
a3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgCisgICAgY2Fz
ZSBCcmFuY2g6CisgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nr
c1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpCisgICAgICAgICAgICB8IG1lcmdl
KGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgp
XS5nZXQoKSk7CisgICAgICAgIAorICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGhyb3c6Cisg
ICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjpt
ZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJz
dHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJ
bmRleCBzb3VyY2VOb2RlSW5kZXgpCit7CisgICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09
IE5vTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVF9VTlVTRUQo
c291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAKKyAgICAv
LyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29uZGl0aW9uYWwgcHJvcGFnYXRpb24g
aGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24ubWVyZ2Uoc291cmNlKTsKK30KKwor
I2lmbmRlZiBOREVCVUcKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6ZHVtcChGSUxFKiBvdXQpCit7Cisg
ICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vZGVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVzW2ldLmlzQ2xlYXIoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICBmaXJzdCA9
IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAg
ICAgICAgZnByaW50ZihvdXQsICJAJWx1OiIsIGkgKyBtX2Jsb2NrLT5iZWdpbik7CisgICAgICAg
IG1fbm9kZXNbaV0uZHVtcChvdXQpOworICAgIH0KK30KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRlX2gKKyNkZWZpbmUgREZHQWJzdHJh
Y3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBo
LmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERGRyB7CisKK3N0
cnVjdCBCYXNpY0Jsb2NrOworCisvLyBUaGlzIGltcGxlbWVudHMgdGhlIG5vdGlvbiBvZiBhbiBh
YnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsCisvLyBjb250
cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdpdGggYSBmb2N1cyBvbiB0aGUgZWxpbWluYXRpb24g
b2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgorLy8gSXQgYWxzbyBpbXBsZW1lbnRzIG1vc3Qgb2Yg
dGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24gdGhhdCBzdWNoIGFuCisv
LyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIHVzZWQgaW4gdHdvIGlk
aW9tczoKKy8vCisvLyAxKSBQZXJmb3JtaW5nIHRoZSBDRkEuIEluIHRoaXMgY2FzZSwgQWJzdHJh
Y3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgYWxsIGJhc2ljCisvLyAgICBibG9ja3MgcmVwZWF0
ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyByZWFjaGVkLiBDb252ZXJnZW5jZSBpcyBkZWZpbmVk
IGJ5CisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3Jz
KSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBibG9ja3MuCisvLworLy8gMikgUmVtYXRlcmlhbGl6
aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlvdXNseSBleGVjdXRlZCBDRkEuIEluIHRoaXMgY2Fz
ZSwKKy8vICAgIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1biBvdmVyIHdoYXRldmVyIGJhc2lj
IGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGluIHVwCisvLyAgICB0byB0aGUgcG9pbnQgb2YgdGhl
IG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0byBpbnRlcnJvZ2F0ZSB0aGUga25vd24gdHlwZQor
Ly8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBBdCB0aGlzIHBvaW50IGl0J3Mgc2FmZSB0byBkaXNj
YXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGlyZWx5LAorLy8gICAgY2FsbCByZXNldCgpLCBvciB0
byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxvY2sgYW5kIGNhbGwKKy8vICAgIGVu
ZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6RG9udE1lcmdlKS4gVGhlIGxhdHRlciBvcHRpb24g
aXMgc2FmZXN0IGJlY2F1c2UKKy8vICAgIGl0IHBlcmZvcm1zIHNvbWUgdXNlZnVsIGludGVncml0
eSBjaGVja3MuCisvLworLy8gQWZ0ZXIgdGhlIENGQSBpcyBydW4sIHRoZSBpbnRlci1ibG9jayBz
dGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMgYW5kIHRhaWxzIG9mIGFsbAorLy8gYmFzaWMgYmxv
Y2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEtYmxvY2sgc3RhdGUgdG8gYmUgcmVtYXRlcmlhbGl6
ZWQgYnkganVzdAorLy8gZXhlY3V0aW5nIHRoZSBDRkEgZm9yIHRoYXQgYmxvY2suIElmIHlvdSBu
ZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3RhdGUgb25seSwgdGhlbgorLy8geW91IG9ubHkgbmVl
ZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2NrOjptX3ZhbHVlc0F0SGVhZCBvciBtX3ZhbHVlc0F0
VGFpbCBmaWVsZHMuCisvLworLy8gUnVubmluZyB0aGlzIGFuYWx5c2lzIGludm9sdmVzIHRoZSBm
b2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXItYmxvY2sgc3RhdGUKKy8vIG1lcmdpbmcgYW5kIGNv
bnZlcmdlbmNlIGZpeHBvaW50OgorLy8KKy8vIEFic3RyYWN0U3RhdGUgc3RhdGUoY29kZUJsb2Nr
LCBncmFwaCk7CisvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmFzaWNCbG9jayk7CisvLyBib29s
IGVuZFJlYWNoZWQgPSB0cnVlOworLy8gZm9yIChOb2RlSW5kZXggaWR4ID0gYmFzaWNCbG9jay5i
ZWdpbjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7CisvLyAgICAgaWYgKCFzdGF0ZS5l
eGVjdXRlKGlkeCkpCisvLyAgICAgICAgIGJyZWFrOworLy8gfQorLy8gYm9vbCByZXN1bHQgPSBz
dGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVyZ2Ugb3IgRG9udE1lcmdlPik7CisKK2NsYXNz
IEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIGVudW0gTWVyZ2VNb2RlIHsKKyAgICAgICAg
Ly8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCBiYXNpYyBibG9j
a3MuCisgICAgICAgIERvbnRNZXJnZSwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBz
dGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAg
IC8vIGJsb2NrIGJlaW5nIGFuYWx5emVkLgorICAgICAgICBNZXJnZVRvVGFpbCwKKyAgICAgICAg
CisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRh
aWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrLCBhbmQgd2l0aCB0aGUgaGVhZHMgb2Yg
c3VjY2Vzc29yIGJsb2Nrcy4KKyAgICAgICAgTWVyZ2VUb1N1Y2Nlc3NvcnMKKyAgICB9OworICAg
IAorICAgIEFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiwgR3JhcGgmKTsKKyAgICAKKyAgICB+QWJz
dHJhY3RTdGF0ZSgpOworICAgIAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4
IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX25vZGVzW25vZGVJbmRleCAtIG1f
YmxvY2stPmJlZ2luXTsKKyAgICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdp
bm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgorICAgIC8vIGFy
Z3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZv
ciBDRkEKKyAgICAvLyBleGVjdXRpb24uCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShHcmFw
aCYpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJhc2lj
IGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3RhdGUg
dG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBoZWFkCisgICAgLy8gb2YgdGhlIGJh
c2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJsb2NrJ3MgZGF0YSBzdHJ1Y3R1cmVz
LgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0IHRvIGZhbHNl
LgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICAKKyAgICAvLyBG
aW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBibG9jay4gSWYgTWVyZ2VUb1RhaWwg
b3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNzZWQsIHRoZW4gdGhpcyBtZXJnZXMg
ZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBhYm91dCBob3cgdGhlIHN0YXRlIGNo
YW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24gaW50bworICAgIC8vIHRoZSBibG9j
aydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVlIHJldHVybiBtb2RlcywgZGVwZW5k
aW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9kZToKKyAgICAvLworICAgIC8vIERv
bnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICAvLworICAgIC8v
IE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUgb2YgdGhl
IGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAgIC8vICAgIFRoaXMgbWVhbnMgdGhh
dCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCksIGFuZCBpZiB0aGF0CisgICAgLy8g
ICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUgc3Vj
Y2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZCBp
ZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAoaS5lLiBlbmRzIGluIFRocm93IG9y
IFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lkZSBpdCkuCisgICAgLy8KKyAgICAv
LyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRl
IG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdlZCwKKyAgICAvLyAgICBhbmQsIGlm
IHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29ycyB3YXMgY2hhbmdlZC4KKyAgICAv
LyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11c3QgcmV2aXNpdCAoYXQgbGVhc3Qp
IHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIFRoaXMgYWxzbyBzZXRzIGNmYVNob3Vs
ZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCisgICAgLy8gICAgdGhhdCBtdXN0IGJl
IHZpc2l0ZWQgbmV4dC4KKyAgICBib29sIGVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlKTsKKyAgICAK
KyAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhpcyB0aHJvd3MgYXdheSBhbnkgcmVz
dWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKKyAgICAvLyB5b3UgY2FuIHNhZmVseSBjYWxsIGJlZ2lu
QmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KKyAgICB2b2lkIHJlc2V0KCk7CisgICAg
CisgICAgLy8gQWJzdHJhY3RseSBleGVjdXRlcyB0aGUgZ2l2ZW4gbm9kZS4gVGhlIG5ldyBhYnN0
cmFjdCBzdGF0ZSBpcyBzdG9yZWQgaW50byBhbgorICAgIC8vIGFic3RyYWN0IHJlZ2lzdGVyIGZp
bGUgc3RvcmVkIGluICp0aGlzLiBMb2FkcyBvZiBsb2NhbCB2YXJpYWJsZXMgKHRoYXQgc3Bhbgor
ICAgIC8vIGJhc2ljIGJsb2NrcykgaW50ZXJyb2dhdGUgdGhlIGJhc2ljIGJsb2NrJ3Mgbm90aW9u
IG9mIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZC4KKyAgICAvLyBTdG9yZXMgdG8gbG9jYWwgdmFyaWFi
bGVzIGFyZSBoYW5kbGVkIGluIGVuZEJhc2ljQmxvY2soKS4gVGhpcyByZXR1cm5zIHRydWUKKyAg
ICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhpcyBub2RlLiBOb3RhYmx5
LCBpdCB3aWxsIHJldHVybiB0cnVlCisgICAgLy8gZm9yIGJsb2NrIHRlcm1pbmFscywgc28gbG9u
ZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFyaWFudHMKKyAgICAvLyBv
ZiBUaHJvdy4KKyAgICBib29sIGV4ZWN1dGUoTm9kZUluZGV4KTsKKyAgICAKKyAgICAvLyBJcyB0
aGUgZXhlY3V0aW9uIHN0YXRlIHN0aWxsIHZhbGlkPyBUaGlzIHdpbGwgYmUgZmFsc2UgaWYgZXhl
Y3V0ZSgpIGhhcworICAgIC8vIHJldHVybmVkIGZhbHNlIHByZXZpb3VzbHkuCisgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgCisgICAgLy8gTWVyZ2Ug
dGhlIGFic3RyYWN0IHN0YXRlIHN0b3JlZCBhdCB0aGUgZmlyc3QgYmxvY2sncyB0YWlsIGludG8g
dGhlIHNlY29uZAorICAgIC8vIGJsb2NrJ3MgaGVhZC4gUmV0dXJucyB0cnVlIGlmIHRoZSBzZWNv
bmQgYmxvY2sncyBzdGF0ZSBjaGFuZ2VkLiBJZiBzbywKKyAgICAvLyB0aGF0IGJsb2NrIG11c3Qg
YmUgYWJzdHJhY3RseSBpbnRlcnByZXRlZCBhZ2Fpbi4gVGhpcyBhbHNvIHNldHMKKyAgICAvLyB0
by0+Y2ZhU2hvdWxkUmV2aXNpdCB0byB0cnVlLCBpZiBpdCByZXR1cm5zIHRydWUsIG9yIGlmIHRv
IGhhcyBub3QgYmVlbgorICAgIC8vIHZpc2l0ZWQgeWV0LgorICAgIHN0YXRpYyBib29sIG1lcmdl
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKyAgICAKKyAgICAvLyBNZXJnZSB0
aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBibG9jaydzIHRhaWwgaW50byBhbGwgb2Yg
aXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgc3VjY2Vz
c29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAvLyB0aGF0IHRoaXMgaXMgYXV0b21hdGlj
YWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1lcmdlTW9kZSBpcworICAgIC8vIE1l
cmdlVG9TdWNjZXNzb3JzLgorICAgIHN0YXRpYyBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEdyYXBo
JiwgQmFzaWNCbG9jayopOworCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBv
dXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMo
Tm9kZUluZGV4KTsKKyAgICAKKyAgICBib29sIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1
ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCk7Cisg
ICAgCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RW
YWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3Rp
bmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsKKyAgICAKKyAgICBD
b2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEdyYXBoJiBtX2dyYXBoOworICAgIAorICAgIFZl
Y3RvcjxBYnN0cmFjdFZhbHVlLCAzMj4gbV9ub2RlczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiBtX3ZhcmlhYmxlczsKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIAorICAgIGJv
b2wgbV9pc1ZhbGlkOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFN0YXRlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFZhbHVlX2gKKyNkZWZpbmUg
REZHQWJzdHJhY3RWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCisjaW5jbHVkZSAi
SlNDZWxsLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgeworcHVibGlj
OgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQorICAgICAgICA6IG1fc3RydWN0dXJlKDAp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVy
ZSogc3RydWN0dXJlKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0
JiBzZXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNldC5zaXplKCkpIHsKKyAgICAgICAgY2Fz
ZSAwOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBz
ZXRbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+
KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAor
ICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlIHZhbHVlOworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAg
eworICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkpOworICAg
ICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbV9zdHJ1
Y3R1cmUpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3Ro
ZXJbMF0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1ha2VUb3AoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFvdGhlci5t
X3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5pc1RvcCgp
KSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlmIChtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHJldHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAg
IGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
aWYgKG90aGVyLnNpemUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3RoZXIuaXNT
dWJzZXRPZigqdGhpcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IG90aGVyWzBdOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIuY29udGFpbnMo
bV9zdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9z
dHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1
cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKSB7Cisg
ICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0
cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlwZSBvdGhlcikKKyAgICB7CisgICAgICAg
IGlmICghKG90aGVyICYgUHJlZGljdENlbGwpKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RydWN0dXJlKSA8PSAxKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmICghKHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJl
KSAmIG90aGVyKSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1
cmU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVj
dHVyZSA9PSByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9CisgICAgCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAg
ICAgcmV0dXJuICEhbV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogYXQo
c2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAg
ICBBU1NFUlQobV9zdHJ1Y3R1cmUpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKKyAg
ICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9w
ZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaSk7Cisg
ICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gYXQoMCk7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZy
b21TdHJ1Y3R1cmVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICAgICAgcmV0dXJuIFByZWRpY3RDZWxsOworICAgICAgICBpZiAoaXNDbGVhcigpKQorICAgICAg
ICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICByZXR1cm4gcHJlZGljdGlvbkZyb21T
dHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAor
I2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAg
aWYgKGlzVG9wKCkpIHsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiVE9QIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZwcmludGYob3V0LCAi
WyIpOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwg
IiVwIiwgbV9zdHJ1Y3R1cmUpOworICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKKyAgICB9Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1
Y3R1cmUgYXQgYSB0aW1lLgorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cit9OworCitzdHJ1
Y3QgQWJzdHJhY3RWYWx1ZSB7CisgICAgQWJzdHJhY3RWYWx1ZSgpCisgICAgICAgIDogbV90eXBl
KFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAg
eworICAgICAgICBtX3R5cGUgPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xl
YXIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFyKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV90eXBlID0gUHJl
ZGljdFRvcDsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBQ
cmVkaWN0Q2VsbCkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobV9zdHJ1
Y3R1cmUuaXNDbGVhcigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3RUb3AgJiYgbV9zdHJ1Y3R1cmUu
aXNUb3AoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWUgdG9wKCkKKyAg
ICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubWFrZVRv
cCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChK
U1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAg
ICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuYWRkKHZhbHVl
LmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVk
aWN0aW9uRnJvbVZhbHVlKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAg
ICAgICBtX3N0cnVjdHVyZS5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIG1fdHlw
ZSA9IHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0KFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmICh0eXBlICYg
UHJlZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fdHlwZSA9
IHR5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBYnN0cmFjdFZh
bHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gb3RoZXIu
bV90eXBlICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgIH0KKyAgICAK
KyAgICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSkgfCBtX3N0cnVj
dHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1l
cmdlKFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1lcmdlUHJlZGljdGlvbiht
X3R5cGUsIHR5cGUpOworICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgJiBQcmVkaWN0Q2VsbCkK
KyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdHlw
ZSAmPSBvdGhlci5wcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICAgICAgbV9zdHJ1Y3R1
cmUuZmlsdGVyKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVk
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gUHJlZGljdFRvcCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV90eXBlICY9IHR5cGU7CisgICAgICAgIG1fc3RydWN0
dXJlLmZpbHRlcih0eXBlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVl
IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtZXJnZVByZWRpY3Rpb25zKG1fdHlw
ZSwgcHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1ZSkpICE9IG1fdHlwZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3N0cnVjdHVyZS5pc1RvcCgpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXND
ZWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCktPnN0cnVj
dHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsK
KyAgICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3R5cGUp
KTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBmcHJpbnRmKG91dCwg
IikiKTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1
Y3R1cmU7CisgICAgUHJlZGljdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fi
c3RyYWN0VmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFz
aWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
YXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYXNpY0Jsb2NrX2gK
KyNkZWZpbmUgREZHQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAi
REZHT3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgVmVj
dG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisKK3N0cnVjdCBCYXNpY0Jsb2Nr
IHsKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJbmRleCBiZWdp
biwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisgICAgICAgIDog
Ynl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAgICAsIGJlZ2luKGJlZ2luKQorICAg
ICAgICAsIGVuZChOb05vZGUpCisgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCisgICAgICAg
ICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNl
KQorICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAg
ICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAg
ICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVl
c0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICB7CisgICAgfQorCisgICAgc3Rh
dGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+
KiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOworICAgIE5vZGVJbmRleCBiZWdp
bjsKKyAgICBOb2RlSW5kZXggZW5kOworICAgIGJvb2wgaXNPU1JUYXJnZXQ7CisgICAgYm9vbCBj
ZmFIYXNWaXNpdGVkOworICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKKyAgICAKKyAgICBQcmVk
ZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgCisgICAgT3BlcmFuZHM8Tm9kZUluZGV4
LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlSW5k
ZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOworICAgIAorICAgIE9wZXJhbmRz
PEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVl
PiB2YWx1ZXNBdFRhaWw7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jhc2ljQmxvY2tfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
cmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAg
ICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVy
YW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUluZGV4IGdldExvY2FsKHVuc2lnbmVk
IG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50
QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5k
KTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9k
ZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE0NCwxNSArMTQ0LDE1IEBAIHByaXZh
dGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlh
YmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNr
RW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwogICAgICAgICBub2RlSW5kZXgg
PSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0g
bm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
Pm1fbG9jYWxzQXRIZWFkW29wZXJhbmRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9wZXJh
bmQsIG5vZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAg
IH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkK
ICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52
YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCkpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwubG9jYWwob3BlcmFuZCkgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4g
aW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1
bWVudC4KQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1
bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251
bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJs
b2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1l
bnQuCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5v
ZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRU
YWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsK
ICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCkBAIC0xODYsOSArMTg2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZUluZGV4IHBo
aSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAg
IG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywg
cGhpLCBhcmd1bWVudCkpOwogICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50Qmxv
Y2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAg
ICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBu
b2RlSW5kZXg7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNB
dEhlYWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJl
bnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBu
b2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CkBA
IC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBv
cGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVu
dHMpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVu
dF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NE
YXRhKG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8g
R2V0IGFuIG9wZXJhbmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9u
IG9uIGl0LgpAQCAtNzgzLDggKzc4Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50
IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBz
ZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2Fy
Z3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50
KTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVu
dF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3Vt
ZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJn
dW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0K
IApAQCAtMTY4OSwxNiArMTY4OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhp
U3RhY2soKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1f
Z3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAgICAgICAgVmFy
aWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVk
ZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFt2YXJOb10gOiBwcmVkZWNlc3NvckJsb2Nr
LT5tX2xvY2Fsc0F0VGFpbFt2YXJOb107CisgICAgICAgICAgICBOb2RlSW5kZXgmIHZhciA9IChz
dGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJs
ZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKHZhck5vKTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNl
c3NvciA9IHZhci52YWx1ZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNz
b3IgPSB2YXI7CiAgICAgICAgICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkg
ewogICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBP
cEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNr
ID8gdmFyTm8gLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplIDogdmFyTm8pKSk7Ci0gICAgICAgICAgICAgICAgdmFyLnNldEZp
cnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIHZhciA9IHZhbHVl
SW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1l
bnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3Vt
ZW50Rmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdEhl
YWRbdmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAg
ICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRp
bWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAgcGhpU3RhY2su
YXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29y
LCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNl
c3Nvcl0ub3AgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVu
c3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0
aGUKQEAgLTE3NTgsMTEgKzE3NTgsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVk
ZWNlc3NvcnMoKQogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07
CiAgICAgICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CiAKLSAgICAgICAgaWYgKG5vZGUu
aXNKdW1wKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpLm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7Ci0g
ICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAgbV9ncmFwaC5i
bG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRl
Y2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRlY2Vzc29ycy5h
cHBlbmQoaW5kZXgpOworICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkgeworICAgICAgICAgICAg
bm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29y
cy5hcHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgewor
ICAgICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7
CisgICAgICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJz
aW5nKCkpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5k
ZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBtX2dyYXBo
Lm1fYmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBl
bmQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxMSArMTg4LDExIEBA
IHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNK
dW1wKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAi
IiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KSk7CisgICAgICAgIHByaW50ZigiJXNUOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5v
ZGUudGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9
CiAgICAgaWYgIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc0Y6IyV1Iiwg
aGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
bm90VGFrZW5CeXRlY29kZU9mZnNldCgpKSk7CisgICAgICAgIHByaW50ZigiJXNGOiMldSIsIGhh
c1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAg
ICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgKHZvaWQpaGFzUHJpbnRlZDsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2
ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1
ZGUgIlByZWRpY3Rpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCkBAIC00
MywyOSArNDQsNiBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCi0vLyBo
ZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJn
dW1lbnRzLgotaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0
dXJuIG9wZXJhbmQgPCAwOyB9Ci0KLXR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKLQotLy8g
Rm9yIGV2ZXJ5IGxvY2FsIHZhcmlhYmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0
IG9mIHRoZSB2YWx1ZS4KLS8vIFdlIHRyYWNrIHRoZSBnZXQgc28gdGhhdCB0aGVzZSBtYXkgYmUg
c2hhcmVkLCBhbmQgd2UgdHJhY2sgdGhlIHNldCB0bwotLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQg
dmFsdWUsIGFuZCB0byByZWZlcmVuY2UgdGhlIGZpbmFsIGRlZmluaXRpb24uCi1zdHJ1Y3QgVmFy
aWFibGVSZWNvcmQgewotICAgIFZhcmlhYmxlUmVjb3JkKCkKLSAgICAgICAgOiB2YWx1ZShOb05v
ZGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEZpcnN0VGltZShOb2RlSW5kZXgg
bm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlID09IE5vTm9kZSk7Ci0gICAg
ICAgIHZhbHVlID0gbm9kZUluZGV4OwotICAgIH0KLQotICAgIE5vZGVJbmRleCB2YWx1ZTsKLX07
Ci0KIHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIC8vIEl0IGlzIHNhZmUgdG8gcmVmZXIg
dG8gdGhlc2UgZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGFyZSBzaGFkb3dlZCBieQogICAgIC8vIHRo
ZSBvbGQgSklUJ3MgQ29kZUJsb2NrJ3MgTWV0aG9kQ2FsbExpbmtJbmZvLgpAQCAtMTExLDQwICs4
OSw2IEBAIHN0cnVjdCBSZXNvbHZlR2xvYmFsRGF0YSB7CiAgICAgdW5zaWduZWQgcmVzb2x2ZUlu
Zm9JbmRleDsKIH07CiAKLXR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nv
ckxpc3Q7Ci0KLXN0cnVjdCBCYXNpY0Jsb2NrIHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5
dGVjb2RlQmVnaW4sIE5vZGVJbmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNp
Z25lZCBudW1Mb2NhbHMpCi0gICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQot
ICAgICAgICAsIGJlZ2luKGJlZ2luKQotICAgICAgICAsIGVuZChOb05vZGUpCi0gICAgICAgICwg
aXNPU1JUYXJnZXQoZmFsc2UpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdEhlYWQobnVtQXJndW1l
bnRzKQotICAgICAgICAsIG1fbG9jYWxzQXRIZWFkKG51bUxvY2FscykKLSAgICAgICAgLCBtX2Fy
Z3VtZW50c0F0VGFpbChudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9sb2NhbHNBdFRhaWwobnVt
TG9jYWxzKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIEJsb2NrSW5kZXggZ2V0
Qnl0ZWNvZGVCZWdpbihPd25QdHI8QmFzaWNCbG9jaz4qIGJsb2NrKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICgqYmxvY2spLT5ieXRlY29kZUJlZ2luOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGJ5
dGVjb2RlQmVnaW47Ci0gICAgTm9kZUluZGV4IGJlZ2luOwotICAgIE5vZGVJbmRleCBlbmQ7Ci0g
ICAgYm9vbCBpc09TUlRhcmdldDsKLQotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29y
czsKLSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFk
OwotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOwotICAgIAot
ICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7Ci0gICAgVmVj
dG9yPFZhcmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHNBdFRhaWw7Ci19OwotCiAvLyAKIC8vID09
PSBHcmFwaCA9PT0KIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTE5Myw4ICsxMTkzLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBl
ZXBob2xlQnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJ
bmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5v
ZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAg
IGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7
CkBAIC0xMjU0LDggKzEyNTQsOCBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlQ29tCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFu
Y2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0
aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
YnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1
bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwog
CkBAIC0xMzk2LDggKzEzOTYsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0
aXZlTm9uCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkK
IHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9j
a0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
YnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2Rl
Lm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5j
aE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5j
aE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0
aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBu
ZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRp
dGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTcwMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMzEsOCArMTEzMSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFu
Y2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAK
ICAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52
ZXJ0OwpAQCAtMTE5Miw4ICsxMTkyLDggQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVj
dWxhdGl2ZUNvbQogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
QnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJG
dW5jdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsK
LSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChi
cmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtl
biA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBKSVRDb21waWxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVy
bzsKIApAQCAtMTMyMSw4ICsxMzIxLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVj
dWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xl
U3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZl
cnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAg
QmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNo
Tm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBi
cmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBi
cmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0
cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4g
aXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBj
b25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NzAwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzkzLDYgKzEzOTMsMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAg
fQogCisgICAgQmFzaWNCbG9jayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0
LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CisgICAgfQorCiAjaWZuZGVmIE5ERUJV
RwogICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDApOwogI2VuZGlmCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NzAw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDAyLDIzICs0MDIsMTkgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NS
X0VOVFJZKQogICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVu
ZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3
ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIEFjdGlvbmFi
bGVQcmVkaWN0aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50
c0F0SGVhZC5zaXplKCksIGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKLQotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVh
ZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2lj
QmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUlu
ZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0
QXJndW1lbnQoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBo
W25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwotICAgICAg
ICB9CisgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay52YWx1ZXNB
dEhlYWQ7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4
IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAg
ICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxl
UHJlZGljdGlvbnMuc2V0VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGlj
dGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSkpOworICAgICAgICAvLyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3Rv
Y29sLCBhIGRlYWQgdmFyaWFibGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCisgICAgICAgIC8vIHZh
bHVlIG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMg
dGhlcmUuIFNvIHdlIHJlYWxseQorICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCisgICAgICAg
IGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBp
ZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID09IE5vTm9k
ZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1
bWVudCkubWFrZVRvcCgpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0g
MDsgbG9jYWwgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyAr
K2xvY2FsKSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9j
YWwobG9jYWwpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcy5sb2NhbChsb2NhbCkubWFrZVRvcCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBhY3Rpb25hYmxlUHJlZGljdGlvbnMucGFjaygpOwotICAgICAgICAKLSAgICAgICAgZW50cnkt
Pm1fcHJlZGljdGlvbnMgPSBhY3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBV
TlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOCBAQAogI2lmbmRlZiBE
RkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLSNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQu
aCIKICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91
cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRo
ZSBkYXRhZmxvdyBncmFwaHMuCiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBA
IC02Nyw2ICs2NSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBl
LmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCkBAIC03NCwxNSArNzQsMTYgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVn
aXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2Ug
dGhpcyB0eXBlLWNoZWNrZWQgYXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVy
cm9ycy4KLWVudW0gVmlydHVhbFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0x
IH07Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50
KSwgVmlydHVhbFJlZ2lzdGVyX2lzXzMyYml0KTsKLQogLy8gVHlwZSBmb3IgYSByZWZlcmVuY2Ug
dG8gYW5vdGhlciBub2RlIGluIHRoZSBncmFwaC4KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4
Owogc3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAordHlwZWRlZiB1
aW50MzJfdCBCbG9ja0luZGV4OworCitzdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKKyAgICBzdGF0
aWMgTm9kZUluZGV4IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQorfTsKKwogLy8g
SW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFu
ZGxlci9zb3VyY2UgaW5mb3JtYXRpb24sCiAvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4KIC8vIChQ
cmVzZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCkBAIC0xMTAsNTEgKzEx
MSw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAotY2xh
c3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0
YT4gewotcHVibGljOgotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgICAgIDogbV9sb2Nh
bChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWluKCkpKQotICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0g
ICAgICAgIDogbV9sb2NhbChsb2NhbCkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5v
bmUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAg
cmV0dXJuIG1fbG9jYWw7Ci0gICAgfQotICAgIAotICAgIGludCBvcGVyYW5kKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwotICAgIH0KLSAgICAKLSAg
ICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7
Ci0gICAgfQotICAgIAotICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCi0gICAgewotICAg
ICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247Ci0gICAgfQotICAgIAotcHJpdmF0ZToK
LSAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGlu
ZyB3ZSdyZSB1bmlmaWVkIHdpdGgKLSAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBh
bmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0Ci0gICAgLy8gcHV0dGluZyB0
aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3Bh
Y2UKLSAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmlj
YW50LgotCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgUHJlZGljdGVkVHlwZSBt
X3ByZWRpY3Rpb247Ci19OwotCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAg
IFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1
cmU7CkBAIC01NjQsNiArNTIwLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIFZhcmlhYmxl
QWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICB7CisgICAgICAgIEFTU0VSVCho
YXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwogICAgIH0KICAgICAKQEAg
LTc1NSwxMyArNzEyLDM3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG9wICYgTm9k
ZUlzVGVybWluYWw7CiAgICAgfQogCi0gICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldCgp
CisgICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwogICAgICAgICByZXR1cm4g
bV9vcEluZm87CiAgICAgfQogCi0gICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNldCgp
CisgICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8y
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7
CisgICAgICAgIG1fb3BJbmZvID0gYmxvY2tJbmRleDsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXROb3RUYWtlbkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzQnJhbmNoKCkpOworICAgICAgICBtX29wSW5mbzIgPSBibG9ja0luZGV4Owor
ICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCgpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIHJldHVybiBtX29w
SW5mbzsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwogICAgICAgICByZXR1cm4gbV9vcElu
Zm8yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJl
dmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDM0ICs3NywzOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50
cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGgu
IFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8v
ICAgIE9TUiBhdCB0aGlzIHRpbWUuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAg
ICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25z
LmFyZ3VtZW50KGkpOwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVk
aWN0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGkgPj0gZXhlYy0+
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50
ID0gMDsgYXJndW1lbnQgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3VtZW50
cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5hcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAg
ICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMg
bm90IHBhc3NlZCwgZXhwZWN0ZWQgJXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3Ry
aW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSBhcmd1bWVudCAlbHUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICIsIGFyZ3VtZW50KTsK
KyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5k
dW1wKHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZU9i
ZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rp
b24pKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgIGlmICghYXJndW1lbnQpCisg
ICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVu
dCkudmFsaWRhdGUodmFsdWUpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAg
ICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywg
ZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwg
YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJWx1IGlzICVzLCBleHBlY3Rl
ZCAiLCBhcmd1bWVudCwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+
bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAg
ICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5t
X3ByZWRpY3Rpb25zLnZhcmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9u
YWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxl
KGkpOwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2JleXNQ
cmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJl
ZGljdGlvbikpIHsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1f
ZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAo
IWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdp
c3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1Ip
Ci0gICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUg
aXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgp
LmRlc2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikp
OworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICVs
dSBpcyAlcywgZXhwZWN0ZWQgIiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1Zh
bHVlKCkuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVl
cy5sb2NhbChsb2NhbCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsK
ICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3
ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAog
Ci0jaW5jbHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIKKyNpbmNsdWRlICJERkdBYnN0cmFj
dFZhbHVlLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAK
QEAgLTM5LDcgKzQwLDcgQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsK
ICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29k
ZU9mZnNldDsKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKKyAgICBP
cGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogfTsKIAogaW5saW5lIHVu
c2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRy
eURhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09wZXJhbmRzX2gKKyNkZWZpbmUgREZHT3BlcmFu
ZHNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFy
aWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9w
ZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3Qg
T3BlcmFuZFZhbHVlVHJhaXRzIHsKKyAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVy
biBUKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9w
ZXJhbmRWYWx1ZVRyYWl0czxUPiA+CitjbGFzcyBPcGVyYW5kcyB7CitwdWJsaWM6CisgICAgT3Bl
cmFuZHMoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1l
bnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBudW1Bcmd1bWVudHMpOworICAgICAgICBtX2xvY2Fscy5m
aWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCksIG51bUxvY2Fscyk7CisgICAgfQorICAgIAorICAg
IHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNp
emUoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbG9j
YWxzLnNpemUoKTsgfQorICAgIAorICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJu
IG1fYXJndW1lbnRzW2lkeF07IH0KKyAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBj
b25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1tpZHhdOyB9CisgICAgCisgICAgVCYgbG9jYWwoc2l6
ZV90IGlkeCkgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQorICAgIGNvbnN0IFQmIGxvY2FsKHNp
emVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KKyAgICAKKyAgICB2b2lk
IHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYg
KGlkeCA+PSBtX2xvY2Fscy5zaXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0g
bV9sb2NhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOwor
ICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVl
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4LCBj
b25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhdID09
IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBhcmd1bWVudChpZHgpID0gdmFsdWU7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0TG9jYWxGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29u
c3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaWR4ID49IG1fbG9jYWxzLnNpemUo
KSB8fCBtX2xvY2Fsc1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBz
ZXRMb2NhbChpZHgsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmFuZChpbnQgb3Bl
cmFuZCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgewor
ICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSAr
IFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBt
X2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVy
biBtX2xvY2Fsc1tvcGVyYW5kXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgb3BlcmFuZChp
bnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2Fz
dDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIAorICAgIHZvaWQg
c2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBp
ZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVu
dCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFt
ZUhlYWRlclNpemU7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSB2YWx1ZTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0TG9j
YWwob3BlcmFuZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAg
IAorcHJpdmF0ZToKKyAgICBWZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFQs
IDE2PiBtX2xvY2FsczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGR1bXBPcGVy
YW5kcyhPcGVyYW5kczxUPiYgb3BlcmFuZHMsIEZJTEUqIG91dCkKK3sKKyAgICBmb3IgKHNpemVf
dCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgb3BlcmFuZHMubnVtYmVyT2ZBcmd1bWVudHMoKTsg
Kythcmd1bWVudCkgeworICAgICAgICBpZiAoYXJndW1lbnQpCisgICAgICAgICAgICBmcHJpbnRm
KG91dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAob3V0
KTsKKyAgICB9CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHNpemVfdCBsb2Nh
bCA9IDA7IGxvY2FsIDwgb3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAg
ICAgICBpZiAobG9jYWwpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAg
b3BlcmFuZHMubG9jYWwobG9jYWwpLmR1bXAob3V0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8g
REZHT3BlcmFuZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3Bh
Z2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCiAjaW5j
bHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCiAjaW5jbHVkZSA8
d3RmL0ZpeGVkQXJyYXkuaD4KQEAgLTU1LDQ1ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBm
aXhwb2ludCgpCiAgICAgewogI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKLSAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworICAgICAgICBtX2dyYXBoLmR1bXAo
bV9jb2RlQmxvY2spOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCi0gICAgICAgIG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIGRvIHsKLSAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAv
LyBVcCBoZXJlIHdlIHN0YXJ0IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVj
dCB0aGF0IHRvIGJlCi0gICAgICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCi0gICAgICAgICAg
ICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0JhY2t3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1f
Y2hhbmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFn
c0ZvcndhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCi0jaWYg
RU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0g
MDsKLSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFy
LW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAgICAv
LyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0Zvcndh
cmQoKTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1
Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAgICAgICAg
ICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNl
bWJsZSBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3
byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAgICAgICAg
ICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNr
d2FyZCBmbG93LgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBw
cm9wYWdhdGVQcmVkaWN0aW9uc0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdl
ZCk7Ci0gICAgICAgIAorICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpOworICAgICAg
ICBwcm9wYWdhdGVQcmVkaWN0aW9ucygpOwogICAgICAgICBmaXh1cCgpOwogICAgICAgICAKICNp
ZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTAsNiArNzcsMTMg
QEAgcHVibGljOgogCiAgICAgICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOwogCisjaWYg
RU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdy
YXBoIGFmdGVyIHZpcnR1YWwgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dy
YXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgZ2xvYmFsQ0ZBKCk7CisK
ICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiR3JhcGggYWZ0
ZXIgcHJvcGFnYXRpb246XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsK
QEAgLTI3NCw2ICsyNDgsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVz
ZSB3ZSBzdXNwZWN0IHRoYXQgdG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4K
KyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAg
ICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFy
aXRoTm9kZUZsYWdzRm9yd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAg
IH0KKyAgICAKICAgICBib29sIHNldFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9u
KQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3Vs
dCgpKTsKQEAgLTYwOCw3ICs2MDEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBFTkFC
TEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiJXMgIiwg
cHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkp
OworICAgICAgICBwcmludGYoIiVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1f
Y2hhbmdlZCB8PSBjaGFuZ2VkOwpAQCAtNjMyLDYgKzYyNSwyOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9ucygpCisgICAgeworI2lm
IEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9
IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVh
ci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAg
Ly8gREZTLXNvcnRlZCBjb2RlLgorICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3
YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVk
dWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAg
ICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVz
ZW1ibGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0
d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAg
ICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFj
a3dhcmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAg
cHJvcGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5n
ZWQpOworICAgIH0KKyAgICAKICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgp
CiAgICAgewogICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1i
ZXIpIHsKQEAgLTE0MjQsNiArMTQ0MCw4MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jb2Rl
QmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSwgQmxvY2tJ
bmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrLT5jZmFT
aG91bGRSZXZpc2l0KQorICAgICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICBCbG9jayAjJXUgKGJjIyV1
KTpcbiIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAg
ICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAgICBoZWFkIHZhcnM6ICIpOwor
ICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKKyAgICAg
ICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIGZvciAoTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJsb2NrLT5iZWdpbjsgbm9kZUluZGV4IDwgYmxvY2stPmVuZDsgKytub2RlSW5kZXgpIHsK
KyAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElP
Tl9WRVJCT1NFKQorICAgICAgICAgICAgcHJpbnRmKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpv
cE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHN0
YXRlLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAg
ICAgICAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKG5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCisgICAgICAgIHByaW50ZigiICAgICAgdGFpbCByZWdzOiAiKTsKKyAgICAgICAgc3RhdGUu
ZHVtcChzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9j
aGFuZ2VkIHw9IHN0YXRlLmVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nl
c3NvcnMpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAg
ICAgcHJpbnRmKCIgICAgICB0YWlsIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMoYmxv
Y2stPnZhbHVlc0F0VGFpbCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlm
CisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoQWJzdHJhY3RTdGF0ZSYg
c3RhdGUpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
KyAgICAgICAgcHJpbnRmKCJDRkEgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1f
YmxvY2tzLnNpemUoKTsgKytibG9jaykKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0
ZSwgYmxvY2spOworICAgIH0KKyAgICAKKyAgICB2b2lkIGdsb2JhbENGQSgpCisgICAgeworI2lm
IEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9
IDA7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVk
by13b3JrbGlzdC1iYXNlZCBmb3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVy
CisgICAgICAgIC8vIG9mIGJsb2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hp
Y2ggaXMgbmVhcmx5IHRvcG9sb2dpY2FsKSwgYW5kCisgICAgICAgIC8vIGluc3RlYWQgb2YgYSB3
b3JrbGlzdCB3ZSBqdXN0IHdhbGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91
bGRSZXZpc2l0CisgICAgICAgIC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBi
YWxhbmNlIHRoZSBlZmZpY2llbmN5IHByb3BlcnRpZXMgb2YgYm90aAorICAgICAgICAvLyB3b3Jr
bGlzdC1iYXNlZCBhbmQgZm9yd2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEg
d29ya2xpc3QtYmFzZWQKKyAgICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUg
aWYgaXQncyBtZWFuaW5nbGVzcyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0CisgICAgICAg
IC8vIHRoZSBoZWFkIG9mIHRoZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJl
ZW4gdmlzaXRlZCkuIExpa2UgYSBmb3J3YXJkCisgICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFw
cHJvYWNoLCBpdCBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9j
aworICAgICAgICAvLyBhZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBP
bmx5IGxvb3BzIHdpbGwgY2F1c2UgdGhpcyBhbmFseXNpcyB0bworICAgICAgICAvLyByZXZpc2l0
IGJsb2NrcywgYW5kIHRoZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8g
bG9vcCBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUo
bV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fY29kZUJs
b2NrLCBtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoc3RhdGUpOworICAg
ICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFw
aDsKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29k
ZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM0Nyw3ICszNDcsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVy
CiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0ciwgYm9vbCAo
KnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTM1OSw4ICszNTksMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQUlJlZyByZXN1bHRUYWdHUFIg
PSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOwogICAgIAotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRp
Y3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNl
Q2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwg
b3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAg
LTM4MCw5ICszODIsOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUs
CiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAg
IGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmds
b2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsK
ICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgp
KSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9k
ZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmpl
Y3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5
UHJlZGljdGlvbik7CiAgICAgZWxzZSBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZU51bWJlcigpICYmICFhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIo
KSkKICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0
aW9uLCBvcGVyYXRpb24pOwogICAgIGVsc2UgaWYgKChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVOdW1iZXIoKSB8fCBhdChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkgJiYgIU5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSks
IGF0KG5vZGUuY2hpbGQyKCkpKSkgewpAQCAtNDM4LDcgKzQ0MCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5n
cHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5v
ZGVJbmRleCwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lkKiB2cHRyLCBib29sIG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5v
ZGVJbmRleCk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKQEAgLTQ1MSw3ICs0
NTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgbV9q
aXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRhZy5ncHIo
KSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBh
eWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtNDU5
LDcgKzQ2Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAg
ICAKICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFnR1BSLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBt
X2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5l
ZFRhZyksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRQYXlsb2FkR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25D
aGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpV
bmRlZmluZWRUYWcpKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBh
eWxvYWRHUFIpOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNDcyLDExICs0NzYs
MTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIC8vIEZJ
WE1FOiBOZWVkIHRvIGFkZCBmYXN0IHBhdGhzIGZvciBrbm93biBib29sZWFucy4KIAogICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkg
ewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVP
YmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVy
KCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQx
KCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewpAQCAtNTQyLDIwICs1
NDYsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogI2VuZGlm
CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJ
bmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZv
aWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChO
b2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2Vu
LCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0g
dmFsdWUudGFnR1BSKCk7CiAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Cisg
ICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5v
dENlbGwubGluaygmbV9qaXQpOwogICAgIAogICAgIG1faml0LmFuZDMyKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgdmFsdWVUYWdHUFIpOwotICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKKyAg
ICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1f
YmxvY2sgKyAxKSkKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwog
ICAgIApAQCAtNTY0LDE1ICs1NzAsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVj
dE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vZGUp
CiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2Rl
LnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gRklYTUU6IEFkZCBmYXN0IGNhc2VzIGZvciBrbm93
biBCb29sZWFuIQogCiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5v
ZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQx
KCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0
ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxk
MSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFp
c0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpIHsKICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKQEAgLTYzOCw2
ICs2NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RW
YWx1ZSYgdmFsdWUgPSBibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkp
OwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwg
dGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09
IFByZWRpY3ROb25lKSB7CkBAIC02NjgsOSArNjc1LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2dwcnMucmV0YWluKHRhZy5ncHIoKSwgdmly
dHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogCiAgICAgICAgIERhdGFGb3JtYXQgZm9ybWF0
OwotICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIGlm
IChpc0NlbGxQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JtYXQgPSBE
YXRhRm9ybWF0SlNDZWxsOwotICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHBy
ZWRpY3Rpb24pKQorICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHZhbHVlLm1f
dHlwZSkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNCb29sZWFuOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlM7CkBAIC03MDMsNyArNzEw
LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICB9
IGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgR1BSUmVnIGNlbGxHUFIgPSBjZWxsLmdwcigpOwotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikp
KTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwogICAgICAgICB9IGVsc2UgeyAvLyBGSVhNRTogQWRkIEJvb2xlYW5QcmVkaWN0aW9uIGhh
bmRsaW5nCkBAIC0xMjg5LDcgKzEyOTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBh
bmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9y
TGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUg
dHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25B
cnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwogCkBAIC0xMzI0LDcgKzEzMzIsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9y
ICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhl
IGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBp
ZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAg
ICAgYmFzZS51c2UoKTsKQEAgLTE0MTEsNyArMTQxOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIHdyaXRlQmFycmllcihiYXNl
R1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlB
Y2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCi0gICAgICAgIGlmICghaXNL
bm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNDU3LDcgKzE0NjUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBz
dG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhH
UFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3du
QXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE1MDQsNyArMTUxMiw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIERG
Rzo6SnVtcDogewotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
ICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAg
aWYgKHRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCB0YWtlbik7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKQEAgLTE1
MTUsOCArMTUyMyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJ
bnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIEJs
b2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAgICAgCkBAIC0xNzI3LDcgKzE3MzUsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChp
c09iamVjdFByZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewogICAg
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1
ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMTc2OSw5ICsxNzc4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gTmVlZCB0byB2ZXJpZnkgdGhhdCB0
aGUgcHJvdG90eXBlIGlzIGFuIG9iamVjdC4gSWYgd2UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZQog
ICAgICAgICAvLyB0aGF0IGl0J3MgYSBGaW5hbE9iamVjdCB0aGVuIHdlIHNwZWN1bGF0ZSBvbiB0
aGF0IGRpcmVjdGx5LiBPdGhlcndpc2Ugd2UKICAgICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVj
dHVyZS1iYXNlZCkgY2hlY2suCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVGaW5hbE9iamVjdCgpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgeworICAg
ICAgICAgICAgaWYgKCFpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQo
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKICAgICAgICAg
fQpAQCAtMTkwNyw3ICsxOTE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlz
S25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7CkBAIC0xOTI2LDcgKzE5MzYsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBi
YXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgp
KSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSks
IHJlc3VsdEdQUik7CkBAIC0xOTQzLDYgKzE5NTMsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsK
KyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5p
c1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAK
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CkBA
IC0yMDY5LDcgKzIwODQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVn
IHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKKyAgICAgICAg
aWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZG9lc05vdENv
bnRhaW5BbnlPdGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpCisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkp
LCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkp
OwogICAgICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZSAhPSBtX2ppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgpKSB7CiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90
b3R5cGUtPnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRD
b21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIo
bWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24g
OTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTAsNyArNDUwLDcgQEAgSklUQ29tcGlsZXI6Okp1bXAg
U3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJldHVybiBub3ROdW1iZXI7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCB2b2lkKiB2
cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5v
ZGUsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0aW9uQ2hlY2spKFByZWRpY3RlZFR5cGUpKQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC00NjAs
OCArNDYwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAg
ICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikp
KTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlv
bkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNl
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJH
UFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKQEAgLTUw
MSw5ICs1MDMsOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAK
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYm
IE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChu
b2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVj
dEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlz
RmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVF
cSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9k
ZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0
eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlv
bik7CiAgICAgZWxzZQogICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShu
b2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgCkBAIC01MjksNyArNTMxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lk
ICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9u
Q2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNTM3LDcgKzUzOSw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
cmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwogICAgIApAQCAtNTQ1LDcgKzU0OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RPck90aGUKICAgICAKICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwog
ICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCByZXN1bHRHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7
CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVU
cnVlKSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC01NjYs
MTEgKzU3MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUu
Y2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFs
T2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNo
aWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CkBAIC02MzAsMTkgKzYzNCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdChOCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChO
b2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2Vu
LCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RU
YWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1f
aml0KTsKICAgICAKICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgdmFsdWVHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkp
KSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1
ZU51bGwpKSkpOwogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgCkBAIC02NTQsOCArNjYwLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgIAotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAoaXNLbm93bkJv
b2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKQEAgLTY3Myw5ICs2
NzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAg
IAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAg
ICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFr
ZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBlbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0
Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0g
ZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkp
IHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4s
IG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgZW1p
dE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CiAgICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAg
IGJvb2wgaW52ZXJ0ID0gZmFsc2U7CkBAIC03MDgsOSArNzE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsK
ICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRha2VuKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7CisKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIHZhbHVl
LnVzZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNzQ4LDE1ICs3NTIsMTYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBHZXRMb2NhbDogewog
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gYmxvY2so
KS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKIAogICAgICAgICAvLyBJZiB3
ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0
byBjb21waWxlLgotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgeworICAg
ICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1ZS5pc0NsZWFyKCkpIHsK
ICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKSB7Cisg
ICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSwgcmVz
dWx0LmdwcigpKTsKIAogICAgICAgICAgICAgLy8gTGlrZSBpbnRlZ2VyUmVzdWx0LCBidXQgZG9u
J3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywKQEAgLTc3NSw5ICs3
ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmIChpc0FycmF5UHJl
ZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24odmFsdWUu
bV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7Ci0gICAgICAg
IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIGVsc2Ug
aWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1h
dCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1h
dCA9IERhdGFGb3JtYXRKUzsKQEAgLTgyMCw3ICs4MjUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNl
bGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNl
bGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTQwOCw3ICsxNDE0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFp
bmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdl
IGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRo
ZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIApAQCAtMTQ0
Miw3ICsxNDQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
CiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVy
dHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAg
ICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdl
IGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGls
ZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0xNTI0LDcg
KzE1MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIAogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQy
KCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAg
ICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VH
UFIpOwpAQCAtMTU2Nyw3ICsxNTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7
CkBAIC0xNjEwLDcgKzE2MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUu
dGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQog
ICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CkBAIC0xNjIxLDggKzE2MjcsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc1N0cmljdEludDMyKG5v
ZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBt
X2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNv
ZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOworICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAg
ICAgICAgIApAQCAtMTc5NSw5ICsxODAxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFs
dWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIGlmICghaXNPdGhlclByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
bV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaEdQUiwg
bV9jb21waWxlSW5kZXgpOwpAQCAtMTgwNyw3ICsxODE1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0
KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAg
ICAgICAgICAgIGlmICghaXNPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1Zh
bHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQo
dGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTE4NDcsOSArMTg1NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBv
YmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUKICAgICAgICAgLy8gdGhhdCBpdCdz
IGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3
aXNlIHdlCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qo
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmpl
Y3RWUHRyKSkpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNGaW5h
bE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIpKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CiAgICAgICAgIH0KQEAgLTE5NzgsNyArMTk4OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGls
ZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkp
LCByZXN1bHRHUFIpOwpAQCAtMTk5Nyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNT
dHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwpAQCAtMjAx
Miw2ICsyMDIyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNl
dE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CkBAIC0yMTMx
LDcgKzIxNDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKKyAgICAgICAgaWYgKCFt
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpCisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOwogICAg
ICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZSAhPSBtX2ppdC5jb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgpKSB7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUt
PnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9k
Q2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NzAwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkg
Y29uc3QKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChO
b2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNo
Tm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwot
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0xMzcs
MTEgKzEzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0aW9uQ2hlY2spKFByZWRpY3Rl
ZFR5cGUpKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwot
ICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJy
YW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsK
ICAgICAKQEAgLTE1OCw4ICsxNTgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBl
ZXBIb2xlT2JqZQogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAgICAgR1BSUmVnIG9w
MkdQUiA9IG9wMi5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFw
cmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNo
UHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CiAgICAgaWYgKG5vdFRha2Vu
ICE9IChtX2Jsb2NrICsgMSkpCkBAIC0xNjksOCArMTcxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlSW50ZWdlckJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBK
SVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgTm9kZSYg
YnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFr
ZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxv
Y2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2Vu
QmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5j
aCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRh
a2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2Fu
IGZhbGwgdGhyb3VnaC4KQEAgLTIxOSwxMSArMjIxLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgfSBlbHNlIGlmIChub2RlLm9w
ID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2Rl
LmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAgICAgICBjb21waWxlUGVl
cEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2Jq
ZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
RmluYWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAgICAgICAgICAgICB1
c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAg
ICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4
LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rpb24pOwogICAgICAgICAgICAgdXNl
KG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAg
ICB9IGVsc2UKQEAgLTI1NiwxOCArMjU4LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoQmFzaWNCbG9jayYKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKIAotICAgIEFT
U0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgp
KTsKKyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJn
dW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKTsKICAgICAgICAgaWYgKG5vZGVJ
bmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNl
KFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CiAgICAgfQogICAgIAotICAgIEFTU0VSVCht
X3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBt
X3N0YXRlLnJlc2V0KCk7CisgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soJmJsb2NrKTsKKyAg
ICAKKyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFi
bGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5t
X2xvY2Fsc0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJs
b2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5S
ZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCkBAIC0zMzcsNiArMzQyLDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIik7CiAjZW5kaWYKICAgICAgICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBh
YnN0cmFjdCBzdGF0ZSBpcyByZW1hdGVyaWFsaXplZCBmb3IgdGhlIG5leHQgbm9kZS4KKyAgICAg
ICAgbV9zdGF0ZS5leGVjdXRlKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChub2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7
CiAgICAgfQpAQCAtNTM3LDcgKzU0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRDaGFyQ29kZUEKICAgICBHUFJSZWcgc3RyaW5nUmVnID0gc3RyaW5nLmdwcigpOwogICAgIEdQ
UlJlZyBpbmRleFJlZyA9IGluZGV4LmdwcigpOwogICAgIAotICAgIGlmICghaXNLbm93blN0cmlu
Zyhub2RlLmNoaWxkMSgpKSkKKyAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhzdHJpbmdSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAKICAgICAvLyB1bnNpZ25lZCBjb21w
YXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMg
dGhhdCBhcmUgdG9vIGxhcmdlCkBAIC01NjYsNyArNTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsK
ICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAotICAgIGlmICghaXNL
bm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAKICAgICAvLyB1bnNpZ25lZCBj
b21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGlj
ZXMgdGhhdCBhcmUgdG9vIGxhcmdlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiAr
MjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlIDxkZmcvREZHQWJzdHJh
Y3RTdGF0ZS5oPgogI2luY2x1ZGUgPGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQxNyw0MyArNDE4LDE2IEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIGJv
b2wgaXNLbm93bkFycmF5KE5vZGVJbmRleCBvcDEpCi0gICAgewotICAgICAgICBOb2RlJiBub2Rl
ID0gYXQob3AxKTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgIGNhc2UgR2V0
TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gaXNBcnJheVByZWRpY3Rpb24obm9kZS52YXJpYWJs
ZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IE5ld0FycmF5OgotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNLbm93blN0cmluZyhO
b2RlSW5kZXggb3AxKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdChvcDEpLm9wKSB7Ci0gICAg
ICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICAKICAgICBib29sIGNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxh
dGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBaX0RGR09w
ZXJhdGlvbl9FSkopOwogICAgIGJvb2wgY29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUmLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNv
bmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUlu
dGVnZXJCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJy
YW5jaChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRvdWJs
ZUNvbmRpdGlvbik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2Rl
JiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cik7Ci0gICAgdm9pZCBjb21w
aWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZwdHIpOworICAgIHZvaWQgY29tcGlsZVBl
ZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZv
aWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0aW9uQ2hlY2spKFByZWRpY3RlZFR5cGUpKTsKKyAgICB2
b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgdm9pZCogdnB0ciwgYm9vbCAoKnByZWRp
Y3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpOwogICAgIHZvaWQgY29tcGlsZVZhbHVlQWRkKE5v
ZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXgg
dmFsdWUsIHZvaWQqIHZwdHIpOworICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KE5vZGVJbmRleCB2YWx1ZSwgdm9pZCogdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVj
ayk7CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdChOb2RlJik7Ci0gICAgdm9pZCBlbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2Nr
SW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIpOworICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJC
cmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRh
a2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKICAgICB2b2lkIGVt
aXRCcmFuY2goTm9kZSYpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENoYXJDb2RlQXQoTm9k
ZSYpOwpAQCAtNTc1LDYgKzU0OSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbGFzdFNldE9wZXJh
bmQ7CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOwogICAgIAorICAgIEFic3Ry
YWN0U3RhdGUgbV9zdGF0ZTsKKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJl
Y292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJlY292ZXJ5IGNvbXB1
dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQpAQCAtODA3LDYgKzc4Myw3IEBAIGlubGlu
ZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSkkKICAgICAsIG1fdmFyaWFibGVzKGpp
dC5ncmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChzdGQ6Om51bWVy
aWNfbGltaXRzPGludD46Om1heCgpKQogICAgICwgbV9ieXRlY29kZUluZGV4Rm9yT1NSKHN0ZDo6
bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAsIG1fc3RhdGUobV9qaXQuY29k
ZUJsb2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Niw2ICsyNiwxMiBAQAogI2lmbmRlZiBERkdTdHJ1Y3R1cmVTZXRfaAogI2RlZmluZSBERkdTdHJ1
Y3R1cmVTZXRfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRlIDxzdGRpby5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0zNCw2ICs0MCw4
IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKK2NsYXNzIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWU7CisKIGNsYXNzIFN0cnVjdHVyZVNldCB7CiBwdWJsaWM6CiAgICAgU3Ry
dWN0dXJlU2V0KCkgeyB9CkBAIC00Myw2ICs1MSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3Ry
dWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBjbGVhcigp
CisgICAgeworICAgICAgICBtX3N0cnVjdHVyZXMuY2xlYXIoKTsKKyAgICB9CisgICAgCiAgICAg
dm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAgICBBU1NFUlQoIWNv
bnRhaW5zKHN0cnVjdHVyZSkpOwpAQCAtMTA0LDEwICsxMTcsNTAgQEAgcHVibGljOgogICAgIAog
ICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlcy5sYXN0KCk7
IH0KIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcmVzdWx0ID0gUHJlZGljdE5vbmU7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihyZXN1bHQsIHByZWRpY3Rpb25Gcm9t
U3RydWN0dXJlKG1fc3RydWN0dXJlc1tpXSkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zdHJ1Y3R1cmVzLnNpemUoKSAh
PSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmVz
W2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAg
dm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGZwcmludGYob3V0LCAiWyIpOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgZnByaW50ZihvdXQsICIsICIp
OworICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1fc3RydWN0dXJlc1tpXSk7CisgICAg
ICAgIH0KKyAgICAgICAgZnByaW50ZihvdXQsICJdIik7CisgICAgfQorI2VuZGlmCisgICAgCiBw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworICAgIAog
ICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCAyPiBtX3N0cnVjdHVyZXM7CiB9OwogCiB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwogI2VuZGlmIC8v
IERGR1N0cnVjdHVyZVNldF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKKyNkZWZpbmUgREZHVmFyaWFibGVBY2Nl
c3NEYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgREZHIHsKKworLy8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciAoc3Bp
bGwgbG9jYXRpb24pLgorLy8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlwZS1jaGVja2Vk
IGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCitlbnVtIFZpcnR1
YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OworQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxSZWdpc3Rl
cl9pc18zMmJpdCk7CisKK2NsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmlu
ZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
KQorICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGlj
dE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVh
bFJlZ2lzdGVyIGxvY2FsKQorICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisgICAgICAgICwgbV9w
cmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmlydHVhbFJl
Z2lzdGVyIGxvY2FsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+
bV9sb2NhbCk7CisgICAgICAgIHJldHVybiBtX2xvY2FsOworICAgIH0KKyAgICAKKyAgICBpbnQg
b3BlcmFuZCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5tX3ByZWRp
Y3Rpb24sIHByZWRpY3Rpb24pOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRp
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9uOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmlj
aWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCisgICAgLy8gd2lsbCBoYXZl
IHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1
dAorICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBk
b24ndCBleHBlY3QgREZHIHNwYWNlCisgICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBu
b2RlcyBkbyBiZSBzaWduaWZpY2FudC4KKworICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwor
ICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110265</attachid>
            <date>2011-10-08 00:49:30 -0700</date>
            <delta_ts>2011-10-08 13:00:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfa_patch_6.diff</filename>
            <type>text/plain</type>
            <size>154280</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYxIEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBUaGlzIGlzIGEgMiUgd2luIG9uIFY4IGFuZCBhIDElIHdpbiBvbiBLcmFrZW4uCisKKyAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwOgorICAgICAgICAoSlNDOjpwcmVkaWN0aW9u
VG9TdHJpbmcpOgorICAgICAgICAqIGJ5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaDoKKyAgICAgICAg
KiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
U3RhdGU6On5BYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
OjpiZWdpbkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Omlu
aXRpYWxpemUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxv
Y2spOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OnJlc2V0KToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpB
YnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6bWVyZ2VTdGF0ZUF0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RTdGF0ZTo6bWVyZ2UpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6Om1lcmdl
VG9TdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjptZXJnZVZh
cmlhYmxlQmV0d2VlbkJsb2Nrcyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6
ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6Zm9yTm9kZSk6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6aXNWYWxpZCk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6U3Ry
dWN0dXJlQWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFs
dWU6Om1ha2VUb3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OnRvcCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphZGRBbGwpOgorICAg
ICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmNvbnRhaW5zKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1N1YnNldE9mKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkb2VzTm90Q29udGFpbkFueU90
aGVyVGhhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNT
dXBlcnNldE9mKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpm
aWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzQ2xl
YXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmlzVG9wKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpzaXplKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6
OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6bGFzdCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFZhbHVlOjpBYnN0cmFjdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFZhbHVlOjpjbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1
ZTo6aXNDbGVhcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWFrZVRvcCk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgor
ICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmlzVG9wKToKKyAgICAgICAgKEpTQzo6
REZHOjpBYnN0cmFjdFZhbHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFs
dWU6OnNldCk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6bWVyZ2UpOgorICAgICAgICAoSlND
OjpERkc6OkFic3RyYWN0VmFsdWU6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJh
Y3RWYWx1ZTo6dmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpERkc6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJhc2lj
QmxvY2s6OmdldEJ5dGVjb2RlQmVnaW4pOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmdldExvY2FsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6c2V0TG9jYWwpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OnNldEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OnByb2Nlc3NQaGlTdGFjayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNl
dHVwUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkdyYXBoOjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAg
ICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oOgorICAgICAgICAoSlNDOjpERkc6OmJsb2Nr
KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
TnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRp
dmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKToKKyAgICAgICAgKiBkZmcvREZHSklUQ29k
ZUdlbmVyYXRvcjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbCk6CisgICAgICAgIChKU0M6OkRGRzo6SklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaCk6CisgICAgICAgIChK
U0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVx
KToKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpTQzo6REZHOjpK
SVRDb21waWxlcjo6bm90aWNlT1NSRW50cnkpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZUluZGV4VHJhaXRzOjpkZWZhdWx0VmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlQWNjZXNzRGF0YSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Tm9kZTo6dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6Om5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjpzZXRUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok5vZGU6OnNldE5vdFRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6dGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJs
b2NrSW5kZXgpOgorICAgICAgICAqIGRmZy9ERkdPU1JFbnRyeS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6cHJlcGFyZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuaDoKKyAg
ICAgICAgKiBkZmcvREZHT3BlcmFuZHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6b3Bl
cmFuZElzQXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRWYWx1ZVRyYWl0czo6
ZGVmYXVsdFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6T3BlcmFuZHMpOgor
ICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkFyZ3VtZW50cyk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6Om51bWJlck9mTG9jYWxzKToKKyAgICAgICAgKEpTQzo6REZH
OjpPcGVyYW5kczo6YXJndW1lbnQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpsb2Nh
bCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldExvY2FsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0QXJndW1lbnRGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9wZXJhbmRzOjpzZXRMb2NhbEZpcnN0VGltZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3Bl
cmFuZHM6Om9wZXJhbmQpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRPcGVyYW5k
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpE
Rkc6OmR1bXBPcGVyYW5kcyk6CisgICAgICAgICogZGZnL0RGR1Byb3BhZ2F0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlByb3BhZ2F0b3I6OmZpeHBvaW50KToKKyAgICAgICAgKEpTQzo6REZH
OjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVBcml0aE5vZGVGbGFncyk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKToKKyAgICAgICAgKEpTQzo6
REZHOjpQcm9wYWdhdG9yOjpwcm9wYWdhdGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChKU0M6OkRG
Rzo6UHJvcGFnYXRvcjo6cGVyZm9ybUJsb2NrQ0ZBKToKKyAgICAgICAgKEpTQzo6REZHOjpQcm9w
YWdhdG9yOjpwZXJmb3JtRm9yd2FyZENGQSk6CisgICAgICAgIChKU0M6OkRGRzo6UHJvcGFnYXRv
cjo6Z2xvYmFsQ0ZBKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFu
Y2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQZWVwSG9sZUludGVnZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUGVlcEhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldENoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklU
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGFyZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RP
ck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1p
dE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZSk6CisgICAgICAgICogZGZnL0RGR1N0cnVjdHVyZVNldC5oOgorICAgICAgICAoSlNDOjpERkc6
OlN0cnVjdHVyZVNldDo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6
cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZVNldDo6ZHVtcCk6
CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOiBBZGRlZC4KKwogMjAxMS0x
MC0wNyAgWXVxaWFuZyBYaWFuICA8eXVxaWFuZy54aWFuQGludGVsLmNvbT4KIAogICAgICAgICBi
dWcgZml4ZXMgZm9yIEFycmF5UHVzaCBhbmQgQXJyYXlQb3AgaW4gMzJfNjQgREZHIEpJVApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEyIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYz
OEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAq
LzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEy
MDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FE
RDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVm
ZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNE
MzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAv
KiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZG
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVj
dG9yLmggKi87IH07CiAJCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJl
ZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07
CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CkBAIC04MDksNiArODE1LDEy
IEBACiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdFZlY3Rvci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAv
KiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHBh
dGggPSBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuaDsgcGF0aCA9IGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0Fic3RyYWN0VmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdBYnN0
cmFjdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcwMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0Jhc2ljQmxvY2suaDsgcGF0aCA9IGRmZy9ERkdCYXNpY0Jsb2NrLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTcxMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdP
cGVyYW5kcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPcGVyYW5kcy5o
OyBwYXRoID0gZGZnL0RGR09wZXJhbmRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGNjIwMTcyMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHBh
dGggPSBkZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFja2VkSW50VmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNjM2REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY3Rpb25h
YmxlUHJlZGljdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0
MDJGREQ2MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI4Myw2ICsyMjk1LDEyIEBACiAJCTg2RUM5REIzMTMyOERGNDQwMDJCMkFENyAvKiBk
ZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGNjIw
MTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLywKKwkJCQkwRjYy
MDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovLAorCQkJCTBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi8sCisJCQkJMEY2MjAx
NzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRjYyMDE3MTE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJCQkJMEZGRjRCQjIxNDM5
NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJCTg2RUM5REI0MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJCQkJODZFQzlEQjUxMzI4
REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBAIC0yODc3LDYgKzI4OTUs
MTEgQEAKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xv
YmFsVGhpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNG
Q0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3
NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTM0MDgsNiArMzQzMSw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFB
ODAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJz
dHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NCwzMiArNDQsNTUgQEAgY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5n
KFByZWRpY3RlZAogICAgIHN0YXRpYyBjaGFyIGRlc2NyaXB0aW9uW3NpemVdOwogICAgIEJvdW5k
c0NoZWNrZWRQb2ludGVyPGNoYXI+IHB0cihkZXNjcmlwdGlvbiwgc2l6ZSk7CiAgICAgCisgICAg
Ym9vbCBpc1RvcCA9IHRydWU7CisgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdENlbGxPdGhl
cikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJjZWxsIik7CisgICAgZWxzZQorICAgICAgICBp
c1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPYmplY3RPdGhlcikK
ICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXJvYmoiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9w
ID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEZpbmFsT2JqZWN0KQogICAg
ICAgICBwdHIuc3RyY2F0KCJGaW5hbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxz
ZTsKIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RBcnJheSkKICAgICAgICAgcHRyLnN0cmNhdCgi
QXJyYXkiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KHZhbHVlICYgUHJlZGljdFN0cmluZykKICAgICAgICAgcHRyLnN0cmNhdCgiU3RyaW5nIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RJbnQzMikKICAgICAgICAgcHRyLnN0cmNhdCgiSW50Iik7CisgICAgZWxzZQorICAgICAg
ICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3REb3VibGUpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIkRvdWJsZSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBm
YWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Qm9vbGVhbikKICAgICAgICAgcHRy
LnN0cmNhdCgiQm9vbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T3RoZXIpCiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVy
Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOworICAgIAorICAgIGlmIChpc1Rv
cCkKKyAgICAgICAgcmV0dXJuICJUb3AiOwogICAgIAogICAgICpwdHIrKyA9IDA7CiAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgJ
KHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRp
Y3RlZFR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSwxMCBAQCBpbmxpbmUgYm9v
bCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9T
dHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAorLy8gTWVyZ2UgdHdvIHByZWRp
Y3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBkb2VzIGxlZnQgfCByaWdodC4g
SXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVjdGx5LCBidXQgeW91IHdvdWxk
IGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2luY2UgdGhlIG1lcmdpbmcgcHJv
dG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0aW1lIChhbmQgaGFzIGFscmVh
ZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlzdG9yeSkuCiBpbmxpbmUgUHJl
ZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5cGUgbGVmdCwgUHJlZGljdGVk
VHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw3MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0
U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKyNkZWZpbmUgRU5BQkxFX0NGQV9QUk9GSUxJTkcgMAorCisjaWYgRU5BQkxFKENG
QV9QUk9GSUxJTkcpCisjZGVmaW5lIFBST0ZJTEUoZmxhZykgU2FtcGxpbmdGbGFnczo6U2NvcGVk
RmxhZyBmbGFnKGZsYWcpCisjZWxzZQorI2RlZmluZSBQUk9GSUxFKGZsYWcpIGRvIHsgfSB3aGls
ZSAoZmFsc2UpCisjZW5kaWYKKworQWJzdHJhY3RTdGF0ZTo6QWJzdHJhY3RTdGF0ZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgR3JhcGgmIGdyYXBoKQorICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2Nr
KQorICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAsIG1fdmFyaWFibGVzKGNvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzLCBncmFwaC5tX2xvY2FsVmFycykKKyAgICAsIG1fYmxvY2soMCkKK3sKKyAg
ICBzaXplX3QgbWF4QmxvY2tTaXplID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdy
YXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
Z3JhcGgubV9ibG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChibG9jay0+ZW5kIC0gYmxvY2st
PmJlZ2luID4gbWF4QmxvY2tTaXplKQorICAgICAgICAgICAgbWF4QmxvY2tTaXplID0gYmxvY2st
PmVuZCAtIGJsb2NrLT5iZWdpbjsKKyAgICB9CisgICAgbV9ub2Rlcy5yZXNpemUobWF4QmxvY2tT
aXplKTsKK30KKworQWJzdHJhY3RTdGF0ZTo6fkFic3RyYWN0U3RhdGUoKSB7IH0KKwordm9pZCBB
YnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK3sK
KyAgICBQUk9GSUxFKDE3KTsKKyAgICAKKyAgICBBU1NFUlQoIW1fYmxvY2spOworICAgIAorICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVn
aW47ICsraSkKKyAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOworICAgIG1fdmFyaWFibGVzID0g
YmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIAorICAgIGJhc2ljQmxvY2stPmNmYVNob3Vs
ZFJldmlzaXQgPSBmYWxzZTsKKyAgICBiYXNpY0Jsb2NrLT5jZmFIYXNWaXNpdGVkID0gdHJ1ZTsK
KyAgICBtX2Jsb2NrID0gYmFzaWNCbG9jazsKKyAgICBtX2lzVmFsaWQgPSB0cnVlOworfQorCit2
b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyYXBoKQoreworICAgIFBST0ZJ
TEUoMTcpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKTsK
KyAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAg
ICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gZ3JhcGhbcm9vdC0+dmFyaWFibGVzQXRI
ZWFkLmFyZ3VtZW50KGkpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290
LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGVs
c2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQcmVkaWN0QXJyYXkpOworICAgICAgICBlbHNl
IGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+
dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5tYWtlVG9wKCk7
CisgICAgfQorfQorCitib29sIEFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soTWVyZ2VNb2Rl
IG1lcmdlTW9kZSkKK3sKKyAgICBQUk9GSUxFKDE4KTsKKyAgICBBU1NFUlQobV9ibG9jayk7Cisg
ICAgCisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrOyAvLyBTYXZlIHRoZSBibG9jayBm
b3Igc3VjY2Vzc29yIG1lcmdpbmcuCisgICAgCisgICAgaWYgKCFtX2lzVmFsaWQpIHsKKyAgICAg
ICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29s
IGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8
fCAhQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsr
YXJndW1lbnQpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoYmxvY2st
PnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIG1fdmFyaWFibGVzLmFyZ3VtZW50KGFy
Z3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwg
bV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKGxv
Y2FsKSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChtZXJnZU1vZGUgIT0gRG9udE1lcmdlIHx8
ICFjaGFuZ2VkKTsKKyAgICAKKyAgICByZXNldCgpOworICAgIAorICAgIGlmIChtZXJnZU1vZGUg
IT0gTWVyZ2VUb1N1Y2Nlc3NvcnMpCisgICAgICAgIHJldHVybiBjaGFuZ2VkOworICAgIAorICAg
IHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dyYXBoLCBibG9jayk7Cit9CisKK3ZvaWQgQWJz
dHJhY3RTdGF0ZTo6cmVzZXQoKQoreworICAgIG1fYmxvY2sgPSAwOworICAgIG1faXNWYWxpZCA9
IGZhbHNlOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUoTm9kZUluZGV4IG5vZGVJ
bmRleCkKK3sKKyAgICBQUk9GSUxFKDE5KTsKKyAgICBBU1NFUlQobV9ibG9jayk7CisgICAgQVNT
RVJUKG1faXNWYWxpZCk7CisgICAgICAgIAorICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJ
bmRleF07CisgICAgICAgIAorICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgc3dpdGNoIChub2RlLm9wKSB7CisgICAgY2Fz
ZSBKU0NvbnN0YW50OgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFs
dWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2FsKCkpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0TG9jYWw6IHsKKyAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAg
ICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAg
ICAgIAorICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSkgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgc3RhdGUgb2Yg
YXJndW1lbnRzIGhhcyBiZWVuIHNldC4KKyAgICAgICAgQVNTRVJUKCFtX2Jsb2NrLT52YWx1ZXNB
dEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlzQ2xlYXIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNl
IEJpdFhvcjoKKyAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICBjYXNlIEJpdExTaGlmdDoKKyAgICBj
YXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRp
Y3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAg
ICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgIGlmICghbV9ncmFw
aFtub2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgorICAgICAgICBpZiAobV9ncmFwaFtu
b2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
VmFsdWVUb0RvdWJsZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJs
ZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUFkZDoKKyAg
ICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pICYmIG5v
ZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIobV9ncmFwaFtub2RlLmNoaWxk
MSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nIHwgUHJl
ZGljdEludDMyIHwgUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAg
ICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNl
IEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQx
KCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIo
KSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0u
c2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hv
dWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJl
cik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVt
YmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAg
IGNhc2UgQXJpdGhBYnM6CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhT
cXJ0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAg
Tm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29s
ZWFuUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVh
bik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JP
dGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAg
ICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAg
Y2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2Fz
ZSBDb21wYXJlRXE6IHsKKyAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEo
KV07CisgICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAg
ICAgUHJlZGljdGVkVHlwZSBmaWx0ZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxh
dGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RJbnQz
MjsKKyAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJp
Z2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7CisgICAgICAgIGVsc2Ug
aWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9iamVj
dDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxk
U3BlY3VsYXRlQXJyYXkobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGlj
dEFycmF5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOwor
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFy
QXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcp
OworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlWYWw6CisgICAgICAgIGlmIChtX2dy
YXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0U3RyaW5nKSB7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5VmFsOgorICAgIGNh
c2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5
UHVzaDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5
KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0TnVtYmVyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgSnVtcDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJyYW5j
aDogeworICAgICAgICAvLyBUaGVyZSBpcyBwcm9iYWJseSBwcm9maXQgdG8gYmUgZm91bmQgaW4g
ZG9pbmcgc3BhcnNlIGNvbmRpdGlvbmFsIGNvbnN0YW50CisgICAgICAgIC8vIHByb3BhZ2F0aW9u
LCBhbmQgdG8gdGFrZSBpdCBvbmUgc3RlcCBmdXJ0aGVyLCB3aGVyZSBhIHZhcmlhYmxlJ3MgdmFs
dWUKKyAgICAgICAgLy8gaXMgc3BlY2lhbGl6ZWQgb24gZWFjaCBkaXJlY3Rpb24gb2YgYSBicmFu
Y2guIEZvciBub3csIHdlIGRvbid0IGRvIHRoaXMuCisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9n
cmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hp
bGQucHJlZGljdGlvbigpKSB8fCAhY2hpbGQucHJlZGljdGlvbigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNl
IGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFBy
ZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5
T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAg
Y2FzZSBSZXR1cm46CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJy
b3I6CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50
MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZh
bHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICBQcmVkaWN0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOworICAgICAgICBpZiAodHlw
ZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbikpIHsK
KyAgICAgICAgICAgIHR5cGUgJj0gKFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0U3RyaW5nIHwgUHJl
ZGljdEJvb2xlYW4pOworICAgICAgICAgICAgdHlwZSB8PSBQcmVkaWN0U3RyaW5nOworICAgICAg
ICB9CisgICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAgICAgCisgICAgY2FzZSBTdHJDYXQ6CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBOZXdBcnJheToKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlTdHJ1
Y3R1cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdSZWdl
eHA6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9i
amVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhb
bm9kZS5jaGlsZDEoKV07CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUo
bm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9y
Tm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChpc09iamVjdFByZWRp
Y3Rpb24oc291cmNlLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNpbXBs
ZSBjYXNlLiBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgc291cmNlIGlzIGFuCisgICAgICAgICAg
ICAvLyBvYmplY3QsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkby4gSSBkb24ndCB0aGluayB0aGlz
IGNhc2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgaGl0LCBidXQgdGhlbiBhZ2FpbiwgeW91IG5l
dmVyIGtub3cuCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKGlzT3RoZXJQcmVk
aWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIo
UHJlZGljdE90aGVyKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLnNldChQcmVkaWN0T2JqZWN0
T3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChpc09iamVjdFByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICAg
ICAgc291cmNlLmZpbHRlcihQcmVkaWN0T2JqZWN0TWFzayk7CisgICAgICAgICAgICBkZXN0aW5h
dGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgIGRlc3RpbmF0aW9uLm1l
cmdlKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
ICAgIAorICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5v
ZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0g
Zm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgIGlmIChjaGlsZC5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQorICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVk
aWN0RmluYWxPYmplY3QpOworICAgICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uLnNldChQ
cmVkaWN0RmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAK
KyAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2Nv
ZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCkpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZUNoYWluOgorICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgR2V0U2NvcGVkVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U2Nv
cGVkVmFyOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlJZDoKKyAgICBjYXNlIEdldE1ldGhv
ZDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFN0cmluZ0xl
bmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmlu
Zyk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUg
c2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChu
b2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFByb3BlcnR5U3RvcmFnZToKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBpcyBub3QgYSBKUyB2YWx1ZS4K
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEJ5T2Zmc2V0OgorICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgQ2hlY2tNZXRob2Q6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0
byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5
cGVzKS4KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIobV9ncmFwaC5tX21l
dGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4KCldLnN0cnVjdHVyZSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAg
ICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3
ZSBrbm93IHdoYXQgdGhlIGZ1bmN0aW9uIGlzLgorICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgUHV0QnlJZDoKKyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgY2xvYmJl
clN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3Ao
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAg
ICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRv
bmUgQ2hlY2tIYXNJbnN0YW5jZQorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgSW5zdGFuY2VPZjoKKyAgICAgICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdh
dGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQaGk6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBCcmVha3BvaW50OgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2Fs
bDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIFJlc29sdmU6CisgICAgY2FzZSBSZXNv
bHZlQmFzZToKKyAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0OgorICAgIGNhc2UgUmVzb2x2
ZUdsb2JhbDoKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1faXNWYWxpZDsKK30KKworaW5saW5lIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMoTm9kZUluZGV4IG5vZGVJbmRleCkK
K3sKKyAgICBmb3IgKHNpemVfdCBpID0gbm9kZUluZGV4IC0gbV9ibG9jay0+YmVnaW4gKyAxOyBp
LS0gPiAwOykKKyAgICAgICAgbV9ub2Rlc1tpXS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytp
KQorICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsg
KytpKQorICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOwor
fQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgg
bm9kZUluZGV4KQoreworICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsKKyAgICAgICAg
CisgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAoIW5vZGUucmVm
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobm9kZS5v
cCkgeworICAgIGNhc2UgUGhpOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRo
ZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgICAgICBz
b3VyY2UgPSAmaW5WYXJpYWJsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0
aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9k
ZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxs
eSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBp
dC4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgc291cmNlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGlmIChkZXN0aW5hdGlvbiA9PSAqc291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1
dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9y
IHRoaXMKKyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBy
ZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyByZWFjaGVkIGFi
b3V0CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBiYXNpYyBi
bG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlvbiA9ICpzb3Vy
Y2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEFTU0VSVChmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCkpOworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJv
bS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2Fs
KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5s
b2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworCisgICAg
aWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgCisg
ICAgdG8tPmNmYVNob3VsZFJldmlzaXQgfD0gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gY2hh
bmdlZDsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMo
R3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoreworICAgIFBST0ZJTEUoMjAp
OworCisgICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5lbmQgLSAxXTsKKyAg
ICAKKyAgICBBU1NFUlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHRlcm1pbmFsLm9wKSB7CisgICAgY2FzZSBKdW1wOgorICAgICAgICByZXR1cm4gbWVyZ2UoYmFz
aWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgp
KTsKKyAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIHJldHVybiBtZXJnZShiYXNp
Y0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkp
CisgICAgICAgICAgICB8IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
Lm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIAorICAgIGNhc2UgUmV0dXJu
OgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZh
bHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGlu
YXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCit7CisgICAgaWYgKGRl
c3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0g
Tm9Ob2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29u
ZGl0aW9uYWwgcHJvcGFnYXRpb24gaGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24u
bWVyZ2Uoc291cmNlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6
ZHVtcChGSUxFKiBvdXQpCit7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVz
W2ldLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZmlyc3Qp
CisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJAJWx1OiIsIGkgKyBtX2Js
b2NrLT5iZWdpbik7CisgICAgICAgIG1fbm9kZXNbaV0uZHVtcChvdXQpOworICAgIH0KK30KKyNl
bmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRl
X2gKKyNkZWZpbmUgREZHQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKwor
bmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOworCisvLyBUaGlzIGltcGxlbWVu
dHMgdGhlIG5vdGlvbiBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5zaXRpdmUgaW50
cmFwcm9jZWR1cmFsCisvLyBjb250cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdpdGggYSBmb2N1
cyBvbiB0aGUgZWxpbWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgorLy8gSXQgYWxz
byBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3QgaW50ZXJwcmV0
YXRpb24gdGhhdCBzdWNoIGFuCisvLyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMgY2xhc3Mgc2hv
dWxkIGJlIHVzZWQgaW4gdHdvIGlkaW9tczoKKy8vCisvLyAxKSBQZXJmb3JtaW5nIHRoZSBDRkEu
IEluIHRoaXMgY2FzZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgYWxsIGJhc2lj
CisvLyAgICBibG9ja3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyByZWFjaGVkLiBD
b252ZXJnZW5jZSBpcyBkZWZpbmVkIGJ5CisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3Rh
dGU6Ok1lcmdlVG9TdWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBibG9ja3MuCisv
LworLy8gMikgUmVtYXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlvdXNseSBleGVj
dXRlZCBDRkEuIEluIHRoaXMgY2FzZSwKKy8vICAgIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1
biBvdmVyIHdoYXRldmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGluIHVwCisvLyAg
ICB0byB0aGUgcG9pbnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0byBpbnRlcnJv
Z2F0ZSB0aGUga25vd24gdHlwZQorLy8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBBdCB0aGlzIHBv
aW50IGl0J3Mgc2FmZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGlyZWx5LAorLy8g
ICAgY2FsbCByZXNldCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxv
Y2sgYW5kIGNhbGwKKy8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6RG9udE1lcmdl
KS4gVGhlIGxhdHRlciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UKKy8vICAgIGl0IHBlcmZvcm1z
IHNvbWUgdXNlZnVsIGludGVncml0eSBjaGVja3MuCisvLworLy8gQWZ0ZXIgdGhlIENGQSBpcyBy
dW4sIHRoZSBpbnRlci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMgYW5kIHRhaWxz
IG9mIGFsbAorLy8gYmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEtYmxvY2sgc3Rh
dGUgdG8gYmUgcmVtYXRlcmlhbGl6ZWQgYnkganVzdAorLy8gZXhlY3V0aW5nIHRoZSBDRkEgZm9y
IHRoYXQgYmxvY2suIElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3RhdGUgb25seSwg
dGhlbgorLy8geW91IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2NrOjptX3ZhbHVl
c0F0SGVhZCBvciBtX3ZhbHVlc0F0VGFpbCBmaWVsZHMuCisvLworLy8gUnVubmluZyB0aGlzIGFu
YWx5c2lzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXItYmxvY2sgc3Rh
dGUKKy8vIG1lcmdpbmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50OgorLy8KKy8vIEFic3RyYWN0
U3RhdGUgc3RhdGUoY29kZUJsb2NrLCBncmFwaCk7CisvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2so
YmFzaWNCbG9jayk7CisvLyBib29sIGVuZFJlYWNoZWQgPSB0cnVlOworLy8gZm9yIChOb2RlSW5k
ZXggaWR4ID0gYmFzaWNCbG9jay5iZWdpbjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7
CisvLyAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKGlkeCkpCisvLyAgICAgICAgIGJyZWFrOworLy8g
fQorLy8gYm9vbCByZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVyZ2Ugb3Ig
RG9udE1lcmdlPik7CisKK2NsYXNzIEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIGVudW0g
TWVyZ2VNb2RlIHsKKyAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0
U3RhdGUgd2l0aCBiYXNpYyBibG9ja3MuCisgICAgICAgIERvbnRNZXJnZSwKKyAgICAgICAgCisg
ICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwg
b2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrIGJlaW5nIGFuYWx5emVkLgorICAgICAgICBN
ZXJnZVRvVGFpbCwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0
cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrLCBh
bmQgd2l0aCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29yIGJsb2Nrcy4KKyAgICAgICAgTWVyZ2VUb1N1
Y2Nlc3NvcnMKKyAgICB9OworICAgIAorICAgIEFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiwgR3Jh
cGgmKTsKKyAgICAKKyAgICB+QWJzdHJhY3RTdGF0ZSgpOworICAgIAorICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJlZ2luXTsKKyAgICB9CisgICAgCisgICAgLy8g
Q2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0
IHZhbHVlcyBvZgorICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2Nr
cyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKKyAgICAvLyBleGVjdXRpb24uCisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZShHcmFwaCYpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVj
dXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rp
b24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBo
ZWFkCisgICAgLy8gb2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJs
b2NrJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFT
aG91bGRSZXZpc2l0IHRvIGZhbHNlLgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxv
Y2sqKTsKKyAgICAKKyAgICAvLyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBi
bG9jay4gSWYgTWVyZ2VUb1RhaWwgb3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNz
ZWQsIHRoZW4gdGhpcyBtZXJnZXMgZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBh
Ym91dCBob3cgdGhlIHN0YXRlIGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24g
aW50bworICAgIC8vIHRoZSBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVl
IHJldHVybiBtb2RlcywgZGVwZW5kaW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9k
ZToKKyAgICAvLworICAgIC8vIERvbnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBm
YWxzZS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1
ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAg
IC8vICAgIFRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCks
IGFuZCBpZiB0aGF0CisgICAgLy8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlz
aXQgKGF0IGxlYXN0KSB0aGUgc3VjY2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxs
IGFsd2F5cyBiZSByZXR1cm5lZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAo
aS5lLiBlbmRzIGluIFRocm93IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lk
ZSBpdCkuCisgICAgLy8KKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1
cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdl
ZCwKKyAgICAvLyAgICBhbmQsIGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29y
cyB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11
c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIFRo
aXMgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCisg
ICAgLy8gICAgdGhhdCBtdXN0IGJlIHZpc2l0ZWQgbmV4dC4KKyAgICBib29sIGVuZEJhc2ljQmxv
Y2soTWVyZ2VNb2RlKTsKKyAgICAKKyAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhp
cyB0aHJvd3MgYXdheSBhbnkgcmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKKyAgICAvLyB5b3Ug
Y2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgLy8gQWJzdHJhY3RseSBleGVjdXRlcyB0aGUgZ2l2
ZW4gbm9kZS4gVGhlIG5ldyBhYnN0cmFjdCBzdGF0ZSBpcyBzdG9yZWQgaW50byBhbgorICAgIC8v
IGFic3RyYWN0IHJlZ2lzdGVyIGZpbGUgc3RvcmVkIGluICp0aGlzLiBMb2FkcyBvZiBsb2NhbCB2
YXJpYWJsZXMgKHRoYXQgc3BhbgorICAgIC8vIGJhc2ljIGJsb2NrcykgaW50ZXJyb2dhdGUgdGhl
IGJhc2ljIGJsb2NrJ3Mgbm90aW9uIG9mIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZC4KKyAgICAvLyBT
dG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGluIGVuZEJhc2ljQmxvY2soKS4g
VGhpcyByZXR1cm5zIHRydWUKKyAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBh
c3QgdGhpcyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCisgICAgLy8gZm9yIGJs
b2NrIHRlcm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4g
b3IgdmFyaWFudHMKKyAgICAvLyBvZiBUaHJvdy4KKyAgICBib29sIGV4ZWN1dGUoTm9kZUluZGV4
KTsKKyAgICAKKyAgICAvLyBJcyB0aGUgZXhlY3V0aW9uIHN0YXRlIHN0aWxsIHZhbGlkPyBUaGlz
IHdpbGwgYmUgZmFsc2UgaWYgZXhlY3V0ZSgpIGhhcworICAgIC8vIHJldHVybmVkIGZhbHNlIHBy
ZXZpb3VzbHkuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9
CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIGFic3RyYWN0IHN0YXRlIHN0b3JlZCBhdCB0aGUgZmly
c3QgYmxvY2sncyB0YWlsIGludG8gdGhlIHNlY29uZAorICAgIC8vIGJsb2NrJ3MgaGVhZC4gUmV0
dXJucyB0cnVlIGlmIHRoZSBzZWNvbmQgYmxvY2sncyBzdGF0ZSBjaGFuZ2VkLiBJZiBzbywKKyAg
ICAvLyB0aGF0IGJsb2NrIG11c3QgYmUgYWJzdHJhY3RseSBpbnRlcnByZXRlZCBhZ2Fpbi4gVGhp
cyBhbHNvIHNldHMKKyAgICAvLyB0by0+Y2ZhU2hvdWxkUmV2aXNpdCB0byB0cnVlLCBpZiBpdCBy
ZXR1cm5zIHRydWUsIG9yIGlmIHRvIGhhcyBub3QgYmVlbgorICAgIC8vIHZpc2l0ZWQgeWV0Lgor
ICAgIHN0YXRpYyBib29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsK
KyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBibG9j
aydzIHRhaWwgaW50byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVl
IGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAvLyB0
aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1l
cmdlTW9kZSBpcworICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIHN0YXRpYyBib29sIG1l
cmdlVG9TdWNjZXNzb3JzKEdyYXBoJiwgQmFzaWNCbG9jayopOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZv
aWQgY2xvYmJlclN0cnVjdHVyZXMoTm9kZUluZGV4KTsKKyAgICAKKyAgICBib29sIG1lcmdlU3Rh
dGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFy
aWFibGUsIE5vZGVJbmRleCk7CisgICAgCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJl
dHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNv
dXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9k
ZUluZGV4KTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEdyYXBoJiBt
X2dyYXBoOworICAgIAorICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAzMj4gbV9ub2RlczsKKyAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxlczsKKyAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOworICAgIAorICAgIGJvb2wgbV9pc1ZhbGlkOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdB
YnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0
cmFjdFZhbHVlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU3RydWN0
dXJlU2V0LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgeworcHVibGljOgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQorICAg
ICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IG1fc3RydWN0dXJl
KHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNldC5z
aXplKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSByZWludGVy
cHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0cnVjdHVy
ZSA9IDA7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBt
X3N0cnVjdHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAg
ICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVy
ZSkgJiYgIWlzVG9wKCkpOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBt
YWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0
dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90
aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKKyAg
ICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0g
b3RoZXJbMF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsK
KyAgICAgICAgaWYgKCFvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChvdGhlci5pc1RvcCgpKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsK
KyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVy
Lm1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtX3N0cnVj
dHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0
dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVy
ZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0
dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVT
ZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFvdGhlci5zaXplKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYg
KG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9
PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0
T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAo
IW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYg
KGlzVG9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgMToKKyAg
ICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOworICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAob3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAg
ICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3Ry
dWN0dXJlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0
cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3Ry
dWN0dXJlID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlwZSBv
dGhlcikKKyAgICB7CisgICAgICAgIGlmICghKG90aGVyICYgUHJlZGljdENlbGwpKSB7CisgICAg
ICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RydWN0dXJlKSA8
PSAxKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghKHByZWRpY3Rpb25Gcm9t
U3RydWN0dXJlKG1fc3RydWN0dXJlKSAmIG90aGVyKSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJl
ID0gMDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFyKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUb3AoKSBj
b25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9PSByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+
KDEpOyB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFpc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuICEhbV9zdHJ1Y3R1cmU7CisgICAgfQorICAg
IAorICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoIWlzVG9wKCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKGksICFpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAgIH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gYXQoaSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbGFzdCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoMCk7CisgICAgfQorICAgIAorICAgIFByZWRp
Y3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RDZWxsOworICAgICAgICBp
ZiAoaXNDbGVhcigpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAgICAgICBy
ZXR1cm4gcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSog
b3V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAgICAgIGZwcmludGYo
b3V0LCAiVE9QIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGZwcmludGYob3V0LCAiWyIpOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmUpOworICAgICAgICBmcHJpbnRm
KG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGNhbiBv
bmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgIFN0cnVjdHVyZSogbV9z
dHJ1Y3R1cmU7Cit9OworCitzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CisgICAgQWJzdHJhY3RWYWx1
ZSgpCisgICAgICAgIDogbV90eXBlKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3R5cGUgPSBQcmVkaWN0Tm9uZTsKKyAg
ICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFy
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1
Y3R1cmUuaXNDbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1ha2VUb3AoKQorICAgIHsK
KyAgICAgICAgbV90eXBlID0gUHJlZGljdFRvcDsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRv
cCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3R5cGUgJiBQcmVkaWN0Q2VsbCkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUubWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1RvcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRp
Y3RUb3AgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEFi
c3RyYWN0VmFsdWUgdG9wKCkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubWFrZVRvcCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAg
bV9zdHJ1Y3R1cmUuYWRkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIAor
ICAgICAgICBtX3R5cGUgPSBwcmVkaWN0aW9uRnJvbVZhbHVlKHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBtX3N0
cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5hZGQoc3RydWN0dXJlKTsKKyAg
ICAgICAgCisgICAgICAgIG1fdHlwZSA9IHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIGlmICh0eXBlICYgUHJlZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVjdHVy
ZS5tYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFy
KCk7CisgICAgICAgIG1fdHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3R5cGUgPT0gb3RoZXIubV90eXBlICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0VmFsdWUm
IG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90
aGVyLm1fdHlwZSkgfCBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG1lcmdlKFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIHR5cGUpOworICAgICAgICAKKyAgICAgICAgaWYg
KHR5cGUgJiBQcmVkaWN0Q2VsbCkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikK
KyAgICB7CisgICAgICAgIG1fdHlwZSAmPSBvdGhlci5wcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMo
KTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUg
PT0gUHJlZGljdFRvcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90eXBlICY9IHR5
cGU7CisgICAgICAgIG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlz
VG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICht
ZXJnZVByZWRpY3Rpb25zKG1fdHlwZSwgcHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1ZSkpICE9IG1f
dHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAor
ICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUg
JiBQcmVkaWN0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnMo
dmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1
bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHByZWRp
Y3Rpb25Ub1N0cmluZyhtX3R5cGUpKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOwor
ICAgICAgICBmcHJpbnRmKG91dCwgIikiKTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CisgICAgUHJlZGljdGVkVHlwZSBtX3R5cGU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0Fic3RyYWN0VmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgREZHQmFzaWNCbG9ja19oCisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJE
RkdOb2RlLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKK3R5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisKK3N0cnVjdCBCYXNpY0Jsb2NrIHsKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2Rl
QmVnaW4sIE5vZGVJbmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBu
dW1Mb2NhbHMpCisgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAg
ICAsIGJlZ2luKGJlZ2luKQorICAgICAgICAsIGVuZChOb05vZGUpCisgICAgICAgICwgaXNPU1JU
YXJnZXQoZmFsc2UpCisgICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAgICAgLCBj
ZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1
bWVudHMsIG51bUxvY2FscykKKyAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9j
YWxzKQorICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVn
aW4oT3duUHRyPEJhc2ljQmxvY2s+KiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiAoKmJs
b2NrKS0+Ynl0ZWNvZGVCZWdpbjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2lu
OworICAgIE5vZGVJbmRleCBiZWdpbjsKKyAgICBOb2RlSW5kZXggZW5kOworICAgIGJvb2wgaXNP
U1JUYXJnZXQ7CisgICAgYm9vbCBjZmFIYXNWaXNpdGVkOworICAgIGJvb2wgY2ZhU2hvdWxkUmV2
aXNpdDsKKyAgICAKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgCisg
ICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0SGVhZDsK
KyAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRUYWls
OworICAgIAorICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICBP
cGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERG
R0Jhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcg
KzEyNSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwg
YWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUlu
ZGV4IGdldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXgg
bm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVl
OworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5sb2NhbChvcGVyYW5kKTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9k
ZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE0
NCwxNSArMTQ0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dy
YXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2xvY2FsUGhp
U3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkp
OwogICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFi
bGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRU
YWlsW29wZXJhbmRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRIZWFkW29wZXJhbmRdLnNldEZpcnN0VGlt
ZShub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJh
bmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xv
Y2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhu
ZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBhZGRUb0dyYXBoKFNldExv
Y2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAg
IH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0
aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4KQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgog
ICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1Q
YXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBB
U1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFs
dWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9
IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
QEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRM
b2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9j
YWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKICAgICAgICAg
ICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJp
YWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50
QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4Owog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xODYsOSArMTg2LDkgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVB
Y2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tF
bnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwogICAgICAgICBub2RlSW5kZXgg
PSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1
ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJl
bnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5k
ZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50
Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICB9CkBAIC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAg
dW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFy
Z3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2Fy
Z3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFkZFRvR3Jh
cGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1
ZSk7CiAgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJhbmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQz
Mi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgpAQCAtNzgzLDggKzc4Myw4IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgZm9yICh1bnNpZ25lZCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAg
ICAgICAgICAgIE5vZGVJbmRleCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQs
IE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9u
dW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOwogICAg
ICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAg
ICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0
Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2Fy
Z3VtZW50c0F0VGFpbFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKKyAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRp
bWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50
KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY4OSwxNiArMTY4OSwxNiBAQCB2b2lkIEJ5dGVD
b2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayog
cHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQo
KTsKIAotICAgICAgICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJn
dW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFt2YXJO
b10gOiBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0VGFpbFt2YXJOb107CisgICAgICAgICAg
ICBOb2RlSW5kZXgmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVk
ZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNz
b3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKIAotICAgICAgICAgICAgTm9k
ZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhci52YWx1ZTsKKyAgICAgICAgICAgIE5vZGVJ
bmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7CiAgICAgICAgICAgICBpZiAodmFsdWVJblBy
ZWRlY2Vzc29yID09IE5vTm9kZSkgewogICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3Nv
ciA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNrVHlw
ZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gdmFyTm8gLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0
ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIDogdmFyTm8pKSk7Ci0gICAg
ICAgICAgICAgICAgdmFyLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAg
ICAgICAgICAgIHZhciA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBpZiAo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yQmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJ
blByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFy
aWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNz
b3IpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNz
b3JCbG9jay0+bV9sb2NhbHNBdEhlYWRbdmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVj
ZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAg
ICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9j
aywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmICht
X2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAg
ICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFy
ZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKQEAgLTE3NTgsMTEgKzE3NTgsMTQgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6c2V0dXBQcmVkZWNlc3NvcnMoKQogICAgICAgICBOb2RlJiBub2RlID0gbV9n
cmFwaFtibG9jay0+ZW5kIC0gMV07CiAgICAgICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7
CiAKLSAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2Nr
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpLm1fcHJlZGVjZXNz
b3JzLmFwcGVuZChpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgewot
ICAgICAgICAgICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRl
Y29kZU9mZnNldCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAg
bV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNl
dCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOworICAgICAgICBpZiAobm9kZS5pc0p1
bXAoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFy
c2luZygpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0lu
ZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2UgaWYg
KG5vZGUuaXNCcmFuY2goKSkgeworICAgICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgo
bV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJ
bmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0
ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9j
a3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7
CisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCld
LT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk3MDAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4OCwxMSArMTg4LDExIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRl
eCwgQ28KICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5p
c0JyYW5jaCgpIHx8IG5vZGUuaXNKdW1wKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc1Q6IyV1Iiwg
aGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldCgpKSk7CisgICAgICAgIHByaW50ZigiJXNUOiMldSIsIGhhc1By
aW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQ
cmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAg
ICAgcHJpbnRmKCIlc0Y6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKSk7CisgICAgICAg
IHByaW50ZigiJXNGOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgKHZv
aWQpaGFzUHJpbnRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJl
dmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVk
ZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIlByZWRpY3Rpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAi
UmVnaXN0ZXJGaWxlLmgiCkBAIC00MywyOSArNDQsNiBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5h
bWVzcGFjZSBERkcgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAm
IHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1l
bnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9Ci0KLXR5cGVkZWYgdWludDMy
X3QgQmxvY2tJbmRleDsKLQotLy8gRm9yIGV2ZXJ5IGxvY2FsIHZhcmlhYmxlIHdlIHRyYWNrIGFu
eSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4KLS8vIFdlIHRyYWNrIHRoZSBnZXQg
c28gdGhhdCB0aGVzZSBtYXkgYmUgc2hhcmVkLCBhbmQgd2UgdHJhY2sgdGhlIHNldCB0bwotLy8g
cmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUsIGFuZCB0byByZWZlcmVuY2UgdGhlIGZpbmFsIGRl
ZmluaXRpb24uCi1zdHJ1Y3QgVmFyaWFibGVSZWNvcmQgewotICAgIFZhcmlhYmxlUmVjb3JkKCkK
LSAgICAgICAgOiB2YWx1ZShOb05vZGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIHNl
dEZpcnN0VGltZShOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZh
bHVlID09IE5vTm9kZSk7Ci0gICAgICAgIHZhbHVlID0gbm9kZUluZGV4OwotICAgIH0KLQotICAg
IE5vZGVJbmRleCB2YWx1ZTsKLX07Ci0KIHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIC8v
IEl0IGlzIHNhZmUgdG8gcmVmZXIgdG8gdGhlc2UgZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGFyZSBz
aGFkb3dlZCBieQogICAgIC8vIHRoZSBvbGQgSklUJ3MgQ29kZUJsb2NrJ3MgTWV0aG9kQ2FsbExp
bmtJbmZvLgpAQCAtMTExLDQwICs4OSw2IEBAIHN0cnVjdCBSZXNvbHZlR2xvYmFsRGF0YSB7CiAg
ICAgdW5zaWduZWQgcmVzb2x2ZUluZm9JbmRleDsKIH07CiAKLXR5cGVkZWYgVmVjdG9yIDxCbG9j
a0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7Ci0KLXN0cnVjdCBCYXNpY0Jsb2NrIHsKLSAgICBC
YXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJbmRleCBiZWdpbiwgdW5zaWdu
ZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCi0gICAgICAgIDogYnl0ZWNvZGVC
ZWdpbihieXRlY29kZUJlZ2luKQotICAgICAgICAsIGJlZ2luKGJlZ2luKQotICAgICAgICAsIGVu
ZChOb05vZGUpCi0gICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCi0gICAgICAgICwgbV9hcmd1
bWVudHNBdEhlYWQobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fbG9jYWxzQXRIZWFkKG51bUxv
Y2FscykKLSAgICAgICAgLCBtX2FyZ3VtZW50c0F0VGFpbChudW1Bcmd1bWVudHMpCi0gICAgICAg
ICwgbV9sb2NhbHNBdFRhaWwobnVtTG9jYWxzKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
aW5saW5lIEJsb2NrSW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbihPd25QdHI8QmFzaWNCbG9jaz4qIGJs
b2NrKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgqYmxvY2spLT5ieXRlY29kZUJlZ2luOwotICAg
IH0KLQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW47Ci0gICAgTm9kZUluZGV4IGJlZ2luOwot
ICAgIE5vZGVJbmRleCBlbmQ7Ci0gICAgYm9vbCBpc09TUlRhcmdldDsKLQotICAgIFByZWRlY2Vz
c29yTGlzdCBtX3ByZWRlY2Vzc29yczsKLSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQs
IDg+IG1fYXJndW1lbnRzQXRIZWFkOwotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1f
bG9jYWxzQXRIZWFkOwotICAgIAotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1
bWVudHNBdFRhaWw7Ci0gICAgVmVjdG9yPFZhcmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHNBdFRh
aWw7Ci19OwotCiAvLyAKIC8vID09PSBHcmFwaCA9PT0KIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCShy
ZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdl
bmVyYXRvcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5Myw4ICsxMTkzLDggQEAgdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJh
dG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwg
Tm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJh
bmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5C
eXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJ
bmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxv
Y2tJbmRleCgpOwogICAgIAogICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CiAgICAg
ICAgIGludmVydCA9ICFpbnZlcnQ7CkBAIC0xMjU0LDggKzEyNTQsOCBAQCBib29sIEpJVENvZGVH
ZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQ29tCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJ
bmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgWl9ERkdPcGVy
YXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChi
cmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQo
KSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAg
ICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAog
ICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJ
VENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC0xMzk2LDggKzEzOTYsOCBAQCB2b2lkIEpJVENvZGVH
ZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNo
Tm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwot
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICAv
LyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4K
ICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGlu
dmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0
LmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMzEsOCArMTEzMSw4IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJh
bmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUm
IGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJs
b2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewog
ICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMTE5Miw4ICsxMTkyLDggQEAgYm9vbCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFpfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7
CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24g
PSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtMTMyMSw4ICsxMzIxLDggQEAgdm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5j
aE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJy
YW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJs
b2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAg
ICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxv
Y2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4g
JiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
CShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkzLDYgKzEzOTMsMTEgQEAgcHJvdGVj
dGVkOgogICAgICAgICB9CiAgICAgfQogCisgICAgQmFzaWNCbG9jayogYmxvY2soKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7Cisg
ICAgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9
IDApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDIzICs0MDIsMTkgQEAgcHVibGlj
OgogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5
ID0gY29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2Rl
QmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICAg
ICAgCi0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMo
YmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCksIGJhc2ljQmxvY2subV9sb2NhbHNB
dEhlYWQuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNC
bG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUlu
ZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7Ci0g
ICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rp
b25hYmxlUHJlZGljdGlvbnMuc2V0QXJndW1lbnQoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9t
UHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnBy
ZWRpY3Rpb24oKSkpOwotICAgICAgICB9CisgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
ID0gYmFzaWNCbG9jay52YWx1ZXNBdEhlYWQ7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9sb2NhbHNBdEhl
YWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKLSAgICAg
ICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0VmFyaWFibGUoaSwgYWN0aW9uYWJs
ZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAvLyBGaXggdGhlIGV4cGVjdGVk
IHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFibGUgd2lsbCBoYXZlIGFuIGV4
cGVjdGVkCisgICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBt
YXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJlYWxseQorICAgICAgICAvLyBuZWVk
IChUb3AsIFRPUCkuCisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3Vt
ZW50KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1l
bnQoYXJndW1lbnQpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3Rl
ZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZVRvcCgpOworICAgICAgICB9CisgICAgICAg
IGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9j
ay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkubWFrZVRvcCgpOwogICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMucGFjaygpOwotICAg
ICAgICAKLSAgICAgICAgZW50cnktPm1fcHJlZGljdGlvbnMgPSBhY3Rpb25hYmxlUHJlZGljdGlv
bnM7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oYmFzaWNCbG9jayk7CiAjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiA5NzAwMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwx
MCArMjYsOCBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLSNpbmNs
dWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50
ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvVW5pb25GaW5k
Lmg+CiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcs
IGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMuCiAjZGVmaW5lIEVOQUJMRV9E
RkdfREVCVUdfVkVSQk9TRSAwCkBAIC02Nyw2ICs2NSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgorI2lu
Y2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNp
bmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCkBAIC03
NCwxNSArNzQsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBU
eXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikuCi0vLyBV
c2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQgYXQgY29tcGlsZSB0aW1lLCB0
byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KLWVudW0gVmlydHVhbFJlZ2lzdGVyIHsgSW52YWxp
ZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJl
Z2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVyX2lzXzMyYml0KTsKLQogLy8g
VHlwZSBmb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2RlIGluIHRoZSBncmFwaC4KIHR5cGVk
ZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBV
SU5UX01BWDsKIAordHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4OworCitzdHJ1Y3QgTm9kZUlu
ZGV4VHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZUluZGV4IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJu
IE5vTm9kZTsgfQorfTsKKwogLy8gSW5mb3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFu
IGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2UgaW5mb3JtYXRpb24sCiAvLyBhbmQgdG8g
aW1wbGVtZW50IE9TUi4KIC8vIChQcmVzZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBp
bmRleCkuCkBAIC0xMTAsNTEgKzExMSw2IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRl
Y29kZUluZGV4OwogfTsKIAotY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25G
aW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewotcHVibGljOgotICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSgpCi0gICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQotICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVk
aWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0
dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgICAgIDogbV9sb2NhbChsb2NhbCkKLSAgICAgICAgLCBt
X3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXJ0dWFs
UmVnaXN0ZXIgbG9jYWwoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgp
LT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7Ci0gICAgfQotICAgIAotICAgIGlu
dCBvcGVyYW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2Fs
KCkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0
aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJl
ZGljdGlvbiwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAgIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247Ci0g
ICAgfQotICAgIAotcHJpdmF0ZToKLSAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZm
aWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKLSAgICAvLyB3aWxsIGhh
dmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4g
QnV0Ci0gICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdl
IGRvbid0IGV4cGVjdCBERkcgc3BhY2UKLSAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNz
IG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgotCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7
Ci0gICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Ci19OwotCiBzdHJ1Y3QgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAg
U3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC01NjQsNiArNTIwLDcgQEAgc3RydWN0IE5vZGUg
ewogICAgIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKICAg
ICB7CisgICAgICAgIEFTU0VSVChoYXNWYXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+Zmlu
ZCgpOwogICAgIH0KICAgICAKQEAgLTc1NSwxMyArNzEyLDM3IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgcmV0dXJuIG9wICYgTm9kZUlzVGVybWluYWw7CiAgICAgfQogCi0gICAgdW5zaWduZWQg
dGFrZW5CeXRlY29kZU9mZnNldCgpCisgICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldER1
cmluZ1BhcnNpbmcoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1w
KCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm87CiAgICAgfQogCi0gICAgdW5zaWduZWQgbm90
VGFrZW5CeXRlY29kZU9mZnNldCgpCisgICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNl
dER1cmluZ1BhcnNpbmcoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOworICAg
ICAgICByZXR1cm4gbV9vcEluZm8yOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFRha2VuQmxv
Y2tJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNC
cmFuY2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIG1fb3BJbmZvID0gYmxvY2tJbmRleDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXROb3RUYWtlbkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9j
a0luZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOworICAgICAgICBtX29w
SW5mbzIgPSBibG9ja0luZGV4OworICAgIH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHRha2VuQmxv
Y2tJbmRleCgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7
CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBu
b3RUYWtlbkJsb2NrSW5kZXgoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwog
ICAgICAgICByZXR1cm4gbV9vcEluZm8yOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDM0ICs3NywzOCBA
QCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVjLCBDCiAgICAgLy8gICAgaW50
byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMg
dG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlzIHRpbWUuCiAgICAgCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJC
b3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9
IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50KGkpOwotICAgICAgICBpZiAocHJlZGljdGlv
biA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKGkgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworICAg
IGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChhcmd1
bWVudCA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKSB7CiAjaWYgRU5BQkxF
KEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVj
YXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgJXMuXG4iLCBpLCBhY3Rp
b25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50
ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlbHUgd2FzIG5vdCBwYXNzZWQsIGV4
cGVjdGVkICIsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
LmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5c
biIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1
bWVudChpIC0gMSksIHByZWRpY3Rpb24pKSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAg
ICAgIGlmICghYXJndW1lbnQpCisgICAgICAgICAgICB2YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFs
dWUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChh
cmd1bWVudCAtIDEpOworICAgICAgICAKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcy5hcmd1bWVudChhcmd1bWVudCkudmFsaWRhdGUodmFsdWUpKSB7CiAjaWYgRU5BQkxFKEpJ
VF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChp
IC0gMSkuZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0
aW9uKSk7CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1l
bnQgJWx1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFsdWUuZGVzY3JpcHRpb24oKSk7
CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCku
ZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlVXBwZXJCb3VuZCgpOyAr
K2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5t
X3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0Fj
dGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAg
ICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVy
cygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9
IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKyts
b2NhbCkgeworICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2Fs
KS52YWxpZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVn
aXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9u
VG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxl
ZCBiZWNhdXNlIHZhcmlhYmxlICVsdSBpcyAlcywgZXhwZWN0ZWQgIiwgbG9jYWwsIGV4ZWMtPnJl
Z2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBl
bnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkuZHVtcChzdGRvdXQpOworICAgICAg
ICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlz
aW9uIDk3MDAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNk
ZWZpbmUgREZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIK
KyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDcgKzQwLDcgQEAgbmFtZXNwYWNlIERGRyB7CiBz
dHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAg
dW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMg
bV9wcmVkaWN0aW9uczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVjdGVkVmFs
dWVzOwogfTsKIAogaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgo
T1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09wZXJhbmRz
X2gKKyNkZWZpbmUgREZHT3BlcmFuZHNfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGlu
Z3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wgb3Bl
cmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPcGVyYW5kVmFsdWVUcmFpdHM7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+CitzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzIHsKKyAgICBzdGF0aWMgVCBk
ZWZhdWx0VmFsdWUoKSB7IHJldHVybiBUKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxUPiA+CitjbGFzcyBPcGVyYW5k
cyB7CitwdWJsaWM6CisgICAgT3BlcmFuZHMoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBPcGVy
YW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9jYWxzKQorICAgIHsKKyAgICAg
ICAgbV9hcmd1bWVudHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBudW1Bcmd1bWVudHMp
OworICAgICAgICBtX2xvY2Fscy5maWxsKFRyYWl0czo6ZGVmYXVsdFZhbHVlKCksIG51bUxvY2Fs
cyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsg
cmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHNpemVfdCBudW1iZXJPZkxvY2Fscygp
IGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzLnNpemUoKTsgfQorICAgIAorICAgIFQmIGFyZ3VtZW50
KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fYXJndW1lbnRzW2lkeF07IH0KKyAgICBjb25zdCBUJiBh
cmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1tpZHhdOyB9Cisg
ICAgCisgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQor
ICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lk
eF07IH0KKyAgICAKKyAgICB2b2lkIHNldExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVl
KQorICAgIHsKKyAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkpIHsKKyAgICAgICAg
ICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9sb2Nh
bHMucmVzaXplKGlkeCArIDEpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7
IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9
IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1f
bG9jYWxzW2lkeF0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudEZp
cnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2FyZ3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBh
cmd1bWVudChpZHgpID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0TG9jYWxGaXJz
dFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQo
aWR4ID49IG1fbG9jYWxzLnNpemUoKSB8fCBtX2xvY2Fsc1tpZHhdID09IFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCkpOworICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNB
cmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCAr
IG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
KyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVudF07CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tvcGVyYW5kXTsKKyAgICB9CisgICAgCisg
ICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2Fz
dDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQp
KTsgfQorICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFs
dWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAg
ICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBS
ZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICBtX2FyZ3VtZW50
c1thcmd1bWVudF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9h
cmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFRyYWl0
czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2Nh
bHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8VCwgOD4gbV9hcmd1
bWVudHM7CisgICAgVmVjdG9yPFQsIDE2PiBtX2xvY2FsczsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Cit2b2lkIGR1bXBPcGVyYW5kcyhPcGVyYW5kczxUPiYgb3BlcmFuZHMsIEZJTEUqIG91
dCkKK3sKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgb3BlcmFuZHMu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAoYXJndW1lbnQp
CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMuYXJndW1l
bnQoYXJndW1lbnQpLmR1bXAob3V0KTsKKyAgICB9CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsK
KyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgb3BlcmFuZHMubnVtYmVyT2ZMb2Nh
bHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAobG9jYWwpCisgICAgICAgICAgICBmcHJpbnRm
KG91dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMubG9jYWwobG9jYWwpLmR1bXAob3V0KTsKKyAg
ICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShE
RkdfSklUKQorCisjZW5kaWYgLy8gREZHT3BlcmFuZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlzaW9uIDk3MDAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdB
YnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdTY29y
ZUJvYXJkLmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4KQEAgLTU1LDQ1ICs1NiwxMSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBmaXhwb2ludCgpCiAgICAgewogI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwor
ICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
REZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIG1fY291bnQgPSAwOwotI2Vu
ZGlmCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBVcCBoZXJlIHdlIHN0YXJ0IHdpdGggYSBiYWNrd2FyZCBw
YXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0aGF0IHRvIGJlCi0gICAgICAgICAgICAvLyBtb3JlIHBy
b2ZpdGFibGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0JhY2t3YXJkKCk7
Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBw
cm9wYWdhdGVBcml0aE5vZGVGbGFnc0ZvcndhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFu
Z2VkKTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2Fy
ZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0
ZWQgYW5kCi0gICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9w
YWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCYWNr
d2FyZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2Fs
IGNvZGUgd2lsbAotICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lh
bGx5IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgLy8g
VGhpcyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndh
cmQgZml4cG9pbnQKLSAgICAgICAgICAgIC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgy
KSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0JhY2t3YXJkKCk7Ci0gICAg
ICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgICAgIAorICAgICAgICBwcm9wYWdhdGVBcml0
aE5vZGVGbGFncygpOworICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9ucygpOwogICAgICAgICBm
aXh1cCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJP
U0UpCkBAIC0xMTAsNiArNzcsMTMgQEAgcHVibGljOgogCiAgICAgICAgIGFsbG9jYXRlVmlydHVh
bFJlZ2lzdGVycygpOwogCisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwgcmVnaXN0ZXIgYWxsb2NhdGlv
bjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAg
ICAgICAgZ2xvYmFsQ0ZBKCk7CisKICNpZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCiAgICAg
ICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb246XG4iKTsKICAgICAgICAgbV9ncmFw
aC5kdW1wKG1fY29kZUJsb2NrKTsKQEAgLTI3NCw2ICsyNDgsMjUgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsK
ICAgICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpCisgICAgewor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3Vu
dCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBh
IGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0IHRoYXQgdG8gYmUKKyAgICAgICAgICAg
IC8vIG1vcmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdz
QmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzRm9yd2FyZCgpOworICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBib29sIHNldFByZWRpY3Rpb24oUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9j
b21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKQEAgLTYwOCw3ICs2MDEsNyBAQCBwcml2YXRlOgog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0g
ICAgICAgIHByaW50ZigiJXMgIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxl
SW5kZXhdLnByZWRpY3Rpb24oKSkpOworICAgICAgICBwcmludGYoIiVzXG4iLCBwcmVkaWN0aW9u
VG9TdHJpbmcobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSk7CiAjZW5kaWYK
ICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2VkOwpAQCAtNjMyLDYgKzYyNSwy
OSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQcmVk
aWN0aW9ucygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcndh
cmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29y
dGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgorICAgICAgICAgICAgcHJv
cGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFj
a3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNh
bCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNp
YWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8v
IFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3
YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAo
Mikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpOworICAg
ICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICB2b2lkIHRvRG91Ymxl
KE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5k
ZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKQEAgLTE0MjQsNiArMTQ0MCw4MSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVl
UmVnaXN0ZXJzOwogICAgIH0KICAgICAKKyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShBYnN0cmFj
dFN0YXRlJiBzdGF0ZSwgQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAg
ICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQorICAgICAgICAgICAgcmV0dXJuOwor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCIgICBCbG9jayAjJXUgKGJjIyV1KTpcbiIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJl
Z2luKTsKKyNlbmRpZgorICAgICAgICBzdGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOworI2lm
IEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIg
ICAgICBoZWFkIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0
SGVhZCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIGZv
ciAoTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5iZWdpbjsgbm9kZUluZGV4IDwgYmxvY2st
PmVuZDsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhd
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisjaWYgRU5BQkxF
KERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICAgICAgcHJpbnRmKCIgICAg
ICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUlu
ZGV4KTsKKyAgICAgICAgICAgIHN0YXRlLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50
ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKG5vZGVJbmRl
eCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoREZHX0RF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgICAgdGFpbCByZWdz
OiAiKTsKKyAgICAgICAgc3RhdGUuZHVtcChzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7
CisjZW5kaWYKKyAgICAgICAgbV9jaGFuZ2VkIHw9IHN0YXRlLmVuZEJhc2ljQmxvY2soQWJzdHJh
Y3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAgICB0YWlsIHZhcnM6ICIpOworICAg
ICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFpbCwgc3Rkb3V0KTsKKyAgICAgICAg
cHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybUZvcndh
cmRDRkEoQWJzdHJhY3RTdGF0ZSYgc3RhdGUpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJDRkEgWyV1XVxuIiwgKyttX2Nv
dW50KTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrID0g
MDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9jaykKKyAgICAgICAgICAg
IHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwgYmxvY2spOworICAgIH0KKyAgICAKKyAgICB2b2lkIGds
b2JhbENGQSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIC8vIFRo
aXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNlZCBmb3J3YXJkIENGQSwgZXhjZXB0
IHRoYXQgdGhlIHZpc2l0IG9yZGVyCisgICAgICAgIC8vIG9mIGJsb2NrcyBpcyB0aGUgYnl0ZWNv
ZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRvcG9sb2dpY2FsKSwgYW5kCisgICAg
ICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0IHdhbGsgYWxsIGJhc2ljIGJsb2Nr
cyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0CisgICAgICAgIC8vIGlzIHNldCB0byB0cnVl
LiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZpY2llbmN5IHByb3BlcnRpZXMgb2Yg
Ym90aAorICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQgZm9yd2FyZCBmaXhwb2ludC1iYXNl
ZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQKKyAgICAgICAgLy8gYXBwcm9hY2gs
IGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5nbGVzcyB0byBkbyBzbyAobm90aGlu
ZyBjaGFuZ2VkIGF0CisgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRoZSBibG9jayBvciB0aGUgcHJl
ZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExpa2UgYSBmb3J3YXJkCisgICAgICAg
IC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9m
IG9ubHkgdmlzaXRpbmcgYSBibG9jaworICAgICAgICAvLyBhZnRlciBhbGwgcHJlZGVjZXNzb3Jz
IGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwgY2F1c2UgdGhpcyBhbmFseXNpcyB0
bworICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRoZSBhbW91bnQgb2YgcmV2aXNpdGlu
ZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIEFic3Ry
YWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7CisgICAgICAgIAorICAgICAgICBBYnN0cmFj
dFN0YXRlIHN0YXRlKG1fY29kZUJsb2NrLCBtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGRv
IHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcGVyZm9ybUZv
cndhcmRDRkEoc3RhdGUpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAg
ICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsK
ICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5NzAw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBT
cGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZw
dHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9k
ZSwgdm9pZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpCiB7
CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTM1OSw4
ICszNTksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAg
IEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3Vs
dFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgIAotICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDIoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKEltbTMyKDEpLCBy
ZXN1bHRQYXlsb2FkR1BSKTsKQEAgLTM4MCw5ICszODIsOSBAQCBib29sIFNwZWN1bGF0aXZlSklU
Ojpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgaWYgKE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2Rl
LmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5n
bG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdEVx
dWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlzRmlu
YWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVB
cnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21w
aWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7
CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgZWxzZSBpZiAoIWF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmICFhdChub2RlLmNoaWxkMigpKS5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9s
ZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAgIGVsc2UgaWYgKChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSB8fCBhdChub2RlLmNoaWxkMigp
KS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgJiYgIU5vZGU6OnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewpAQCAtNDM4LDcgKzQ0
MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4
LCB2b2lkKiB2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdFRh
Zyh0aGlzKTsKQEAgLTQ1MSw3ICs0NTMsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVh
blRhZyksIHJlc3VsdFRhZy5ncHIoKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih2cHRyKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDEpLCBy
ZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQu
anVtcCgpOwogICAgIApAQCAtNDU5LDcgKzQ2Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFnR1BSLCByZXN1
bHRQYXlsb2FkR1BSKTsKICAgICBtX2ppdC5hbmQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZyksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1
bHRQYXlsb2FkR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkpOworICAg
IGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpKSk7CiAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIAogICAgIGRvbmUubGluaygmbV9q
aXQpOwpAQCAtNDcyLDExICs0NzYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxv
Z2ljYWxOb3QoTgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFkZCBmYXN0IHBhdGhzIGZvciBrbm93
biBib29sZWFucy4KIAogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0
cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgp
LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9y
T3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJM
b2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIp
OworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVn
ZXIoKSkgewpAQCAtNTQyLDIwICs1NDYsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUxvZ2ljYWxOb3QoTgogI2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJs
b2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2Vu
LCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNo
ZWNrKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAg
R1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgR1BSUmVnIHZhbHVlUGF5
bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2
YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
dGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogICAgIAogICAgIG1faml0
LmFuZDMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFn
KSwgdmFsdWVUYWdHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OlVuZGVmaW5lZFRhZykpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKICAg
ICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgYWRkQnJhbmNoKG1faml0
Lmp1bXAoKSwgbm90VGFrZW4pOwogICAgIApAQCAtNTY0LDE1ICs1NzAsMTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0QnJhbmNoKE5vZGUmIG5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJs
b2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gRklYTUU6IEFk
ZCBmYXN0IGNhc2VzIGZvciBrbm93biBCb29sZWFuIQogCiAgICAgaWYgKGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRP
YmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90
aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAg
ICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4s
IG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JP
dGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9vbCBpbnZl
cnQgPSBmYWxzZTsKQEAgLTYzOCw2ICs2NDQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFByZWRpY3Rl
ZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9jaygpLT52YWx1ZXNBdEhlYWQu
b3BlcmFuZChub2RlLmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGlj
dGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCiAgICAg
ICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7CkBAIC02NjgsOSArNjc1LDkgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2dwcnMu
cmV0YWluKHRhZy5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogCiAgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OwotICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJl
ZGljdGlvbikpCisgICAgICAgIGlmIChpc0NlbGxQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCiAg
ICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOwotICAgICAgICBlbHNlIGlmIChp
c0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBlbHNlIGlmIChpc0Jvb2xl
YW5QcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9y
bWF0SlNCb29sZWFuOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9y
bWF0SlM7CkBAIC03MDMsNyArNzEwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rl
ZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSBjZWxsLmdwcigpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsK
KyAgICAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxH
UFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgeyAvLyBGSVhNRTogQWRk
IEJvb2xlYW5QcmVkaWN0aW9uIGhhbmRsaW5nCkBAIC0xMjg5LDcgKzEyOTcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhh
dCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGlu
IG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVk
aWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgot
ICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFp
c0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCkBAIC0xMzI0LDcgKzEzMzIs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250
YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAg
dGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAg
ICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTE0MTEsNyArMTQxOSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAg
ICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDIoKSwgV3Jp
dGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIp
OwogCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBp
ZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBA
IC0xNDU3LDcgKzE0NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAg
R1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICgh
aXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkp
OwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE1
MDQsNyArMTUxMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDogewotICAgICAgICBCbG9ja0luZGV4IHRha2Vu
ID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5
dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJs
b2NrSW5kZXgoKTsKICAgICAgICAgaWYgKHRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAg
ICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKQEAgLTE1MTUsOCArMTUyMyw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGls
ZDEoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAg
ICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgp
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dCgpKTsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsK
KyAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAgICAgICAgICAg
CkBAIC0xNzI3LDcgKzE3MzUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSku
cHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1Zh
bHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFp
c09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTc2OSw5ICsxNzc4LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8g
TmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdG90eXBlIGlzIGFuIG9iamVjdC4gSWYgd2UgaGF2
ZSByZWFzb24gdG8gYmVsaWV2ZQogICAgICAgICAvLyB0aGF0IGl0J3MgYSBGaW5hbE9iamVjdCB0
aGVuIHdlIHNwZWN1bGF0ZSBvbiB0aGF0IGRpcmVjdGx5LiBPdGhlcndpc2Ugd2UKICAgICAgICAg
Ly8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNlZCkgY2hlY2suCi0gICAgICAgIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7Ci0gICAg
ICAgIGVsc2UgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKCFpc0ZpbmFsT2JqZWN0UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKKyAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJl
Ojp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2Jq
ZWN0VHlwZSkpKTsKICAgICAgICAgfQpAQCAtMTkwNyw3ICsxOTE3LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAg
ICAgIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAg
aWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7CkBA
IC0xOTI2LDcgKzE5MzYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93
blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgCiAgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CkBAIC0xOTQzLDYgKzE5NTMsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7Cisg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVj
dHVyZVNldCgpLnNpemUoKSk7CkBAIC0yMDY5LDcgKzIwODQsOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0
cnVjdHVyZSkpKTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV9zdHJ1Y3R1cmUuZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0
cnVjdHVyZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RD
aGVja0RhdGEuc3RydWN0dXJlKSkpOwogICAgICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3Rv
dHlwZSAhPSBtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1t
eSgpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUtPnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hH
UFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTAsNyArNDUwLDcg
QEAgSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJldHVybiBu
b3ROdW1iZXI7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0
eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0aW9uQ2hl
Y2spKFByZWRpY3RlZFR5cGUpKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CkBAIC00NjAsOCArNDYwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigp
KS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVUcnVl
KSwgcmVzdWx0R1BSKTsKQEAgLTUwMSw5ICs1MDMsOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpj
b21wYXJlKE5vZGUmIG5vZGUsCiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICB9IGVsc2UgaWYgKG5v
ZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0
KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmpl
Y3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsK
KyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+
anNGaW5hbE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlm
IChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChu
b2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0
RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAg
IGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyLCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgZWxzZQogICAgICAgICBub25TcGVjdWxhdGl2
ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgCkBA
IC01MjksNyArNTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5v
ZAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAK
LXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2Rl
SW5kZXggbm9kZUluZGV4LCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQgKnZwdHIs
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNTM3
LDcgKzUzOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtNTQ1LDcgKzU0OCw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBtX2ppdC5tb3ZlKHZh
bHVlR1BSLCByZXN1bHRHUFIpOwogICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihW
YWx1ZU51bGwpKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBy
ZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CkBAIC01NjYsMTEgKzU3MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAg
ICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5n
bG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5h
bE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewot
ICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CkBAIC02MzAsMTkgKzYzNCwyMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VD
aGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2Vu
LCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0
YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRp
b25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwog
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih2cHRyKSkpOwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAK
ICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hbmRQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdmFsdWVHUFIpOwotICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIGlmIChub3RUYWtlbiAhPSAobV9i
bG9jayArIDEpKQogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAg
ICAgCkBAIC02NTQsOCArNjYwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChO
b2RlJiBubwogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIAotICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9m
ZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsK
KyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAg
ICAKICAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybzsKQEAgLTY3Myw5ICs2NzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJh
bmNoKE5vZGUmIG5vCiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNo
aWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0
YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFp
c0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2go
bm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwg
dGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJh
eU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJl
cigpKSB7CiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CkBAIC03MDgsOSArNzE0
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBp
ZiAocHJlZGljdEJvb2xlYW4pIHsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSksIHRha2VuKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHByZWRp
Y3RCb29sZWFuKSB7CisKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuanVtcCgp
KTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNzQ4LDE1
ICs3NTIsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAg
ICAgY2FzZSBHZXRMb2NhbDogewogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBu
b2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0
VmFsdWUmIHZhbHVlID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgp
KTsKIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWws
IHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgotICAgICAgICBpZiAocHJlZGljdGlvbiA9
PSBQcmVkaWN0Tm9uZSkgeworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8
fCB2YWx1ZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0
aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih2YWx1ZS5t
X3R5cGUpKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRG
b3Iobm9kZS5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgLy8gTGlrZSBp
bnRlZ2VyUmVzdWx0LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBo
aSBub2RlcywKQEAgLTc3NSw5ICs3ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0g
ICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlz
Q2VsbFByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFG
b3JtYXRKU0NlbGw7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGlj
dGlvbikpCisgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBl
KSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKQEAgLTgyMCw3ICs4MjUsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc0FycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwog
ICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkg
ewpAQCAtMTQwOCw3ICsxNDE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRo
YXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0
aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUg
YXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXko
bm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKIApAQCAtMTQ0Miw3ICsxNDQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBh
cnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBt
X3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNl
IHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFp
c0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJh
c2UudXNlKCk7CkBAIC0xNTI0LDcgKzE1MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwg
dmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBz
dG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAgICBpZiAoIWlzS25vd25BcnJh
eShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTU2Nyw3ICsxNTczLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQ
UiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3Rv
cmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5v
ZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9m
ZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNjEwLDcgKzE2MTYsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6
IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgIGlmICh0YWtl
biAhPSAobV9ibG9jayArIDEpKQogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
dGFrZW4pOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CkBAIC0xNjIxLDggKzE2
MjcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9w
ZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtl
biA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIApAQCAtMTc5NSw5ICsxODAxLDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyB0
aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRj
aEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1v
dmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmFuZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BS
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIGlm
ICghaXNPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5j
b2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGNl
bGxSZXN1bHQoc2NyYXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwpAQCAtMTgwNyw3ICsxODE1LDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAo
aXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFs
dWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNPYmplY3RQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTE4NDcsOSArMTg1NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5IHRoYXQg
dGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUK
ICAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxhdGUgb24g
dGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1
Y3R1cmUtYmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlRmluYWxPYmplY3QoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAg
aWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CiAgICAgICAg
IH0KQEAgLTE5NzgsNyArMTk4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFp
c0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwpAQCAtMTk5Nyw3ICsyMDA3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEo
KSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkp
LCByZXN1bHRHUFIpOwpAQCAtMjAxMiw2ICsyMDIyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hl
Y2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNl
dCgpLnNpemUoKSk7CkBAIC0yMTMxLDcgKzIxNDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVy
ZSkpKTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1
Y3R1cmUuZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVy
ZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0Rh
dGEuc3RydWN0dXJlKSkpOwogICAgICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZSAh
PSBtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgpKSB7
CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhv
ZENoZWNrRGF0YS5wcm90b3R5cGUtPnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIpOwog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CShyZXZpc2lvbiA5NzAwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBPU1JF
eGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQ
ZWVwSG9sZURvdWJsZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4
LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBi
cmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0g
bV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtl
bkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFw
aCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7CiAgICAgCiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9k
ZS5jaGlsZDIoKSk7CkBAIC0xMzcsMTEgKzEzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVEb3ViCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cikK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUm
IG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVk
aWN0aW9uQ2hlY2spKFByZWRpY3RlZFR5cGUpKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBh
dChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsK
KyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1h
Y3JvQXNzZW1ibGVyOjpFcXVhbDsKICAgICAKQEAgLTE1OCw4ICsxNTgsMTAgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEu
Z3ByKCk7CiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNr
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtl
bik7CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBAIC0xNjksOCArMTcxLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25k
aXRpb24pCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0g
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBp
bnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFr
ZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5j
aCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KQEAgLTIxOSwxMSArMjIxLDExIEBA
IGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgICAgIHVz
ZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxh
dGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0g
ICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2Rl
SW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICAg
ICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBt
X2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGlj
dGlvbik7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uo
bm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEg
JiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUu
Y2hpbGQyKCkpKSkgewotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHko
bm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsK
KyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5v
ZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rp
b24pOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5v
ZGUuY2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UKQEAgLTI1NiwxOCArMjU4LDIxIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICBtX2ppdC5icmVha3BvaW50
KCk7CiAjZW5kaWYKIAotICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9h
cmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09
IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJ
bmRleCBub2RlSW5kZXggPSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAg
ICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChp
KTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBtX2FyZ3Vt
ZW50c1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9u
KGF0KG5vZGVJbmRleCkudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CiAgICAg
fQogICAgIAotICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXplKCkgPT0gYmxvY2subV9sb2NhbHNB
dEhlYWQuc2l6ZSgpKTsKKyAgICBtX3N0YXRlLnJlc2V0KCk7CisgICAgbV9zdGF0ZS5iZWdpbkJh
c2ljQmxvY2soJmJsb2NrKTsKKyAgICAKKyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09
IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay5tX2xvY2Fsc0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKICAgICAg
ICAgaWYgKG5vZGVJbmRleCA9PSBOb05vZGUpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9
IFZhbHVlU291cmNlKFZhbHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCkBAIC0zMzcs
NiArMzQyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAjZW5kaWYKICAgICAgICAgCisgICAgICAgIC8v
IE1ha2Ugc3VyZSB0aGF0IHRoZSBhYnN0cmFjdCBzdGF0ZSBpcyByZW1hdGVyaWFsaXplZCBmb3Ig
dGhlIG5leHQgbm9kZS4KKyAgICAgICAgbV9zdGF0ZS5leGVjdXRlKG1fY29tcGlsZUluZGV4KTsK
KyAgICAgICAgCiAgICAgICAgIGlmIChub2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgfQpAQCAtNTM3LDcgKzU0NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUEKICAgICBHUFJSZWcgc3RyaW5nUmVnID0g
c3RyaW5nLmdwcigpOwogICAgIEdQUlJlZyBpbmRleFJlZyA9IGluZGV4LmdwcigpOwogICAgIAot
ICAgIGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICBpZiAoIWlzU3RyaW5n
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAK
ICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZl
IGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCkBAIC01NjYsNyArNTc0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBi
YXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5n
cHIoKTsKIAotICAgIGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICBpZiAo
IWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7
CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0
aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5NzAw
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNp
bmNsdWRlIDxkZmcvREZHQWJzdHJhY3RTdGF0ZS5oPgogI2luY2x1ZGUgPGRmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQxNyw0
MyArNDE4LDE2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7
CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNLbm93bkFycmF5KE5vZGVJbmRleCBvcDEpCi0gICAg
ewotICAgICAgICBOb2RlJiBub2RlID0gYXQob3AxKTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9w
KSB7Ci0gICAgICAgIGNhc2UgR2V0TG9jYWw6Ci0gICAgICAgICAgICByZXR1cm4gaXNBcnJheVBy
ZWRpY3Rpb24obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIE5ld0FycmF5OgotICAgICAgICBjYXNlIE5ld0FycmF5QnVm
ZmVyOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGJvb2wgaXNLbm93blN0cmluZyhOb2RlSW5kZXggb3AxKQotICAgIHsKLSAgICAgICAgc3dpdGNo
IChhdChvcDEpLm9wKSB7Ci0gICAgICAgIGNhc2UgU3RyQ2F0OgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKICAgICBib29sIGNvbXBhcmUoTm9kZSYs
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91
YmxlQ29uZGl0aW9uLCBaX0RGR09wZXJhdGlvbl9FSkopOwogICAgIGJvb2wgY29tcGlsZVBlZXBI
b2xlQnJhbmNoKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKKTsKICAgICB2
b2lkIGNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNv
bXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCog
dnB0cik7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZwdHIp
OworICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRl
eCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIsIGJvb2wgKCpwcmVkaWN0aW9uQ2hlY2spKFBy
ZWRpY3RlZFR5cGUpKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgdm9p
ZCogdnB0ciwgYm9vbCAoKnByZWRpY3Rpb25DaGVjaykoUHJlZGljdGVkVHlwZSkpOwogICAgIHZv
aWQgY29tcGlsZVZhbHVlQWRkKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVy
TG9naWNhbE5vdChOb2RlSW5kZXggdmFsdWUsIHZvaWQqIHZwdHIpOworICAgIHZvaWQgY29tcGls
ZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCB2YWx1ZSwgdm9pZCogdnB0ciwgYm9v
bCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdChOb2Rl
Jik7Ci0gICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggdmFsdWUsIEJs
b2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIpOworICAgIHZv
aWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRh
a2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlv
bkNoZWNrKTsKICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSYpOwogICAgIAogICAgIHZvaWQgY29t
cGlsZUdldENoYXJDb2RlQXQoTm9kZSYpOwpAQCAtNTc1LDYgKzU0OSw4IEBAIHByaXZhdGU6CiAg
ICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9y
T1NSOwogICAgIAorICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICAKICAgICBWYWx1ZVJl
Y292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAg
ICBWYWx1ZVJlY292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQpAQCAt
ODA3LDYgKzc4Myw3IEBAIGlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSkkK
ICAgICAsIG1fdmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0
U2V0T3BlcmFuZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICwgbV9ieXRl
Y29kZUluZGV4Rm9yT1NSKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAg
ICAsIG1fc3RhdGUobV9qaXQuY29kZUJsb2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkocmV2aXNp
b24gOTcwMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogI2lmbmRlZiBERkdTdHJ1Y3R1cmVT
ZXRfaAogI2RlZmluZSBERkdTdHJ1Y3R1cmVTZXRfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIK
KyNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CkBAIC0zNCw2ICs0MCw4IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogbmFtZXNwYWNlIERG
RyB7CiAKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisKIGNsYXNzIFN0cnVjdHVyZVNl
dCB7CiBwdWJsaWM6CiAgICAgU3RydWN0dXJlU2V0KCkgeyB9CkBAIC00Myw2ICs1MSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIG1fc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKICAgICB9CiAg
ICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZXMuY2xlYXIo
KTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAg
ewogICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkpOwpAQCAtMTA0LDEwICsxMTcs
NTAgQEAgcHVibGljOgogICAgIAogICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlcy5sYXN0KCk7IH0KIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZy
b21TdHJ1Y3R1cmVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcmVzdWx0
ID0gUHJlZGljdE5vbmU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihy
ZXN1bHQsIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlc1tpXSkpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmVzLnNpemUoKSAhPSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIu
Y29udGFpbnMobV9zdHJ1Y3R1cmVzW2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAg
IGZwcmludGYob3V0LCAiWyIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3Ry
dWN0dXJlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAg
ICAgZnByaW50ZihvdXQsICIsICIpOworICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1f
c3RydWN0dXJlc1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZnByaW50ZihvdXQsICJdIik7Cisg
ICAgfQorI2VuZGlmCisgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlOworICAgIAogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCAyPiBtX3N0cnVjdHVy
ZXM7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKKyNlbmRpZiAvLyBFTkFCTEUo
REZHX0pJVCkKKwogI2VuZGlmIC8vIERGR1N0cnVjdHVyZVNldF9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKKyNk
ZWZpbmUgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVHlwZSBmb3IgYSB2aXJ0dWFs
IHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pLgorLy8gVXNpbmcgYW4gZW51bSB0byBt
YWtlIHRoaXMgdHlwZS1jaGVja2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1l
ciBlcnJvcnMuCitlbnVtIFZpcnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIg
PSAtMSB9OworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9m
KGludCksIFZpcnR1YWxSZWdpc3Rlcl9pc18zMmJpdCk7CisKK2NsYXNzIFZhcmlhYmxlQWNjZXNz
RGF0YTogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKK3B1YmxpYzoKKyAg
ICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQorICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8Vmly
dHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKKyAgICAgICAg
LCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWYXJp
YWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQorICAgICAgICA6IG1fbG9jYWwo
bG9jYWwpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7CisgICAgICAgIHJldHVybiBtX2xvY2FsOwor
ICAgIH0KKyAgICAKKyAgICBpbnQgb3BlcmFuZCgpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0KFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRp
Y3Rpb24oZmluZCgpLT5tX3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOworICAgIH0KKyAgICAKKyAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmQo
KS0+bV9wcmVkaWN0aW9uOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBz
bGlnaHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3
aXRoCisgICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRo
ZSBzYW1lIHByZWRpY3Rpb24uIEJ1dAorICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZp
ZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCisgICAgLy8gdXNhZ2Ug
Zm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KKworICAgIFZpcnR1
YWxSZWdpc3RlciBtX2xvY2FsOworICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110277</attachid>
            <date>2011-10-08 13:00:39 -0700</date>
            <delta_ts>2011-10-08 13:59:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>cfa_patch_7.diff</filename>
            <type>text/plain</type>
            <size>166164</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRlZCBhIGNvbnRyb2wgZmxvdyBhbmFseXNpcyAoQ0ZBKS4gSXQgY3VycmVu
dGx5IHByb3BhZ2F0ZXMgdHlwZQorICAgICAgICBwcm9vZnMgb25seS4gRm9yIGV4YW1wbGUsIGlm
IGFsbCBwcmVkZWNlc3NvcnMgdG8gYSBiYXNpYyBibG9jayBoYXZlCisgICAgICAgIGNoZWNrcyB0
aGF0IHZhcmlhYmxlIFggaXMgYSBKU0ZpbmFsT2JqZWN0IHdpdGggc3RydWN0dXJlIDB4YWJjZGVm
LCB0aGVuCisgICAgICAgIHRoaXMgYmFzaWMgYmxvY2sgd2lsbCBub3cga25vdyB0aGlzIGZhY3Qg
YW5kIHdpbGwga25vdyB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgIGhhdmUgdG8gZW1pdCBlaXRo
ZXIgSlNGaW5hbE9iamVjdCBjaGVja3Mgb3IgYW55IHN0cnVjdHVyZSBjaGVja3Mgc2luY2UKKyAg
ICAgICAgdGhlIHN0cnVjdHVyZSBpcyBwcmVjaXNlbHkga25vdy4gVGhlIENGQSB0YWtlcyBoZWFw
IHNpZGUtZWZmZWN0cyBpbnRvCisgICAgICAgIGFjY291bnQgKHRob3VnaCBzb21ld2hhdCBjb25z
ZXJ2YXRpdmVseSksIHNvIHRoYXQgaWYgdGhlIG9iamVjdCBwb2ludGVkCisgICAgICAgIHRvIGJ5
IHZhcmlhYmxlIFggY291bGQgaGF2ZSBwb3NzaWJseSB1bmRlcmdvbmUgYSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbgorICAgICAgICB0aGVuIHRoaXMgaXMgcmVmbGVjdGVkOiB0aGUgYW5hbHlzaXMgbWF5
IHNpbXBseSBzYXkgdGhhdCBYJ3Mgc3RydWN0dXJlCisgICAgICAgIGlzIHVua25vd24uCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gcHJvcGFnYXRlcyBhIHdlYWx0aCBvZiBvdGhlciB0eXBl
IGluZm9ybWF0aW9uIHdoaWNoIGlzCisgICAgICAgIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZC4g
Rm9yIGV4YW1wbGUsIHdlIG5vdyBrbm93IHdoZW4gYSB2YXJpYWJsZSBjYW4KKyAgICAgICAgb25s
eSBob2xkIGRvdWJsZXMuIEV2ZW4gaWYgYSB2YXJpYWJsZSBtYXkgaG9sZCBvdGhlciB0eXBlcyBh
dCBkaWZmZXJlbnQKKyAgICAgICAgcG9pbnRzIGluIGl0cyBsaXZlIHJhbmdlLCB3ZSBjYW4gc3Rp
bGwgcHJvdmUgZXhhY3RseSB3aGVuIGl0IHdpbGwgb25seQorICAgICAgICBiZSBkb3VibGUuCisg
ICAgICAgIAorICAgICAgICBUaGVyZSdzIGEgYnVuY2ggb2Ygc3R1ZmYgdGhhdCB0aGUgQ0ZBIGNv
dWxkIGRvIHRoYXQgaXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgZG8sIGxpa2UgcHJlY2lzZSBo
YW5kbGluZyBvZiBQdXRTdHJ1Y3R1cmUgKGkuZS4gc3RydWN0dXJlIHRyYW5zaXRpb25zKSwKKyAg
ICAgICAgcHJlY2lzZSBoYW5kbGluZyBvZiBDaGVja0Z1bmN0aW9uIGFuZCBDaGVja01ldGhvZCwg
ZXRjLiBTbyB0aGlzIGlzCisgICAgICAgIHZlcnkgbXVjaCBpbnRlbmRlZCB0byBiZSBhIHN0YXJ0
aW5nIHBvaW50IHJhdGhlciB0aGFuIGFuIGVuZCB1bnRvCisgICAgICAgIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaXMgYSAyJSB3aW4gb24gVjggKG1vc3RseSBkdWUgdG8gYSAxNiUg
d2luIG9uIHJpY2hhcmRzKSBhbmQgYSAxJSB3aW4KKyAgICAgICAgb24gS3Jha2VuIChtb3N0bHkg
ZHVlIHRvIGEgNiUgd2luIG9uIGltYWdpbmctZGVzYXR1cmF0ZSkuIE5ldXRyYWwgb24KKyAgICAg
ICAgU3VuU3BpZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvblRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpp
c0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
YXNpY0Jsb2NrOjpnZXRCeXRlY29kZUJlZ2luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXR1cFByZWRlY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpi
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0VGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzZXROb3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFr
ZW5CbG9ja0luZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Om9wZXJhbmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kVmFsdWVUcmFp
dHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Ok9wZXJhbmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fscyk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWxGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6
Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0T3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6cGVyZm9ybUZvcndhcmRDRkEpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6Omdsb2JhbENGQSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDogQWRkZWQuCisKIDIw
MTEtMTAtMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5Njk5Ni4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC04
MSw3ICs4MSw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKLQlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
QWN0aW9uYWJsZVByZWRpY3Rpb24uaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBc
CkBAIC0xMDUsNiArMTA0LDEwIEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWxTY29wZS5oIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFZhbHVlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29lci9kZmcvREZHQmFzaWNCbG9j
ay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAgXApAQCAtMTIyLDYgKzEy
NSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0pJVENvbXBpbGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkVudHJ5LmNwcCBcCkBAIC0xMzUsNiArMTM5LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvQWxsb2NhdGlvblNwYWNlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRT
ZXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQzOCwxMCArMTQzOCw2IEBACiAJCQlOYW1lPSJi
eXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29k
ZVxBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgotCQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJ
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxDb2RlQmxvY2suY3BwIgogCQkJCT4KIAkJ
CTwvRmlsZT4KQEAgLTE1ODUsNiArMTU4MSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdJbnRyaW5zaWMuaCIKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxl
PgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxkZmdcREZHT1NSRW50cnkuaCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxl
PgogICAgICAgICAgICAgICAgIDwvRmlsdGVyPgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk3MDA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDEzIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMw
MDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNw
cCAqLzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMz
OUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAw
N0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFr
UmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQz
RkNEMzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJh
bmRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3
QyAvKiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIw
MTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhC
NzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0
YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3
MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50
VmVjdG9yLmggKi87IH07Ci0JCTBGNjM2REEyMTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxl
UHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87
IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjI3MTNG
NzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFj
a1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3MDAw
MkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdT
ID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAgLTgwOSw4ICs4MTQsMTMgQEAKIAkJ
MEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYy
MDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Fi
c3RyYWN0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkYxNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09wZXJhbmRzLmg7IHBhdGgg
PSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAx
NzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRm
Zy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZlY3Rvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVk
aWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGlvbmFibGVQcmVk
aWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNr
VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODMsNiArMjI5MywxMiBAQAogCQk4NkVD
OURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJh
Y3RTdGF0ZS5jcHAgKi8sCisJCQkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3Ry
YWN0U3RhdGUuaCAqLywKKwkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJh
Y3RWYWx1ZS5oICovLAorCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Js
b2NrLmggKi8sCisJCQkJMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmgg
Ki8sCisJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5oICovLAogCQkJCTBGRkY0QkIyMTQzOTU1RTYwMDY1NUJDMCAvKiBERkdTdHJ1Y3R1cmVTZXQu
aCAqLywKIAkJCQk4NkVDOURCNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwICovLAogCQkJCTg2RUM5REI1MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNl
ci5oICovLApAQCAtMjM4NCw3ICsyNDAwLDYgQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
LQkJCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAq
LywKIAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywK
IAkJCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJ
CQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4
NzAsMTMgKzI4ODUsMTcgQEAKIAkJCQlBNzA0NTZCMDE0MjdGQjkxMDAzN0RBNjggLyogQWxsb2Nh
dGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcg
LyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzNkRBMDE0MkQyN0Q3
MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjYzNkRB
MjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3NTIxRTEzMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ1MkFBRTE0MzAzNUEwMDAyNkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njg4MEYxRTE0MzI4QkI5MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXJJbmxp
bmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDgg
LyogSGV1cmlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1
QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDND
RTFDMjAwQjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAx
NzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY2MjAxNzUxNDNGQ0QzNzAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3Ry
YWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAv
KiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTM0MDgsNiArMzQyNyw3IEBA
CiAJCQkJODY4ODBGNDQxNDM1MzFBODAwQjA4RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAx
OTZDNDggLyogSGV1cmlzdGljcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZD
RDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJl
ZGljdGlvbi5oCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgQWN0aW9uYWJsZVByZWRpY3Rpb25faAotI2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9o
Ci0KLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNWYWx1ZS5oIgotI2luY2x1ZGUg
IlByZWRpY3RlZFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFja2VkSW50VmVjdG9yLmg+Ci0KLW5h
bWVzcGFjZSBKU0MgewotCi0vLyBBbiBhY3Rpb25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQg
aXMgZW5mb3JjZWQgb24gc3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcwotLy8gYW5kIGFyZ3VtZW50
cywgYW5kIHdoZW4gcGFzc2luZyBhcmd1bWVudHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJl
IHJlY29yZGVkCi0vLyBpbiBDb2RlQmxvY2suCi0KLWVudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24g
ewotICAgIE5vQWN0aW9uYWJsZVByZWRpY3Rpb24sCi0gICAgRW5mb3JjZUludDMyUHJlZGljdGlv
biwKLSAgICBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uLAotICAgIEVuZm9yY2VCb29sZWFuUHJlZGlj
dGlvbgotfTsKLQotaW5saW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0
aW9uRnJvbVByZWRpY3RlZFR5cGUoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotewotICAgIGlm
IChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIEVuZm9yY2VJ
bnQzMlByZWRpY3Rpb247Ci0gICAgCi0gICAgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rp
b24pKQotICAgICAgICByZXR1cm4gRW5mb3JjZUFycmF5UHJlZGljdGlvbjsKLSAgICAKLSAgICBp
ZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIEVuZm9y
Y2VCb29sZWFuUHJlZGljdGlvbjsKLSAgICAKLSAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGlj
dGlvbjsKLX0KLQotaW5saW5lIGJvb2wgdmFsdWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVlLCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0
aW9uKQotewotICAgIHN3aXRjaCAocHJlZGljdGlvbikgewotICAgIGNhc2UgRW5mb3JjZUludDMy
UHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50MzIoKTsKLQotICAgIGNhc2Ug
RW5mb3JjZUFycmF5UHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxE
YXRhLCB2YWx1ZSk7Ci0KLSAgICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKLSAgICAg
ICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1pbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJs
ZVByZWRpY3Rpb25Ub1N0cmluZyhBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQotewot
ICAgIHN3aXRjaCAocHJlZGljdGlvbikgewotICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlv
bjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNlSW50MzIiOwotICAgICAgICAKLSAgICBjYXNlIEVu
Zm9yY2VBcnJheVByZWRpY3Rpb246Ci0gICAgICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKLSAg
ICAgICAgCi0gICAgY2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rpb246Ci0gICAgICAgIHJldHVy
biAiRW5mb3JjZUJvb2xlYW4iOwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NF
UlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJu
ICJOb0FjdGlvbmFibGVQcmVkaWN0aW9uIjsKLSAgICB9Ci19Ci0KLXR5cGVkZWYgUGFja2VkSW50
VmVjdG9yPEFjdGlvbmFibGVQcmVkaWN0aW9uLCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3Rv
cjsKLQotY2xhc3MgQWN0aW9uYWJsZVByZWRpY3Rpb25zIHsKLXB1YmxpYzoKLSAgICBBY3Rpb25h
YmxlUHJlZGljdGlvbnMoKSB7IH0KLQotICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25l
ZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykKLSAgICB7Ci0gICAgICAgIG1f
YXJndW1lbnRzLmVuc3VyZVNpemUobnVtQXJndW1lbnRzKTsKLSAgICAgICAgbV92YXJpYWJsZXMu
ZW5zdXJlU2l6ZShudW1WYXJpYWJsZXMpOwotICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgp
OwotICAgICAgICBtX3ZhcmlhYmxlcy5jbGVhckFsbCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lk
IHNldEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1
ZSkKLSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLnNldChhcmd1bWVudCwgdmFsdWUpOwotICAg
IH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1
bWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChhcmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkp
Ci0gICAgICAgICAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKLSAgICAgICAgcmV0
dXJuIG1fYXJndW1lbnRzLmdldChhcmd1bWVudCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0
VmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgbV92YXJpYWJsZXMuc2V0KHZhcmlhYmxlLCB2YWx1ZSk7Ci0gICAgfQot
ICAgIAotICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxl
KQotICAgIHsKLSAgICAgICAgaWYgKHZhcmlhYmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKLSAg
ICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOwotICAgICAgICByZXR1cm4g
bV92YXJpYWJsZXMuZ2V0KHZhcmlhYmxlKTsKLSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJn
dW1lbnRVcHBlckJvdW5kKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9Ci0g
ICAgdW5zaWduZWQgdmFyaWFibGVVcHBlckJvdW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJs
ZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdm9pZCBwYWNrKCkKLSAgICB7Ci0gICAgICAgIHBhY2tW
ZWN0b3IobV9hcmd1bWVudHMpOwotICAgICAgICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKLSAg
ICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJs
ZVByZWRpY3Rpb25WZWN0b3ImIHZlY3RvcikKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RT
ZXRJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJs
ZVByZWRpY3Rpb24pCi0gICAgICAgICAgICAgICAgbGFzdFNldEluZGV4ID0gaTsKLSAgICAgICAg
fQotICAgICAgICB2ZWN0b3IucmVzaXplKGxhc3RTZXRJbmRleCArIDEpOwotICAgIH0KLSAgICAK
LSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX2FyZ3VtZW50czsKLSAgICBBY3Rpb25h
YmxlUHJlZGljdGlvblZlY3RvciBtX3ZhcmlhYmxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gQWN0aW9uYWJsZVByZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAkocmV2aXNpb24gOTcw
MDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0LDMyICs0NCw1NSBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9u
VG9TdHJpbmcoUHJlZGljdGVkCiAgICAgc3RhdGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAg
ICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hhcj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKICAg
ICAKKyAgICBib29sIGlzVG9wID0gdHJ1ZTsKKyAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0
Q2VsbE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0KCJPdGhlcmNlbGwiKTsKKyAgICBlbHNlCisg
ICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdE9iamVj
dE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0KCJPdGhlcm9iaiIpOworICAgIGVsc2UKKyAgICAg
ICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0RmluYWxPYmpl
Y3QpCiAgICAgICAgIHB0ci5zdHJjYXQoIkZpbmFsIik7CisgICAgZWxzZQorICAgICAgICBpc1Rv
cCA9IGZhbHNlOwogCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEFycmF5KQogICAgICAgICBwdHIu
c3RyY2F0KCJBcnJheSIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAK
ICAgICBpZiAodmFsdWUgJiBQcmVkaWN0U3RyaW5nKQogICAgICAgICBwdHIuc3RyY2F0KCJTdHJp
bmciKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZh
bHVlICYgUHJlZGljdEludDMyKQogICAgICAgICBwdHIuc3RyY2F0KCJJbnQiKTsKKyAgICBlbHNl
CisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdERv
dWJsZSkKICAgICAgICAgcHRyLnN0cmNhdCgiRG91YmxlIik7CisgICAgZWxzZQorICAgICAgICBp
c1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RCb29sZWFuKQogICAg
ICAgICBwdHIuc3RyY2F0KCJCb29sIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNl
OwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPdGhlcikKICAgICAgICAgcHRyLnN0cmNh
dCgiT3RoZXIiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CisgICAgCisgICAg
aWYgKGlzVG9wKQorICAgICAgICByZXR1cm4gIlRvcCI7CiAgICAgCiAgICAgKnB0cisrID0gMDsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuaAkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUHJlZGljdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHN0YXRp
YyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RCb29sZWEKIHN0YXRpYyBjb25zdCBQcmVkaWN0
ZWRUeXBlIFByZWRpY3RPdGhlciAgICAgICAgID0gMHg0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkg
bm9uZSBvZiB0aGUgYWJvdmUuCiBzdGF0aWMgY29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9w
ICAgICAgICAgICA9IDB4N2ZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUuCiAKK3R5
cGVkZWYgYm9vbCAoKlByZWRpY3Rpb25DaGVja2VyKShQcmVkaWN0ZWRUeXBlKTsKKwogaW5saW5l
IGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVy
biAhISh2YWx1ZSAmIFByZWRpY3RDZWxsKSAmJiAhKHZhbHVlICYgflByZWRpY3RDZWxsKTsKQEAg
LTExNSw2ICsxMTcsMTAgQEAgaW5saW5lIGJvb2wgaXNPdGhlclByZWRpY3Rpb24oUHJlZGljdGVk
VAogY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpOwog
I2VuZGlmCiAKKy8vIE1lcmdlIHR3byBwcmVkaWN0aW9ucy4gTm90ZSB0aGF0IGN1cnJlbnRseSB0
aGlzIGp1c3QgZG9lcyBsZWZ0IHwgcmlnaHQuIEl0IG1heQorLy8gc2VlbSB0ZW1wdGluZyB0byBk
byBzbyBkaXJlY3RseSwgYnV0IHlvdSB3b3VsZCBiZSBkb2luZyBzbyBhdCB5b3VyIG93biBwZXJp
bCwKKy8vIHNpbmNlIHRoZSBtZXJnaW5nIHByb3RvY29sIFByZWRpY3RlZFR5cGUgbWF5IGNoYW5n
ZSBhdCBhbnkgdGltZSAoYW5kIGhhcyBhbHJlYWR5CisvLyBjaGFuZ2VkIHNldmVyYWwgdGltZXMg
aW4gaXRzIGhpc3RvcnkpLgogaW5saW5lIFByZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQ
cmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQpCiB7CiAgICAgcmV0dXJuIGxl
ZnQgfCByaWdodDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisjZGVmaW5lIEVOQUJMRV9DRkFf
UFJPRklMSU5HIDAKKworI2lmIEVOQUJMRShDRkFfUFJPRklMSU5HKQorI2RlZmluZSBQUk9GSUxF
KGZsYWcpIFNhbXBsaW5nRmxhZ3M6OlNjb3BlZEZsYWcgZmxhZyhmbGFnKQorI2Vsc2UKKyNkZWZp
bmUgUFJPRklMRShmbGFnKSBkbyB7IH0gd2hpbGUgKGZhbHNlKQorI2VuZGlmCisKK0Fic3RyYWN0
U3RhdGU6OkFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEdyYXBoJiBncmFwaCkK
KyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1fZ3JhcGgoZ3JhcGgpCisgICAg
LCBtX3ZhcmlhYmxlcyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycywgZ3JhcGgubV9sb2NhbFZh
cnMpCisgICAgLCBtX2Jsb2NrKDApCit7CisgICAgc2l6ZV90IG1heEJsb2NrU2l6ZSA9IDA7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxvY2tzW2ldLmdldCgpOworICAg
ICAgICBpZiAoYmxvY2stPmVuZCAtIGJsb2NrLT5iZWdpbiA+IG1heEJsb2NrU2l6ZSkKKyAgICAg
ICAgICAgIG1heEJsb2NrU2l6ZSA9IGJsb2NrLT5lbmQgLSBibG9jay0+YmVnaW47CisgICAgfQor
ICAgIG1fbm9kZXMucmVzaXplKG1heEJsb2NrU2l6ZSk7Cit9CisKK0Fic3RyYWN0U3RhdGU6On5B
YnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2Nr
KEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCit7CisgICAgUFJPRklMRSgxNyk7CisgICAgCisgICAg
QVNTRVJUKCFtX2Jsb2NrKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2lj
QmxvY2stPmVuZCAtIGJhc2ljQmxvY2stPmJlZ2luOyArK2kpCisgICAgICAgIG1fbm9kZXNbaV0u
Y2xlYXIoKTsKKyAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAg
ICAKKyAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgYmFzaWNC
bG9jay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CisgICAgbV9ibG9jayA9IGJhc2ljQmxvY2s7Cisg
ICAgbV9pc1ZhbGlkID0gdHJ1ZTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXpl
KEdyYXBoJiBncmFwaCkKK3sKKyAgICBQUk9GSUxFKDE3KTsKKyAgICBCYXNpY0Jsb2NrKiByb290
ID0gZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CisgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNpdCA9
IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
biA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKV0udmFyaWFibGVBY2Nl
c3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNl
dChQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQo
UHJlZGljdEFycmF5KTsKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQo
UHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgIH0KK30KKworYm9vbCBBYnN0cmFjdFN0
YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSBtZXJnZU1vZGUpCit7CisgICAgUFJPRklMRSgx
OCk7CisgICAgQVNTRVJUKG1fYmxvY2spOworICAgIAorICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bV9ibG9jazsgLy8gU2F2ZSB0aGUgYmxvY2sgZm9yIHN1Y2Nlc3NvciBtZXJnaW5nLgorICAgIAor
ICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAgICAgIHJlc2V0KCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAg
aWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAg
ICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQorICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGxv
Y2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7
ICsrbG9jYWwpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoYmxvY2st
PnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCksIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwgYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlQobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8fCAhY2hhbmdlZCk7CisgICAgCisgICAgcmVzZXQo
KTsKKyAgICAKKyAgICBpZiAobWVyZ2VNb2RlICE9IE1lcmdlVG9TdWNjZXNzb3JzKQorICAgICAg
ICByZXR1cm4gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VUb1N1Y2Nlc3NvcnMobV9n
cmFwaCwgYmxvY2spOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnJlc2V0KCkKK3sKKyAgICBt
X2Jsb2NrID0gMDsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKworYm9vbCBBYnN0cmFjdFN0
YXRlOjpleGVjdXRlKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgUFJPRklMRSgxOSk7Cisg
ICAgQVNTRVJUKG1fYmxvY2spOworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgICAgICAKKyAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAKKyAgICBpZiAoIW5v
ZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAg
IHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG1fY29kZUJsb2NrLCBu
b2RlSW5kZXgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExv
Y2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQo
bm9kZS5sb2NhbCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUu
dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICAKKyAgICAgICAgbV92YXJpYWJsZXMub3Bl
cmFuZChub2RlLmxvY2FsKCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAg
Ly8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCisgICAg
ICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5p
c0NsZWFyKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQml0QW5k
OgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRSU2hpZnQ6
CisgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAg
ICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91Ymxl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVU
b0ludDMyOgorICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb051
bWJlcjoKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3Vs
YXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBt
X2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0p
KSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVt
YmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RO
dW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91Ymxl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdFN0cmluZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOgor
ICAgIGNhc2UgQXJpdGhNdWw6CisgICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTWlu
OgorICAgIGNhc2UgQXJpdGhNYXg6IHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8
fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCAh
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBMb2dpY2FsTm90OiB7CisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlv
bigpKSB8fCAhY2hpbGQucHJlZGljdGlvbigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNlIGlmIChjaGlsZC5z
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwg
UHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUxlc3M6Cisg
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlckVxOgorICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAgIE5vZGUm
IGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBOb2RlJiByaWdodCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV07CisgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAg
ICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0SW50MzI7CisgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQ
cmVkaWN0TnVtYmVyOworICAgICAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBO
b2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChsZWZ0LCByaWdodCkpCisgICAgICAgICAg
ICBmaWx0ZXIgPSBQcmVkaWN0RmluYWxPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkK
KyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RBcnJheTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgZmlsdGVyID0gUHJlZGljdFRvcDsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoZmlsdGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
ZmlsdGVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZVN0
cmljdEVxOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgU3RyaW5nQ2hhckNvZGVBdDoKKyAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgIAorICAgIGNhc2UgU3RyaW5nQ2hhckF0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNl
dChQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEdldEJ5VmFsOgorICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9u
KCkgPT0gUHJlZGljdFN0cmluZykgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBQdXRCeVZhbDoKKyAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBBcnJheVB1c2g6CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBBcnJheVBvcDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6IHsKKyAgICAgICAgLy8gVGhlcmUgaXMgcHJv
YmFibHkgcHJvZml0IHRvIGJlIGZvdW5kIGluIGRvaW5nIHNwYXJzZSBjb25kaXRpb25hbCBjb25z
dGFudAorICAgICAgICAvLyBwcm9wYWdhdGlvbiwgYW5kIHRvIHRha2UgaXQgb25lIHN0ZXAgZnVy
dGhlciwgd2hlcmUgYSB2YXJpYWJsZSdzIHZhbHVlCisgICAgICAgIC8vIGlzIHNwZWNpYWxpemVk
IG9uIGVhY2ggZGlyZWN0aW9uIG9mIGEgYnJhbmNoLiBGb3Igbm93LCB3ZSBkb24ndCBkbyB0aGlz
LgorICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAg
IGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkgfHwgIWNoaWxkLnBy
ZWRpY3Rpb24oKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RCb29sZWFuKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3RPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0RmluYWxPYmplY3QgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSB8IFByZWRpY3RPdGhlcik7Cisg
ICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGhyb3c6
CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAgICBtX2lzVmFsaWQgPSBmYWxz
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFRvUHJpbWl0aXZlOiB7
CisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAg
aWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291cmNlID0gZm9yTm9kZShub2RlLmNo
aWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24gPSBmb3JOb2RlKG5v
ZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgUHJlZGljdGVkVHlwZSB0eXBlID0gc291
cmNlLm1fdHlwZTsKKyAgICAgICAgaWYgKHR5cGUgJiB+KFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0
U3RyaW5nIHwgUHJlZGljdEJvb2xlYW4pKSB7CisgICAgICAgICAgICB0eXBlICY9IChQcmVkaWN0
TnVtYmVyIHwgUHJlZGljdFN0cmluZyB8IFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgICAgIHR5
cGUgfD0gUHJlZGljdFN0cmluZzsKKyAgICAgICAgfQorICAgICAgICBkZXN0aW5hdGlvbi5zZXQo
dHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgU3Ry
Q2F0OgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RTdHJpbmcpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgTmV3QXJyYXk6CisgICAgY2FzZSBO
ZXdBcnJheUJ1ZmZlcjoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChtX2NvZGVCbG9j
ay0+Z2xvYmFsT2JqZWN0KCktPmFycmF5U3RydWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCkpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAg
ICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAg
IAorICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQg
dGhlIHNvdXJjZSBpcyBhbgorICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhp
bmcgdG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgICAgIC8vIGJl
IGhpdCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgorICAgICAgICAgICAgZGVzdGlu
YXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGlmIChpc090aGVyUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKSB7
CisgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICBk
ZXN0aW5hdGlvbi5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGNoaWxk
LnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE9iamVj
dE1hc2spOworICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uID0gc291
cmNlOworICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShQcmVkaWN0T2JqZWN0T3RoZXIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIENyZWF0ZVRoaXM6IHsK
KyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBB
YnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAg
ICAgIAorICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKKyAg
ICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAg
IAorICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5lbXB0
eU9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIEdldENhbGxlZToKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0T2Jq
ZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U2Nv
cGVDaGFpbjoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Q2VsbE90aGVy
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFNjb3BlZFZhcjoK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIFB1dFNjb3BlZFZhcjoKKyAgICAgICAgY2xvYmJlclN0cnVj
dHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEdldEJ5SWQ6CisgICAgY2FzZSBHZXRNZXRob2Q6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9k
ZUluZGV4KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgorICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBHZXRTdHJpbmdMZW5ndGg6CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBDaGVja1N0cnVjdHVyZToKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHByb3Rv
dHlwZXMpLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihub2RlLnN0cnVj
dHVyZVNldCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dFN0
cnVjdHVyZToKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgp
Lm5ld1N0cnVjdHVyZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBH
ZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRo
ZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6Cisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0aG9kOgorICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0
cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVj
a0RhdGFJbmRleCgpXS5zdHJ1Y3R1cmUpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
Y2FzZSBDaGVja0Z1bmN0aW9uOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICAvLyBGSVhNRTogU2hvdWxkIGJlIGFibGUg
dG8gcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2Uga25vdyB3aGF0IHRoZSBmdW5jdGlvbiBpcy4K
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dEJ5SWQ6CisgICAgY2Fz
ZSBQdXRCeUlkRGlyZWN0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0Q2VsbCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRHbG9iYWxWYXI6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBDaGVja0hhc0luc3RhbmNlOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIC8vIFNhZGx5LCB3ZSBkb24ndCBwcm9w
YWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIENoZWNrSGFzSW5zdGFuY2UKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEluc3RhbmNlT2Y6CisgICAgICAgIC8vIEFn
YWluLCBzYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBJ
bnN0YW5jZU9mCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RD
ZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdENlbGwp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUGhpOgorICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQnJlYWtwb2ludDoKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIENhbGw6CisgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAg
Y2FzZSBSZXNvbHZlOgorICAgIGNhc2UgUmVzb2x2ZUJhc2U6CisgICAgY2FzZSBSZXNvbHZlQmFz
ZVN0cmljdFB1dDoKKyAgICBjYXNlIFJlc29sdmVHbG9iYWw6CisgICAgICAgIGNsb2JiZXJTdHJ1
Y3R1cmVzKG5vZGVJbmRleCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBGb3JjZU9TUkV4aXQ6Cisg
ICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgUGhhbnRvbToKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJldHVy
biBtX2lzVmFsaWQ7Cit9CisKK2lubGluZSB2b2lkIEFic3RyYWN0U3RhdGU6OmNsb2JiZXJTdHJ1
Y3R1cmVzKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgZm9yIChzaXplX3QgaSA9IG5vZGVJ
bmRleCAtIG1fYmxvY2stPmJlZ2luICsgMTsgaS0tID4gMDspCisgICAgICAgIG1fbm9kZXNbaV0u
Y2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFi
bGVzLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXMuYXJndW1l
bnQoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
dmFyaWFibGVzLm51bWJlck9mTG9jYWxzKCk7ICsraSkKKyAgICAgICAgbV92YXJpYWJsZXMubG9j
YWwoaSkuY2xvYmJlclN0cnVjdHVyZXMoKTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0
ZTo6bWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RW
YWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAobm9kZUlu
ZGV4ID09IE5vTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBBYnN0
cmFjdFZhbHVlKiBzb3VyY2U7CisgICAgICAgIAorICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07CisgICAgaWYgKCFub2RlLnJlZkNvdW50KCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNlIFBoaToKKyAgICBjYXNl
IFNldEFyZ3VtZW50OgorICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBm
cm9tIGhlYWQgdG8gdGFpbC4KKyAgICAgICAgc291cmNlID0gJmluVmFyaWFibGU7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgLy8gVGhl
IGJsb2NrIHJlZmluZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxhdGlvbnMuCisg
ICAgICAgIHNvdXJjZSA9ICZmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMg
dGhlIHZhcmlhYmxlLCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAorICAgICAgICAv
LyBiZWZvcmUgYW5kIGFmdGVyIHNldHRpbmcgaXQuCisgICAgICAgIHNvdXJjZSA9ICZmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHNvdXJjZSA9IDA7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdGluYXRpb24gPT0gKnNvdXJjZSkg
eworICAgICAgICAvLyBBYnN0cmFjdCBleGVjdXRpb24gZGlkIG5vdCBjaGFuZ2UgdGhlIG91dHB1
dCB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIGZvciB0aGlzCisgICAgICAgIC8vIGJhc2ljIGJsb2Nr
LCBvbiB0aGlzIGl0ZXJhdGlvbi4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICAvLyBBYnN0cmFjdCBleGVjdXRpb24gcmVhY2hlZCBhIG5ldyBjb25jbHVzaW9uIGFib3V0
IHRoZSBzcGVjdWxhdGlvbnMgcmVhY2hlZCBhYm91dAorICAgIC8vIHRoaXMgdmFyaWFibGUgYWZ0
ZXIgZXhlY3V0aW9uIG9mIHRoaXMgYmFzaWMgYmxvY2suIFVwZGF0ZSB0aGUgc3RhdGUsIGFuZCBy
ZXR1cm4KKyAgICAvLyB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpeHBvaW50IG11c3QgZ28g
b24hCisgICAgZGVzdGluYXRpb24gPSAqc291cmNlOworICAgIHJldHVybiB0cnVlOworfQorCitp
bmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0bykKK3sKKyAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJn
dW1lbnRzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAg
ICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAKKyAgICBib29sIGNoYW5nZWQg
PSBmYWxzZTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
ZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3ModG8tPnZhbHVlc0F0
SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCksIHRvLT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBs
b2NhbCA9IDA7IGxvY2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7
ICsrbG9jYWwpCisgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3Mo
dG8tPnZhbHVlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChs
b2NhbCksIHRvLT52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpKTsKKworICAgIGlmICghdG8tPmNmYUhhc1Zpc2l0ZWQpCisgICAg
ICAgIGNoYW5nZWQgPSB0cnVlOworICAgIAorICAgIHRvLT5jZmFTaG91bGRSZXZpc2l0IHw9IGNo
YW5nZWQ7CisgICAgCisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2lubGluZSBib29sIEFic3Ry
YWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFz
aWNCbG9jaykKK3sKKyAgICBQUk9GSUxFKDIwKTsKKworICAgIE5vZGUmIHRlcm1pbmFsID0gZ3Jh
cGhbYmFzaWNCbG9jay0+ZW5kIC0gMV07CisgICAgCisgICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVy
bWluYWwoKSk7CisgICAgCisgICAgc3dpdGNoICh0ZXJtaW5hbC5vcCkgeworICAgIGNhc2UgSnVt
cDoKKyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1p
bmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIAorICAgIGNhc2UgQnJhbmNo
OgorICAgICAgICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWlu
YWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgpKQorICAgICAgICAgICAgfCBtZXJnZShiYXNpY0Js
b2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkp
OworICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2Ug
VGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VWYXJp
YWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291
cmNlTm9kZUluZGV4KQoreworICAgIGlmIChkZXN0aW5hdGlvbk5vZGVJbmRleCA9PSBOb05vZGUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5v
ZGVJbmRleCwgc291cmNlTm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgCisgICAgLy8gRklYTUU6
IFdlIGNvdWxkIGRvIHNvbWUgc3BhcnNlIGNvbmRpdGlvbmFsIHByb3BhZ2F0aW9uIGhlcmUhCisg
ICAgCisgICAgcmV0dXJuIGRlc3RpbmF0aW9uLm1lcmdlKHNvdXJjZSk7Cit9CisKKyNpZm5kZWYg
TkRFQlVHCit2b2lkIEFic3RyYWN0U3RhdGU6OmR1bXAoRklMRSogb3V0KQoreworICAgIGJvb2wg
Zmlyc3QgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAobV9ub2Rlc1tpXS5pc0NsZWFyKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIgIik7CisgICAgICAgIGZw
cmludGYob3V0LCAiQCVsdToiLCBpICsgbV9ibG9jay0+YmVnaW4pOworICAgICAgICBtX25vZGVz
W2ldLmR1bXAob3V0KTsKKyAgICB9Cit9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgREZHQWJzdHJhY3RTdGF0ZV9oCisjZGVmaW5lIERGR0Fic3RyYWN0U3RhdGVf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDb2RlQmxvY2s7CisKK25hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQmFz
aWNCbG9jazsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBub3Rpb24gb2YgYW4gYWJzdHJhY3Qg
c3RhdGUgZm9yIGZsb3ctc2Vuc2l0aXZlIGludHJhcHJvY2VkdXJhbAorLy8gY29udHJvbCBmbG93
IGFuYWx5c2lzIChDRkEpLCB3aXRoIGEgZm9jdXMgb24gdGhlIGVsaW1pbmF0aW9uIG9mIHJlZHVu
ZGFudCB0eXBlIGNoZWNrcy4KKy8vIEl0IGFsc28gaW1wbGVtZW50cyBtb3N0IG9mIHRoZSBtZWNo
YW5pc21zIG9mIGFic3RyYWN0IGludGVycHJldGF0aW9uIHRoYXQgc3VjaCBhbgorLy8gYW5hbHlz
aXMgd291bGQgdXNlLiBUaGlzIGNsYXNzIHNob3VsZCBiZSB1c2VkIGluIHR3byBpZGlvbXM6Cisv
LworLy8gMSkgUGVyZm9ybWluZyB0aGUgQ0ZBLiBJbiB0aGlzIGNhc2UsIEFic3RyYWN0U3RhdGUg
c2hvdWxkIGJlIHJ1biBvdmVyIGFsbCBiYXNpYworLy8gICAgYmxvY2tzIHJlcGVhdGVkbHkgdW50
aWwgY29udmVyZ2VuY2UgaXMgcmVhY2hlZC4gQ29udmVyZ2VuY2UgaXMgZGVmaW5lZCBieQorLy8g
ICAgZW5kQmFzaWNCbG9jayhBYnN0cmFjdFN0YXRlOjpNZXJnZVRvU3VjY2Vzc29ycykgcmV0dXJu
aW5nIGZhbHNlIGZvciBhbGwgYmxvY2tzLgorLy8KKy8vIDIpIFJlbWF0ZXJpYWxpemluZyB0aGUg
cmVzdWx0cyBvZiBhIHByZXZpb3VzbHkgZXhlY3V0ZWQgQ0ZBLiBJbiB0aGlzIGNhc2UsCisvLyAg
ICBBYnN0cmFjdFN0YXRlIHNob3VsZCBiZSBydW4gb3ZlciB3aGF0ZXZlciBiYXNpYyBibG9jayB5
b3UncmUgaW50ZXJlc3RlZCBpbiB1cAorLy8gICAgdG8gdGhlIHBvaW50IG9mIHRoZSBub2RlIGF0
IHdoaWNoIHlvdSdkIGxpa2UgdG8gaW50ZXJyb2dhdGUgdGhlIGtub3duIHR5cGUKKy8vICAgIG9m
IGFsbCBvdGhlciBub2Rlcy4gQXQgdGhpcyBwb2ludCBpdCdzIHNhZmUgdG8gZGlzY2FyZCB0aGUg
QWJzdHJhY3RTdGF0ZSBlbnRpcmVseSwKKy8vICAgIGNhbGwgcmVzZXQoKSwgb3IgdG8gcnVuIGl0
IHRvIHRoZSBlbmQgb2YgdGhlIGJhc2ljIGJsb2NrIGFuZCBjYWxsCisvLyAgICBlbmRCYXNpY0Js
b2NrKEFic3RyYWN0U3RhdGU6OkRvbnRNZXJnZSkuIFRoZSBsYXR0ZXIgb3B0aW9uIGlzIHNhZmVz
dCBiZWNhdXNlCisvLyAgICBpdCBwZXJmb3JtcyBzb21lIHVzZWZ1bCBpbnRlZ3JpdHkgY2hlY2tz
LgorLy8KKy8vIEFmdGVyIHRoZSBDRkEgaXMgcnVuLCB0aGUgaW50ZXItYmxvY2sgc3RhdGUgaXMg
c2F2ZWQgYXQgdGhlIGhlYWRzIGFuZCB0YWlscyBvZiBhbGwKKy8vIGJhc2ljIGJsb2Nrcy4gVGhp
cyBhbGxvd3MgdGhlIGludHJhLWJsb2NrIHN0YXRlIHRvIGJlIHJlbWF0ZXJpYWxpemVkIGJ5IGp1
c3QKKy8vIGV4ZWN1dGluZyB0aGUgQ0ZBIGZvciB0aGF0IGJsb2NrLiBJZiB5b3UgbmVlZCB0byBr
bm93IGludGVyLWJsb2NrIHN0YXRlIG9ubHksIHRoZW4KKy8vIHlvdSBvbmx5IG5lZWQgdG8gZXhh
bWluZSB0aGUgQmFzaWNCbG9jazo6bV92YWx1ZXNBdEhlYWQgb3IgbV92YWx1ZXNBdFRhaWwgZmll
bGRzLgorLy8KKy8vIFJ1bm5pbmcgdGhpcyBhbmFseXNpcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5n
LCBtb2R1bG8gdGhlIGludGVyLWJsb2NrIHN0YXRlCisvLyBtZXJnaW5nIGFuZCBjb252ZXJnZW5j
ZSBmaXhwb2ludDoKKy8vCisvLyBBYnN0cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgp
OworLy8gc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJhc2ljQmxvY2spOworLy8gYm9vbCBlbmRSZWFj
aGVkID0gdHJ1ZTsKKy8vIGZvciAoTm9kZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlk
eCA8IGJhc2ljQmxvY2suZW5kOyArK2lkeCkgeworLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShp
ZHgpKQorLy8gICAgICAgICBicmVhazsKKy8vIH0KKy8vIGJvb2wgcmVzdWx0ID0gc3RhdGUuZW5k
QmFzaWNCbG9jayg8ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOworCitjbGFzcyBBYnN0cmFj
dFN0YXRlIHsKK3B1YmxpYzoKKyAgICBlbnVtIE1lcmdlTW9kZSB7CisgICAgICAgIC8vIERvbid0
IG1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggYmFzaWMgYmxvY2tzLgorICAg
ICAgICBEb250TWVyZ2UsCisgICAgICAgIAorICAgICAgICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4g
QWJzdHJhY3RTdGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNpYworICAgICAgICAvLyBibG9j
ayBiZWluZyBhbmFseXplZC4KKyAgICAgICAgTWVyZ2VUb1RhaWwsCisgICAgICAgIAorICAgICAg
ICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRo
ZSBiYXNpYworICAgICAgICAvLyBibG9jaywgYW5kIHdpdGggdGhlIGhlYWRzIG9mIHN1Y2Nlc3Nv
ciBibG9ja3MuCisgICAgICAgIE1lcmdlVG9TdWNjZXNzb3JzCisgICAgfTsKKyAgICAKKyAgICBB
YnN0cmFjdFN0YXRlKENvZGVCbG9jayosIEdyYXBoJik7CisgICAgCisgICAgfkFic3RyYWN0U3Rh
dGUoKTsKKyAgICAKKyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gbV9ub2Rlc1tub2RlSW5kZXggLSBtX2Jsb2NrLT5i
ZWdpbl07CisgICAgfQorICAgIAorICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENG
QSB0byBpbml0aWFsaXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKKyAgICAvLyBhcmd1bWVudHMs
IGFuZCB0byBpbmRpY2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCisg
ICAgLy8gZXhlY3V0aW9uLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoR3JhcGgmKTsKKwor
ICAgIC8vIFN0YXJ0IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRoZSBnaXZlbiBiYXNpYyBibG9jay4g
SW5pdGlhbGl6ZXMgdGhlCisgICAgLy8gbm90aW9uIG9mIGFic3RyYWN0IHN0YXRlIHRvIHdoYXQg
d2UgYmVsaWV2ZSBpdCB0byBiZSBhdCB0aGUgaGVhZAorICAgIC8vIG9mIHRoZSBiYXNpYyBibG9j
aywgYWNjb3JkaW5nIHRvIHRoZSBiYXNpYyBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4KKyAgICAv
LyBUaGlzIG1ldGhvZCBhbHNvIHNldHMgY2ZhU2hvdWxkUmV2aXNpdCB0byBmYWxzZS4KKyAgICB2
b2lkIGJlZ2luQmFzaWNCbG9jayhCYXNpY0Jsb2NrKik7CisgICAgCisgICAgLy8gRmluaXNoIGFi
c3RyYWN0bHkgZXhlY3V0aW5nIGEgYmFzaWMgYmxvY2suIElmIE1lcmdlVG9UYWlsIG9yCisgICAg
Ly8gTWVyZ2VUb1N1Y2Nlc3NvcnMgaXMgcGFzc2VkLCB0aGVuIHRoaXMgbWVyZ2VzIGV2ZXJ5dGhp
bmcgd2UgaGF2ZQorICAgIC8vIGxlYXJuZWQgYWJvdXQgaG93IHRoZSBzdGF0ZSBjaGFuZ2VzIGR1
cmluZyB0aGlzIGJsb2NrJ3MgZXhlY3V0aW9uIGludG8KKyAgICAvLyB0aGUgYmxvY2sncyBkYXRh
IHN0cnVjdHVyZXMuIFRoZXJlIGFyZSB0aHJlZSByZXR1cm4gbW9kZXMsIGRlcGVuZGluZworICAg
IC8vIG9uIHRoZSB2YWx1ZSBvZiBtZXJnZU1vZGU6CisgICAgLy8KKyAgICAvLyBEb250TWVyZ2U6
CisgICAgLy8gICAgQWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgLy8KKyAgICAvLyBNZXJnZVRv
VGFpbDoKKyAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBh
dCB0aGUgdGFpbCB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBUaGlzIG1lYW5zIHRoYXQgeW91IG11
c3QgY2FsbCBtZXJnZVRvU3VjY2Vzc29ycygpLCBhbmQgaWYgdGhhdAorICAgIC8vICAgIHJldHVy
bnMgdHJ1ZSwgdGhlbiB5b3UgbXVzdCByZXZpc2l0IChhdCBsZWFzdCkgdGhlIHN1Y2Nlc3Nvcgor
ICAgIC8vICAgIGJsb2Nrcy4gRmFsc2Ugd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQgaWYgdGhlIGJs
b2NrIGlzIHRlcm1pbmFsCisgICAgLy8gICAgKGkuZS4gZW5kcyBpbiBUaHJvdyBvciBSZXR1cm4s
IG9yIGhhcyBhIEZvcmNlT1NSRXhpdCBpbnNpZGUgaXQpLgorICAgIC8vCisgICAgLy8gTWVyZ2VU
b1N1Y2Nlc3NvcnM6CisgICAgLy8gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGUg
YmxvY2sgYXQgdGhlIHRhaWwgd2FzIGNoYW5nZWQsCisgICAgLy8gICAgYW5kLCBpZiB0aGUgc3Rh
dGUgYXQgdGhlIGhlYWRzIG9mIHN1Y2Nlc3NvcnMgd2FzIGNoYW5nZWQuCisgICAgLy8gICAgQSB0
cnVlIHJldHVybiBtZWFucyB0aGF0IHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUgc3Vj
Y2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBUaGlzIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0
IHRvIHRydWUgZm9yIGJhc2ljIGJsb2NrcworICAgIC8vICAgIHRoYXQgbXVzdCBiZSB2aXNpdGVk
IG5leHQuCisgICAgYm9vbCBlbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSk7CisgICAgCisgICAgLy8g
UmVzZXQgdGhlIEFic3RyYWN0U3RhdGUuIFRoaXMgdGhyb3dzIGF3YXkgYW55IHJlc3VsdHMsIGFu
ZCBhdCB0aGlzIHBvaW50CisgICAgLy8geW91IGNhbiBzYWZlbHkgY2FsbCBiZWdpbkJhc2ljQmxv
Y2soKSBvbiBhbnkgYmFzaWMgYmxvY2suCisgICAgdm9pZCByZXNldCgpOworICAgIAorICAgIC8v
IEFic3RyYWN0bHkgZXhlY3V0ZXMgdGhlIGdpdmVuIG5vZGUuIFRoZSBuZXcgYWJzdHJhY3Qgc3Rh
dGUgaXMgc3RvcmVkIGludG8gYW4KKyAgICAvLyBhYnN0cmFjdCByZWdpc3RlciBmaWxlIHN0b3Jl
ZCBpbiAqdGhpcy4gTG9hZHMgb2YgbG9jYWwgdmFyaWFibGVzICh0aGF0IHNwYW4KKyAgICAvLyBi
YXNpYyBibG9ja3MpIGludGVycm9nYXRlIHRoZSBiYXNpYyBibG9jaydzIG5vdGlvbiBvZiB0aGUg
c3RhdGUgYXQgdGhlIGhlYWQuCisgICAgLy8gU3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcmUg
aGFuZGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkuIFRoaXMgcmV0dXJucyB0cnVlCisgICAgLy8gaWYg
ZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBwYXN0IHRoaXMgbm9kZS4gTm90YWJseSwgaXQgd2ls
bCByZXR1cm4gdHJ1ZQorICAgIC8vIGZvciBibG9jayB0ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhv
c2UgdGVybWluYWxzIGFyZSBub3QgUmV0dXJuIG9yIHZhcmlhbnRzCisgICAgLy8gb2YgVGhyb3cu
CisgICAgYm9vbCBleGVjdXRlKE5vZGVJbmRleCk7CisgICAgCisgICAgLy8gSXMgdGhlIGV4ZWN1
dGlvbiBzdGF0ZSBzdGlsbCB2YWxpZD8gVGhpcyB3aWxsIGJlIGZhbHNlIGlmIGV4ZWN1dGUoKSBo
YXMKKyAgICAvLyByZXR1cm5lZCBmYWxzZSBwcmV2aW91c2x5LgorICAgIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIG1faXNWYWxpZDsgfQorICAgIAorICAgIC8vIE1lcmdlIHRoZSBhYnN0
cmFjdCBzdGF0ZSBzdG9yZWQgYXQgdGhlIGZpcnN0IGJsb2NrJ3MgdGFpbCBpbnRvIHRoZSBzZWNv
bmQKKyAgICAvLyBibG9jaydzIGhlYWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2Vjb25kIGJsb2Nr
J3Mgc3RhdGUgY2hhbmdlZC4gSWYgc28sCisgICAgLy8gdGhhdCBibG9jayBtdXN0IGJlIGFic3Ry
YWN0bHkgaW50ZXJwcmV0ZWQgYWdhaW4uIFRoaXMgYWxzbyBzZXRzCisgICAgLy8gdG8tPmNmYVNo
b3VsZFJldmlzaXQgdG8gdHJ1ZSwgaWYgaXQgcmV0dXJucyB0cnVlLCBvciBpZiB0byBoYXMgbm90
IGJlZW4KKyAgICAvLyB2aXNpdGVkIHlldC4KKyAgICBzdGF0aWMgYm9vbCBtZXJnZShCYXNpY0Js
b2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIGFic3Ry
YWN0IHN0YXRlIHN0b3JlZCBhdCB0aGUgYmxvY2sncyB0YWlsIGludG8gYWxsIG9mIGl0cworICAg
IC8vIHN1Y2Nlc3NvcnMuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIHN1Y2Nlc3NvcnMnIHN0
YXRlcyBjaGFuZ2VkLiBOb3RlCisgICAgLy8gdGhhdCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgY2Fs
bGVkIGluIGVuZEJhc2ljQmxvY2soKSBpZiBNZXJnZU1vZGUgaXMKKyAgICAvLyBNZXJnZVRvU3Vj
Y2Vzc29ycy4KKyAgICBzdGF0aWMgYm9vbCBtZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYsIEJhc2lj
QmxvY2sqKTsKKworI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KTsKKyNl
bmRpZgorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKE5vZGVJbmRl
eCk7CisgICAgCisgICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3Rp
bmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgpOworICAgIAorICAg
IHN0YXRpYyBib29sIG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5v
ZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgCisgICAgQ29kZUJsb2Nr
KiBtX2NvZGVCbG9jazsKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICAKKyAgICBWZWN0b3I8QWJz
dHJhY3RWYWx1ZSwgMzI+IG1fbm9kZXM7CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV92
YXJpYWJsZXM7CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICAKKyAgICBib29sIG1faXNW
YWxpZDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWJzdHJhY3RTdGF0ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHQWJzdHJhY3RWYWx1ZV9oCisjZGVmaW5lIERGR0Fic3Ry
YWN0VmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVNldC5oIgorI2luY2x1ZGUgIkpTQ2VsbC5o
IgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHsKK3B1YmxpYzoKKyAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChzZXQuc2l6ZSgpKSB7CisgICAgICAgIGNhc2UgMDoKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc2V0WzBdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSByZWludGVycHJldF9jYXN0
PFN0cnVjdHVyZSo+KDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSB0b3AoKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgdmFsdWUubWFrZVRvcCgpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorICAgIAorICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpICYmICFpc1RvcCgpKTsKKyAgICAgICAgaWYg
KG1fc3RydWN0dXJlKQorICAgICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBh
ZGRBbGwoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1Rv
cCgpIHx8ICFvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChvdGhlci5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fc3RydWN0dXJlKSB7
CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyWzBdKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghb3RoZXIubV9zdHJ1Y3R1
cmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAg
ICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUg
PT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIGRv
ZXNOb3RDb250YWluQW55T3RoZXJUaGFuKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghbV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG1fc3RydWN0dXJlID09IHN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
b3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvdGhl
ci5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF07CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRP
Zihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9z
dHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlmIChvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2Yo
KnRoaXMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG90aGVyLnNpemUoKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBv
dGhlclswXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKG1fc3RydWN0
dXJlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fc3RydWN0dXJl
ID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkgeworICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAg
IHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5cGUgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIShv
dGhlciAmIFByZWRpY3RDZWxsKSkgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihtX3N0cnVjdHVyZSkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIShwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSkgJiBvdGhl
cikpCisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNDbGVhcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0g
cmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQorICAgIAorICAgIHNpemVfdCBzaXpl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIHJldHVy
biAhIW1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgQVNTRVJU
KG1fc3RydWN0dXJlKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7CisgICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltd
KHNpemVfdCBpKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGkpOworICAgIH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0
KDApOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0
dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJl
dHVybiBQcmVkaWN0Q2VsbDsKKyAgICAgICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBQcmVkaWN0Tm9uZTsKKyAgICAgICAgcmV0dXJuIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJl
KG1fc3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyNpZm5kZWYg
TkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGlmIChpc1Rv
cCgpKSB7CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIlRPUCIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAg
ICAgICAgaWYgKG1fc3RydWN0dXJlKQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1f
c3RydWN0dXJlKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJdIik7CisgICAgfQorI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0
IGEgdGltZS4KKyAgICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworfTsKKworc3RydWN0IEFic3Ry
YWN0VmFsdWUgeworICAgIEFic3RyYWN0VmFsdWUoKQorICAgICAgICA6IG1fdHlwZShQcmVkaWN0
Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgbV90eXBlID0gUHJlZGljdE5vbmU7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNDbGVhcigpCisgICAgeworICAgICAgICByZXR1cm4gbV90
eXBlID09IFByZWRpY3ROb25lICYmIG1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBtYWtlVG9wKCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IFByZWRpY3RUb3A7
CisgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
bG9iYmVyU3RydWN0dXJlcygpCisgICAgeworICAgICAgICBpZiAobV90eXBlICYgUHJlZGljdENl
bGwpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlz
Q2xlYXIoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNUb3AoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdHlwZSA9PSBQcmVkaWN0VG9wICYmIG1fc3RydWN0dXJlLmlzVG9wKCk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAg
ICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1ha2VUb3AoKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoSlNWYWx1ZSB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIGlmICh2
YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmFkZCh2YWx1ZS5hc0NlbGwo
KS0+c3RydWN0dXJlKCkpOworICAgICAgICAKKyAgICAgICAgbV90eXBlID0gcHJlZGljdGlvbkZy
b21WYWx1ZSh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9z
dHJ1Y3R1cmUuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVk
aWN0aW9uRnJvbVN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNl
dChQcmVkaWN0ZWRUeXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZSAmIFByZWRpY3RD
ZWxsKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3R5cGUgPSB0eXBlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZSAm
JiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBtZXJnZShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVy
biBtZXJnZVByZWRpY3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUpIHwgbV9zdHJ1Y3R1cmUuYWRk
QWxsKG90aGVyLm1fc3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZShQcmVk
aWN0ZWRUeXBlIHR5cGUpCisgICAgeworICAgICAgICBtZXJnZVByZWRpY3Rpb24obV90eXBlLCB0
eXBlKTsKKyAgICAgICAgCisgICAgICAgIGlmICh0eXBlICYgUHJlZGljdENlbGwpCisgICAgICAg
ICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVy
KGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBtX3R5cGUgJj0gb3Ro
ZXIucHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmZpbHRl
cihvdGhlcik7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5cGUgdHlw
ZSkKKyAgICB7CisgICAgICAgIGlmICh0eXBlID09IFByZWRpY3RUb3ApCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1fdHlwZSAmPSB0eXBlOworICAgICAgICBtX3N0cnVjdHVyZS5maWx0
ZXIodHlwZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIAorICAgICAgICBpZiAobWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRp
Y3Rpb25Gcm9tVmFsdWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQobV90eXBlICYgUHJlZGljdENlbGwpOworICAgICAgICAgICAg
cmV0dXJuIG1fc3RydWN0dXJlLmNvbnRhaW5zKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAg
IGZwcmludGYob3V0LCAiKCVzLCAiLCBwcmVkaWN0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAg
ICAgIG1fc3RydWN0dXJlLmR1bXAob3V0KTsKKyAgICAgICAgZnByaW50ZihvdXQsICIpIik7Cisg
ICAgfQorI2VuZGlmCisKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJlOwor
ICAgIFByZWRpY3RlZFR5cGUgbV90eXBlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFZh
bHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHQmFzaWNCbG9ja19oCisjZGVmaW5l
IERGR0Jhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdB
YnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR09wZXJh
bmRzLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFZlY3RvciA8Qmxv
Y2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0OworCitzdHJ1Y3QgQmFzaWNCbG9jayB7CisgICAg
QmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4sIHVuc2ln
bmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAgICAgICA6IGJ5dGVjb2Rl
QmVnaW4oYnl0ZWNvZGVCZWdpbikKKyAgICAgICAgLCBiZWdpbihiZWdpbikKKyAgICAgICAgLCBl
bmQoTm9Ob2RlKQorICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICAgICAsIGNmYUhh
c1Zpc2l0ZWQoZmFsc2UpCisgICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKKyAgICAg
ICAgLCB2YXJpYWJsZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwg
dmFyaWFibGVzQXRUYWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVl
c0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAgICAgLCB2YWx1ZXNBdFRhaWwo
bnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBpbmxp
bmUgQmxvY2tJbmRleCBnZXRCeXRlY29kZUJlZ2luKE93blB0cjxCYXNpY0Jsb2NrPiogYmxvY2sp
CisgICAgeworICAgICAgICByZXR1cm4gKCpibG9jayktPmJ5dGVjb2RlQmVnaW47CisgICAgfQor
CisgICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKKyAgICBOb2RlSW5kZXggYmVnaW47CisgICAg
Tm9kZUluZGV4IGVuZDsKKyAgICBib29sIGlzT1NSVGFyZ2V0OworICAgIGJvb2wgY2ZhSGFzVmlz
aXRlZDsKKyAgICBib29sIGNmYVNob3VsZFJldmlzaXQ7CisgICAgCisgICAgUHJlZGVjZXNzb3JM
aXN0IG1fcHJlZGVjZXNzb3JzOworICAgIAorICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUlu
ZGV4VHJhaXRzPiB2YXJpYWJsZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2Rl
SW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0VGFpbDsKKyAgICAKKyAgICBPcGVyYW5kczxBYnN0cmFj
dFZhbHVlPiB2YWx1ZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVz
QXRUYWlsOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9u
IDk3MDA0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIC8vIFVz
ZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBh
IGxvY2FsIHZhcmlhYmxlLgogICAgIE5vZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5k
KQogICAgIHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5t
X2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRl
eCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CiAKICAg
ICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUg
PSBtX2dyYXBoW25vZGVJbmRleF07CkBAIC0xNDQsMTUgKzE0NCwxNSBAQCBwcml2YXRlOgogICAg
ICAgICBOb2RlSW5kZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vz
c0RhdGEpKTsKICAgICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1f
Y3VycmVudEJsb2NrLCBwaGksIG9wZXJhbmQpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9H
cmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAg
IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRl
eDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5k
KSA9IG5vZGVJbmRleDsKICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fs
c0F0SGVhZFtvcGVyYW5kXS5zZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2Rl
SW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAg
dm9pZCBzZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUgPSBh
ZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQp
KSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2Fs
KG9wZXJhbmQpID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVu
dGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBA
IC0xNjEsNyArMTYxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBv
cGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVu
dHMpOwogCi0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7
CiAKICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUm
IG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgogICAg
ICAgICAgICAgICAgIEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihvcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChHZXRMb2NhbCwgT3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgp
OwotICAgICAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1
bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMTg2LDkgKzE4Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRU
b0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3Vt
ZW50UGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJn
dW1lbnQpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZv
KHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2Fy
Z3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4
OwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2Fy
Z3VtZW50XS5zZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgbm9kZUluZGV4
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQpAQCAtMTk3LDcg
KzE5Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCAr
IG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAot
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVl
ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVy
YW5kKSksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5h
cmd1bWVudChhcmd1bWVudCkgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdldCBhbiBv
cGVyYW5kLCBhbmQgcGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4K
QEAgLTc4Myw4ICs3ODMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVt
QXJndW1lbnRzOyArK2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1l
bnQgPSBhZGRUb0dyYXBoKFNldEFyZ3VtZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRh
KGFyZ3VtZW50IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSkpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNb
YXJndW1lbnRdID0gc2V0QXJndW1lbnQ7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7Ci0gICAg
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnNldEZp
cnN0VGltZShzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFi
bGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmly
c3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2
ODksMTYgKzE2ODksMTYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkK
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kp
IHsKICAgICAgICAgICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1f
YmxvY2tzW3ByZWRlY2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAgIFZhcmlhYmxlUmVj
b3JkJiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JC
bG9jay0+bV9hcmd1bWVudHNBdFRhaWxbdmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2Nh
bHNBdFRhaWxbdmFyTm9dOworICAgICAgICAgICAgTm9kZUluZGV4JiB2YXIgPSAoc3RhY2tUeXBl
ID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWls
LmFyZ3VtZW50KHZhck5vKSA6IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bCh2YXJObyk7CiAKLSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2
YXIudmFsdWU7CisgICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFy
OwogICAgICAgICAgICAgaWYgKHZhbHVlSW5QcmVkZWNlc3NvciA9PSBOb05vZGUpIHsKICAgICAg
ICAgICAgICAgICB2YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5l
d1ZhcmlhYmxlQWNjZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5v
IC0gbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1l
SGVhZGVyU2l6ZSA6IHZhck5vKSkpOwotICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUo
dmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVj
ZXNzb3I7CiAgICAgICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNr
KQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVh
ZFt2YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAg
ICAgICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0
VGltZSh2YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzQXRIZWFkW3Zhck5v
XS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAg
cHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5v
LCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQ
aGlTdGFja0VudHJ5KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8p
KTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9w
ID09IEdldExvY2FsKSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhh
dCB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCkBAIC0x
NzU4LDExICsxNzU4LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNldHVwUHJlZGVjZXNzb3Jz
KCkKICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAg
ICBBU1NFUlQobm9kZS5pc1Rlcm1pbmFsKCkpOwogCi0gICAgICAgIGlmIChub2RlLmlzSnVtcCgp
KQotICAgICAgICAgICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5C
eXRlY29kZU9mZnNldCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICBl
bHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguYmxvY2tGb3JC
eXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMu
YXBwZW5kKGluZGV4KTsKLSAgICAgICAgICAgIG1fZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNl
dChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMuYXBwZW5kKGlu
ZGV4KTsKKyAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0
VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICAgICAgbV9ncmFw
aC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5k
KGluZGV4KTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKKyAgICAgICAg
ICAgIG5vZGUuc2V0VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAg
ICAgICAgbm9kZS5zZXROb3RUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7
CisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5t
X3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nr
c1tub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4
KTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTEgKzE4OCwxMSBAQCB2b2lkIEdy
YXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0
cnVlOwogICAgIH0KICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7
Ci0gICAgICAgIHByaW50ZigiJXNUOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpOworICAg
ICAgICBwcmludGYoIiVzVDojJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnRha2Vu
QmxvY2tJbmRleCgpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlm
ICAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgIHByaW50ZigiJXNGOiMldSIsIGhhc1ByaW50
ZWQgPyAiLCAiIDogIiIsIGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICBwcmludGYoIiVzRjojJXUiLCBoYXNQcmludGVk
ID8gIiwgIiA6ICIiLCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgaGFzUHJp
bnRlZCA9IHRydWU7CiAgICAgfQogICAgICh2b2lkKWhhc1ByaW50ZWQ7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVk
ZSAiREZHQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVk
aWN0aW9uVHJhY2tlci5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyRmlsZS5oIgpAQCAtNDMsMjkgKzQ0
LDYgQEAgY2xhc3MgRXhlY1N0YXRlOwogCiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1
bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4K
LWlubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVy
YW5kIDwgMDsgfQotCi10eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5kZXg7Ci0KLS8vIEZvciBldmVy
eSBsb2NhbCB2YXJpYWJsZSB3ZSB0cmFjayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUg
dmFsdWUuCi0vLyBXZSB0cmFjayB0aGUgZ2V0IHNvIHRoYXQgdGhlc2UgbWF5IGJlIHNoYXJlZCwg
YW5kIHdlIHRyYWNrIHRoZSBzZXQgdG8KLS8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlLCBh
bmQgdG8gcmVmZXJlbmNlIHRoZSBmaW5hbCBkZWZpbml0aW9uLgotc3RydWN0IFZhcmlhYmxlUmVj
b3JkIHsKLSAgICBWYXJpYWJsZVJlY29yZCgpCi0gICAgICAgIDogdmFsdWUoTm9Ob2RlKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4IG5vZGVJbmRl
eCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCh2YWx1ZSA9PSBOb05vZGUpOwotICAgICAgICB2YWx1
ZSA9IG5vZGVJbmRleDsKLSAgICB9Ci0KLSAgICBOb2RlSW5kZXggdmFsdWU7Ci19OwotCiBzdHJ1
Y3QgTWV0aG9kQ2hlY2tEYXRhIHsKICAgICAvLyBJdCBpcyBzYWZlIHRvIHJlZmVyIHRvIHRoZXNl
IGRpcmVjdGx5IGJlY2F1c2UgdGhleSBhcmUgc2hhZG93ZWQgYnkKICAgICAvLyB0aGUgb2xkIEpJ
VCdzIENvZGVCbG9jaydzIE1ldGhvZENhbGxMaW5rSW5mby4KQEAgLTExMSw0MCArODksNiBAQCBz
dHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEgewogICAgIHVuc2lnbmVkIHJlc29sdmVJbmZvSW5kZXg7
CiB9OwogCi10eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0Owot
Ci1zdHJ1Y3QgQmFzaWNCbG9jayB7Ci0gICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJl
Z2luLCBOb2RlSW5kZXggYmVnaW4sIHVuc2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVt
TG9jYWxzKQotICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAg
LCBiZWdpbihiZWdpbikKLSAgICAgICAgLCBlbmQoTm9Ob2RlKQotICAgICAgICAsIGlzT1NSVGFy
Z2V0KGZhbHNlKQotICAgICAgICAsIG1fYXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50cykKLSAg
ICAgICAgLCBtX2xvY2Fsc0F0SGVhZChudW1Mb2NhbHMpCi0gICAgICAgICwgbV9hcmd1bWVudHNB
dFRhaWwobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxvY2FscykK
LSAgICB7Ci0gICAgfQotCi0gICAgc3RhdGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2Rl
QmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiAo
KmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZUJl
Z2luOwotICAgIE5vZGVJbmRleCBiZWdpbjsKLSAgICBOb2RlSW5kZXggZW5kOwotICAgIGJvb2wg
aXNPU1JUYXJnZXQ7Ci0KLSAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7Ci0gICAg
Ci0gICAgVmVjdG9yPFZhcmlhYmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKLSAgICBW
ZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2PiBtX2xvY2Fsc0F0SGVhZDsKLSAgICAKLSAgICBWZWN0
b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRUYWlsOwotICAgIFZlY3RvcjxWYXJp
YWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRUYWlsOwotfTsKLQogLy8gCiAvLyA9PT0gR3JhcGgg
PT09CiAvLwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJh
dG9yMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTExOTMsOCArMTE5Myw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3Vs
YXRpdmVOb24KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJv
b2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgp
OwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRh
a2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFr
ZW4gPT0gKG1fYmxvY2sgKyAxKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMTI1
NCw4ICsxMjU0LDggQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQog
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUm
IG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmQsIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsK
ICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5v
dFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtMTM5
Niw4ICsxMzk2LDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgog
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9k
ZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAg
Tm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0
YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5v
ZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9q
aXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtl
bkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRh
a2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5v
dFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxs
IGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dp
dGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28g
d2UgY2FuIGZhbGwgdGhyb3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHJldmlzaW9uIDk3MDA0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTMxLDggKzExMzEsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNw
ZWN1bGF0aXZlTm9uCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhv
bGVCcmFuY2hOdWxsKE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4
LCBib29sIGludmVydCkKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUlu
ZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJs
b2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgaWYg
KHRha2VuID09IChtX2Jsb2NrICsgMSkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKQEAg
LTExOTIsOCArMTE5Miw4IEBAIGJvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVD
b20KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChO
b2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24p
CiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFu
Y2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENv
bmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAg
LTEzMjEsOCArMTMyMSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b24KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVx
KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewog
ICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90
VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9k
ZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24g
d2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQs
IHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9u
IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtMTM5Myw2ICsxMzkzLDExIEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAorICAg
IEJhc2ljQmxvY2sqIGJsb2NrKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgp
Lm1fYmxvY2tzW21fYmxvY2tdLmdldCgpOworICAgIH0KKwogI2lmbmRlZiBOREVCVUcKICAgICB2
b2lkIGR1bXAoY29uc3QgY2hhciogbGFiZWwgPSAwKTsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNpb24gOTcwMDQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwMiwyMyArNDAyLDE5IEBAIHB1YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkK
ICAgICAgICAgT1NSRW50cnlEYXRhKiBlbnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JF
bnRyeURhdGEoYmFzaWNCbG9jay5ieXRlY29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0
YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CiAgICAgICAgIAotICAgICAgICBBY3Rpb25hYmxlUHJlZGlj
dGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rpb25zKGJhc2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWQu
c2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7Ci0KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1f
YXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBO
b05vZGUpCi0gICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnNldEFyZ3VtZW50
KGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5k
ZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgfQorICAg
ICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcyA9IGJhc2ljQmxvY2sudmFsdWVzQXRIZWFkOwog
ICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9s
b2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5k
ZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOwotICAgICAgICAgICAgaWYg
KG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rp
b25zLnNldFZhcmlhYmxlKGksIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUo
bV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsK
KyAgICAgICAgLy8gRml4IHRoZSBleHBlY3RlZCB2YWx1ZXM6IGluIG91ciBwcm90b2NvbCwgYSBk
ZWFkIHZhcmlhYmxlIHdpbGwgaGF2ZSBhbiBleHBlY3RlZAorICAgICAgICAvLyB2YWx1ZSBvZiAo
Tm9uZSwgW10pLiBCdXQgdGhlIG9sZCBKSVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBT
byB3ZSByZWFsbHkKKyAgICAgICAgLy8gbmVlZCAoVG9wLCBUT1ApLgorICAgICAgICBmb3IgKHNp
emVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICAgICAgaWYgKGJhc2lj
QmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSA9PSBOb05vZGUpCisgICAg
ICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLm1h
a2VUb3AoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2Fs
IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkg
eworICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2Fs
KSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9j
YWwobG9jYWwpLm1ha2VUb3AoKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYWN0aW9u
YWJsZVByZWRpY3Rpb25zLnBhY2soKTsKLSAgICAgICAgCi0gICAgICAgIGVudHJ5LT5tX3ByZWRp
Y3Rpb25zID0gYWN0aW9uYWJsZVByZWRpY3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BB
UkFNKGJhc2ljQmxvY2spOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTAgKzI2LDggQEAKICNpZm5kZWYgREZHTm9kZV9o
CiAjZGVmaW5lIERGR05vZGVfaAogCi0jaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCiAjaW5j
bHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQb2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+Ci0jaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2lu
ZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdnaW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZs
b3cgZ3JhcGhzLgogI2RlZmluZSBFTkFCTEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtNjcsNiAr
NjUsOCBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKKyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCIKICNpbmNsdWRlICJKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2lu
Y2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpAQCAtNzQsMTUgKzc0LDE2IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAotLy8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51
bWJlciAoc3BpbGwgbG9jYXRpb24pLgotLy8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlw
ZS1jaGVja2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCi1l
bnVtIFZpcnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OwotQ09N
UElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1
YWxSZWdpc3Rlcl9pc18zMmJpdCk7Ci0KIC8vIFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3Ro
ZXIgbm9kZSBpbiB0aGUgZ3JhcGguCiB0eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRp
YyBjb25zdCBOb2RlSW5kZXggTm9Ob2RlID0gVUlOVF9NQVg7CiAKK3R5cGVkZWYgdWludDMyX3Qg
QmxvY2tJbmRleDsKKworc3RydWN0IE5vZGVJbmRleFRyYWl0cyB7CisgICAgc3RhdGljIE5vZGVJ
bmRleCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBOb05vZGU7IH0KK307CisKIC8vIEluZm9ybWF0
aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJvbSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291
cmNlIGluZm9ybWF0aW9uLAogLy8gYW5kIHRvIGltcGxlbWVudCBPU1IuCiAvLyAoUHJlc2VudGx5
IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNvZGUgaW5kZXgpLgpAQCAtMTEwLDUxICsxMTEsNiBAQCBw
cml2YXRlOgogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleDsKIH07CiAKLWNsYXNzIFZhcmlh
YmxlQWNjZXNzRGF0YTogcHVibGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKLXB1
YmxpYzoKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoKQotICAgICAgICA6IG1fbG9jYWwoc3RhdGlj
X2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkK
LSAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCi0gICAgewotICAgIH0KLSAgICAK
LSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgICAgICA6
IG1fbG9jYWwobG9jYWwpCi0gICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChtX2xvY2FsID09IGZpbmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBt
X2xvY2FsOwotICAgIH0KLSAgICAKLSAgICBpbnQgb3BlcmFuZCgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihsb2NhbCgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBw
cmVkaWN0KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBt
ZXJnZVByZWRpY3Rpb24oZmluZCgpLT5tX3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOwotICAgIH0K
LSAgICAKLSAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9uOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgLy8g
VGhpcyBpcyBzbGlnaHRseSBzcGFjZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUg
dW5pZmllZCB3aXRoCi0gICAgLy8gd2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3Vs
ZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rpb24uIEJ1dAotICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJl
IHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCi0gICAg
Ly8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KLQot
ICAgIFZpcnR1YWxSZWdpc3RlciBtX2xvY2FsOwotICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0
aW9uOwotfTsKLQogc3RydWN0IFN0cnVjdHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1
cmUqIHByZXZpb3VzU3RydWN0dXJlOwogICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpAQCAt
NTY0LDYgKzUyMCw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAKICAgICBWYXJpYWJsZUFjY2Vzc0Rh
dGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgpCiAgICAgeworICAgICAgICBBU1NFUlQoaGFzVmFyaWFi
bGVBY2Nlc3NEYXRhKCkpOwogICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPihtX29wSW5mbyktPmZpbmQoKTsKICAgICB9CiAgICAgCkBAIC03NTUsMTMg
KzcxMiwzNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHJldHVybiBvcCAmIE5vZGVJc1Rlcm1p
bmFsOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZzZXQoKQorICAgIHVu
c2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkKICAgICB7CiAgICAgICAg
IEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZv
OwogICAgIH0KIAotICAgIHVuc2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKQorICAgIHVu
c2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICB9
CisgICAgCisgICAgdm9pZCBzZXRUYWtlbkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAg
ICBtX29wSW5mbyA9IGJsb2NrSW5kZXg7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm90VGFr
ZW5CbG9ja0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0JyYW5jaCgpKTsKKyAgICAgICAgbV9vcEluZm8yID0gYmxvY2tJbmRleDsKKyAgICB9Cisg
ICAgCisgICAgQmxvY2tJbmRleCB0YWtlbkJsb2NrSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm87Cisg
ICAgfQorICAgIAorICAgIEJsb2NrSW5kZXggbm90VGFrZW5CbG9ja0luZGV4KCkKICAgICB7CiAg
ICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5
NzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NywzNCArNzcsMzggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNT
dGF0ZSogZXhlYywgQwogICAgIC8vICAgIGludG8gYSBsZXNzLWxpa2VseSBwYXRoLiBTbywgdGhl
IHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIHNpbXBseSBub3QKICAgICAvLyAgICBPU1Ig
YXQgdGhpcyB0aW1lLgogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBlbnRyeS0+
bV9wcmVkaWN0aW9ucy5hcmd1bWVudFVwcGVyQm91bmQoKTsgKytpKSB7Ci0gICAgICAgIEFjdGlv
bmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVu
dChpKTsKLSAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChpID49IGV4ZWMtPmFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFy
Z3VtZW50IDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICBpZiAoYXJndW1lbnQgPj0gZXhlYy0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAg
ICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgd2FzIG5vdCBwYXNz
ZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVk
aWN0aW9uKSk7CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJn
dW1lbnQgJWx1IHdhcyBub3QgcGFzc2VkLCBleHBlY3RlZCAiLCBhcmd1bWVudCk7CisgICAgICAg
ICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRv
dXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRp
Y3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0aW9uKSkgewor
ICAgICAgICBKU1ZhbHVlIHZhbHVlOworICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAg
ICAgdmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHZhbHVlID0gZXhlYy0+YXJndW1lbnQoYXJndW1lbnQgLSAxKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLnZhbGlk
YXRlKHZhbHVlKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVjdGVk
ICVzLlxuIiwgaSwgZXhlYy0+YXJndW1lbnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIGFjdGlvbmFi
bGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICAgICAgcHJpbnRmKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICVsdSBpcyAlcywgZXhwZWN0ZWQgIiwgYXJn
dW1lbnQsIHZhbHVlLmRlc2NyaXB0aW9uKCkpOworICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHBy
aW50ZigiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAg
ICAgfQogICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyeS0+bV9wcmVkaWN0
aW9ucy52YXJpYWJsZVVwcGVyQm91bmQoKTsgKytpKSB7Ci0gICAgICAgIEFjdGlvbmFibGVQcmVk
aWN0aW9uIHByZWRpY3Rpb24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZShpKTsKLSAg
ICAgICAgaWYgKHByZWRpY3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlv
bihnbG9iYWxEYXRhLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb24p
KSB7CisgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVk
VmFsdWVzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgaWYgKCFlbnRyeS0+
bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClb
bG9jYWxdLmpzVmFsdWUoKSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAg
ICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBl
eHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlw
dGlvbigpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAg
ICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlbHUgaXMgJXMs
IGV4cGVjdGVkICIsIGxvY2FsLCBleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRl
c2NyaXB0aW9uKCkpOworICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwo
bG9jYWwpLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYK
ICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkVudHJ5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFbnRyeS5oCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBA
QAogI2lmbmRlZiBERkdPU1JFbnRyeV9oCiAjZGVmaW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1
ZGUgIkFjdGlvbmFibGVQcmVkaWN0aW9uLmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5o
IgorI2luY2x1ZGUgIkRGR09wZXJhbmRzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3
ICs0MCw3IEBAIG5hbWVzcGFjZSBERkcgewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5z
aWduZWQgbV9ieXRlY29kZUluZGV4OwogICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7
Ci0gICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIG1fcHJlZGljdGlvbnM7CisgICAgT3BlcmFuZHM8
QWJzdHJhY3RWYWx1ZT4gbV9leHBlY3RlZFZhbHVlczsKIH07CiAKIGlubGluZSB1bnNpZ25lZCBn
ZXRPU1JFbnRyeURhdGFCeXRlY29kZUluZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBERkdPcGVyYW5kc19oCisjZGVmaW5lIERGR09wZXJhbmRzX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Ly8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9t
IGFyZ3VtZW50cy4KK2lubGluZSBib29sIG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7
IHJldHVybiBvcGVyYW5kIDwgMDsgfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3Bl
cmFuZFZhbHVlVHJhaXRzOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE9wZXJhbmRW
YWx1ZVRyYWl0cyB7CisgICAgc3RhdGljIFQgZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gVCgpOyB9
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBPcGVyYW5kVmFs
dWVUcmFpdHM8VD4gPgorY2xhc3MgT3BlcmFuZHMgeworcHVibGljOgorICAgIE9wZXJhbmRzKCkg
eyB9CisgICAgCisgICAgZXhwbGljaXQgT3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6
ZV90IG51bUxvY2FscykKKyAgICB7CisgICAgICAgIG1fYXJndW1lbnRzLmZpbGwoVHJhaXRzOjpk
ZWZhdWx0VmFsdWUoKSwgbnVtQXJndW1lbnRzKTsKKyAgICAgICAgbV9sb2NhbHMuZmlsbChUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpLCBudW1Mb2NhbHMpOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qg
bnVtYmVyT2ZBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0K
KyAgICBzaXplX3QgbnVtYmVyT2ZMb2NhbHMoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fscy5zaXpl
KCk7IH0KKyAgICAKKyAgICBUJiBhcmd1bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX2FyZ3Vt
ZW50c1tpZHhdOyB9CisgICAgY29uc3QgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmd1bWVudHNbaWR4XTsgfQorICAgIAorICAgIFQmIGxvY2FsKHNpemVfdCBpZHgp
IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KKyAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4
KSBjb25zdCB7IHJldHVybiBtX2xvY2Fsc1tpZHhdOyB9CisgICAgCisgICAgdm9pZCBzZXRMb2Nh
bChzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpZHggPj0g
bV9sb2NhbHMuc2l6ZSgpKSB7CisgICAgICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxz
LnNpemUoKTsKKyAgICAgICAgICAgIG1fbG9jYWxzLnJlc2l6ZShpZHggKyAxKTsKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBtX2xvY2Fsc1tpZHhdID0gdmFsdWU7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYg
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBUcmFpdHM6
OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgYXJndW1lbnQoaWR4KSA9IHZhbHVlOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHNldExvY2FsRmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkgfHwgbV9s
b2NhbHNbaWR4XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgc2V0TG9jYWwo
aWR4LCB2YWx1ZSk7CisgICAgfQorICAgIAorICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisg
ICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAg
ICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3Rl
ckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVu
dHNbYXJndW1lbnRdOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9sb2Nh
bHNbb3BlcmFuZF07CisgICAgfQorICAgIAorICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJh
bmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFu
ZHMqPih0aGlzKS0+b3BlcmFuZChvcGVyYW5kKSk7IH0KKyAgICAKKyAgICB2b2lkIHNldE9wZXJh
bmQoaW50IG9wZXJhbmQsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJh
bmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVy
YW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJT
aXplOworICAgICAgICAgICAgbV9hcmd1bWVudHNbYXJndW1lbnRdID0gdmFsdWU7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldExvY2FsKG9wZXJh
bmQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgbV9hcmd1bWVudHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAg
bV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFQsIDg+IG1fYXJndW1lbnRzOworICAgIFZlY3RvcjxULCAxNj4gbV9s
b2NhbHM7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgordm9pZCBkdW1wT3BlcmFuZHMoT3Bl
cmFuZHM8VD4mIG9wZXJhbmRzLCBGSUxFKiBvdXQpCit7CisgICAgZm9yIChzaXplX3QgYXJndW1l
bnQgPSAwOyBhcmd1bWVudCA8IG9wZXJhbmRzLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1l
bnQpIHsKKyAgICAgICAgaWYgKGFyZ3VtZW50KQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIg
Iik7CisgICAgICAgIG9wZXJhbmRzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKG91dCk7CisgICAg
fQorICAgIGZwcmludGYob3V0LCAiIDogIik7CisgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBs
b2NhbCA8IG9wZXJhbmRzLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgaWYg
KGxvY2FsKQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIgIik7CisgICAgICAgIG9wZXJhbmRz
LmxvY2FsKGxvY2FsKS5kdW1wKG91dCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09wZXJh
bmRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJv
cGFnYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJM
RShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHU2NvcmVCb2FyZC5oIgogI2luY2x1ZGUgPHd0Zi9GaXhl
ZEFycmF5Lmg+CkBAIC01NSw0NSArNTYsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZml4cG9pbnQo
KQogICAgIHsKICNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
bV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJs
b2NrKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAgICAg
ICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVXAgaGVy
ZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dhcmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhhdCB0
byBiZQotICAgICAgICAgICAgLy8gbW9yZSBwcm9maXRhYmxlLgotICAgICAgICAgICAgcHJvcGFn
YXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpOwotICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQp
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJk
KCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShE
RkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgbV9jb3VudCA9IDA7Ci0jZW5k
aWYKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFs
IGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAotICAgICAgICAgICAgLy8gREZTLXNv
cnRlZCBjb2RlLgotICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7Ci0g
ICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUg
bGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKLSAgICAgICAgICAgIC8vIGNh
dXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFj
a3dhcmQgZmxvdy4KLSAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6
ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50Ci0gICAgICAgICAgICAvLyBm
b3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxv
dy4KLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRl
UHJlZGljdGlvbnNCYWNrd2FyZCgpOwotICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAg
ICAgICAKKyAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MoKTsKKyAgICAgICAgcHJvcGFn
YXRlUHJlZGljdGlvbnMoKTsKICAgICAgICAgZml4dXAoKTsKICAgICAgICAgCiAjaWYgRU5BQkxF
KERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtMTEwLDYgKzc3LDEzIEBAIHB1Ymxp
YzoKIAogICAgICAgICBhbGxvY2F0ZVZpcnR1YWxSZWdpc3RlcnMoKTsKIAorI2lmIEVOQUJMRShE
RkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRl
ciB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9jYXRpb246XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1w
KG1fY29kZUJsb2NrKTsKKyNlbmRpZgorCisgICAgICAgIGdsb2JhbENGQSgpOworCiAjaWYgRU5B
QkxFKERGR19ERUJVR19WRVJCT1NFKQogICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHByb3Bh
Z2F0aW9uOlxuIik7CiAgICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9jayk7CkBAIC0yNzQs
NiArMjQ4LDI1IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFn
cyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcHJvcGFn
YXRlQXJpdGhOb2RlRmxhZ3MoKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBVcCBoZXJlIHdlIHN0YXJ0IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3Vz
cGVjdCB0aGF0IHRvIGJlCisgICAgICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCisgICAgICAg
ICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0JhY2t3YXJkKCk7CisgICAgICAgICAgICBpZiAo
IW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVG
bGFnc0ZvcndhcmQoKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAg
CiAgICAgYm9vbCBzZXRQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX2dyYXBoW21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CkBA
IC02MDgsNyArNjAxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKERGR19E
RUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBwcmludGYoIiVzICIsIHByZWRpY3Rp
b25Ub1N0cmluZyhtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKTsKKyAgICAg
ICAgcHJpbnRmKCIlc1xuIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5k
ZXhdLnByZWRpY3Rpb24oKSkpOwogI2VuZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQg
fD0gY2hhbmdlZDsKQEAgLTYzMiw2ICs2MjUsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHBy
b3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyhtX2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQog
ICAgIAorICAgIHZvaWQgcHJvcGFnYXRlUHJlZGljdGlvbnMoKQorICAgIHsKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2Vu
ZGlmCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGb3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXItb3B0aW1h
bCBmb3IgYm90aCB0b3BvbG9naWNhbGx5LXNvcnRlZCBhbmQKKyAgICAgICAgICAgIC8vIERGUy1z
b3J0ZWQgY29kZS4KKyAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zRm9yd2FyZCgpOwor
ICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhl
IGxpa2VsaWhvb2QgdGhhdCBwYXRob2xvZ2ljYWwgY29kZSB3aWxsCisgICAgICAgICAgICAvLyBj
YXVzZSBzbG93bmVzcy4gTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJh
Y2t3YXJkIGZsb3cuCisgICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2Vz
OiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAorICAgICAgICAgICAgLy8g
Zm91bmQgYSBzb3VuZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZs
b3cuCisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0
ZVByZWRpY3Rpb25zQmFja3dhcmQoKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAg
ICB9CisgICAgCiAgICAgdm9pZCB0b0RvdWJsZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsK
ICAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCA9PSBWYWx1ZVRvTnVtYmVyKSB7CkBA
IC0xNDI0LDYgKzE0NDAsODEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5t
X251bUNhbGxlZVJlZ2lzdGVycyA9IGNhbGxlZVJlZ2lzdGVyczsKICAgICB9CiAgICAgCisgICAg
dm9pZCBwZXJmb3JtQmxvY2tDRkEoQWJzdHJhY3RTdGF0ZSYgc3RhdGUsIEJsb2NrSW5kZXggYmxv
Y2tJbmRleCkKKyAgICB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Js
b2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2
aXNpdCkKKyAgICAgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FU
SU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBi
bG9ja0luZGV4LCBibG9jay0+Ynl0ZWNvZGVCZWdpbik7CisjZW5kaWYKKyAgICAgICAgc3RhdGUu
YmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9O
X1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgICAgaGVhZCB2YXJzOiAiKTsKKyAgICAgICAg
ZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CisgICAgICAgIHByaW50
ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICBmb3IgKE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9j
ay0+YmVnaW47IG5vZGVJbmRleCA8IGJsb2NrLT5lbmQ7ICsrbm9kZUluZGV4KSB7CisgICAgICAg
ICAgICBpZiAoIW1fZ3JhcGhbbm9kZUluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgICAgIHByaW50ZigiICAgICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1f
Z3JhcGhbbm9kZUluZGV4XS5vcCksIG5vZGVJbmRleCk7CisgICAgICAgICAgICBzdGF0ZS5kdW1w
KHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICAg
IGlmICghc3RhdGUuZXhlY3V0ZShub2RlSW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICBwcmludGYoIiAgICAgIHRhaWwgcmVnczogIik7CisgICAgICAgIHN0YXRlLmR1bXAoc3Rk
b3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIG1fY2hhbmdlZCB8
PSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKTsK
KyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50
ZigiICAgICAgdGFpbCB2YXJzOiAiKTsKKyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1
ZXNBdFRhaWwsIHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgIH0K
KyAgICAKKyAgICB2b2lkIHBlcmZvcm1Gb3J3YXJkQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlKQor
ICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAg
IHByaW50ZigiQ0ZBIFsldV1cbiIsICsrbV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9jayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5z
aXplKCk7ICsrYmxvY2spCisgICAgICAgICAgICBwZXJmb3JtQmxvY2tDRkEoc3RhdGUsIGJsb2Nr
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBnbG9iYWxDRkEoKQorICAgIHsKKyNpZiBFTkFCTEUo
REZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2Vu
ZGlmCisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBwc2V1ZG8td29ya2xp
c3QtYmFzZWQgZm9yd2FyZCBDRkEsIGV4Y2VwdCB0aGF0IHRoZSB2aXNpdCBvcmRlcgorICAgICAg
ICAvLyBvZiBibG9ja3MgaXMgdGhlIGJ5dGVjb2RlIHByb2dyYW0gb3JkZXIgKHdoaWNoIGlzIG5l
YXJseSB0b3BvbG9naWNhbCksIGFuZAorICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgd29ya2xpc3Qg
d2UganVzdCB3YWxrIGFsbCBiYXNpYyBibG9ja3MgY2hlY2tpbmcgaWYgY2ZhU2hvdWxkUmV2aXNp
dAorICAgICAgICAvLyBpcyBzZXQgdG8gdHJ1ZS4gVGhpcyBpcyBsaWtlbHkgdG8gYmFsYW5jZSB0
aGUgZWZmaWNpZW5jeSBwcm9wZXJ0aWVzIG9mIGJvdGgKKyAgICAgICAgLy8gd29ya2xpc3QtYmFz
ZWQgYW5kIGZvcndhcmQgZml4cG9pbnQtYmFzZWQgYXBwcm9hY2hlcy4gTGlrZSBhIHdvcmtsaXN0
LWJhc2VkCisgICAgICAgIC8vIGFwcHJvYWNoLCBpdCB3b24ndCB2aXNpdCBjb2RlIGlmIGl0J3Mg
bWVhbmluZ2xlc3MgdG8gZG8gc28gKG5vdGhpbmcgY2hhbmdlZCBhdAorICAgICAgICAvLyB0aGUg
aGVhZCBvZiB0aGUgYmxvY2sgb3IgdGhlIHByZWRlY2Vzc29ycyBoYXZlIG5vdCBiZWVuIHZpc2l0
ZWQpLiBMaWtlIGEgZm9yd2FyZAorICAgICAgICAvLyBmaXhwb2ludC1iYXNlZCBhcHByb2FjaCwg
aXQgaGFzIGEgaGlnaCBwcm9iYWJpbGl0eSBvZiBvbmx5IHZpc2l0aW5nIGEgYmxvY2sKKyAgICAg
ICAgLy8gYWZ0ZXIgYWxsIHByZWRlY2Vzc29ycyBoYXZlIGJlZW4gdmlzaXRlZC4gT25seSBsb29w
cyB3aWxsIGNhdXNlIHRoaXMgYW5hbHlzaXMgdG8KKyAgICAgICAgLy8gcmV2aXNpdCBibG9ja3Ms
IGFuZCB0aGUgYW1vdW50IG9mIHJldmlzaXRpbmcgaXMgcHJvcG9ydGlvbmFsIHRvIGxvb3AgZGVw
dGguCisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKG1fZ3JhcGgp
OworICAgICAgICAKKyAgICAgICAgQWJzdHJhY3RTdGF0ZSBzdGF0ZShtX2NvZGVCbG9jaywgbV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIHBlcmZvcm1Gb3J3YXJkQ0ZBKHN0YXRlKTsKKyAgICAgICAgfSB3
aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAg
SlNHbG9iYWxEYXRhJiBtX2dsb2JhbERhdGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNyAr
MzQ3LDcgQEAgSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJl
dHVybiBub3ROdW1iZXI7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RF
cXVhbGl0eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIsIFByZWRpY3Rpb25DaGVj
a2VyIHByZWRpY3Rpb25DaGVjaykKIHsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhp
cywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKCkpOwpAQCAtMzU5LDggKzM1OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5n
cHIoKTsKICAgICBHUFJSZWcgcmVzdWx0UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7
CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBp
ZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOwogICAg
IG1faml0Lm1vdmUoSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwpAQCAtMzgwLDkgKzM4Miw5
IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQo
bm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVj
dEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOwor
ICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAgIGVsc2UgaWYg
KE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNo
aWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5v
ZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsK
ICAgICBlbHNlIGlmICghYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkg
JiYgIWF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICBu
b25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlv
bik7CiAgICAgZWxzZSBpZiAoKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJl
cigpIHx8IGF0KG5vZGUuY2hpbGQyKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSAmJiAhTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGls
ZDIoKSkpKSB7CkBAIC00MzgsNyArNDQwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVZhbHVlQWRkKE5vZAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQ
YXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lk
KiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQqIHZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9u
Q2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFnKHRoaXMpOwpAQCAtNDUxLDcgKzQ1Myw4IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxh
dGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9h
ZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC00NTksNyArNDYyLDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIAogICAgIG1faml0
Lm1vdmUodmFsdWVUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIG1faml0LmFuZDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgcmVzdWx0
UGF5bG9hZEdQUik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpVbmRlZmluZWRUYWcpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykp
KTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAg
ICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC00NzIsMTEgKzQ3NiwxMSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgLy8gRklYTUU6IE5lZWQgdG8g
YWRkIGZhc3QgcGF0aHMgZm9yIGtub3duIGJvb2xlYW5zLgogCiAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJM
b2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAg
ICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAh
aXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CkBAIC01NDIsMjAgKzU0NiwyMiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAjZW5kaWYKIH0KIAotdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRl
eCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0cikKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2Rl
SW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIs
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIo
KTsKICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNw
ZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQ
YXlsb2FkR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBh
ZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZt
X2ppdCk7CiAgICAgCiAgICAgbV9qaXQuYW5kMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCB2YWx1ZVRhZ0dQUik7Ci0gICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkpOworICAgIGlmIChuZWVkU3Bl
Y3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6VW5kZWZpbmVkVGFnKSkpOwogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQog
ICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgCkBAIC01NjQs
MTUgKzU3MCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm9kZSkKIHsKLSAgICBCbG9j
a0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
bm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBt
X2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0
ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4
KCk7CiAKICAgICAvLyBGSVhNRTogQWRkIGZhc3QgY2FzZXMgZm9yIGtub3duIEJvb2xlYW4hCiAK
ICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90
aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwg
dGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsK
KyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5v
dFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9i
amVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFy
cmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hp
bGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7
CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBu
b3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVy
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAg
fSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewog
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7
CiAgICAgICAgICAgICBib29sIGludmVydCA9IGZhbHNlOwpAQCAtNjM4LDYgKzY0NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNhc2UgR2V0TG9j
YWw6IHsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9
IGJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CiAKICAgICAgICAg
Ly8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0
dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUp
IHsKQEAgLTY2OCw5ICs2NzUsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFnLmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIs
IFNwaWxsT3JkZXJKUyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlm
IChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRp
Y3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Nl
bGw7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisg
ICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAg
ICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKQEAgLTcwMyw3ICs3MTAsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNB
cnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcg
Y2VsbEdQUiA9IGNlbGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAg
ICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5s
b2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IH0gZWxzZSB7IC8vIEZJWE1FOiBBZGQgQm9vbGVhblByZWRpY3Rpb24gaGFuZGxpbmcKQEAgLTEy
ODksNyArMTI5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3Bl
cnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAg
ICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3
ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hp
bGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkp
KSk7CiAKQEAgLTEzMjQsNyArMTMzMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFu
ZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JM
ZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0
eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIGlmICghaXNLbm93bkFy
cmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKIAogICAgICAgICBiYXNlLnVzZSgp
OwpAQCAtMTQxMSw3ICsxNDE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFn
R1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFn
ZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CiAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9k
ZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE0NTcsNyArMTQ2NSw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBz
dG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VM
ZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHN0b3JhZ2VHUFIpOwpAQCAtMTUwNCw3ICsxNTEyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0g
ICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwogICAgICAgICBpZiAodGFrZW4gIT0g
KG1fYmxvY2sgKyAxKSkKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2Vu
KTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwpAQCAtMTUxNSw4ICsxNTIzLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAo
aXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpKSB8fCBhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCbG9j
a0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
bm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICAgICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90
VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBu
b2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm87CiAgICAgICAgICAgICAKQEAgLTE3MjcsNyArMTczNSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGlj
dGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENv
bXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIp
KSk7CisgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNz
KHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjZWxs
UmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0xNzY5LDkgKzE3NzgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUg
aXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCiAgICAgICAgIC8vIHRo
YXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHku
IE90aGVyd2lzZSB3ZQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBj
aGVjay4KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Zp
bmFsT2JqZWN0VlB0cikpKTsKLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAo
IWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9H
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
RmluYWxPYmplY3RWUHRyKSkpOworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwogICAgICAgICB9CkBAIC0xOTA3LDcg
KzE5MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5v
ZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9m
ZnNldCgpKSwgcmVzdWx0R1BSKTsKQEAgLTE5MjYsNyArMTkzNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBp
ZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdW
UHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsK
QEAgLTE5NDMsNiArMTk1MywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICBpZiAo
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yobm9k
ZS5zdHJ1Y3R1cmVTZXQoKSkpIHsKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAKICAg
ICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKQEAgLTIwNjksNyArMjA4
NCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOworICAgICAgICBpZiAoIW1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5kb2VzTm90Q29udGFpbkFueU90aGVy
VGhhbihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CiAgICAgICAgIGlm
IChtZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZS0+c3RydWN0
dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0Rh
dGEucHJvdG90eXBlU3RydWN0dXJlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiA5NzAwNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1MCw3ICs0NTAsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJ
VDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0
ciwgUHJlZGljdGlvbkNoZWNrZXIgcHJlZGljdGlvbkNoZWNrKQogewogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC00NjAsOCArNDYwLDEwIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgb3AyR1BSID0g
b3AyLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCi0g
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRp
Y3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAg
ICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOwogICAgIG1faml0Lm1v
dmUoSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKQEAgLTUwMSw5ICs1MDMsOSBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
ICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0g
ICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
RmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1f
aml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0
aW9uKTsKICAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRT
cGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAg
ICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgZWxzZQogICAg
ICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9w
ZXJhdGlvbik7CiAgICAgCkBAIC01MjksNyArNTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lkICp2cHRyKQordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2Rl
SW5kZXgsIHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwpAQCAtNTM3LDcgKzUzOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVPYmplY3RPck90aGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hl
Y2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtNTQ1LDcg
KzU0OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAK
ICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgIG1faml0LmFuZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIp
OwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25D
aGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7
CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC01NjYsMTEgKzU3MCwxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0
T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2Rl
LmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAg
ICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmds
b2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVB
cnJheU9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qo
bm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAg
IGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
ICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CkBA
IC02MzAsMTkgKzYzNCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5v
dChOCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9y
bWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJ
bmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwg
Ym9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlSW5kZXgpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hl
Y2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1w
KCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKICAgICBt
X2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgdmFsdWVHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgaWYgKG5lZWRT
cGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIGlm
IChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVt
cCgpLCBub3RUYWtlbik7CiAgICAgCkBAIC02NTQsOCArNjYwLDggQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAg
IAotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
bm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEo
KSkpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24g
PSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKQEAgLTY3Myw5ICs2NzksOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgIAogICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JP
dGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNG
aW5hbE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
QXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFs
c2U7CkBAIC03MDgsOSArNzE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChO
b2RlJiBubwogICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsKICAgICAgICAgICAgIGFkZEJy
YW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwg
bm90VGFrZW4pOwogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRha2VuKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7CisKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9
IGVsc2UgewpAQCAtNzQ4LDE1ICs3NTIsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBHZXRMb2NhbDogewogICAgICAgICBQcmVkaWN0ZWRU
eXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7
CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9w
ZXJhbmQobm9kZS5sb2NhbCgpKTsKIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rp
b24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgotICAgICAg
ICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgeworICAgICAgICBpZiAocHJlZGljdGlv
biA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1ZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAg
aWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChpc0ludDMy
UHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKIAogICAg
ICAgICAgICAgLy8gTGlrZSBpbnRlZ2VyUmVzdWx0LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBv
dXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywKQEAgLTc3NSw5ICs3ODAsOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVz
dWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAKICAgICAgICAgRGF0
YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9u
KSkKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAg
ICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVh
blByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRp
Y3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jv
b2xlYW47CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsK
QEAgLTgyMCw3ICs4MjUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAg
ICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNl
bGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTQwOCw3ICsxNDE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBp
cyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3Rv
ciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRo
ZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAg
aWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0Fy
cmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIApAQCAtMTQ0Miw3ICsxNDQ4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdp
dGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUg
cHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVj
ay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlm
ICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0xNTI0LDcgKzE1MzAsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3cml0
ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZv
clByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAg
ICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTU2Nyw3ICsx
NTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9y
YWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNjEwLDcgKzE2MTYs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dCgpKTsKKyAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7
CiAgICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CkBAIC0xNjIxLDggKzE2MjcsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAg
U3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICAKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAg
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
aXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIApAQCAtMTc5NSw5
ICsxODAxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAg
ICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAg
ICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkp
KTsKKyAgICAgICAgICAgIGlmICghaXNPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNW
YWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoR1BS
KTsKICAgICAgICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwpA
QCAtMTgwNyw3ICsxODE1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnBy
ZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1
ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNP
YmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBp
bGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29t
cGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NDcsOSArMTg1NiwxMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIE5l
ZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUg
cmVhc29uIHRvIGJlbGlldmUKICAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhl
biB3ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCiAgICAgICAgIC8v
IGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwotICAgICAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZp
bmFsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7
CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6
dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVj
dFR5cGUpKSk7CiAgICAgICAgIH0KQEAgLTE5NzgsNyArMTk4OCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNl
LmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlm
ICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwpAQCAt
MTk5Nyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25T
dHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6
Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwpAQCAtMjAxMiw2ICsyMDIyLDExIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJl
U2V0KCkpKSB7CisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9w
ZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VS
VChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CkBAIC0yMTMxLDcgKzIxNDYsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNl
R1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdw
cigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
SklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9k
Q2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKKyAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4obWV0aG9k
Q2hlY2tEYXRhLnN0cnVjdHVyZSkpCisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOwogICAgICAgICBpZiAobWV0aG9kQ2hl
Y2tEYXRhLnByb3RvdHlwZSAhPSBtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCktPm1l
dGhvZENhbGxEdW1teSgpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUtPnN0cnVjdHVyZUFkZHJlc3Mo
KSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNo
R1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlw
ZVN0cnVjdHVyZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NzAwNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOCAr
MTI1LDggQEAgdm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlv
bikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBC
bG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hO
b2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJy
YW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0xMzcsMTEgKzEzNywxMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5qdW1wKCksIG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJ
bmRleCwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQq
IHZwdHIsIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rpb25DaGVjaykKIHsKICAgICBOb2RlJiBi
cmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0g
bV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtl
bkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFw
aCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAgCkBAIC0xNTgsOCArMTU4LDEw
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBHUFJSZWcg
b3AxR1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAg
Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXBy
ZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7
CiAgICAgCiAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihjb25kaXRpb24sIG9wMUdQUiwg
b3AyR1BSKSwgdGFrZW4pOwogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQpAQCAt
MTY5LDggKzE3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUK
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSYg
bm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hO
b2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0g
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9j
a0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIC8v
IFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgog
ICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52
ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0yMTks
MTEgKzIyMSwxMSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAg
ICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGls
ZDIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6
c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hp
bGQyKCkpKSkgewotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9k
ZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRy
KTsKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5j
aE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5h
bE9iamVjdFByZWRpY3Rpb24pOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQx
KCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9i
amVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cik7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShu
b2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlz
QXJyYXlQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgfSBlbHNlCkBAIC0yNTYsMTggKzI1
OCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9q
aXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCiAKLSAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgp
ID09IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSk7CisgICAgQVNTRVJUKG1fYXJndW1l
bnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7
CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewot
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0u
dmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhl
YWQuYXJndW1lbnQoaSk7CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAg
ICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6
Zm9yUHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0
aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJs
b2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7CisgICAgbV9zdGF0ZS5yZXNldCgpOworICAgIG1f
c3RhdGUuYmVnaW5CYXNpY0Jsb2NrKCZibG9jayk7CisgICAgCisgICAgQVNTRVJUKG1fdmFyaWFi
bGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7
CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQubG9j
YWwoaSk7CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV92
YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAg
ZWxzZQpAQCAtMzM3LDYgKzM0Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFz
aWNCbG9jayYKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCiAgICAgICAg
IAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRl
cmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCisgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShtX2Nv
bXBpbGVJbmRleCk7CisgICAgICAgIAogICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgp
KQogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIH0KQEAgLTUzNyw3ICs1NDUs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2hhckNvZGVBCiAgICAgR1BSUmVn
IHN0cmluZ1JlZyA9IHN0cmluZy5ncHIoKTsKICAgICBHUFJSZWcgaW5kZXhSZWcgPSBpbmRleC5n
cHIoKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAg
aWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQ
dHIpKSk7CiAgICAgCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpAQCAt
NTY2LDcgKzU3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QK
ICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVn
ID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEo
KSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNT
dHJpbmdWUHRyKSkpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmls
dGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAko
cmV2aXNpb24gOTcwMDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShE
RkdfSklUKQogCisjaW5jbHVkZSA8ZGZnL0RGR0Fic3RyYWN0U3RhdGUuaD4KICNpbmNsdWRlIDxk
ZmcvREZHSklUQ29kZUdlbmVyYXRvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CkBAIC00MTcsNDMgKzQxOCwxNiBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gaW5mby5p
c0pTSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIGlzS25vd25BcnJheShOb2RlSW5k
ZXggb3AxKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0KG9wMSk7Ci0gICAgICAgIHN3
aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0
dXJuIGlzQXJyYXlQcmVkaWN0aW9uKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rp
b24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgY2Fz
ZSBOZXdBcnJheUJ1ZmZlcjoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBib29sIGlzS25vd25TdHJpbmcoTm9kZUluZGV4IG9wMSkKLSAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoYXQob3AxKS5vcCkgewotICAgICAgICBjYXNlIFN0ckNhdDoKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgYm9vbCBj
b21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9B
c3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKKTsKICAgICBib29s
IGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFpfREZHT3BlcmF0aW9u
X0VKSik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmLCBOb2Rl
SW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7
CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25kaXRpb24pOwotICAgIHZvaWQg
Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXgsIHZvaWQqIHZwdHIpOwotICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUm
LCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5v
ZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyLCBQcmVkaWN0aW9uQ2hl
Y2tlcik7CisgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZwdHIs
IFByZWRpY3Rpb25DaGVja2VyKTsKICAgICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7Ci0g
ICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IHZhbHVlLCB2
b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2Rl
SW5kZXggdmFsdWUsIHZvaWQqIHZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAg
IHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYpOwotICAgIHZvaWQgZW1pdE9iamVjdE9yT3Ro
ZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5v
dFRha2VuLCB2b2lkICp2cHRyKTsKKyAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5v
ZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9p
ZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CiAgICAgdm9pZCBlbWl0QnJhbmNo
KE5vZGUmKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKQEAg
LTU3NSw2ICs1NDksOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwogICAg
IHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsKICAgICAKKyAgICBBYnN0cmFjdFN0YXRl
IG1fc3RhdGU7CisgICAgCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZv
cihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVS
ZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKQEAgLTgwNyw2ICs3ODMsNyBAQCBpbmxpbmUgU3BlY3Vs
YXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgo
KS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNf
bGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgLCBtX3N0YXRlKG1faml0LmNvZGVCbG9jaygp
LCBtX2ppdC5ncmFwaCgpKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDk3MDA0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYs
MTIgQEAKICNpZm5kZWYgREZHU3RydWN0dXJlU2V0X2gKICNkZWZpbmUgREZHU3RydWN0dXJlU2V0
X2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisK
KyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMzQsNiArNDAsOCBAQCBjbGFz
cyBTdHJ1Y3R1cmU7CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOworCiBjbGFzcyBTdHJ1Y3R1cmVTZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNl
dCgpIHsgfQpAQCAtNDMsNiArNTEsMTEgQEAgcHVibGljOgogICAgICAgICBtX3N0cnVjdHVyZXMu
YXBwZW5kKHN0cnVjdHVyZSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsK
KyAgICAgICAgbV9zdHJ1Y3R1cmVzLmNsZWFyKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRk
KFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFjb250YWlucyhz
dHJ1Y3R1cmUpKTsKQEAgLTEwNCwxMCArMTE3LDUwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdHJ1
Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZXMubGFzdCgpOyB9CiAKKyAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0CisgICAgewor
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHJlc3VsdCA9IFByZWRpY3ROb25lOworICAgICAgICAKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocmVzdWx0LCBwcmVkaWN0aW9uRnJvbVN0cnVjdHVy
ZShtX3N0cnVjdHVyZXNbaV0pKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlcy5zaXplKCkgIT0gb3RoZXIu
bV9zdHJ1Y3R1cmVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlc1tpXSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVt
cChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAg
ICAgICAgIGZwcmludGYob3V0LCAiJXAiLCBtX3N0cnVjdHVyZXNbaV0pOworICAgICAgICB9Cisg
ICAgICAgIGZwcmludGYob3V0LCAiXSIpOworICAgIH0KKyNlbmRpZgorICAgIAogcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsKKyAgICAKICAgICBWZWN0
b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1Y3R1cmVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRwogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNlbmRpZiAvLyBERkdTdHJ1
Y3R1cmVTZXRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCisjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKKy8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0
aW9uKS4KKy8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tlZCBhdCBjb21w
aWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgorZW51bSBWaXJ0dWFsUmVnaXN0
ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gLTEgfTsKK0NPTVBJTEVfQVNTRVJUKHNpemVv
ZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNpemVvZihpbnQpLCBWaXJ0dWFsUmVnaXN0ZXJfaXNfMzJi
aXQpOworCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFi
bGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICAg
ICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3Rl
ciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAgICAgICAsIG1fcHJlZGljdGlv
bihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBs
b2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwp
OworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJhbmQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7CisgICAg
fQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAg
eworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9uLCBw
cmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNp
bmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2Ft
ZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKKyAgICAv
LyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhw
ZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8g
YmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAgICBQcmVk
aWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVBY2Nl
c3NEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110281</attachid>
            <date>2011-10-08 13:59:35 -0700</date>
            <delta_ts>2011-10-08 15:30:24 -0700</delta_ts>
            <desc>the patch - merge with 32_64 changes</desc>
            <filename>cfa_patch_8.diff</filename>
            <type>text/plain</type>
            <size>166296</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRlZCBhIGNvbnRyb2wgZmxvdyBhbmFseXNpcyAoQ0ZBKS4gSXQgY3VycmVu
dGx5IHByb3BhZ2F0ZXMgdHlwZQorICAgICAgICBwcm9vZnMgb25seS4gRm9yIGV4YW1wbGUsIGlm
IGFsbCBwcmVkZWNlc3NvcnMgdG8gYSBiYXNpYyBibG9jayBoYXZlCisgICAgICAgIGNoZWNrcyB0
aGF0IHZhcmlhYmxlIFggaXMgYSBKU0ZpbmFsT2JqZWN0IHdpdGggc3RydWN0dXJlIDB4YWJjZGVm
LCB0aGVuCisgICAgICAgIHRoaXMgYmFzaWMgYmxvY2sgd2lsbCBub3cga25vdyB0aGlzIGZhY3Qg
YW5kIHdpbGwga25vdyB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgIGhhdmUgdG8gZW1pdCBlaXRo
ZXIgSlNGaW5hbE9iamVjdCBjaGVja3Mgb3IgYW55IHN0cnVjdHVyZSBjaGVja3Mgc2luY2UKKyAg
ICAgICAgdGhlIHN0cnVjdHVyZSBpcyBwcmVjaXNlbHkga25vdy4gVGhlIENGQSB0YWtlcyBoZWFw
IHNpZGUtZWZmZWN0cyBpbnRvCisgICAgICAgIGFjY291bnQgKHRob3VnaCBzb21ld2hhdCBjb25z
ZXJ2YXRpdmVseSksIHNvIHRoYXQgaWYgdGhlIG9iamVjdCBwb2ludGVkCisgICAgICAgIHRvIGJ5
IHZhcmlhYmxlIFggY291bGQgaGF2ZSBwb3NzaWJseSB1bmRlcmdvbmUgYSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbgorICAgICAgICB0aGVuIHRoaXMgaXMgcmVmbGVjdGVkOiB0aGUgYW5hbHlzaXMgbWF5
IHNpbXBseSBzYXkgdGhhdCBYJ3Mgc3RydWN0dXJlCisgICAgICAgIGlzIHVua25vd24uCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gcHJvcGFnYXRlcyBhIHdlYWx0aCBvZiBvdGhlciB0eXBl
IGluZm9ybWF0aW9uIHdoaWNoIGlzCisgICAgICAgIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZC4g
Rm9yIGV4YW1wbGUsIHdlIG5vdyBrbm93IHdoZW4gYSB2YXJpYWJsZSBjYW4KKyAgICAgICAgb25s
eSBob2xkIGRvdWJsZXMuIEV2ZW4gaWYgYSB2YXJpYWJsZSBtYXkgaG9sZCBvdGhlciB0eXBlcyBh
dCBkaWZmZXJlbnQKKyAgICAgICAgcG9pbnRzIGluIGl0cyBsaXZlIHJhbmdlLCB3ZSBjYW4gc3Rp
bGwgcHJvdmUgZXhhY3RseSB3aGVuIGl0IHdpbGwgb25seQorICAgICAgICBiZSBkb3VibGUuCisg
ICAgICAgIAorICAgICAgICBUaGVyZSdzIGEgYnVuY2ggb2Ygc3R1ZmYgdGhhdCB0aGUgQ0ZBIGNv
dWxkIGRvIHRoYXQgaXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgZG8sIGxpa2UgcHJlY2lzZSBo
YW5kbGluZyBvZiBQdXRTdHJ1Y3R1cmUgKGkuZS4gc3RydWN0dXJlIHRyYW5zaXRpb25zKSwKKyAg
ICAgICAgcHJlY2lzZSBoYW5kbGluZyBvZiBDaGVja0Z1bmN0aW9uIGFuZCBDaGVja01ldGhvZCwg
ZXRjLiBTbyB0aGlzIGlzCisgICAgICAgIHZlcnkgbXVjaCBpbnRlbmRlZCB0byBiZSBhIHN0YXJ0
aW5nIHBvaW50IHJhdGhlciB0aGFuIGFuIGVuZCB1bnRvCisgICAgICAgIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaXMgYSAyJSB3aW4gb24gVjggKG1vc3RseSBkdWUgdG8gYSAxNiUg
d2luIG9uIHJpY2hhcmRzKSBhbmQgYSAxJSB3aW4KKyAgICAgICAgb24gS3Jha2VuIChtb3N0bHkg
ZHVlIHRvIGEgNiUgd2luIG9uIGltYWdpbmctZGVzYXR1cmF0ZSkuIE5ldXRyYWwgb24KKyAgICAg
ICAgU3VuU3BpZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvblRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpp
c0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
YXNpY0Jsb2NrOjpnZXRCeXRlY29kZUJlZ2luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXR1cFByZWRlY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpi
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0VGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzZXROb3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFr
ZW5CbG9ja0luZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Om9wZXJhbmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kVmFsdWVUcmFp
dHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Ok9wZXJhbmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fscyk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWxGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6
Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0T3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6cGVyZm9ybUZvcndhcmRDRkEpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6Omdsb2JhbENGQSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDogQWRkZWQuCisKIDIw
MTEtMTAtMDggIFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CiAKICAgICAg
ICAgSlNWQUxVRTMyXzY0IERGRyBKSVQgLSBHZXRMb2NhbCBzaG91bGQgcHJvZHVjZSBhIGNlbGwg
cmVzdWx0IGZvciBBcnJheSBwcmVkaWN0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDYg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9SZXBhdGNoQnVmZmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvU0g0QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxl
UHJlZGljdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oIFwKQEAgLTEwNSw2
ICsxMDQsMTAgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9MYWJlbFNjb3BlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9SZWdpc3RlcklELmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb2VyL2RmZy9ERkdCYXNpY0Jsb2NrLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCkBAIC0xMjIsNiArMTI1LDcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
IFwKQEAgLTEzNSw2ICsxMzksNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGxvY2F0aW9uU3BhY2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0
aW9uU3BhY2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDM4LDEwICsxNDM4LDYgQEAKIAkJCU5hbWU9ImJ5dGVjb2RlIgog
CQkJPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXEFjdGlvbmFi
bGVQcmVkaWN0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXENvZGVCbG9jay5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpA
QCAtMTU4NSw2ICsxNTgxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bGF0aXZlUGF0aD0iLi5cLi5cZGZnXERGR0ludHJpbnNpYy5oIgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdPU1JFbnRyeS5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9InlhcnIiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsOCArNTEsMTMgQEAKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovOyB9Owog
CQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0
QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyog
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzUxNDNGQ0QzNzAwNjhC
NzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMDE3NjE0
M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jh
c2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMDE3OTE0
M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyog
REZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAq
LzsgfTsKLQkJMEY2MzZEQTIxNDJEMjdGMDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkRB
MTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLzsgfTsKIAkJMEY3
NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJE
OUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBN
ZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1z
dHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtODA5LDggKzgxNCwxMyBAQAogCQkwQkYyOEEyODEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTZEMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE2RTE0M0ZD
RDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3
N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Js
b2NrLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT3BlcmFuZHMuaDsgcGF0aCA9IGRmZy9ERkdP
cGVyYW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzNkQ5RjE0
MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhY2tlZEludFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI4Myw2ICsyMjkzLDEyIEBACiAJCTg2RUM5REIzMTMyOERG
NDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNw
cCAqLywKKwkJCQkwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5o
ICovLAorCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
Ki8sCisJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywK
KwkJCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkw
RjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJ
CQkJMEZGRjRCQjIxNDM5NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJ
CTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJ
CQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBA
IC0yMzg0LDcgKzI0MDAsNiBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNv
ZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNjM2
REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovLAogCQkJCTBG
RDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0
RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLApAQCAtMjg3MCwxMyArMjg4
NSwxNyBAQAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNjM2REEyMTQyRDI3RjAw
MEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1
MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0
aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZH
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA0RjUwNTE0M0NFMUMyMDBCMjk1
RjUgLyogSlNHbG9iYWxUaGlzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3NDE0M0ZDRDMz
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYyMDE3NTE0M0ZDRDM3MDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3Ry
YWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzQwOCw2ICszNDI3LDcgQEAKIAkJCQk4Njg4
MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBI
ZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3
QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgJ
KHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlv
bmFibGVQcmVkaWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBY3Rpb25h
YmxlUHJlZGljdGlvbl9oCi0jZGVmaW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKLQotI2luY2x1
ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiUHJlZGljdGVk
VHlwZS5oIgotI2luY2x1ZGUgPHd0Zi9QYWNrZWRJbnRWZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLS8vIEFuIGFjdGlvbmFibGUgcHJlZGljdGlvbiBpcyBvbmUgdGhhdCBpcyBlbmZvcmNl
ZCBvbiBzdG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzCi0vLyBhbmQgYXJndW1lbnRzLCBhbmQgd2hl
biBwYXNzaW5nIGFyZ3VtZW50cyB0byBmdW5jdGlvbnMuIFRoZXNlIG11c3QgYmUgcmVjb3JkZWQK
LS8vIGluIENvZGVCbG9jay4KLQotZW51bSBBY3Rpb25hYmxlUHJlZGljdGlvbiB7Ci0gICAgTm9B
Y3Rpb25hYmxlUHJlZGljdGlvbiwKLSAgICBFbmZvcmNlSW50MzJQcmVkaWN0aW9uLAotICAgIEVu
Zm9yY2VBcnJheVByZWRpY3Rpb24sCi0gICAgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uCi19Owot
Ci1pbmxpbmUgQWN0aW9uYWJsZVByZWRpY3Rpb24gYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJl
ZGljdGVkVHlwZShQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi17Ci0gICAgaWYgKGlzSW50MzJQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3JjZUludDMyUHJlZGlj
dGlvbjsKLSAgICAKLSAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAg
ICAgIHJldHVybiBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOwotICAgIAotICAgIGlmIChpc0Jvb2xl
YW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3JjZUJvb2xlYW5Q
cmVkaWN0aW9uOwotICAgIAotICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOwotfQot
Ci1pbmxpbmUgYm9vbCB2YWx1ZU9iZXlzUHJlZGljdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEpTVmFsdWUgdmFsdWUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChwcmVkaWN0aW9uKSB7Ci0gICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9u
OgotICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotCi0gICAgY2FzZSBFbmZvcmNlQXJy
YXlQcmVkaWN0aW9uOgotICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVl
KTsKLQotICAgIGNhc2UgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOgotICAgICAgICByZXR1cm4g
dmFsdWUuaXNCb29sZWFuKCk7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci19Ci0KLWlubGluZSBjb25zdCBjaGFyKiBhY3Rpb25hYmxlUHJlZGljdGlv
blRvU3RyaW5nKEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCi17Ci0gICAgc3dpdGNo
IChwcmVkaWN0aW9uKSB7Ci0gICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgotICAgICAg
ICByZXR1cm4gIkVuZm9yY2VJbnQzMiI7Ci0gICAgICAgIAotICAgIGNhc2UgRW5mb3JjZUFycmF5
UHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNlQXJyYXkiOwotICAgICAgICAKLSAg
ICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNl
Qm9vbGVhbiI7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChwcmVkaWN0
aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOwotICAgICAgICByZXR1cm4gIk5vQWN0aW9u
YWJsZVByZWRpY3Rpb24iOwotICAgIH0KLX0KLQotdHlwZWRlZiBQYWNrZWRJbnRWZWN0b3I8QWN0
aW9uYWJsZVByZWRpY3Rpb24sIDI+IEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yOwotCi1jbGFz
cyBBY3Rpb25hYmxlUHJlZGljdGlvbnMgewotcHVibGljOgotICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9ucygpIHsgfQotCi0gICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKHVuc2lnbmVkIG51bUFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgbV9hcmd1bWVudHMu
ZW5zdXJlU2l6ZShudW1Bcmd1bWVudHMpOwotICAgICAgICBtX3ZhcmlhYmxlcy5lbnN1cmVTaXpl
KG51bVZhcmlhYmxlcyk7Ci0gICAgICAgIG1fYXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAg
IG1fdmFyaWFibGVzLmNsZWFyQWxsKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0QXJndW1l
bnQodW5zaWduZWQgYXJndW1lbnQsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQotICAgIHsK
LSAgICAgICAgbV9hcmd1bWVudHMuc2V0KGFyZ3VtZW50LCB2YWx1ZSk7Ci0gICAgfQotICAgIAot
ICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50KQotICAg
IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50ID49IG1fYXJndW1lbnRzLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOwotICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHMuZ2V0KGFyZ3VtZW50KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRWYXJpYWJsZSh1
bnNpZ25lZCB2YXJpYWJsZSwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCi0gICAgewotICAg
ICAgICBtX3ZhcmlhYmxlcy5zZXQodmFyaWFibGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAg
QWN0aW9uYWJsZVByZWRpY3Rpb24gdmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUpCi0gICAgewot
ICAgICAgICBpZiAodmFyaWFibGUgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxl
cy5nZXQodmFyaWFibGUpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudFVwcGVy
Qm91bmQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KLSAgICB1bnNpZ25l
ZCB2YXJpYWJsZVVwcGVyQm91bmQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7
IH0KLSAgICAKLSAgICB2b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgcGFja1ZlY3RvcihtX2Fy
Z3VtZW50cyk7Ci0gICAgICAgIHBhY2tWZWN0b3IobV92YXJpYWJsZXMpOwotICAgIH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGFja1ZlY3RvcihBY3Rpb25hYmxlUHJlZGljdGlv
blZlY3RvciYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbGFzdFNldEluZGV4ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaWYgKHZlY3Rvci5nZXQoaSkgIT0gTm9BY3Rpb25hYmxlUHJlZGljdGlv
bikKLSAgICAgICAgICAgICAgICBsYXN0U2V0SW5kZXggPSBpOwotICAgICAgICB9Ci0gICAgICAg
IHZlY3Rvci5yZXNpemUobGFzdFNldEluZGV4ICsgMSk7Ci0gICAgfQotICAgIAotICAgIEFjdGlv
bmFibGVQcmVkaWN0aW9uVmVjdG9yIG1fYXJndW1lbnRzOwotICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9uVmVjdG9yIG1fdmFyaWFibGVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiA5NzAxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMzIgKzQ0LDU1IEBAIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQ
cmVkaWN0ZWQKICAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKICAgICBCb3VuZHND
aGVja2VkUG9pbnRlcjxjaGFyPiBwdHIoZGVzY3JpcHRpb24sIHNpemUpOwogICAgIAorICAgIGJv
b2wgaXNUb3AgPSB0cnVlOworICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RDZWxsT3RoZXIp
CiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVyY2VsbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNU
b3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T2JqZWN0T3RoZXIpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIk90aGVyb2JqIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9
IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RGaW5hbE9iamVjdCkKICAgICAg
ICAgcHRyLnN0cmNhdCgiRmluYWwiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7
CiAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0QXJyYXkpCiAgICAgICAgIHB0ci5zdHJjYXQoIkFy
cmF5Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2
YWx1ZSAmIFByZWRpY3RTdHJpbmcpCiAgICAgICAgIHB0ci5zdHJjYXQoIlN0cmluZyIpOworICAg
IGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVk
aWN0SW50MzIpCiAgICAgICAgIHB0ci5zdHJjYXQoIkludCIpOworICAgIGVsc2UKKyAgICAgICAg
aXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0RG91YmxlKQogICAg
ICAgICBwdHIuc3RyY2F0KCJEb3VibGUiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFs
c2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEJvb2xlYW4pCiAgICAgICAgIHB0ci5z
dHJjYXQoIkJvb2wiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAg
ICAgaWYgKHZhbHVlICYgUHJlZGljdE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0KCJPdGhlciIp
OworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoaXNUb3Ap
CisgICAgICAgIHJldHVybiAiVG9wIjsKICAgICAKICAgICAqcHRyKysgPSAwOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShy
ZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0
ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdEJvb2xlYQogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJl
ZGljdE90aGVyICAgICAgICAgPSAweDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBub25lIG9mIHRo
ZSBhYm92ZS4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgICAgICAg
ID0gMHg3ZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZS4KIAordHlwZWRlZiBib29s
ICgqUHJlZGljdGlvbkNoZWNrZXIpKFByZWRpY3RlZFR5cGUpOworCiBpbmxpbmUgYm9vbCBpc0Nl
bGxQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuICEhKHZhbHVl
ICYgUHJlZGljdENlbGwpICYmICEodmFsdWUgJiB+UHJlZGljdENlbGwpOwpAQCAtMTE1LDYgKzEx
NywxMCBAQCBpbmxpbmUgYm9vbCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBj
aGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAor
Ly8gTWVyZ2UgdHdvIHByZWRpY3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBk
b2VzIGxlZnQgfCByaWdodC4gSXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVj
dGx5LCBidXQgeW91IHdvdWxkIGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2lu
Y2UgdGhlIG1lcmdpbmcgcHJvdG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0
aW1lIChhbmQgaGFzIGFscmVhZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlz
dG9yeSkuCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5
cGUgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNkZWZpbmUgRU5BQkxFX0NGQV9QUk9GSUxJTkcg
MAorCisjaWYgRU5BQkxFKENGQV9QUk9GSUxJTkcpCisjZGVmaW5lIFBST0ZJTEUoZmxhZykgU2Ft
cGxpbmdGbGFnczo6U2NvcGVkRmxhZyBmbGFnKGZsYWcpCisjZWxzZQorI2RlZmluZSBQUk9GSUxF
KGZsYWcpIGRvIHsgfSB3aGlsZSAoZmFsc2UpCisjZW5kaWYKKworQWJzdHJhY3RTdGF0ZTo6QWJz
dHJhY3RTdGF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgR3JhcGgmIGdyYXBoKQorICAgIDogbV9j
b2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAsIG1fdmFyaWFi
bGVzKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBncmFwaC5tX2xvY2FsVmFycykKKyAgICAs
IG1fYmxvY2soMCkKK3sKKyAgICBzaXplX3QgbWF4QmxvY2tTaXplID0gMDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbaV0uZ2V0KCk7CisgICAgICAgIGlmIChi
bG9jay0+ZW5kIC0gYmxvY2stPmJlZ2luID4gbWF4QmxvY2tTaXplKQorICAgICAgICAgICAgbWF4
QmxvY2tTaXplID0gYmxvY2stPmVuZCAtIGJsb2NrLT5iZWdpbjsKKyAgICB9CisgICAgbV9ub2Rl
cy5yZXNpemUobWF4QmxvY2tTaXplKTsKK30KKworQWJzdHJhY3RTdGF0ZTo6fkFic3RyYWN0U3Rh
dGUoKSB7IH0KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaWNCbG9j
ayogYmFzaWNCbG9jaykKK3sKKyAgICBQUk9GSUxFKDE3KTsKKyAgICAKKyAgICBBU1NFUlQoIW1f
YmxvY2spOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9jay0+ZW5k
IC0gYmFzaWNCbG9jay0+YmVnaW47ICsraSkKKyAgICAgICAgbV9ub2Rlc1tpXS5jbGVhcigpOwor
ICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIAorICAgIGJh
c2ljQmxvY2stPmNmYVNob3VsZFJldmlzaXQgPSBmYWxzZTsKKyAgICBiYXNpY0Jsb2NrLT5jZmFI
YXNWaXNpdGVkID0gdHJ1ZTsKKyAgICBtX2Jsb2NrID0gYmFzaWNCbG9jazsKKyAgICBtX2lzVmFs
aWQgPSB0cnVlOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdy
YXBoKQoreworICAgIFBST0ZJTEUoMTcpOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBncmFwaC5t
X2Jsb2Nrc1swXS5nZXQoKTsKKyAgICByb290LT5jZmFTaG91bGRSZXZpc2l0ID0gdHJ1ZTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJvb3QtPnZhbHVlc0F0SGVhZC5udW1iZXJPZkFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uID0gZ3JhcGhb
cm9vdC0+dmFyaWFibGVzQXRIZWFkLmFyZ3VtZW50KGkpXS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+
cHJlZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikp
CisgICAgICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RJ
bnQzMik7CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQcmVkaWN0QXJy
YXkpOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQor
ICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChQcmVkaWN0Qm9v
bGVhbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1
bWVudChpKS5tYWtlVG9wKCk7CisgICAgfQorfQorCitib29sIEFic3RyYWN0U3RhdGU6OmVuZEJh
c2ljQmxvY2soTWVyZ2VNb2RlIG1lcmdlTW9kZSkKK3sKKyAgICBQUk9GSUxFKDE4KTsKKyAgICBB
U1NFUlQobV9ibG9jayk7CisgICAgCisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrOyAv
LyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdpbmcuCisgICAgCisgICAgaWYgKCFt
X2lzVmFsaWQpIHsKKyAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobWVyZ2VN
b2RlICE9IERvbnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJl
ck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdl
U3RhdGVBdFRhaWwoYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIG1fdmFy
aWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBs
b2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkK
KyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVzQXRU
YWlsLmxvY2FsKGxvY2FsKSwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChtZXJnZU1v
ZGUgIT0gRG9udE1lcmdlIHx8ICFjaGFuZ2VkKTsKKyAgICAKKyAgICByZXNldCgpOworICAgIAor
ICAgIGlmIChtZXJnZU1vZGUgIT0gTWVyZ2VUb1N1Y2Nlc3NvcnMpCisgICAgICAgIHJldHVybiBj
aGFuZ2VkOworICAgIAorICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dyYXBoLCBibG9j
ayk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQoreworICAgIG1fYmxvY2sgPSAw
OworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1
dGUoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBQUk9GSUxFKDE5KTsKKyAgICBBU1NFUlQo
bV9ibG9jayk7CisgICAgQVNTRVJUKG1faXNWYWxpZCk7CisgICAgICAgIAorICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgIAorICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgc3dpdGNoIChu
b2RlLm9wKSB7CisgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpID0gbV92YXJpYWJsZXMub3BlcmFuZChub2RlLmxvY2Fs
KCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgU2V0TG9jYWw6
IHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gbm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RBcnJheSk7CisgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGlj
dGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0Qm9vbGVhbik7CisgICAgICAgIAorICAgICAgICBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUu
bG9jYWwoKSkgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldEFyZ3VtZW50OgorICAgICAgICAvLyBBc3NlcnQg
dGhhdCB0aGUgc3RhdGUgb2YgYXJndW1lbnRzIGhhcyBiZWVuIHNldC4KKyAgICAgICAgQVNTRVJU
KCFtX2Jsb2NrLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpLmlzQ2xlYXIoKSk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2Fz
ZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIEJpdFJTaGlmdDoKKyAgICBjYXNl
IEJpdExTaGlmdDoKKyAgICBjYXNlIEJpdFVSU2hpZnQ6CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgVUlu
dDMyVG9OdW1iZXI6CisgICAgICAgIGlmICghbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZVRvSW50MzI6Cisg
ICAgICAgIGlmICghbV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZVRvTnVtYmVyOgorICAg
ICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGROb3RTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RO
dW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91Ymxl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0RvdWJsZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9k
ZS5jaGlsZDIoKV0pICYmIG5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVOdW1iZXIo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkpIHsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJlZGljdE51bWJlcik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBB
cml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNhc2UgQXJpdGhNaW46CisgICAgY2Fz
ZSBBcml0aE1heDogeworICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlciht
X2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNh
blNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgaWYgKG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IG1fZ3JhcGhb
bm9kZS5jaGlsZDIoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdlcigpIHx8ICFub2RlLmNhblNw
ZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkp
LmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5z
ZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhBYnM6CisgICAgICAgIGlmIChtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSAmJiBub2RlLmNhblNwZWN1bGF0
ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIExvZ2lj
YWxOb3Q6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFj
aGlsZC5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAg
ZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3Ro
ZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICBjYXNlIENv
bXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKKyAgICBjYXNlIENvbXBhcmVH
cmVhdGVyRXE6CisgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAgICAgICAgTm9kZSYgbGVmdCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2Rl
LmNoaWxkMigpXTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBmaWx0ZXI7CisgICAgICAgIGlmIChO
b2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZp
bHRlciA9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1i
ZXI7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9
IFByZWRpY3RGaW5hbE9iamVjdDsKKyAgICAgICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJl
RXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkobGVmdCwgcmlnaHQpKQorICAgICAgICAg
ICAgZmlsdGVyID0gUHJlZGljdEFycmF5OworICAgICAgICBlbHNlCisgICAgICAgICAgICBmaWx0
ZXIgPSBQcmVkaWN0VG9wOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihm
aWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihmaWx0ZXIpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6Cisg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisg
ICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RT
dHJpbmcpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlWYWw6
CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnByZWRpY3Rpb24oKSA9PSBQcmVk
aWN0U3RyaW5nKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0U3RyaW5nKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVy
KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RTdHJpbmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFB1dEJ5VmFsOgorICAgIGNhc2UgUHV0QnlWYWxBbGlhczoKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5
UG9wOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkp
OworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgSnVtcDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEJyYW5jaDogeworICAgICAgICAvLyBUaGVyZSBpcyBwcm9iYWJseSBwcm9m
aXQgdG8gYmUgZm91bmQgaW4gZG9pbmcgc3BhcnNlIGNvbmRpdGlvbmFsIGNvbnN0YW50CisgICAg
ICAgIC8vIHByb3BhZ2F0aW9uLCBhbmQgdG8gdGFrZSBpdCBvbmUgc3RlcCBmdXJ0aGVyLCB3aGVy
ZSBhIHZhcmlhYmxlJ3MgdmFsdWUKKyAgICAgICAgLy8gaXMgc3BlY2lhbGl6ZWQgb24gZWFjaCBk
aXJlY3Rpb24gb2YgYSBicmFuY2guIEZvciBub3csIHdlIGRvbid0IGRvIHRoaXMuCisgICAgICAg
IE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYgKGlzQm9v
bGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSB8fCAhY2hpbGQucHJlZGljdGlvbigp
KQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xl
YW4pOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9y
T3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNo
b3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxz
ZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAo
Y2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgICAgICAgICAgCisgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNl
IFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAg
Tm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoY2hpbGQu
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsK
KyAgICAgICAgICAgIAorICAgICAgICBQcmVkaWN0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBl
OworICAgICAgICBpZiAodHlwZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3RTdHJpbmcgfCBQ
cmVkaWN0Qm9vbGVhbikpIHsKKyAgICAgICAgICAgIHR5cGUgJj0gKFByZWRpY3ROdW1iZXIgfCBQ
cmVkaWN0U3RyaW5nIHwgUHJlZGljdEJvb2xlYW4pOworICAgICAgICAgICAgdHlwZSB8PSBQcmVk
aWN0U3RyaW5nOworICAgICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBTdHJDYXQ6CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdBcnJheToKKyAgICBjYXNlIE5ld0FycmF5QnVm
ZmVyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxP
YmplY3QoKS0+YXJyYXlTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9j
b2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBDb252ZXJ0VGhpczogeworICAgICAgICBOb2Rl
JiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
IGlmIChpc09iamVjdFByZWRpY3Rpb24oc291cmNlLm1fdHlwZSkpIHsKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgdGhlIHNpbXBsZSBjYXNlLiBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgc291cmNl
IGlzIGFuCisgICAgICAgICAgICAvLyBvYmplY3QsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBkby4g
SSBkb24ndCB0aGluayB0aGlzIGNhc2Ugd2lsbAorICAgICAgICAgICAgLy8gYmUgaGl0LCBidXQg
dGhlbiBhZ2FpbiwgeW91IG5ldmVyIGtub3cuCisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNv
dXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgaWYgKGlzT3RoZXJQcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAg
ICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE90aGVyKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
LnNldChQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlv
bigpKSkgeworICAgICAgICAgICAgc291cmNlLmZpbHRlcihQcmVkaWN0T2JqZWN0TWFzayk7Cisg
ICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAg
ICAgIGRlc3RpbmF0aW9uLm1lcmdlKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICBO
b2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAg
ICAgIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQorICAgICAgICAgICAg
c291cmNlLmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOworICAgICAgICAgICAgCisgICAgICAg
IGRlc3RpbmF0aW9uLnNldChQcmVkaWN0RmluYWxPYmplY3QpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIE5ld09iamVjdDoKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3Ry
dWN0dXJlKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0Q2Fs
bGVlOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RPYmplY3RPdGhlcik7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZUNoYWluOgor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RDZWxsT3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U2NvcGVkVmFyOgorICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgUHV0U2NvcGVkVmFyOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2Rl
SW5kZXgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlJZDoK
KyAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdENlbGwpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAg
ICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNr
U3RydWN0dXJlOgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFn
YXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0
dXJlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFByb3BlcnR5
U3RvcmFnZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENl
bGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuY2xlYXIoKTsgLy8gVGhlIHJlc3VsdCBp
cyBub3QgYSBKUyB2YWx1ZS4KKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEdldEJ5T2Zmc2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tNZXRob2Q6CisgICAgICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0
YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIobV9ncmFwaC5tX21ldGhvZENoZWNrRGF0YVtub2RlLm1ldGhvZENoZWNrRGF0YUluZGV4
KCldLnN0cnVjdHVyZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENoZWNr
RnVuY3Rpb246CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RP
YmplY3RPdGhlcik7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgYmUgYWJsZSB0byBwcm9wYWdh
dGUgdGhlIGZhY3QgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGZ1bmN0aW9uIGlzLgorICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlJZDoKKyAgICBjYXNlIFB1dEJ5SWRE
aXJlY3Q6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxs
KTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEdsb2JhbFZhcjoKKyAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IENoZWNrSGFzSW5zdGFuY2U6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RDZWxsKTsKKyAgICAgICAgLy8gU2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUg
ZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQorICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgSW5zdGFuY2VPZjoKKyAgICAgICAgLy8gQWdhaW4sIHNhZGx5
LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2ZSBkb25lIEluc3RhbmNlT2YK
KyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQaGk6CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBCcmVha3BvaW50OgorICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVjdDoKKyAgICBjYXNlIFJlc29s
dmU6CisgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICBjYXNlIFJlc29sdmVCYXNlU3RyaWN0UHV0
OgorICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9k
ZUluZGV4KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEZvcmNlT1NSRXhpdDoKKyAgICAgICAgbV9p
c1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQ
aGFudG9tOgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIG1faXNWYWxp
ZDsKK30KKworaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMoTm9k
ZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gbm9kZUluZGV4IC0gbV9i
bG9jay0+YmVnaW4gKyAxOyBpLS0gPiAwOykKKyAgICAgICAgbV9ub2Rlc1tpXS5jbG9iYmVyU3Ry
dWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlcy5hcmd1bWVudChpKS5jbG9i
YmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMu
bnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICBtX3ZhcmlhYmxlcy5sb2NhbChpKS5jbG9i
YmVyU3RydWN0dXJlcygpOworfQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0
YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZh
cmlhYmxlLCBOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIGlmIChub2RlSW5kZXggPT0gTm9O
b2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIEFic3RyYWN0VmFsdWUq
IHNvdXJjZTsKKyAgICAgICAgCisgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsK
KyAgICBpZiAoIW5vZGUucmVmQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgUGhpOgorICAgIGNhc2UgU2V0QXJndW1l
bnQ6CisgICAgICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0
byB0YWlsLgorICAgICAgICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVm
aW5lcyB0aGUgdmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291
cmNlID0gJmZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAK
KyAgICBjYXNlIFNldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFi
bGUsIGFuZCBwb3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBh
bmQgYWZ0ZXIgc2V0dGluZyBpdC4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgc291cmNlID0gMDsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIAorICAgIGlmIChkZXN0aW5hdGlvbiA9PSAqc291cmNlKSB7CisgICAgICAg
IC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9m
IHRoZSB2YXJpYWJsZSwgZm9yIHRoaXMKKyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMg
aXRlcmF0aW9uLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEFi
c3RyYWN0IGV4ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1
bGF0aW9ucyByZWFjaGVkIGFib3V0CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRp
b24gb2YgdGhpcyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAg
IC8vIHRydWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBk
ZXN0aW5hdGlvbiA9ICpzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29s
IEFic3RyYWN0U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
eworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9
PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChm
cm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mTG9jYWxzKCkpOworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmFyZ3Vt
ZW50KGFyZ3VtZW50KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFp
bC5hcmd1bWVudChhcmd1bWVudCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsg
bG9jYWwgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkK
KyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVz
QXRIZWFkLmxvY2FsKGxvY2FsKSwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8t
PnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChsb2NhbCkpOworCisgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgY2hhbmdl
ZCA9IHRydWU7CisgICAgCisgICAgdG8tPmNmYVNob3VsZFJldmlzaXQgfD0gY2hhbmdlZDsKKyAg
ICAKKyAgICByZXR1cm4gY2hhbmdlZDsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
bWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQor
eworICAgIFBST0ZJTEUoMjApOworCisgICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Js
b2NrLT5lbmQgLSAxXTsKKyAgICAKKyAgICBBU1NFUlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsK
KyAgICAKKyAgICBzd2l0Y2ggKHRlcm1pbmFsLm9wKSB7CisgICAgY2FzZSBKdW1wOgorICAgICAg
ICByZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5C
bG9ja0luZGV4KCldLmdldCgpKTsKKyAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6CisgICAgICAg
IHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJs
b2NrSW5kZXgoKV0uZ2V0KCkpCisgICAgICAgICAgICB8IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBo
Lm1fYmxvY2tzW3Rlcm1pbmFsLm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAg
IAorICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2Vl
bkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNl
LCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5k
ZXgpCit7CisgICAgaWYgKGRlc3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIAorICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBz
b3VyY2VOb2RlSW5kZXggIT0gTm9Ob2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY291bGQg
ZG8gc29tZSBzcGFyc2UgY29uZGl0aW9uYWwgcHJvcGFnYXRpb24gaGVyZSEKKyAgICAKKyAgICBy
ZXR1cm4gZGVzdGluYXRpb24ubWVyZ2Uoc291cmNlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3Zv
aWQgQWJzdHJhY3RTdGF0ZTo6ZHVtcChGSUxFKiBvdXQpCit7CisgICAgYm9vbCBmaXJzdCA9IHRy
dWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX25vZGVzW2ldLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoZmlyc3QpCisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQs
ICJAJWx1OiIsIGkgKyBtX2Jsb2NrLT5iZWdpbik7CisgICAgICAgIG1fbm9kZXNbaV0uZHVtcChv
dXQpOworICAgIH0KK30KKyNlbmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBERkdBYnN0cmFjdFN0YXRlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZH
Tm9kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENvZGVCbG9jazsKKworbmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOwor
CisvLyBUaGlzIGltcGxlbWVudHMgdGhlIG5vdGlvbiBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3Ig
Zmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsCisvLyBjb250cm9sIGZsb3cgYW5hbHlzaXMg
KENGQSksIHdpdGggYSBmb2N1cyBvbiB0aGUgZWxpbWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUg
Y2hlY2tzLgorLy8gSXQgYWxzbyBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2Yg
YWJzdHJhY3QgaW50ZXJwcmV0YXRpb24gdGhhdCBzdWNoIGFuCisvLyBhbmFseXNpcyB3b3VsZCB1
c2UuIFRoaXMgY2xhc3Mgc2hvdWxkIGJlIHVzZWQgaW4gdHdvIGlkaW9tczoKKy8vCisvLyAxKSBQ
ZXJmb3JtaW5nIHRoZSBDRkEuIEluIHRoaXMgY2FzZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUg
cnVuIG92ZXIgYWxsIGJhc2ljCisvLyAgICBibG9ja3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJn
ZW5jZSBpcyByZWFjaGVkLiBDb252ZXJnZW5jZSBpcyBkZWZpbmVkIGJ5CisvLyAgICBlbmRCYXNp
Y0Jsb2NrKEFic3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2Ug
Zm9yIGFsbCBibG9ja3MuCisvLworLy8gMikgUmVtYXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9m
IGEgcHJldmlvdXNseSBleGVjdXRlZCBDRkEuIEluIHRoaXMgY2FzZSwKKy8vICAgIEFic3RyYWN0
U3RhdGUgc2hvdWxkIGJlIHJ1biBvdmVyIHdoYXRldmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRl
cmVzdGVkIGluIHVwCisvLyAgICB0byB0aGUgcG9pbnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91
J2QgbGlrZSB0byBpbnRlcnJvZ2F0ZSB0aGUga25vd24gdHlwZQorLy8gICAgb2YgYWxsIG90aGVy
IG5vZGVzLiBBdCB0aGlzIHBvaW50IGl0J3Mgc2FmZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0
YXRlIGVudGlyZWx5LAorLy8gICAgY2FsbCByZXNldCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVu
ZCBvZiB0aGUgYmFzaWMgYmxvY2sgYW5kIGNhbGwKKy8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJh
Y3RTdGF0ZTo6RG9udE1lcmdlKS4gVGhlIGxhdHRlciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UK
Ky8vICAgIGl0IHBlcmZvcm1zIHNvbWUgdXNlZnVsIGludGVncml0eSBjaGVja3MuCisvLworLy8g
QWZ0ZXIgdGhlIENGQSBpcyBydW4sIHRoZSBpbnRlci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0
aGUgaGVhZHMgYW5kIHRhaWxzIG9mIGFsbAorLy8gYmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0
aGUgaW50cmEtYmxvY2sgc3RhdGUgdG8gYmUgcmVtYXRlcmlhbGl6ZWQgYnkganVzdAorLy8gZXhl
Y3V0aW5nIHRoZSBDRkEgZm9yIHRoYXQgYmxvY2suIElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXIt
YmxvY2sgc3RhdGUgb25seSwgdGhlbgorLy8geW91IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBC
YXNpY0Jsb2NrOjptX3ZhbHVlc0F0SGVhZCBvciBtX3ZhbHVlc0F0VGFpbCBmaWVsZHMuCisvLwor
Ly8gUnVubmluZyB0aGlzIGFuYWx5c2lzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0
aGUgaW50ZXItYmxvY2sgc3RhdGUKKy8vIG1lcmdpbmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50
OgorLy8KKy8vIEFic3RyYWN0U3RhdGUgc3RhdGUoY29kZUJsb2NrLCBncmFwaCk7CisvLyBzdGF0
ZS5iZWdpbkJhc2ljQmxvY2soYmFzaWNCbG9jayk7CisvLyBib29sIGVuZFJlYWNoZWQgPSB0cnVl
OworLy8gZm9yIChOb2RlSW5kZXggaWR4ID0gYmFzaWNCbG9jay5iZWdpbjsgaWR4IDwgYmFzaWNC
bG9jay5lbmQ7ICsraWR4KSB7CisvLyAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKGlkeCkpCisvLyAg
ICAgICAgIGJyZWFrOworLy8gfQorLy8gYm9vbCByZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2Nr
KDxlaXRoZXIgTWVyZ2Ugb3IgRG9udE1lcmdlPik7CisKK2NsYXNzIEFic3RyYWN0U3RhdGUgewor
cHVibGljOgorICAgIGVudW0gTWVyZ2VNb2RlIHsKKyAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdGhl
IHN0YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCBiYXNpYyBibG9ja3MuCisgICAgICAgIERvbnRN
ZXJnZSwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0
YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrIGJlaW5nIGFu
YWx5emVkLgorICAgICAgICBNZXJnZVRvVGFpbCwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdl
IHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisg
ICAgICAgIC8vIGJsb2NrLCBhbmQgd2l0aCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29yIGJsb2Nrcy4K
KyAgICAgICAgTWVyZ2VUb1N1Y2Nlc3NvcnMKKyAgICB9OworICAgIAorICAgIEFic3RyYWN0U3Rh
dGUoQ29kZUJsb2NrKiwgR3JhcGgmKTsKKyAgICAKKyAgICB+QWJzdHJhY3RTdGF0ZSgpOworICAg
IAorICAgIEFic3RyYWN0VmFsdWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJlZ2luXTsKKyAg
ICB9CisgICAgCisgICAgLy8gQ2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRp
YWxpemUgdGhlIGFic3RyYWN0IHZhbHVlcyBvZgorICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGlu
ZGljYXRlIHdoaWNoIGJsb2NrcyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKKyAgICAvLyBleGVj
dXRpb24uCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShHcmFwaCYpOworCisgICAgLy8gU3Rh
cnQgYWJzdHJhY3RseSBleGVjdXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXpl
cyB0aGUKKyAgICAvLyBub3Rpb24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZl
IGl0IHRvIGJlIGF0IHRoZSBoZWFkCisgICAgLy8gb2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRp
bmcgdG8gdGhlIGJhc2ljIGJsb2NrJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIC8vIFRoaXMgbWV0
aG9kIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0IHRvIGZhbHNlLgorICAgIHZvaWQgYmVnaW5C
YXNpY0Jsb2NrKEJhc2ljQmxvY2sqKTsKKyAgICAKKyAgICAvLyBGaW5pc2ggYWJzdHJhY3RseSBl
eGVjdXRpbmcgYSBiYXNpYyBibG9jay4gSWYgTWVyZ2VUb1RhaWwgb3IKKyAgICAvLyBNZXJnZVRv
U3VjY2Vzc29ycyBpcyBwYXNzZWQsIHRoZW4gdGhpcyBtZXJnZXMgZXZlcnl0aGluZyB3ZSBoYXZl
CisgICAgLy8gbGVhcm5lZCBhYm91dCBob3cgdGhlIHN0YXRlIGNoYW5nZXMgZHVyaW5nIHRoaXMg
YmxvY2sncyBleGVjdXRpb24gaW50bworICAgIC8vIHRoZSBibG9jaydzIGRhdGEgc3RydWN0dXJl
cy4gVGhlcmUgYXJlIHRocmVlIHJldHVybiBtb2RlcywgZGVwZW5kaW5nCisgICAgLy8gb24gdGhl
IHZhbHVlIG9mIG1lcmdlTW9kZToKKyAgICAvLworICAgIC8vIERvbnRNZXJnZToKKyAgICAvLyAg
ICBBbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9UYWlsOgorICAg
IC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIGF0IHRoZSB0YWls
IHdhcyBjaGFuZ2VkLgorICAgIC8vICAgIFRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdCBjYWxsIG1l
cmdlVG9TdWNjZXNzb3JzKCksIGFuZCBpZiB0aGF0CisgICAgLy8gICAgcmV0dXJucyB0cnVlLCB0
aGVuIHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUgc3VjY2Vzc29yCisgICAgLy8gICAg
YmxvY2tzLiBGYWxzZSB3aWxsIGFsd2F5cyBiZSByZXR1cm5lZCBpZiB0aGUgYmxvY2sgaXMgdGVy
bWluYWwKKyAgICAvLyAgICAoaS5lLiBlbmRzIGluIFRocm93IG9yIFJldHVybiwgb3IgaGFzIGEg
Rm9yY2VPU1JFeGl0IGluc2lkZSBpdCkuCisgICAgLy8KKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29y
czoKKyAgICAvLyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0
aGUgdGFpbCB3YXMgY2hhbmdlZCwKKyAgICAvLyAgICBhbmQsIGlmIHRoZSBzdGF0ZSBhdCB0aGUg
aGVhZHMgb2Ygc3VjY2Vzc29ycyB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBBIHRydWUgcmV0dXJu
IG1lYW5zIHRoYXQgeW91IG11c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAg
ICAvLyAgICBibG9ja3MuIFRoaXMgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gdHJ1ZSBm
b3IgYmFzaWMgYmxvY2tzCisgICAgLy8gICAgdGhhdCBtdXN0IGJlIHZpc2l0ZWQgbmV4dC4KKyAg
ICBib29sIGVuZEJhc2ljQmxvY2soTWVyZ2VNb2RlKTsKKyAgICAKKyAgICAvLyBSZXNldCB0aGUg
QWJzdHJhY3RTdGF0ZS4gVGhpcyB0aHJvd3MgYXdheSBhbnkgcmVzdWx0cywgYW5kIGF0IHRoaXMg
cG9pbnQKKyAgICAvLyB5b3UgY2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFu
eSBiYXNpYyBibG9jay4KKyAgICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgLy8gQWJzdHJhY3Rs
eSBleGVjdXRlcyB0aGUgZ2l2ZW4gbm9kZS4gVGhlIG5ldyBhYnN0cmFjdCBzdGF0ZSBpcyBzdG9y
ZWQgaW50byBhbgorICAgIC8vIGFic3RyYWN0IHJlZ2lzdGVyIGZpbGUgc3RvcmVkIGluICp0aGlz
LiBMb2FkcyBvZiBsb2NhbCB2YXJpYWJsZXMgKHRoYXQgc3BhbgorICAgIC8vIGJhc2ljIGJsb2Nr
cykgaW50ZXJyb2dhdGUgdGhlIGJhc2ljIGJsb2NrJ3Mgbm90aW9uIG9mIHRoZSBzdGF0ZSBhdCB0
aGUgaGVhZC4KKyAgICAvLyBTdG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGlu
IGVuZEJhc2ljQmxvY2soKS4gVGhpcyByZXR1cm5zIHRydWUKKyAgICAvLyBpZiBleGVjdXRpb24g
c2hvdWxkIGNvbnRpbnVlIHBhc3QgdGhpcyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0
cnVlCisgICAgLy8gZm9yIGJsb2NrIHRlcm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5h
bHMgYXJlIG5vdCBSZXR1cm4gb3IgdmFyaWFudHMKKyAgICAvLyBvZiBUaHJvdy4KKyAgICBib29s
IGV4ZWN1dGUoTm9kZUluZGV4KTsKKyAgICAKKyAgICAvLyBJcyB0aGUgZXhlY3V0aW9uIHN0YXRl
IHN0aWxsIHZhbGlkPyBUaGlzIHdpbGwgYmUgZmFsc2UgaWYgZXhlY3V0ZSgpIGhhcworICAgIC8v
IHJldHVybmVkIGZhbHNlIHByZXZpb3VzbHkuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1ZhbGlkOyB9CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIGFic3RyYWN0IHN0YXRl
IHN0b3JlZCBhdCB0aGUgZmlyc3QgYmxvY2sncyB0YWlsIGludG8gdGhlIHNlY29uZAorICAgIC8v
IGJsb2NrJ3MgaGVhZC4gUmV0dXJucyB0cnVlIGlmIHRoZSBzZWNvbmQgYmxvY2sncyBzdGF0ZSBj
aGFuZ2VkLiBJZiBzbywKKyAgICAvLyB0aGF0IGJsb2NrIG11c3QgYmUgYWJzdHJhY3RseSBpbnRl
cnByZXRlZCBhZ2Fpbi4gVGhpcyBhbHNvIHNldHMKKyAgICAvLyB0by0+Y2ZhU2hvdWxkUmV2aXNp
dCB0byB0cnVlLCBpZiBpdCByZXR1cm5zIHRydWUsIG9yIGlmIHRvIGhhcyBub3QgYmVlbgorICAg
IC8vIHZpc2l0ZWQgeWV0LgorICAgIHN0YXRpYyBib29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20s
IEJhc2ljQmxvY2sqIHRvKTsKKyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUg
c3RvcmVkIGF0IHRoZSBibG9jaydzIHRhaWwgaW50byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vz
c29ycy4gUmV0dXJucyB0cnVlIGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5n
ZWQuIE5vdGUKKyAgICAvLyB0aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5k
QmFzaWNCbG9jaygpIGlmIE1lcmdlTW9kZSBpcworICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgor
ICAgIHN0YXRpYyBib29sIG1lcmdlVG9TdWNjZXNzb3JzKEdyYXBoJiwgQmFzaWNCbG9jayopOwor
CisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAg
Citwcml2YXRlOgorICAgIHZvaWQgY2xvYmJlclN0cnVjdHVyZXMoTm9kZUluZGV4KTsKKyAgICAK
KyAgICBib29sIG1lcmdlU3RhdGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFi
c3RyYWN0VmFsdWUmIGluVmFyaWFibGUsIE5vZGVJbmRleCk7CisgICAgCisgICAgc3RhdGljIGJv
b2wgbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24s
IEFic3RyYWN0VmFsdWUmIHNvdXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBO
b2RlSW5kZXggc291cmNlTm9kZUluZGV4KTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOworICAgIEdyYXBoJiBtX2dyYXBoOworICAgIAorICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVl
LCAzMj4gbV9ub2RlczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxlczsK
KyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIAorICAgIGJvb2wgbV9pc1ZhbGlkOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdBYnN0cmFjdFZhbHVlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RWYWx1ZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisj
aW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVk
ZSAiUHJlZGljdGVkVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgeworcHVibGljOgorICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUoKQorICAgICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
ICAgICA6IG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHNldC5zaXplKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAg
bV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9z
dHJ1Y3R1cmUgPSByZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgp
CisgICAgeworICAgICAgICBtX3N0cnVjdHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJl
Kj4oMSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRv
cCgpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZhbHVlOworICAgICAg
ICB2YWx1ZS5tYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBBU1NFUlQo
IWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkpOworICAgICAgICBpZiAobV9zdHJ1Y3R1
cmUpCisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
c3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25z
dCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkgfHwgIW90
aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVy
LnNpemUoKSA+IDEpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0pCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKSB7CisgICAgICAgICAgICBt
YWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5t
X3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBt
YWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBt
X3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3Vi
c2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fc3Ry
dWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBvdGhlci5j
b250YWlucyhtX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgZG9lc05vdENvbnRh
aW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCFt
X3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUgPT0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJzZXRP
Zihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlz
VG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFvdGhlci5zaXpl
KCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+
IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVy
ZSA9PSBvdGhlclswXTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNldE9mKGNvbnN0IFN0
cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG90
aGVyLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGlzVG9w
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkg
eworICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRPZigqdGhpcyk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3RoZXIu
c2l6ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1
cmUgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBv
dGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0
ZXIoUHJlZGljdGVkVHlwZSBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghKG90aGVyICYgUHJl
ZGljdENlbGwpKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fc3RydWN0dXJlKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICghKHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlKSAmIG90aGVyKSkKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNUb3AoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZSA9PSByZWludGVycHJl
dF9jYXN0PFN0cnVjdHVyZSo+KDEpOyB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuICEhbV9zdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1
cmUpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKKyAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaSk7CisgICAgfQorICAgIAorICAgIFN0
cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoMCk7CisgICAg
fQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRp
Y3RDZWxsOworICAgICAgICBpZiAoaXNDbGVhcigpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRp
Y3ROb25lOworICAgICAgICByZXR1cm4gcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1
cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAg
ICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAg
ICAgICAgICAgIGZwcmludGYob3V0LCAiVE9QIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZwcmludGYob3V0LCAiWyIpOworICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmUp
OworICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgor
ICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cit9OworCitzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7
CisgICAgQWJzdHJhY3RWYWx1ZSgpCisgICAgICAgIDogbV90eXBlKFByZWRpY3ROb25lKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3R5cGUg
PSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc0NsZWFyKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJl
ZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV90eXBlID0gUHJlZGljdFRvcDsKKyAgICAgICAg
bV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1
Y3R1cmVzKCkKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBQcmVkaWN0Q2VsbCkgeworICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV90eXBlID09IFByZWRpY3RUb3AgJiYgbV9zdHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWUgdG9wKCkKKyAgICB7CisgICAgICAgIEFic3Ry
YWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubWFrZVRvcCgpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChKU1ZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2Vs
bCgpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuYWRkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1
cmUoKSk7CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVkaWN0aW9uRnJvbVZhbHVlKHZh
bHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisg
ICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3N0cnVjdHVyZS5h
ZGQoc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIG1fdHlwZSA9IHByZWRpY3Rpb25Gcm9t
U3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KFByZWRpY3Rl
ZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmICh0eXBlICYgUHJlZGljdENlbGwpCisgICAg
ICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fdHlwZSA9IHR5cGU7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gb3RoZXIubV90eXBlICYmIG1fc3RydWN0
dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29sIG1lcmdlKGNv
bnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJl
ZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSkgfCBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIu
bV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdlKFByZWRpY3RlZFR5cGUg
dHlwZSkKKyAgICB7CisgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIHR5cGUpOworICAg
ICAgICAKKyAgICAgICAgaWYgKHR5cGUgJiBQcmVkaWN0Q2VsbCkKKyAgICAgICAgICAgIG1fc3Ry
dWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3Ry
dWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdHlwZSAmPSBvdGhlci5wcmVkaWN0
aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsK
KyAgICAgICAgaWYgKHR5cGUgPT0gUHJlZGljdFRvcCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgbV90eXBlICY9IHR5cGU7CisgICAgICAgIG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtZXJnZVByZWRpY3Rpb25zKG1fdHlwZSwgcHJlZGljdGlvbkZyb21W
YWx1ZSh2YWx1ZSkpICE9IG1fdHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX3N0cnVjdHVyZS5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7CisgICAgICAgICAgICByZXR1cm4gbV9z
dHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50Zihv
dXQsICIoJXMsICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3R5cGUpKTsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBmcHJpbnRmKG91dCwgIikiKTsKKyAgICB9CisjZW5k
aWYKKworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1cmU7CisgICAgUHJlZGlj
dGVkVHlwZSBtX3R5cGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3RyYWN0VmFsdWVfaAorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgREZHQmFzaWNC
bG9ja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFs
dWUuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAy
PiBQcmVkZWNlc3Nvckxpc3Q7CisKK3N0cnVjdCBCYXNpY0Jsb2NrIHsKKyAgICBCYXNpY0Jsb2Nr
KHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJbmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJn
dW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisgICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRl
Y29kZUJlZ2luKQorICAgICAgICAsIGJlZ2luKGJlZ2luKQorICAgICAgICAsIGVuZChOb05vZGUp
CisgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCisgICAgICAgICwgY2ZhSGFzVmlzaXRlZChm
YWxzZSkKKyAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQorICAgICAgICAsIHZhcmlh
Ymxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAgICAgLCB2YXJpYWJsZXNB
dFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFsdWVzQXRIZWFkKG51
bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVu
dHMsIG51bUxvY2FscykKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIGlubGluZSBCbG9ja0lu
ZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+KiBibG9jaykKKyAgICB7Cisg
ICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBieXRlY29kZUJlZ2luOworICAgIE5vZGVJbmRleCBiZWdpbjsKKyAgICBOb2RlSW5kZXgg
ZW5kOworICAgIGJvb2wgaXNPU1JUYXJnZXQ7CisgICAgYm9vbCBjZmFIYXNWaXNpdGVkOworICAg
IGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKKyAgICAKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVk
ZWNlc3NvcnM7CisgICAgCisgICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+
IHZhcmlhYmxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0
cz4gdmFyaWFibGVzQXRUYWlsOworICAgIAorICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZh
bHVlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJ
VCkKKworI2VuZGlmIC8vIERGR0Jhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gOTcwMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBpbXBs
ZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFy
aWFibGUuCiAgICAgTm9kZUluZGV4IGdldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewot
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRU
YWlsW29wZXJhbmRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKTsKIAogICAgICAgICBpZiAo
bm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
bm9kZUluZGV4XTsKQEAgLTE0NCwxNSArMTQ0LDE1IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJ
bmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwog
ICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50Qmxv
Y2ssIHBoaSwgb3BlcmFuZCkpOwogICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExv
Y2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50
QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUlu
ZGV4OwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRIZWFkW29w
ZXJhbmRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQsIG5vZGVJbmRleCk7CiAg
ICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KICAgICB2b2lkIHNldExv
Y2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgo
U2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7
CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkg
PSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJh
bmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9z
ZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVudC4KQEAgLTE2MSw3ICsx
NjEsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBt
X2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFk
ZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0
VGFpbFthcmd1bWVudF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1
cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KTsKIAogICAgICAg
ICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1f
Z3JhcGhbbm9kZUluZGV4XTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQuCiAgICAgICAgICAgICAg
ICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9w
ZXJhbmQpKTsKICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2Fs
LCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJbmRleCk7Ci0gICAgICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1
ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xODYsOSAr
MTg2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhp
LCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFj
ay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwog
ICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVB
Y2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRU
YWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAg
IAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNl
dEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVz
QXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2RlSW5kZXgpOwogICAgICAg
ICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CkBAIC0xOTcsNyArMTk3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsK
ICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAgICAgIG1f
Y3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dy
YXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFs
dWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0Rh
dGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gR2V0IGFuIG9wZXJhbmQsIGFu
ZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9uIGl0LgpAQCAtNzgzLDgg
Kzc4Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAg
ICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7
ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBzZXRBcmd1bWVudCA9IGFkZFRv
R3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoYXJndW1lbnQg
LSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVI
ZWFkZXJTaXplKSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0g
PSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0
SGVhZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKLSAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNl
dEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
c2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAg
IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJn
dW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTY4OSwxNiArMTY4
OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3RhY2soKQogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJl
ZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAgICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9
IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2Fy
Z3VtZW50c0F0VGFpbFt2YXJOb10gOiBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0VGFpbFt2
YXJOb107CisgICAgICAgICAgICBOb2RlSW5kZXgmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1l
bnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQo
dmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsK
IAotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9IHZhci52YWx1ZTsK
KyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXI7CiAgICAgICAg
ICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgewogICAgICAgICAgICAgICAg
IHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8obmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8gdmFyTm8gLSBtX2NvZGVC
bG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
IDogdmFyTm8pKSk7Ci0gICAgICAgICAgICAgICAgdmFyLnNldEZpcnN0VGltZSh2YWx1ZUluUHJl
ZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIHZhciA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAg
ICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spCi0gICAgICAg
ICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW3Zhck5vXS5z
ZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgcHJl
ZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZhck5v
LCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdEhlYWRbdmFyTm9dLnNldEZpcnN0
VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3Nv
ckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5Q
cmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAgcGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9j
YWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJp
YWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUKQEAgLTE3NTgsMTEgKzE3
NTgsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVkZWNlc3NvcnMoKQogICAgICAg
ICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CiAgICAgICAgIEFTU0VSVChu
b2RlLmlzVGVybWluYWwoKSk7CiAKLSAgICAgICAgaWYgKG5vZGUuaXNKdW1wKCkpCi0gICAgICAg
ICAgICBtX2dyYXBoLmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpLm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKG5v
ZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5k
ZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90
VGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOworICAg
ICAgICBpZiAobm9kZS5pc0p1bXAoKSkgeworICAgICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2Nr
SW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVj
b2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tz
W25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwor
ICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgeworICAgICAgICAgICAgbm9kZS5z
ZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAgICBub2Rl
LnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAg
ICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNz
b3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90
VGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwogICAgICAg
ICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxMSArMTg4LDExIEBAIHZvaWQgR3JhcGg6OmR1bXAo
Tm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAg
fQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNKdW1wKCkpIHsKLSAgICAgICAg
cHJpbnRmKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKSk7CisgICAgICAgIHByaW50
ZigiJXNUOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUudGFrZW5CbG9ja0luZGV4
KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgIChub2RlLmlz
QnJhbmNoKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc0Y6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIg
OiAiIiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9m
ZnNldCgpKSk7CisgICAgICAgIHByaW50ZigiJXNGOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgKHZvaWQpaGFzUHJpbnRlZDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdCYXNp
Y0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIlByZWRpY3Rpb25UcmFj
a2VyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCkBAIC00MywyOSArNDQsNiBAQCBjbGFz
cyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24gdG8g
ZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5lIGJv
b2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9
Ci0KLXR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKLQotLy8gRm9yIGV2ZXJ5IGxvY2FsIHZh
cmlhYmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4KLS8v
IFdlIHRyYWNrIHRoZSBnZXQgc28gdGhhdCB0aGVzZSBtYXkgYmUgc2hhcmVkLCBhbmQgd2UgdHJh
Y2sgdGhlIHNldCB0bwotLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUsIGFuZCB0byByZWZl
cmVuY2UgdGhlIGZpbmFsIGRlZmluaXRpb24uCi1zdHJ1Y3QgVmFyaWFibGVSZWNvcmQgewotICAg
IFZhcmlhYmxlUmVjb3JkKCkKLSAgICAgICAgOiB2YWx1ZShOb05vZGUpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICB2b2lkIHNldEZpcnN0VGltZShOb2RlSW5kZXggbm9kZUluZGV4KQotICAgIHsK
LSAgICAgICAgQVNTRVJUKHZhbHVlID09IE5vTm9kZSk7Ci0gICAgICAgIHZhbHVlID0gbm9kZUlu
ZGV4OwotICAgIH0KLQotICAgIE5vZGVJbmRleCB2YWx1ZTsKLX07Ci0KIHN0cnVjdCBNZXRob2RD
aGVja0RhdGEgewogICAgIC8vIEl0IGlzIHNhZmUgdG8gcmVmZXIgdG8gdGhlc2UgZGlyZWN0bHkg
YmVjYXVzZSB0aGV5IGFyZSBzaGFkb3dlZCBieQogICAgIC8vIHRoZSBvbGQgSklUJ3MgQ29kZUJs
b2NrJ3MgTWV0aG9kQ2FsbExpbmtJbmZvLgpAQCAtMTExLDQwICs4OSw2IEBAIHN0cnVjdCBSZXNv
bHZlR2xvYmFsRGF0YSB7CiAgICAgdW5zaWduZWQgcmVzb2x2ZUluZm9JbmRleDsKIH07CiAKLXR5
cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7Ci0KLXN0cnVjdCBC
YXNpY0Jsb2NrIHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJ
bmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCi0g
ICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQotICAgICAgICAsIGJlZ2luKGJl
Z2luKQotICAgICAgICAsIGVuZChOb05vZGUpCi0gICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2Up
Ci0gICAgICAgICwgbV9hcmd1bWVudHNBdEhlYWQobnVtQXJndW1lbnRzKQotICAgICAgICAsIG1f
bG9jYWxzQXRIZWFkKG51bUxvY2FscykKLSAgICAgICAgLCBtX2FyZ3VtZW50c0F0VGFpbChudW1B
cmd1bWVudHMpCi0gICAgICAgICwgbV9sb2NhbHNBdFRhaWwobnVtTG9jYWxzKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIEJsb2NrSW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbihPd25Q
dHI8QmFzaWNCbG9jaz4qIGJsb2NrKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgqYmxvY2spLT5i
eXRlY29kZUJlZ2luOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW47Ci0gICAg
Tm9kZUluZGV4IGJlZ2luOwotICAgIE5vZGVJbmRleCBlbmQ7Ci0gICAgYm9vbCBpc09TUlRhcmdl
dDsKLQotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKLSAgICAKLSAgICBWZWN0
b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOwotICAgIFZlY3RvcjxWYXJp
YWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOwotICAgIAotICAgIFZlY3RvcjxWYXJpYWJs
ZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7Ci0gICAgVmVjdG9yPFZhcmlhYmxlUmVjb3Jk
LCAxNj4gbV9sb2NhbHNBdFRhaWw7Ci19OwotCiAvLyAKIC8vID09PSBHcmFwaCA9PT0KIC8vCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yMzJfNjQuY3BwCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE5
Myw4ICsxMTkzLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgog
dm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVsbChO
b2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQp
CiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFu
Y2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGlmICh0YWtlbiA9PSAobV9i
bG9jayArIDEpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBAIC0xMjU0LDggKzEyNTQs
OCBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQ29tCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIE5vZGUm
IGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJs
b2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2FsbFJl
c3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC0xMzk2LDggKzEzOTYs
OCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2RlLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBOb2RlJiBicmFu
Y2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9q
aXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5
dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9j
a0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRv
IHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4g
d2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFs
bCB0aHJvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2Vu
ZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExMzEsOCArMTEzMSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVO
b24KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51
bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52
ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
YnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0g
KG1fYmxvY2sgKyAxKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMTE5Miw4ICsx
MTkyLDggQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQogdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQsIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBO
b2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2pp
dC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFr
ZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNh
bGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtMTMyMSw4ICsx
MzIxLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9pZCBK
SVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9k
ZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYg
YnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFr
ZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxv
Y2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2Vu
QmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5j
aCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRh
a2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2Fu
IGZhbGwgdGhyb3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29k
ZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzkzLDYg
KzEzOTMsMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCisgICAgQmFzaWNCbG9j
ayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9ibG9ja3Nb
bV9ibG9ja10uZ2V0KCk7CisgICAgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVtcChj
b25zdCBjaGFyKiBsYWJlbCA9IDApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDIz
ICs0MDIsMTkgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAgICBP
U1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0YShi
YXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNvZGUs
IGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBhY3Rp
b25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCksIGJh
c2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9hcmd1bWVudHNB
dEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKLSAg
ICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0QXJndW1lbnQoaSwgYWN0aW9u
YWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFi
bGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICB9CisgICAgICAgIGVudHJ5
LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay52YWx1ZXNBdEhlYWQ7CiAgICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVh
ZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2lj
QmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4
ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0VmFy
aWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25v
ZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOworICAgICAgICAv
LyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFyaWFi
bGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCisgICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBbXSku
IEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJlYWxs
eQorICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay52YXJp
YWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAg
ICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZVRvcCgpOwor
ICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNpY0Js
b2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAg
ICAgICBpZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpID09IE5vTm9k
ZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCku
bWFrZVRvcCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhY3Rpb25hYmxlUHJlZGlj
dGlvbnMucGFjaygpOwotICAgICAgICAKLSAgICAgICAgZW50cnktPm1fcHJlZGljdGlvbnMgPSBh
Y3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oYmFzaWNC
bG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZp
c2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOCBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZpbmUg
REZHTm9kZV9oCiAKLSNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlIDx3dGYv
Qm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNpbmNs
dWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9ybWF0
aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFwaHMu
CiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC02Nyw2ICs2NSw4IEBACiAj
aWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJE
RkdPcGVyYW5kcy5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2luY2x1
ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAiVmFs
dWVQcm9maWxlLmgiCkBAIC03NCwxNSArNzQsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGls
bCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQg
YXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KLWVudW0gVmlydHVh
bFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07Ci1DT01QSUxFX0FTU0VS
VChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVy
X2lzXzMyYml0KTsKLQogLy8gVHlwZSBmb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2RlIGlu
IHRoZSBncmFwaC4KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3RhdGljIGNvbnN0IE5v
ZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAordHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4
OworCitzdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZUluZGV4IGRlZmF1
bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQorfTsKKwogLy8gSW5mb3JtYXRpb24gdXNlZCB0
byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2UgaW5mb3Jt
YXRpb24sCiAvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4KIC8vIChQcmVzZW50bHkgaW1wbGVtZW50
ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCkBAIC0xMTAsNTEgKzExMSw2IEBAIHByaXZhdGU6CiAg
ICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAotY2xhc3MgVmFyaWFibGVBY2Nlc3NE
YXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewotcHVibGljOgotICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQotICAgICAgICAs
IG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZhcmlh
YmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgICAgIDogbV9sb2NhbChs
b2NhbCkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCi0gICAgewotICAgIH0K
LSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7Ci0g
ICAgfQotICAgIAotICAgIGludCBvcGVyYW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3QoUHJl
ZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGlj
dGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAotICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmluZCgp
LT5tX3ByZWRpY3Rpb247Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICAvLyBUaGlzIGlzIHNs
aWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdp
dGgKLSAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhl
IHNhbWUgcHJlZGljdGlvbi4gQnV0Ci0gICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmll
cyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKLSAgICAvLyB1c2FnZSBm
b3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgotCi0gICAgVmlydHVh
bFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Ci19Owot
CiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJldmlv
dXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC01NjQsNiArNTIw
LDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFi
bGVBY2Nlc3NEYXRhKCkKICAgICB7CisgICAgICAgIEFTU0VSVChoYXNWYXJpYWJsZUFjY2Vzc0Rh
dGEoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNzRGF0
YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwogICAgIH0KICAgICAKQEAgLTc1NSwxMyArNzEyLDM3IEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG9wICYgTm9kZUlzVGVybWluYWw7CiAgICAg
fQogCi0gICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldCgpCisgICAgdW5zaWduZWQgdGFr
ZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlz
QnJhbmNoKCkgfHwgaXNKdW1wKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm87CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNldCgpCisgICAgdW5zaWduZWQgbm90
VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8yOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNldFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIG1fb3BJbmZv
ID0gYmxvY2tJbmRleDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXROb3RUYWtlbkJsb2NrSW5k
ZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNo
KCkpOworICAgICAgICBtX29wSW5mbzIgPSBibG9ja0luZGV4OworICAgIH0KKyAgICAKKyAgICBC
bG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9CisgICAg
CisgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgoKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGlzQnJhbmNoKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk3MDE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDM0ICs3NywzOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBleGVj
LCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0IGNv
dXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlzIHRp
bWUuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rp
b25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVByZWRp
Y3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50KGkpOwotICAg
ICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGkgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMoKSkgeworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBl
bnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7
CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50Zigi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0
ZWQgJXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsK
KyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlbHUg
d2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICIsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGVudHJ5
LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKHN0ZG91dCk7CisgICAg
ICAgICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9i
YWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb24pKSB7CisgICAgICAgIEpT
VmFsdWUgdmFsdWU7CisgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgICAgICB2YWx1ZSA9
IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUg
PSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOworICAgICAgICAKKyAgICAgICAgaWYgKCFl
bnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkudmFsaWRhdGUodmFsdWUp
KSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50ZigiICAg
IE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4iLCBp
LCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRpY3Rp
b25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFp
bGVkIGJlY2F1c2UgYXJndW1lbnQgJWx1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwgdmFs
dWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5h
cmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4i
KTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAgICAg
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlh
YmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24gcHJl
ZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOwotICAgICAgICBpZiAo
cHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2JhbERh
dGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsKKyAgICBm
b3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubnVt
YmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVjdGVk
VmFsdWVzLmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0uanNW
YWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmlu
dGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVkICVz
LlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCksIGFj
dGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICAgICAgcHJp
bnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICVsdSBpcyAlcywgZXhwZWN0ZWQg
IiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24o
KSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCkuZHVt
cChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkVudHJ5LmgJKHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBACiAjaWZuZGVm
IERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSAiQWN0aW9u
YWJsZVByZWRpY3Rpb24uaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVk
ZSAiREZHT3BlcmFuZHMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDcgKzQwLDcgQEAg
bmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB1bnNpZ25lZCBtX2J5
dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsKLSAgICBBY3Rp
b25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZh
bHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogfTsKIAogaW5saW5lIHVuc2lnbmVkIGdldE9TUkVudHJ5
RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR09wZXJhbmRzX2gKKyNkZWZpbmUgREZHT3BlcmFuZHNfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxwZXIg
ZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRz
LgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9w
ZXJhbmQgPCAwOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPcGVyYW5kVmFsdWVU
cmFpdHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRz
IHsKKyAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBUKCk7IH0KK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0czxU
PiA+CitjbGFzcyBPcGVyYW5kcyB7CitwdWJsaWM6CisgICAgT3BlcmFuZHMoKSB7IH0KKyAgICAK
KyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVtTG9j
YWxzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1
ZSgpLCBudW1Bcmd1bWVudHMpOworICAgICAgICBtX2xvY2Fscy5maWxsKFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCksIG51bUxvY2Fscyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJPZkFy
Z3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHNpemVf
dCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzLnNpemUoKTsgfQorICAg
IAorICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fYXJndW1lbnRzW2lkeF07
IH0KKyAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2Fy
Z3VtZW50c1tpZHhdOyB9CisgICAgCisgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1cm4g
bV9sb2NhbHNbaWR4XTsgfQorICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KKyAgICAKKyAgICB2b2lkIHNldExvY2FsKHNpemVfdCBp
ZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fscy5z
aXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgpOwor
ICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOworICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZh
bHVlKCkpOworICAgICAgICBhcmd1bWVudChpZHgpID0gdmFsdWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgc2V0TG9jYWxGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoaWR4ID49IG1fbG9jYWxzLnNpemUoKSB8fCBtX2xvY2Fsc1tpZHhd
ID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBzZXRMb2NhbChpZHgsIHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7CisgICAg
ICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFy
Z3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2Fs
bEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1bWVu
dF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tvcGVyYW5k
XTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29uc3Qg
eyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRoaXMp
LT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZChpbnQgb3Bl
cmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJndW1l
bnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2Fy
Z3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CisgICAg
ICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0TG9jYWwob3BlcmFuZCwgdmFsdWUp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2Fy
Z3VtZW50c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fsc1tp
XSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBW
ZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFQsIDE2PiBtX2xvY2FsczsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGR1bXBPcGVyYW5kcyhPcGVyYW5kczxUPiYg
b3BlcmFuZHMsIEZJTEUqIG91dCkKK3sKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFy
Z3VtZW50IDwgb3BlcmFuZHMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAg
ICAgICBpZiAoYXJndW1lbnQpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAg
ICAgb3BlcmFuZHMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAob3V0KTsKKyAgICB9CisgICAgZnBy
aW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgb3Bl
cmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAobG9jYWwpCisg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMubG9jYWwobG9j
YWwpLmR1bXAob3V0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKwor
I2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT3BlcmFuZHNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJldmlz
aW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQp
CiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIK
ICNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXkuaD4K
QEAgLTU1LDQ1ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXhwb2ludCgpCiAgICAgewog
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICBtX2dyYXBoLmR1
bXAobV9jb2RlQmxvY2spOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwogI2Vu
ZGlmCiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAg
IG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBVcCBoZXJlIHdlIHN0YXJ0
IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0aGF0IHRvIGJlCi0gICAg
ICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5v
ZGVGbGFnc0JhY2t3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFs
c2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0ZvcndhcmQoKTsKLSAgICAg
ICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAgICAg
ICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAotICAg
ICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJvdGgg
dG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAgICAvLyBERlMtc29ydGVkIGNvZGUu
Ci0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKLSAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlob29k
IHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAgICAgICAgICAgLy8gY2F1c2Ugc2xvd25l
c3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBmbG93
LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0IGRl
dGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAgICAgICAgICAgIC8vIGZvdW5kIGEgc291
bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgotICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9u
c0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgICAgIAorICAg
ICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpOworICAgICAgICBwcm9wYWdhdGVQcmVkaWN0
aW9ucygpOwogICAgICAgICBmaXh1cCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0RFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTAsNiArNzcsMTMgQEAgcHVibGljOgogCiAgICAg
ICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOwogCisjaWYgRU5BQkxFKERGR19ERUJVR19Q
Uk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1YWwg
cmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxv
Y2spOworI2VuZGlmCisKKyAgICAgICAgZ2xvYmFsQ0ZBKCk7CisKICNpZiBFTkFCTEUoREZHX0RF
QlVHX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb246XG4i
KTsKICAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKQEAgLTI3NCw2ICsyNDgsMjUg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1fZ3JhcGhb
bV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVBcml0aE5v
ZGVGbGFncygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFVwIGhl
cmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0IHRoYXQg
dG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgIHByb3Bh
Z2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFuZ2Vk
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzRm9yd2Fy
ZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBib29s
IHNldFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAg
QVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKQEAgLTYwOCw3ICs2
MDEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BB
R0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiJXMgIiwgcHJlZGljdGlvblRvU3RyaW5n
KG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOworICAgICAgICBwcmludGYo
IiVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGlj
dGlvbigpKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFuZ2Vk
OwpAQCAtNjMyLDYgKzYyNSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlTm9k
ZVByZWRpY3Rpb25zKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9ucygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3Ro
IHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2Rl
LgorICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7CisgICAgICAgICAg
ICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9v
ZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNhdXNlIHNsb3du
ZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxv
dy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBk
ZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBmb3VuZCBhIHNv
dW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlv
bnNCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAgICBp
ZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKQEAgLTE0MjQsNiAr
MTQ0MCw4MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2FsbGVl
UmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogICAgIH0KICAgICAKKyAgICB2b2lkIHBlcmZv
cm1CbG9ja0NGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSwgQmxvY2tJbmRleCBibG9ja0luZGV4KQor
ICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2Nr
SW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQorICAg
ICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgcHJpbnRmKCIgICBCbG9jayAjJXUgKGJjIyV1KTpcbiIsIGJsb2NrSW5kZXgs
IGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAgICBzdGF0ZS5iZWdpbkJhc2lj
QmxvY2soYmxvY2spOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
KyAgICAgICAgcHJpbnRmKCIgICAgICBoZWFkIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFu
ZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOwor
I2VuZGlmCisgICAgICAgIGZvciAoTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5iZWdpbjsg
bm9kZUluZGV4IDwgYmxvY2stPmVuZDsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlmICgh
bV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAg
ICAgICAgcHJpbnRmKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2Rl
SW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHN0YXRlLmR1bXAoc3Rkb3V0KTsK
KyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFzdGF0
ZS5leGVjdXRlKG5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50
ZigiICAgICAgdGFpbCByZWdzOiAiKTsKKyAgICAgICAgc3RhdGUuZHVtcChzdGRvdXQpOworICAg
ICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9jaGFuZ2VkIHw9IHN0YXRlLmVu
ZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpOworI2lmIEVOQUJM
RShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAgICB0
YWlsIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFpbCwg
c3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAorICAg
IHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoQWJzdHJhY3RTdGF0ZSYgc3RhdGUpCisgICAgeworI2lm
IEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCJD
RkEgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9jaykKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwgYmxvY2spOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGdsb2JhbENGQSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdf
UFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAg
ICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNlZCBm
b3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCisgICAgICAgIC8vIG9mIGJs
b2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRvcG9s
b2dpY2FsKSwgYW5kCisgICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0IHdh
bGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0CisgICAgICAg
IC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZpY2ll
bmN5IHByb3BlcnRpZXMgb2YgYm90aAorICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQgZm9y
d2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQKKyAg
ICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5nbGVz
cyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0CisgICAgICAgIC8vIHRoZSBoZWFkIG9mIHRo
ZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExpa2Ug
YSBmb3J3YXJkCisgICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMgYSBo
aWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jaworICAgICAgICAvLyBhZnRl
ciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwgY2F1
c2UgdGhpcyBhbmFseXNpcyB0bworICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRoZSBh
bW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KKyAgICAg
ICAgCisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7CisgICAgICAg
IAorICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fY29kZUJsb2NrLCBtX2dyYXBoKTsKKyAg
ICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAg
ICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoc3RhdGUpOworICAgICAgICB9IHdoaWxlIChtX2No
YW5nZWQpOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBKU0dsb2JhbERh
dGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBAQCBK
SVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51
bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5v
ZGUmIG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIgcHJlZGlj
dGlvbkNoZWNrKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIo
KSk7CkBAIC0zNTksOCArMzU5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RFcXVhbGkKICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwogICAg
IEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKICAgICAKLSAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGlj
dGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAg
ICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CiAgICAgbV9qaXQubW92
ZShJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CkBAIC0zODAsOSArMzgyLDkgQEAgYm9vbCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAogICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxk
MSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHko
bm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNv
bXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmpl
Y3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAgICAgZWxzZSBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkK
LSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rpb24pOwogICAgIGVsc2Ug
aWYgKCFhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiAhYXQobm9k
ZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgIG5vblNwZWN1bGF0
aXZlTm9uUGVlcGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICBl
bHNlIGlmICgoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgfHwgYXQo
bm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpICYmICFOb2RlOjpzaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsK
QEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQo
Tm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQqIHZwdHIpCit2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUlu
ZGV4IG5vZGVJbmRleCwgdm9pZCogdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsK
ICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQUlRlbXBv
cmFyeSByZXN1bHRUYWcodGhpcyk7CkBAIC00NTEsMTQgKzQ1MywxNiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRhZy5ncHIoKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0g
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwog
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTnVsbCA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkpOwogCiAgICAgaXNOdWxs
LmxpbmsoJm1faml0KTsKIApAQCAtNDc0LDExICs0NzgsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGFkZCBmYXN0IHBh
dGhzIGZvciBrbm93biBib29sZWFucy4KIAogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91
bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Zp
bmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChu
b2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNG
aW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9i
amVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9k
ZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90
aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkgewpAQCAtNTQ0LDIwICs1NDgsMjIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogI2VuZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5k
ZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9j
a0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRT
cGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJ
bmRleCk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7CiAgICAgR1BS
UmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKICAgICAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
LSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNo
ZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgYWRkQnJhbmNoKG1f
aml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTnVsbCA9IG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxs
VGFnKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVk
VGFnKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFn
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkpOwogCiAgICAgaXNOdWxs
LmxpbmsoJm1faml0KTsKIApAQCAtNTY5LDE1ICs1NzUsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNo
KE5vZGUmIG5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNv
ZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gRklYTUU6IEFkZCBmYXN0IGNh
c2VzIGZvciBrbm93biBCb29sZWFuIQogCiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3Vs
ZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRPYmplY3RPck90
aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNo
KG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Zp
bmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9vbCBpbnZlcnQgPSBmYWxz
ZTsKQEAgLTY0Myw2ICs2NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAg
ICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9jaygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChu
b2RlLmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3Ig
dGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUuCiAgICAgICAgIGlmIChw
cmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7CkBAIC02ODMsNyArNjkwLDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgbV9ncHJzLnJldGFpbihy
ZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKICAgICAgICAgbV9n
cHJzLnJldGFpbih0YWcuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpTKTsKIAot
ICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCA9IGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlv
bikgPyBEYXRhRm9ybWF0SlNCb29sZWFuIDogRGF0YUZvcm1hdEpTOworICAgICAgICBEYXRhRm9y
bWF0IGZvcm1hdDsKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24odmFsdWUubV90eXBlKSkK
KyAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7CisgICAgICAgIGVsc2UgaWYg
KGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKKyAgICAgICAgICAgIGZvcm1hdCA9
IERhdGFGb3JtYXRKU0Jvb2xlYW47CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvcm1hdCA9
IERhdGFGb3JtYXRKUzsKKwogICAgICAgICBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rl
cl0uaW5pdEpTVmFsdWUobV9jb21waWxlSW5kZXgsIG5vZGUucmVmQ291bnQoKSwgdGFnLmdwcigp
LCByZXN1bHQuZ3ByKCksIGZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTcxMiw3
ICs3MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgaWYg
KCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6
OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7IC8vIEZJWE1FOiBBZGQgQm9vbGVhblByZWRpY3Rp
b24gaGFuZGxpbmcKQEAgLTEyOTgsNyArMTMxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJy
YXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92
ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0
byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIGlmICghaXNL
bm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKQEAgLTEzMzMsNyArMTM0OCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJh
c2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92
ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3Rl
ZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAg
ICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKIAog
ICAgICAgICBiYXNlLnVzZSgpOwpAQCAtMTQyMCw3ICsxNDM1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9w
ZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CiAKLSAgICAgICAgaWYg
KCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE0NjYsNyArMTQ4MSw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxl
bmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlz
S25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTUxMyw3ICsxNTI4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNh
c2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwogICAg
ICAgICBpZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgICAgIGFkZEJyYW5jaCht
X2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwpA
QCAtMTUyNCw4ICsxNTM5LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpKSB8fCBhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1
bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICAg
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEJs
b2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9u
ID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAKQEAgLTE3MzYsNyArMTc1
MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
aWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkpKSB7
CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhp
c1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJ
VENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAgICAg
CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNzc4LDkgKzE3OTQsMTAgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0
aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxp
ZXZlCiAgICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRl
IG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAo
c3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKLSAgICAgICAgZWxzZSB7CisgICAg
ICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKSB7
CisgICAgICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOworICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQ
UiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAg
c2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9m
ZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwogICAg
ICAgICB9CkBAIC0xOTE2LDcgKzE5MzMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKQEAgLTE5MzUsNyArMTk1Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hp
bGQxKCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0
aCgpKSwgcmVzdWx0R1BSKTsKQEAgLTE5NTIsNiArMTk2OSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBDaGVja1N0cnVjdHVy
ZTogeworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0
dXJlLmlzU3Vic2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpIHsKKyAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
ICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgp
KTsKQEAgLTIwNzgsNyArMjEwMCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOworICAg
ICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5kb2Vz
Tm90Q29udGFpbkFueU90aGVyVGhhbihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1
cmUpKSk7CiAgICAgICAgIGlmIChtZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNv
ZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKICAgICAgICAg
ICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRh
LnByb3RvdHlwZS0+c3RydWN0dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtZXRob2RDaGVja0RhdGEucHJvdG90eXBlU3RydWN0dXJlKSkpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZp
c2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw3ICs0NTAsNyBAQCBKSVRDb21waWxlcjo6
SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAot
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZv
aWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9k
ZSYgbm9kZSwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIgcHJlZGljdGlvbkNoZWNrKQog
ewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC00NjAs
OCArNDYwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAg
ICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikp
KTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlv
bkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNl
ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJH
UFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKQEAgLTUw
MSw5ICs1MDMsOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAK
ICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBEYXRh
Rm9ybWF0SlNCb29sZWFuKTsKICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYm
IE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChu
b2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVj
dEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlz
RmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVF
cSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9k
ZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0
eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlv
bik7CiAgICAgZWxzZQogICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xlQ29tcGFyZShu
b2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgCkBAIC01MjksNyArNTMxLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lk
ICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9u
Q2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAg
ICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNTM3LDcgKzUzOSw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1f
aml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
cmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwogICAgIApAQCAtNTQ1LDcgKzU0OCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RPck90aGUKICAgICAKICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwog
ICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRl
ZmluZWQpLCByZXN1bHRHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7
CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVU
cnVlKSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC01NjYs
MTEgKzU3MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUu
Y2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFs
T2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNo
aWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKSB7CkBAIC02MzAsMTkgKzYzNCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdChOCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0
bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChO
b2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2Vu
LCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RU
YWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykKIHsKICAgICBKU1Zh
bHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1f
aml0KTsKICAgICAKICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
Mih+VGFnQml0VW5kZWZpbmVkKSwgdmFsdWVHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkp
KSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1
ZU51bGwpKSkpOwogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgCkBAIC02NTQsOCArNjYwLDgg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgIEpTVmFsdWVP
cGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQUlJlZyB2YWx1ZUdQUiA9
IHZhbHVlLmdwcigpOwogICAgIAotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAoaXNLbm93bkJv
b2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKQEAgLTY3Myw5ICs2
NzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAg
IAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAg
ICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFr
ZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBlbWl0
T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0
Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0g
ZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkp
IHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4s
IG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgZW1p
dE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7CiAgICAgICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAg
IGJvb2wgaW52ZXJ0ID0gZmFsc2U7CkBAIC03MDgsOSArNzE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsK
ICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSksIHRha2VuKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7CisKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIHZhbHVl
LnVzZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNzQ4LDE1ICs3NTIsMTYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2FzZSBHZXRMb2NhbDogewog
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0
YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gYmxvY2so
KS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKIAogICAgICAgICAvLyBJZiB3
ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0
byBjb21waWxlLgotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgeworICAg
ICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1ZS5pc0NsZWFyKCkpIHsK
ICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHByZWRpY3Rpb24pKSB7Cisg
ICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKSB7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSwgcmVz
dWx0LmdwcigpKTsKIAogICAgICAgICAgICAgLy8gTGlrZSBpbnRlZ2VyUmVzdWx0LCBidXQgZG9u
J3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2RlcywKQEAgLTc3NSw5ICs3
ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJK
Uyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAgIGlmIChpc0FycmF5UHJl
ZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24odmFsdWUu
bV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7Ci0gICAgICAg
IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgIGVsc2Ug
aWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1h
dCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZvcm1h
dCA9IERhdGFGb3JtYXRKUzsKQEAgLTgyMCw3ICs4MjUsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNl
bGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNl
bGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3Rv
cmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAg
ICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAtMTQwOCw3ICsxNDE0LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8v
IENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFp
bmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdl
IGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRo
ZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIApAQCAtMTQ0
Miw3ICsxNDQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
CiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVy
dHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAg
ICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdl
IGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGls
ZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0xNTI0LDcg
KzE1MzAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIAogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQy
KCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVu
Z3RoR1BSKTsKIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAg
ICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VH
UFIpOwpAQCAtMTU2Nyw3ICsxNTczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAg
ICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7
CkBAIC0xNjEwLDcgKzE2MTYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUu
dGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQog
ICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CkBAIC0xNjIxLDggKzE2MjcsOCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc1N0cmljdEludDMyKG5v
ZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBt
X2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNv
ZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOworICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCk7CisgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAg
ICAgICAgIApAQCAtMTc5NSw5ICsxODAxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFsdWVHUFIgPSB0aGlzVmFs
dWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIGlmICghaXNPdGhlclByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAg
bV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5l
ZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxvY2soKS0+Z2xvYmFsT2Jq
ZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGNlbGxSZXN1bHQoc2NyYXRjaEdQUiwg
bV9jb21waWxlSW5kZXgpOwpAQCAtMTgwNyw3ICsxODE1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0
KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6
OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAg
ICAgICAgICAgIGlmICghaXNPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1Zh
bHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQo
dGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTE4NDcsOSArMTg1NiwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBv
YmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUKICAgICAgICAgLy8gdGhhdCBpdCdz
IGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3
aXNlIHdlCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgot
ICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3Qo
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmpl
Y3RWUHRyKSkpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNGaW5h
bE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIpKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0
Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CiAgICAgICAgIH0KQEAgLTE5NzgsNyArMTk4OCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BS
UmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGls
ZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkp
LCByZXN1bHRHUFIpOwpAQCAtMTk5Nyw3ICsyMDA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAg
ICAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNT
dHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwpAQCAtMjAx
Miw2ICsyMDIyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAg
ICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNl
dE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAg
ICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CkBAIC0yMTMx
LDcgKzIxNDYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0
Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRy
dXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKKyAgICAgICAgaWYgKCFt
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpCisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOwogICAg
ICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZSAhPSBtX2ppdC5jb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgpKSB7CiAgICAgICAgICAgICBtX2ppdC5t
b3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUt
PnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9k
Q2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiA5NzAxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkg
Y29uc3QKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5jaChO
b2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91Ymxl
Q29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNo
Tm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwot
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxv
Y2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAg
ICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
U3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CkBAIC0xMzcs
MTEgKzEzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3ViCiAg
ICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFu
Y2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIsIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rpb25DaGVj
aykKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBC
bG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hO
b2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJy
YW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7CiAgICAg
CkBAIC0xNTgsOCArMTU4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamUKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgIEdQUlJlZyBvcDJHUFIg
PSBvcDIuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGlj
dGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihj
b25kaXRpb24sIG9wMUdQUiwgb3AyR1BSKSwgdGFrZW4pOwogICAgIGlmIChub3RUYWtlbiAhPSAo
bV9ibG9jayArIDEpKQpAQCAtMTY5LDggKzE3MSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamUKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZUlu
dGVnZXJCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29t
cGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJyYW5j
aE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2pp
dC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0
ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCku
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9m
ZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5k
ZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2Nr
SW5kZXgoKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8g
dGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3
aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxs
IHRocm91Z2guCkBAIC0yMTksMTEgKzIyMSwxMSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlUGVlcEhvbGVCcmFuCiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAg
ICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBD
b21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5jaGls
ZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xl
T2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVx
dWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAgICAgICAgICAgdXNlKG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICB9
IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFy
cmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpIHsKLSAgICAgICAgICAg
IGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVzZShub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgfSBl
bHNlCkBAIC0yNTYsMTggKzI1OCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJh
c2ljQmxvY2smCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlmCiAKLSAgICBBU1NFUlQo
bV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSk7Cisg
ICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50
cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9h
cmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBi
bG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CiAgICAgICAgIGlmIChub2RlSW5kZXgg
PT0gTm9Ob2RlKQogICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1
ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9hcmd1bWVudHNb
aV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5kZXgpLnZhcmlhYmxlQWNj
ZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwogICAgIH0KICAgICAKLSAgICBBU1NFUlQobV92YXJp
YWJsZXMuc2l6ZSgpID09IGJsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUoKSk7CisgICAgbV9zdGF0
ZS5yZXNldCgpOworICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKCZibG9jayk7CisgICAgCisg
ICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay52YXJpYWJsZXNBdEhlYWQubnVt
YmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2subV9sb2Nh
bHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay52
YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CiAgICAgICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2Rl
KQogICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0
ZXJGaWxlKTsKICAgICAgICAgZWxzZQpAQCAtMzM3LDYgKzM0Miw5IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIp
OwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgYWJzdHJh
Y3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5vZGUuCisgICAgICAgIG1f
c3RhdGUuZXhlY3V0ZShtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIAogICAgICAgICBpZiAobm9k
ZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAg
IH0KQEAgLTUzNyw3ICs1NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2hh
ckNvZGVBCiAgICAgR1BSUmVnIHN0cmluZ1JlZyA9IHN0cmluZy5ncHIoKTsKICAgICBHUFJSZWcg
aW5kZXhSZWcgPSBpbmRleC5ncHIoKTsKICAgICAKLSAgICBpZiAoIWlzS25vd25TdHJpbmcobm9k
ZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RyaW5nUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNv
biBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQg
YXJlIHRvbyBsYXJnZQpAQCAtNTY2LDcgKzU3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAg
R1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAgICBpZiAoIWlzS25vd25T
dHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogCiAgICAgLy8gdW5zaWduZWQgY29tcGFy
aXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRo
YXQgYXJlIHRvbyBsYXJnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSA8ZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuaD4KICNpbmNsdWRlIDxkZmcvREZHSklUQ29kZUdlbmVyYXRvci5oPgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MTcsNDMgKzQxOCwxNiBAQCBwcml2YXRlOgogICAg
ICAgICByZXR1cm4gaW5mby5pc0pTSW50ZWdlcigpOwogICAgIH0KICAgICAKLSAgICBib29sIGlz
S25vd25BcnJheShOb2RlSW5kZXggb3AxKQotICAgIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9IGF0
KG9wMSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAgICBjYXNlIEdldExvY2Fs
OgotICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0aW9uKG5vZGUudmFyaWFibGVBY2Nl
c3NEYXRhKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBOZXdB
cnJheToKLSAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzS25vd25TdHJpbmcoTm9kZUlu
ZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQob3AxKS5vcCkgewotICAgICAgICBj
YXNlIFN0ckNhdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCiAgICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25h
bENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiwgWl9ERkdPcGVyYXRp
b25fRUpKKTsKICAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChOb2RlJiwgTWFjcm9Bc3Nl
bWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRp
b24sIFpfREZHT3BlcmF0aW9uX0VKSik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVJbnRlZ2Vy
QnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2go
Tm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3VibGVDb25k
aXRpb24pOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIpOwotICAgIHZvaWQgY29tcGlsZU9i
amVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVQZWVwSG9s
ZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2
cHRyLCBQcmVkaWN0aW9uQ2hlY2tlcik7CisgICAgdm9pZCBjb21waWxlT2JqZWN0RXF1YWxpdHko
Tm9kZSYsIHZvaWQqIHZwdHIsIFByZWRpY3Rpb25DaGVja2VyKTsKICAgICB2b2lkIGNvbXBpbGVW
YWx1ZUFkZChOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qo
Tm9kZUluZGV4IHZhbHVlLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChOb2RlSW5kZXggdmFsdWUsIHZvaWQqIHZwdHIsIGJvb2wgbmVlZFNwZWN1
bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSYpOwotICAgIHZv
aWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRh
a2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKTsKKyAgICB2b2lkIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJ
bmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjayk7CiAg
ICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUmKTsKICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRDaGFy
Q29kZUF0KE5vZGUmKTsKQEAgLTU3NSw2ICs1NDksOCBAQCBwcml2YXRlOgogICAgIGludCBtX2xh
c3RTZXRPcGVyYW5kOwogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRleEZvck9TUjsKICAgICAK
KyAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CisgICAgCiAgICAgVmFsdWVSZWNvdmVyeSBjb21w
dXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwogCiAgICAgVmFsdWVSZWNv
dmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkKQEAgLTgwNyw2ICs3ODMs
NyBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklUKEpJCiAgICAgLCBtX3Zh
cmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1fbGFzdFNldE9wZXJhbmQo
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1fYnl0ZWNvZGVJbmRleEZv
ck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkpCisgICAgLCBtX3N0YXRl
KG1faml0LmNvZGVCbG9jaygpLCBtX2ppdC5ncmFwaCgpKQogewogfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHJldmlzaW9uIDk3MDE0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5kZWYgREZHU3RydWN0dXJlU2V0X2gKICNkZWZp
bmUgREZHU3RydWN0dXJlU2V0X2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisjaW5jbHVkZSA8
c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
MzQsNiArNDAsOCBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiAKIG5hbWVzcGFjZSBERkcgewogCitjbGFz
cyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworCiBjbGFzcyBTdHJ1Y3R1cmVTZXQgewogcHVibGlj
OgogICAgIFN0cnVjdHVyZVNldCgpIHsgfQpAQCAtNDMsNiArNTEsMTEgQEAgcHVibGljOgogICAg
ICAgICBtX3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CiAgICAgfQogICAgIAorICAgIHZv
aWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmNsZWFyKCk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIHsKICAgICAgICAg
QVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpKTsKQEAgLTEwNCwxMCArMTE3LDUwIEBAIHB1Ymxp
YzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVy
ZXMubGFzdCgpOyB9CiAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJl
cygpIGNvbnN0CisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHJlc3VsdCA9IFByZWRpY3RO
b25lOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVy
ZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtZXJnZVByZWRpY3Rpb24ocmVzdWx0LCBwcmVk
aWN0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZXNbaV0pKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBT
dHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJl
cy5zaXplKCkgIT0gb3RoZXIubV9zdHJ1Y3R1cmVzLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1
Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKG1f
c3RydWN0dXJlc1tpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5E
RUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBmcHJpbnRmKG91
dCwgIlsiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0cnVjdHVyZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAgICAgICAgIGZwcmludGYo
b3V0LCAiLCAiKTsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXAiLCBtX3N0cnVjdHVyZXNb
aV0pOworICAgICAgICB9CisgICAgICAgIGZwcmludGYob3V0LCAiXSIpOworICAgIH0KKyNlbmRp
ZgorICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTsKKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1Y3R1cmVzOwogfTsKIAog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisK
ICNlbmRpZiAvLyBERkdTdHJ1Y3R1cmVTZXRfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCisjZGVmaW5lIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBu
dW1iZXIgKHNwaWxsIGxvY2F0aW9uKS4KKy8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5
cGUtY2hlY2tlZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgor
ZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gLTEgfTsKK0NP
TVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNpemVvZihpbnQpLCBWaXJ0
dWFsUmVnaXN0ZXJfaXNfMzJiaXQpOworCitjbGFzcyBWYXJpYWJsZUFjY2Vzc0RhdGE6IHB1Ymxp
YyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6CisgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKCkKKyAgICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rl
cj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAgICAgICwgbV9wcmVkaWN0
aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xvY2FsKGxvY2FsKQorICAg
ICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9sb2NhbCA9
PSBmaW5kKCktPm1fbG9jYWwpOworICAgICAgICByZXR1cm4gbV9sb2NhbDsKKyAgICB9CisgICAg
CisgICAgaW50IG9wZXJhbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4obG9jYWwoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGljdChQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKGZpbmQo
KS0+bV9wcmVkaWN0aW9uLCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVk
VHlwZSBwcmVkaWN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBmaW5kKCktPm1fcHJlZGlj
dGlvbjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgc2xpZ2h0bHkgc3Bh
Y2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQgd2l0aAorICAgIC8v
IHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0aGUgc2FtZSBwcmVk
aWN0aW9uLiBCdXQKKyAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlmaWVzIHRoZSBjb2Rl
LCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVzYWdlIGZvciB2YXJpYWJs
ZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBWaXJ0dWFsUmVnaXN0ZXIg
bV9sb2NhbDsKKyAgICBQcmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110283</attachid>
            <date>2011-10-08 15:30:24 -0700</date>
            <delta_ts>2011-10-09 13:40:49 -0700</delta_ts>
            <desc>the patch - more perf improvements</desc>
            <filename>cfa_patch_9.diff</filename>
            <type>text/plain</type>
            <size>168334</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRlZCBhIGNvbnRyb2wgZmxvdyBhbmFseXNpcyAoQ0ZBKS4gSXQgY3VycmVu
dGx5IHByb3BhZ2F0ZXMgdHlwZQorICAgICAgICBwcm9vZnMgb25seS4gRm9yIGV4YW1wbGUsIGlm
IGFsbCBwcmVkZWNlc3NvcnMgdG8gYSBiYXNpYyBibG9jayBoYXZlCisgICAgICAgIGNoZWNrcyB0
aGF0IHZhcmlhYmxlIFggaXMgYSBKU0ZpbmFsT2JqZWN0IHdpdGggc3RydWN0dXJlIDB4YWJjZGVm
LCB0aGVuCisgICAgICAgIHRoaXMgYmFzaWMgYmxvY2sgd2lsbCBub3cga25vdyB0aGlzIGZhY3Qg
YW5kIHdpbGwga25vdyB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgIGhhdmUgdG8gZW1pdCBlaXRo
ZXIgSlNGaW5hbE9iamVjdCBjaGVja3Mgb3IgYW55IHN0cnVjdHVyZSBjaGVja3Mgc2luY2UKKyAg
ICAgICAgdGhlIHN0cnVjdHVyZSBpcyBwcmVjaXNlbHkga25vdy4gVGhlIENGQSB0YWtlcyBoZWFw
IHNpZGUtZWZmZWN0cyBpbnRvCisgICAgICAgIGFjY291bnQgKHRob3VnaCBzb21ld2hhdCBjb25z
ZXJ2YXRpdmVseSksIHNvIHRoYXQgaWYgdGhlIG9iamVjdCBwb2ludGVkCisgICAgICAgIHRvIGJ5
IHZhcmlhYmxlIFggY291bGQgaGF2ZSBwb3NzaWJseSB1bmRlcmdvbmUgYSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbgorICAgICAgICB0aGVuIHRoaXMgaXMgcmVmbGVjdGVkOiB0aGUgYW5hbHlzaXMgbWF5
IHNpbXBseSBzYXkgdGhhdCBYJ3Mgc3RydWN0dXJlCisgICAgICAgIGlzIHVua25vd24uCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gcHJvcGFnYXRlcyBhIHdlYWx0aCBvZiBvdGhlciB0eXBl
IGluZm9ybWF0aW9uIHdoaWNoIGlzCisgICAgICAgIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZC4g
Rm9yIGV4YW1wbGUsIHdlIG5vdyBrbm93IHdoZW4gYSB2YXJpYWJsZSBjYW4KKyAgICAgICAgb25s
eSBob2xkIGRvdWJsZXMuIEV2ZW4gaWYgYSB2YXJpYWJsZSBtYXkgaG9sZCBvdGhlciB0eXBlcyBh
dCBkaWZmZXJlbnQKKyAgICAgICAgcG9pbnRzIGluIGl0cyBsaXZlIHJhbmdlLCB3ZSBjYW4gc3Rp
bGwgcHJvdmUgZXhhY3RseSB3aGVuIGl0IHdpbGwgb25seQorICAgICAgICBiZSBkb3VibGUuCisg
ICAgICAgIAorICAgICAgICBUaGVyZSdzIGEgYnVuY2ggb2Ygc3R1ZmYgdGhhdCB0aGUgQ0ZBIGNv
dWxkIGRvIHRoYXQgaXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgZG8sIGxpa2UgcHJlY2lzZSBo
YW5kbGluZyBvZiBQdXRTdHJ1Y3R1cmUgKGkuZS4gc3RydWN0dXJlIHRyYW5zaXRpb25zKSwKKyAg
ICAgICAgcHJlY2lzZSBoYW5kbGluZyBvZiBDaGVja0Z1bmN0aW9uIGFuZCBDaGVja01ldGhvZCwg
ZXRjLiBTbyB0aGlzIGlzCisgICAgICAgIHZlcnkgbXVjaCBpbnRlbmRlZCB0byBiZSBhIHN0YXJ0
aW5nIHBvaW50IHJhdGhlciB0aGFuIGFuIGVuZCB1bnRvCisgICAgICAgIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaXMgYSAyJSB3aW4gb24gVjggKG1vc3RseSBkdWUgdG8gYSAxNiUg
d2luIG9uIHJpY2hhcmRzKSBhbmQgYSAxJSB3aW4KKyAgICAgICAgb24gS3Jha2VuIChtb3N0bHkg
ZHVlIHRvIGEgNiUgd2luIG9uIGltYWdpbmctZGVzYXR1cmF0ZSkuIE5ldXRyYWwgb24KKyAgICAg
ICAgU3VuU3BpZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvblRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpp
c0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
YXNpY0Jsb2NrOjpnZXRCeXRlY29kZUJlZ2luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXR1cFByZWRlY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpi
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0VGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzZXROb3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFr
ZW5CbG9ja0luZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Om9wZXJhbmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kVmFsdWVUcmFp
dHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Ok9wZXJhbmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fscyk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWxGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6
Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0T3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6cGVyZm9ybUZvcndhcmRDRkEpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6Omdsb2JhbENGQSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDogQWRkZWQuCisKIDIw
MTEtMTAtMDggIFl1cWlhbmcgWGlhbiAgPHl1cWlhbmcueGlhbkBpbnRlbC5jb20+CiAKICAgICAg
ICAgSlNWQUxVRTMyXzY0IERGRyBKSVQgLSBHZXRMb2NhbCBzaG91bGQgcHJvZHVjZSBhIGNlbGwg
cmVzdWx0IGZvciBBcnJheSBwcmVkaWN0aW9ucwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTgxLDcgKzgxLDYg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9SZXBhdGNoQnVmZmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvU0g0QXNzZW1ibGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmggXAotCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxl
UHJlZGljdGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oIFwKQEAgLTEwNSw2
ICsxMDQsMTAgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9MYWJlbFNjb3BlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9SZWdpc3RlcklELmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RTdGF0ZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFs
dWUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb2VyL2RmZy9ERkdCYXNpY0Jsb2NrLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcCBcCkBAIC0xMjIsNiArMTI1LDcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdK
SVRDb21waWxlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3Bw
IFwKQEAgLTEzNSw2ICsxMzksNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9B
bGxvY2F0aW9uU3BhY2UuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9BbGxvY2F0
aW9uU3BhY2UuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQ2FyZFNldC5oIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDM4LDEwICsxNDM4LDYgQEAKIAkJCU5hbWU9ImJ5dGVjb2RlIgog
CQkJPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXEFjdGlvbmFi
bGVQcmVkaWN0aW9uLmgiCi0JCQkJPgotCQkJPC9GaWxlPgotCQkJPEZpbGUKIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXGJ5dGVjb2RlXENvZGVCbG9jay5jcHAiCiAJCQkJPgogCQkJPC9GaWxlPgpA
QCAtMTU4NSw2ICsxNTgxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJl
bGF0aXZlUGF0aD0iLi5cLi5cZGZnXERGR0ludHJpbnNpYy5oIgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAg
ICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdPU1JFbnRyeS5oIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAgICAgICAg
ICAgICAgICAgPC9GaWx0ZXI+CiAJCTxGaWx0ZXIKIAkJCU5hbWU9InlhcnIiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsOCArNTEsMTMgQEAKIAkJMEJGMjhBMjkxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwICovOyB9Owog
CQkwRjE2RDcyNjE0MkMzOUMwMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTZENzI0MTQyQzM5QTIwMENGNzg0
QSAvKiBCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyog
V2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VI
YXJ2ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE3MjE0
M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzUxNDNGQ0QzNzAwNjhC
NzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMDE3NjE0
M0ZDRDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jh
c2ljQmxvY2suaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNkYxNDNGQ0Qy
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMDE3ODE0M0ZDRDQ0MDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjYyMDE3OTE0
M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyog
REZHQWJzdHJhY3RTdGF0ZS5jcHAgKi87IH07CiAJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGNjM2RDlGMTQyRDI3RDIwMEIyRTY2QSAvKiBQYWNrZWRJbnRWZWN0b3IuaCAq
LzsgfTsKLQkJMEY2MzZEQTIxNDJEMjdGMDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkRB
MTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLzsgfTsKIAkJMEY3
NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVC
MzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKIAkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJE
OUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjJD
MTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBN
ZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1z
dHJpY3QtYWxpYXNpbmciOyB9OyB9OwpAQCAtODA5LDggKzgxNCwxMyBAQAogCQkwQkYyOEEyODEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYxNkQ3MjQxNDJDMzlBMjAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCaXRWZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNjIwMTZEMTQzRkNE
MkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IERGR0Fic3RyYWN0U3RhdGUuY3BwOyBwYXRoID0gZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE2RTE0M0ZD
RDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdBYnN0cmFjdFN0YXRlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RTdGF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE2RjE0M0ZDRDJGMDA2OEI3
N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdBYnN0cmFjdFZhbHVlLmg7IHBhdGggPSBkZmcvREZHQWJzdHJhY3RWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE3MDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdCYXNpY0Js
b2NrLmg7IHBhdGggPSBkZmcvREZHQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT3BlcmFuZHMuaDsgcGF0aCA9IGRmZy9ERkdP
cGVyYW5kcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE3MjE0M0ZDRDJG
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oOyBwYXRoID0gZGZnL0RGR1Zhcmlh
YmxlQWNjZXNzRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjYzNkQ5RjE0
MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBhY2tlZEludFZlY3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aW9uYWJsZVByZWRpY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMjI4Myw2ICsyMjkzLDEyIEBACiAJCTg2RUM5REIzMTMyOERG
NDQwMDJCMkFENyAvKiBkZmcgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTBGNjIwMTZEMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNw
cCAqLywKKwkJCQkwRjYyMDE2RTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5o
ICovLAorCQkJCTBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmgg
Ki8sCisJCQkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLywK
KwkJCQkwRjYyMDE3MTE0M0ZDRDJGMDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCAqLywKKwkJCQkw
RjYyMDE3MjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggKi8sCiAJ
CQkJMEZGRjRCQjIxNDM5NTVFNjAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oICovLAogCQkJ
CTg2RUM5REI0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgKi8sCiAJ
CQkJODZFQzlEQjUxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmggKi8sCkBA
IC0yMzg0LDcgKzI0MDAsNiBAQAogCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNv
ZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTBGNjM2
REExMTQyRDI3RUQwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oICovLAogCQkJCTBG
RDgyRThFMTQyMDdBNTEwMDE3OUM5NCAvKiBWYWx1ZVByb2ZpbGUuY3BwICovLAogCQkJCTBGRDgy
RTg0MTQxRjNGREEwMDE3OUM5NCAvKiBQcmVkaWN0ZWRUeXBlLmNwcCAqLywKIAkJCQkwRkQ4MkU0
RjE0MURBRUExMDAxNzlDOTQgLyogUHJlZGljdGVkVHlwZS5oICovLApAQCAtMjg3MCwxMyArMjg4
NSwxNyBAQAogCQkJCUE3MDQ1NkIwMTQyN0ZCOTEwMDM3REE2OCAvKiBBbGxvY2F0aW9uU3BhY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5k
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM2REEwMTQyRDI3RDcwMEIyRTY2QSAv
KiBQYWNrZWRJbnRWZWN0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGNjM2REEyMTQyRDI3RjAw
MEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc1
MjFFMTMxNDI5MTY5QTAwM0M4RDBDIC8qIENhcmRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDUyQUFFMTQzMDM1QTAwMDI2REM5RiAvKiBVbmlvbkZpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2ODgwRjFFMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdKSVRDb21waWxlcklubGluZU1ldGhvZHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQzNkFCMjcwMDE5NkM0OCAvKiBIZXVyaXN0
aWNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGNEJCNDE0Mzk1NUU5MDA2NTVCQzAgLyogREZH
U3RydWN0dXJlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA0RjUwNTE0M0NFMUMyMDBCMjk1
RjUgLyogSlNHbG9iYWxUaGlzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3NDE0M0ZDRDMz
MDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjYyMDE3NTE0M0ZDRDM3MDA2OEI3N0MgLyogREZHT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNjIwMTc2MTQzRkNEM0IwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRjYyMDE3NzE0M0ZDRDNGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3Ry
YWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMzQwOCw2ICszNDI3LDcgQEAKIAkJCQk4Njg4
MEY0NDE0MzUzMUE4MDBCMDhENDIgLyogREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNCMjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJ
VDY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTIyOEVFMTQzNkFCMkMwMDE5NkM0OCAvKiBI
ZXVyaXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNjIwMTc5MTQzRkNENDgwMDY4Qjc3
QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlvbmFibGVQcmVkaWN0aW9uLmgJ
KHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0FjdGlv
bmFibGVQcmVkaWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTYxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBBY3Rpb25h
YmxlUHJlZGljdGlvbl9oCi0jZGVmaW5lIEFjdGlvbmFibGVQcmVkaWN0aW9uX2gKLQotI2luY2x1
ZGUgIkpTQXJyYXkuaCIKLSNpbmNsdWRlICJKU1ZhbHVlLmgiCi0jaW5jbHVkZSAiUHJlZGljdGVk
VHlwZS5oIgotI2luY2x1ZGUgPHd0Zi9QYWNrZWRJbnRWZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLS8vIEFuIGFjdGlvbmFibGUgcHJlZGljdGlvbiBpcyBvbmUgdGhhdCBpcyBlbmZvcmNl
ZCBvbiBzdG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzCi0vLyBhbmQgYXJndW1lbnRzLCBhbmQgd2hl
biBwYXNzaW5nIGFyZ3VtZW50cyB0byBmdW5jdGlvbnMuIFRoZXNlIG11c3QgYmUgcmVjb3JkZWQK
LS8vIGluIENvZGVCbG9jay4KLQotZW51bSBBY3Rpb25hYmxlUHJlZGljdGlvbiB7Ci0gICAgTm9B
Y3Rpb25hYmxlUHJlZGljdGlvbiwKLSAgICBFbmZvcmNlSW50MzJQcmVkaWN0aW9uLAotICAgIEVu
Zm9yY2VBcnJheVByZWRpY3Rpb24sCi0gICAgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uCi19Owot
Ci1pbmxpbmUgQWN0aW9uYWJsZVByZWRpY3Rpb24gYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJl
ZGljdGVkVHlwZShQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi17Ci0gICAgaWYgKGlzSW50MzJQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3JjZUludDMyUHJlZGlj
dGlvbjsKLSAgICAKLSAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCi0gICAg
ICAgIHJldHVybiBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uOwotICAgIAotICAgIGlmIChpc0Jvb2xl
YW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3JjZUJvb2xlYW5Q
cmVkaWN0aW9uOwotICAgIAotICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOwotfQot
Ci1pbmxpbmUgYm9vbCB2YWx1ZU9iZXlzUHJlZGljdGlvbihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEpTVmFsdWUgdmFsdWUsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCi17Ci0g
ICAgc3dpdGNoIChwcmVkaWN0aW9uKSB7Ci0gICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9u
OgotICAgICAgICByZXR1cm4gdmFsdWUuaXNJbnQzMigpOwotCi0gICAgY2FzZSBFbmZvcmNlQXJy
YXlQcmVkaWN0aW9uOgotICAgICAgICByZXR1cm4gaXNKU0FycmF5KGdsb2JhbERhdGEsIHZhbHVl
KTsKLQotICAgIGNhc2UgRW5mb3JjZUJvb2xlYW5QcmVkaWN0aW9uOgotICAgICAgICByZXR1cm4g
dmFsdWUuaXNCb29sZWFuKCk7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VS
VChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci19Ci0KLWlubGluZSBjb25zdCBjaGFyKiBhY3Rpb25hYmxlUHJlZGljdGlv
blRvU3RyaW5nKEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24pCi17Ci0gICAgc3dpdGNo
IChwcmVkaWN0aW9uKSB7Ci0gICAgY2FzZSBFbmZvcmNlSW50MzJQcmVkaWN0aW9uOgotICAgICAg
ICByZXR1cm4gIkVuZm9yY2VJbnQzMiI7Ci0gICAgICAgIAotICAgIGNhc2UgRW5mb3JjZUFycmF5
UHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNlQXJyYXkiOwotICAgICAgICAKLSAg
ICBjYXNlIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNl
Qm9vbGVhbiI7Ci0gICAgICAgIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVChwcmVkaWN0
aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pOwotICAgICAgICByZXR1cm4gIk5vQWN0aW9u
YWJsZVByZWRpY3Rpb24iOwotICAgIH0KLX0KLQotdHlwZWRlZiBQYWNrZWRJbnRWZWN0b3I8QWN0
aW9uYWJsZVByZWRpY3Rpb24sIDI+IEFjdGlvbmFibGVQcmVkaWN0aW9uVmVjdG9yOwotCi1jbGFz
cyBBY3Rpb25hYmxlUHJlZGljdGlvbnMgewotcHVibGljOgotICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9ucygpIHsgfQotCi0gICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zKHVuc2lnbmVkIG51bUFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtVmFyaWFibGVzKQotICAgIHsKLSAgICAgICAgbV9hcmd1bWVudHMu
ZW5zdXJlU2l6ZShudW1Bcmd1bWVudHMpOwotICAgICAgICBtX3ZhcmlhYmxlcy5lbnN1cmVTaXpl
KG51bVZhcmlhYmxlcyk7Ci0gICAgICAgIG1fYXJndW1lbnRzLmNsZWFyQWxsKCk7Ci0gICAgICAg
IG1fdmFyaWFibGVzLmNsZWFyQWxsKCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0QXJndW1l
bnQodW5zaWduZWQgYXJndW1lbnQsIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQotICAgIHsK
LSAgICAgICAgbV9hcmd1bWVudHMuc2V0KGFyZ3VtZW50LCB2YWx1ZSk7Ci0gICAgfQotICAgIAot
ICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIGFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50KQotICAg
IHsKLSAgICAgICAgaWYgKGFyZ3VtZW50ID49IG1fYXJndW1lbnRzLnNpemUoKSkKLSAgICAgICAg
ICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9uOwotICAgICAgICByZXR1cm4gbV9hcmd1
bWVudHMuZ2V0KGFyZ3VtZW50KTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCBzZXRWYXJpYWJsZSh1
bnNpZ25lZCB2YXJpYWJsZSwgQWN0aW9uYWJsZVByZWRpY3Rpb24gdmFsdWUpCi0gICAgewotICAg
ICAgICBtX3ZhcmlhYmxlcy5zZXQodmFyaWFibGUsIHZhbHVlKTsKLSAgICB9Ci0gICAgCi0gICAg
QWN0aW9uYWJsZVByZWRpY3Rpb24gdmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUpCi0gICAgewot
ICAgICAgICBpZiAodmFyaWFibGUgPj0gbV92YXJpYWJsZXMuc2l6ZSgpKQotICAgICAgICAgICAg
cmV0dXJuIE5vQWN0aW9uYWJsZVByZWRpY3Rpb247Ci0gICAgICAgIHJldHVybiBtX3ZhcmlhYmxl
cy5nZXQodmFyaWFibGUpOwotICAgIH0KLSAgICAKLSAgICB1bnNpZ25lZCBhcmd1bWVudFVwcGVy
Qm91bmQoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KLSAgICB1bnNpZ25l
ZCB2YXJpYWJsZVVwcGVyQm91bmQoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7
IH0KLSAgICAKLSAgICB2b2lkIHBhY2soKQotICAgIHsKLSAgICAgICAgcGFja1ZlY3RvcihtX2Fy
Z3VtZW50cyk7Ci0gICAgICAgIHBhY2tWZWN0b3IobV92YXJpYWJsZXMpOwotICAgIH0KLSAgICAK
LXByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQgcGFja1ZlY3RvcihBY3Rpb25hYmxlUHJlZGljdGlv
blZlY3RvciYgdmVjdG9yKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbGFzdFNldEluZGV4ID0g
MDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHZlY3Rvci5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgaWYgKHZlY3Rvci5nZXQoaSkgIT0gTm9BY3Rpb25hYmxlUHJlZGljdGlv
bikKLSAgICAgICAgICAgICAgICBsYXN0U2V0SW5kZXggPSBpOwotICAgICAgICB9Ci0gICAgICAg
IHZlY3Rvci5yZXNpemUobGFzdFNldEluZGV4ICsgMSk7Ci0gICAgfQotICAgIAotICAgIEFjdGlv
bmFibGVQcmVkaWN0aW9uVmVjdG9yIG1fYXJndW1lbnRzOwotICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9uVmVjdG9yIG1fdmFyaWFibGVzOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRp
ZiAvLyBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCShyZXZpc2lvbiA5NzAxNCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMzIgKzQ0LDU1IEBAIGNvbnN0IGNoYXIqIHByZWRpY3Rpb25Ub1N0cmluZyhQ
cmVkaWN0ZWQKICAgICBzdGF0aWMgY2hhciBkZXNjcmlwdGlvbltzaXplXTsKICAgICBCb3VuZHND
aGVja2VkUG9pbnRlcjxjaGFyPiBwdHIoZGVzY3JpcHRpb24sIHNpemUpOwogICAgIAorICAgIGJv
b2wgaXNUb3AgPSB0cnVlOworICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RDZWxsT3RoZXIp
CiAgICAgICAgIHB0ci5zdHJjYXQoIk90aGVyY2VsbCIpOworICAgIGVsc2UKKyAgICAgICAgaXNU
b3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0T2JqZWN0T3RoZXIpCiAg
ICAgICAgIHB0ci5zdHJjYXQoIk90aGVyb2JqIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9
IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RGaW5hbE9iamVjdCkKICAgICAg
ICAgcHRyLnN0cmNhdCgiRmluYWwiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7
CiAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0QXJyYXkpCiAgICAgICAgIHB0ci5zdHJjYXQoIkFy
cmF5Iik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2
YWx1ZSAmIFByZWRpY3RTdHJpbmcpCiAgICAgICAgIHB0ci5zdHJjYXQoIlN0cmluZyIpOworICAg
IGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVk
aWN0SW50MzIpCiAgICAgICAgIHB0ci5zdHJjYXQoIkludCIpOworICAgIGVsc2UKKyAgICAgICAg
aXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0RG91YmxlKQogICAg
ICAgICBwdHIuc3RyY2F0KCJEb3VibGUiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFs
c2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEJvb2xlYW4pCiAgICAgICAgIHB0ci5z
dHJjYXQoIkJvb2wiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAg
ICAgaWYgKHZhbHVlICYgUHJlZGljdE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0KCJPdGhlciIp
OworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAoaXNUb3Ap
CisgICAgICAgIHJldHVybiAiVG9wIjsKICAgICAKICAgICAqcHRyKysgPSAwOwogICAgIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCShy
ZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0
ZWRUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDggQEAgc3RhdGljIGNvbnN0IFBy
ZWRpY3RlZFR5cGUgUHJlZGljdEJvb2xlYQogc3RhdGljIGNvbnN0IFByZWRpY3RlZFR5cGUgUHJl
ZGljdE90aGVyICAgICAgICAgPSAweDQwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBub25lIG9mIHRo
ZSBhYm92ZS4KIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RUb3AgICAgICAgICAg
ID0gMHg3ZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZS4KIAordHlwZWRlZiBib29s
ICgqUHJlZGljdGlvbkNoZWNrZXIpKFByZWRpY3RlZFR5cGUpOworCiBpbmxpbmUgYm9vbCBpc0Nl
bGxQcmVkaWN0aW9uKFByZWRpY3RlZFR5cGUgdmFsdWUpCiB7CiAgICAgcmV0dXJuICEhKHZhbHVl
ICYgUHJlZGljdENlbGwpICYmICEodmFsdWUgJiB+UHJlZGljdENlbGwpOwpAQCAtMTE1LDYgKzEx
NywxMCBAQCBpbmxpbmUgYm9vbCBpc090aGVyUHJlZGljdGlvbihQcmVkaWN0ZWRUCiBjb25zdCBj
aGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkVHlwZSB2YWx1ZSk7CiAjZW5kaWYKIAor
Ly8gTWVyZ2UgdHdvIHByZWRpY3Rpb25zLiBOb3RlIHRoYXQgY3VycmVudGx5IHRoaXMganVzdCBk
b2VzIGxlZnQgfCByaWdodC4gSXQgbWF5CisvLyBzZWVtIHRlbXB0aW5nIHRvIGRvIHNvIGRpcmVj
dGx5LCBidXQgeW91IHdvdWxkIGJlIGRvaW5nIHNvIGF0IHlvdXIgb3duIHBlcmlsLAorLy8gc2lu
Y2UgdGhlIG1lcmdpbmcgcHJvdG9jb2wgUHJlZGljdGVkVHlwZSBtYXkgY2hhbmdlIGF0IGFueSB0
aW1lIChhbmQgaGFzIGFscmVhZHkKKy8vIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBpdHMgaGlz
dG9yeSkuCiBpbmxpbmUgUHJlZGljdGVkVHlwZSBtZXJnZVByZWRpY3Rpb25zKFByZWRpY3RlZFR5
cGUgbGVmdCwgUHJlZGljdGVkVHlwZSByaWdodCkKIHsKICAgICByZXR1cm4gbGVmdCB8IHJpZ2h0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKyNkZWZpbmUgRU5BQkxFX0NGQV9QUk9GSUxJTkcg
MAorCisjaWYgRU5BQkxFKENGQV9QUk9GSUxJTkcpCisjZGVmaW5lIFBST0ZJTEUoZmxhZykgU2Ft
cGxpbmdGbGFnczo6U2NvcGVkRmxhZyBzY29wZWRGbGFnKGZsYWcpCisjZWxzZQorI2RlZmluZSBQ
Uk9GSUxFKGZsYWcpIGRvIHsgfSB3aGlsZSAoZmFsc2UpCisjZW5kaWYKKworQWJzdHJhY3RTdGF0
ZTo6QWJzdHJhY3RTdGF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaywgR3JhcGgmIGdyYXBoKQorICAg
IDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICwgbV9ncmFwaChncmFwaCkKKyAgICAsIG1f
dmFyaWFibGVzKGNvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzLCBncmFwaC5tX2xvY2FsVmFycykK
KyAgICAsIG1fYmxvY2soMCkKK3sKKyAgICBzaXplX3QgbWF4QmxvY2tTaXplID0gMDsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGdyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGgubV9ibG9ja3NbaV0uZ2V0KCk7CisgICAgICAg
IGlmIChibG9jay0+ZW5kIC0gYmxvY2stPmJlZ2luID4gbWF4QmxvY2tTaXplKQorICAgICAgICAg
ICAgbWF4QmxvY2tTaXplID0gYmxvY2stPmVuZCAtIGJsb2NrLT5iZWdpbjsKKyAgICB9CisgICAg
bV9ub2Rlcy5yZXNpemUobWF4QmxvY2tTaXplKTsKK30KKworQWJzdHJhY3RTdGF0ZTo6fkFic3Ry
YWN0U3RhdGUoKSB7IH0KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFz
aWNCbG9jayogYmFzaWNCbG9jaykKK3sKKyAgICBQUk9GSUxFKDE3KTsKKyAgICAKKyAgICBBU1NF
UlQoIW1fYmxvY2spOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYmFzaWNCbG9j
ay0+ZW5kIC0gYmFzaWNCbG9jay0+YmVnaW47ICsraSkKKyAgICAgICAgbV9ub2Rlc1tpXS5jbGVh
cigpOworICAgIG1fdmFyaWFibGVzID0gYmFzaWNCbG9jay0+dmFsdWVzQXRIZWFkOworICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFy
aWFibGVzLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBpZiAobV92YXJpYWJs
ZXMuYXJndW1lbnQoaSkubV9zdHJ1Y3R1cmUuaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKSkgeworICAg
ICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVzLm51
bWJlck9mTG9jYWxzKCk7ICsraSkgeworICAgICAgICBpZiAobV92YXJpYWJsZXMubG9jYWwoaSku
bV9zdHJ1Y3R1cmUuaXNOZWl0aGVyQ2xlYXJOb3JUb3AoKSkgeworICAgICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBiYXNpY0Jsb2NrLT5jZmFTaG91bGRSZXZpc2l0ID0gZmFsc2U7CisgICAgYmFz
aWNCbG9jay0+Y2ZhSGFzVmlzaXRlZCA9IHRydWU7CisgICAgbV9ibG9jayA9IGJhc2ljQmxvY2s7
CisgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKK30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFs
aXplKEdyYXBoJiBncmFwaCkKK3sKKyAgICBQUk9GSUxFKDE3KTsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCk7CisgICAgcm9vdC0+Y2ZhU2hvdWxkUmV2aXNp
dCA9IHRydWU7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByb290LT52YWx1ZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKSB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGlj
dGlvbiA9IGdyYXBoW3Jvb3QtPnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKV0udmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkp
LnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5z
ZXQoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihw
cmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5z
ZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByb290LT52YWx1
ZXNBdEhlYWQuYXJndW1lbnQoaSkubWFrZVRvcCgpOworICAgIH0KK30KKworYm9vbCBBYnN0cmFj
dFN0YXRlOjplbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSBtZXJnZU1vZGUpCit7CisgICAgUFJPRklM
RSgxOCk7CisgICAgQVNTRVJUKG1fYmxvY2spOworICAgIAorICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbV9ibG9jazsgLy8gU2F2ZSB0aGUgYmxvY2sgZm9yIHN1Y2Nlc3NvciBtZXJnaW5nLgorICAg
IAorICAgIGlmICghbV9pc1ZhbGlkKSB7CisgICAgICAgIHJlc2V0KCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CisgICAgCisg
ICAgaWYgKG1lcmdlTW9kZSAhPSBEb250TWVyZ2UgfHwgIUFTU0VSVF9ESVNBQkxFRCkgeworICAg
ICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgYmxvY2stPnZhcmlhYmxl
c0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KQorICAgICAgICAgICAgY2hh
bmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGJsb2NrLT52YWx1ZXNBdFRhaWwuYXJndW1lbnQoYXJn
dW1lbnQpLCBtX3ZhcmlhYmxlcy5hcmd1bWVudChhcmd1bWVudCksIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90
IGxvY2FsID0gMDsgbG9jYWwgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxz
KCk7ICsrbG9jYWwpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRhaWwoYmxv
Y2stPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCksIG1fdmFyaWFibGVzLmxvY2FsKGxvY2FsKSwg
YmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworICAgIH0KKyAgICAKKyAgICBB
U1NFUlQobWVyZ2VNb2RlICE9IERvbnRNZXJnZSB8fCAhY2hhbmdlZCk7CisgICAgCisgICAgcmVz
ZXQoKTsKKyAgICAKKyAgICBpZiAobWVyZ2VNb2RlICE9IE1lcmdlVG9TdWNjZXNzb3JzKQorICAg
ICAgICByZXR1cm4gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gbWVyZ2VUb1N1Y2Nlc3NvcnMo
bV9ncmFwaCwgYmxvY2spOworfQorCit2b2lkIEFic3RyYWN0U3RhdGU6OnJlc2V0KCkKK3sKKyAg
ICBtX2Jsb2NrID0gMDsKKyAgICBtX2lzVmFsaWQgPSBmYWxzZTsKK30KKworYm9vbCBBYnN0cmFj
dFN0YXRlOjpleGVjdXRlKE5vZGVJbmRleCBub2RlSW5kZXgpCit7CisgICAgUFJPRklMRSgxOSk7
CisgICAgQVNTRVJUKG1fYmxvY2spOworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgICAgICAK
KyAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAKKyAgICBpZiAo
IW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAor
ICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgSlNDb25zdGFudDogeworICAgICAgICBK
U1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaywgbm9k
ZUluZGV4KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9oYXZl
U3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2Fs
OiB7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9k
ZS5sb2NhbCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNl
dExvY2FsOiB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUudmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICAKKyAgICAgICAgbV92YXJpYWJsZXMub3BlcmFu
ZChub2RlLmxvY2FsKCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8g
QXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCisgICAgICAg
IEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0Ns
ZWFyKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQml0QW5kOgor
ICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRSU2hpZnQ6Cisg
ICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBj
YXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdl
cigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgorICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3Vs
YXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50
MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb051bWJl
cjoKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBpZiAo
Tm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dy
YXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1i
ZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChub2RlLm9wID09
IFZhbHVlQWRkKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwg
UHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAg
IGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2Ogor
ICAgIGNhc2UgQXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBo
W25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIo
UHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERv
dWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJp
dGhNb2Q6IHsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcigpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkTm90U3BlY3Vs
YXRlSW50ZWdlcigpIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQz
Mik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhB
YnM6CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUlu
dGVnZXIoKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RO
dW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQg
PSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlv
bihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAg
IGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0
IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
QXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5z
aG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRT
cGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmls
dGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2Fz
ZSBDb21wYXJlTGVzczoKKyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJl
R3JlYXRlcjoKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2FzZSBDb21wYXJlRXE6
IHsKKyAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAg
IE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgUHJlZGljdGVk
VHlwZSBmaWx0ZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxl
ZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RJbnQzMjsKKyAgICAgICAg
ZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkKKyAgICAg
ICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJp
Z2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9iamVjdDsKKyAgICAgICAg
ZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJy
YXkobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdEFycmF5OworICAg
ICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7CisgICAgICAgICAg
ICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
UHJlZGljdEJvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAg
ICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFN0cmlu
Z0NoYXJDb2RlQXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV0ucHJlZGljdGlvbigpID09IFByZWRpY3RTdHJpbmcpIHsKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50
MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlWYWw6CisgICAgY2FzZSBQdXRCeVZhbEFs
aWFzOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkp
OworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJyYXlQdXNoOgorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgQXJyYXlQb3A6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5t
YWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBKdW1wOgor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAg
IC8vIFRoZXJlIGlzIHByb2JhYmx5IHByb2ZpdCB0byBiZSBmb3VuZCBpbiBkb2luZyBzcGFyc2Ug
Y29uZGl0aW9uYWwgY29uc3RhbnQKKyAgICAgICAgLy8gcHJvcGFnYXRpb24sIGFuZCB0byB0YWtl
IGl0IG9uZSBzdGVwIGZ1cnRoZXIsIHdoZXJlIGEgdmFyaWFibGUncyB2YWx1ZQorICAgICAgICAv
LyBpcyBzcGVjaWFsaXplZCBvbiBlYWNoIGRpcmVjdGlvbiBvZiBhIGJyYW5jaC4gRm9yIG5vdywg
d2UgZG9uJ3QgZG8gdGhpcy4KKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hp
bGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9u
KCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsK
KyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQ
cmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFJldHVybjoK
KyAgICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAg
bV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBUb1ByaW1pdGl2ZTogeworICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGls
ZDEoKV07CisgICAgICAgIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0
aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgIFByZWRpY3Rl
ZFR5cGUgdHlwZSA9IHNvdXJjZS5tX3R5cGU7CisgICAgICAgIGlmICh0eXBlICYgfihQcmVkaWN0
TnVtYmVyIHwgUHJlZGljdFN0cmluZyB8IFByZWRpY3RCb29sZWFuKSkgeworICAgICAgICAgICAg
dHlwZSAmPSAoUHJlZGljdE51bWJlciB8IFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbik7
CisgICAgICAgICAgICB0eXBlIHw9IFByZWRpY3RTdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAg
ZGVzdGluYXRpb24uc2V0KHR5cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIE5ld0Fy
cmF5OgorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKKyAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBOZXdSZWdleHA6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
bV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25v
ZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5v
ZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0
aW9uKHNvdXJjZS5tX3R5cGUpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUg
Y2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbgorICAgICAgICAgICAg
Ly8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBj
YXNlIHdpbGwKKyAgICAgICAgICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZl
ciBrbm93LgorICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChpc090aGVyUHJlZGlj
dGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKSB7CisgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFBy
ZWRpY3RPdGhlcik7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGljdE9iamVjdE90
aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNPYmplY3RQcmVkaWN0aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAg
IHNvdXJjZS5maWx0ZXIoUHJlZGljdE9iamVjdE1hc2spOworICAgICAgICAgICAgZGVzdGluYXRp
b24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICBkZXN0aW5hdGlvbi5tZXJn
ZShQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBo
W25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZv
ck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlRmluYWxPYmplY3QoKSkKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGlj
dEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgIAorICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJl
ZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisg
ICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dE9iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdl
dFNjb3BlQ2hhaW46CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdENlbGxP
dGhlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZWRW
YXI6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRTY29wZWRWYXI6CisgICAgICAgIGNsb2JiZXJT
dHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBHZXRCeUlkOgorICAgIGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVz
KG5vZGVJbmRleCk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgR2V0U3RyaW5nTGVuZ3RoOgorICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2Rl
SW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUg
YWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBw
cm90b3R5cGVzKS4KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIobm9kZS5z
dHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAg
ICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
UHV0QnlPZmZzZXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0
aG9kOgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRo
ZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFb
bm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXS5zdHJ1Y3R1cmUpOworICAgICAgICBtX2hhdmVT
dHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dE9iamVjdE90aGVyKTsKKyAgICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRvIHByb3Bh
Z2F0ZSB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2hhdCB0aGUgZnVuY3Rpb24gaXMuCisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJ
ZERpcmVjdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENl
bGwpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdENlbGwpOworICAgICAgICAvLyBTYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRo
ZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBDaGVja0hhc0luc3RhbmNlCisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBJbnN0YW5jZU9mOgorICAgICAgICAvLyBBZ2Fpbiwgc2Fk
bHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VP
ZgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7Cisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFBoaToKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgUmVz
b2x2ZToKKyAgICBjYXNlIFJlc29sdmVCYXNlOgorICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQ
dXQ6CisgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhu
b2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICBt
X2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFBoYW50b206CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV9pc1Zh
bGlkOworfQorCitpbmxpbmUgdm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyhO
b2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIFBST0ZJTEUoMjEpOworICAgIGlmICghbV9oYXZl
U3RydWN0dXJlcykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSBub2RlSW5k
ZXggLSBtX2Jsb2NrLT5iZWdpbiArIDE7IGktLSA+IDA7KQorICAgICAgICBtX25vZGVzW2ldLmNs
b2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVzLmFyZ3VtZW50
KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zh
cmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVzLmxvY2Fs
KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgbV9oYXZlU3RydWN0dXJlcyA9IGZhbHNlOwor
fQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0
VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgg
bm9kZUluZGV4KQoreworICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsKKyAgICAgICAg
CisgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAoIW5vZGUucmVm
Q291bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobm9kZS5v
cCkgeworICAgIGNhc2UgUGhpOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRo
ZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgICAgICBz
b3VyY2UgPSAmaW5WYXJpYWJsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIEdldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0
aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9k
ZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldExvY2Fs
OgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxs
eSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBp
dC4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgc291cmNlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAg
IGlmIChkZXN0aW5hdGlvbiA9PSAqc291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1
dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9y
IHRoaXMKKyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiBy
ZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyByZWFjaGVkIGFi
b3V0CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBiYXNpYyBi
bG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUgdG8gaW5kaWNh
dGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlvbiA9ICpzb3Vy
Y2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEFTU0VSVChmcm9t
LT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRI
ZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxz
KCkpOworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoc2l6
ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlh
YmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJv
bS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5h
cmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgY2hhbmdlZCB8
PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2Fs
KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5s
b2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworCisgICAg
aWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgCisg
ICAgdG8tPmNmYVNob3VsZFJldmlzaXQgfD0gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gY2hh
bmdlZDsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMo
R3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoreworICAgIFBST0ZJTEUoMjAp
OworCisgICAgTm9kZSYgdGVybWluYWwgPSBncmFwaFtiYXNpY0Jsb2NrLT5lbmQgLSAxXTsKKyAg
ICAKKyAgICBBU1NFUlQodGVybWluYWwuaXNUZXJtaW5hbCgpKTsKKyAgICAKKyAgICBzd2l0Y2gg
KHRlcm1pbmFsLm9wKSB7CisgICAgY2FzZSBKdW1wOgorICAgICAgICByZXR1cm4gbWVyZ2UoYmFz
aWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9ja0luZGV4KCldLmdldCgp
KTsKKyAgICAgICAgCisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIHJldHVybiBtZXJnZShiYXNp
Y0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkp
CisgICAgICAgICAgICB8IG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFs
Lm5vdFRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIAorICAgIGNhc2UgUmV0dXJu
OgorICAgIGNhc2UgVGhyb3c6CisgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitpbmxpbmUg
Ym9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZh
bHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGlu
YXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpCit7CisgICAgaWYgKGRl
c3RpbmF0aW9uTm9kZUluZGV4ID09IE5vTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IAorICAgIEFTU0VSVF9VTlVTRUQoc291cmNlTm9kZUluZGV4LCBzb3VyY2VOb2RlSW5kZXggIT0g
Tm9Ob2RlKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY291bGQgZG8gc29tZSBzcGFyc2UgY29u
ZGl0aW9uYWwgcHJvcGFnYXRpb24gaGVyZSEKKyAgICAKKyAgICByZXR1cm4gZGVzdGluYXRpb24u
bWVyZ2Uoc291cmNlKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6
ZHVtcChGSUxFKiBvdXQpCit7CisgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX25vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX25vZGVz
W2ldLmlzQ2xlYXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoZmlyc3Qp
CisgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJAJWx1OiIsIGkgKyBtX2Js
b2NrLT5iZWdpbik7CisgICAgICAgIG1fbm9kZXNbaV0uZHVtcChvdXQpOworICAgIH0KK30KKyNl
bmRpZgorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZH
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0
YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFN0YXRl
X2gKKyNkZWZpbmUgREZHQWJzdHJhY3RTdGF0ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5o
IgorI2luY2x1ZGUgIkRGR0dyYXBoLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvZGVCbG9jazsKKwor
bmFtZXNwYWNlIERGRyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOworCisvLyBUaGlzIGltcGxlbWVu
dHMgdGhlIG5vdGlvbiBvZiBhbiBhYnN0cmFjdCBzdGF0ZSBmb3IgZmxvdy1zZW5zaXRpdmUgaW50
cmFwcm9jZWR1cmFsCisvLyBjb250cm9sIGZsb3cgYW5hbHlzaXMgKENGQSksIHdpdGggYSBmb2N1
cyBvbiB0aGUgZWxpbWluYXRpb24gb2YgcmVkdW5kYW50IHR5cGUgY2hlY2tzLgorLy8gSXQgYWxz
byBpbXBsZW1lbnRzIG1vc3Qgb2YgdGhlIG1lY2hhbmlzbXMgb2YgYWJzdHJhY3QgaW50ZXJwcmV0
YXRpb24gdGhhdCBzdWNoIGFuCisvLyBhbmFseXNpcyB3b3VsZCB1c2UuIFRoaXMgY2xhc3Mgc2hv
dWxkIGJlIHVzZWQgaW4gdHdvIGlkaW9tczoKKy8vCisvLyAxKSBQZXJmb3JtaW5nIHRoZSBDRkEu
IEluIHRoaXMgY2FzZSwgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgYWxsIGJhc2lj
CisvLyAgICBibG9ja3MgcmVwZWF0ZWRseSB1bnRpbCBjb252ZXJnZW5jZSBpcyByZWFjaGVkLiBD
b252ZXJnZW5jZSBpcyBkZWZpbmVkIGJ5CisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0U3Rh
dGU6Ok1lcmdlVG9TdWNjZXNzb3JzKSByZXR1cm5pbmcgZmFsc2UgZm9yIGFsbCBibG9ja3MuCisv
LworLy8gMikgUmVtYXRlcmlhbGl6aW5nIHRoZSByZXN1bHRzIG9mIGEgcHJldmlvdXNseSBleGVj
dXRlZCBDRkEuIEluIHRoaXMgY2FzZSwKKy8vICAgIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1
biBvdmVyIHdoYXRldmVyIGJhc2ljIGJsb2NrIHlvdSdyZSBpbnRlcmVzdGVkIGluIHVwCisvLyAg
ICB0byB0aGUgcG9pbnQgb2YgdGhlIG5vZGUgYXQgd2hpY2ggeW91J2QgbGlrZSB0byBpbnRlcnJv
Z2F0ZSB0aGUga25vd24gdHlwZQorLy8gICAgb2YgYWxsIG90aGVyIG5vZGVzLiBBdCB0aGlzIHBv
aW50IGl0J3Mgc2FmZSB0byBkaXNjYXJkIHRoZSBBYnN0cmFjdFN0YXRlIGVudGlyZWx5LAorLy8g
ICAgY2FsbCByZXNldCgpLCBvciB0byBydW4gaXQgdG8gdGhlIGVuZCBvZiB0aGUgYmFzaWMgYmxv
Y2sgYW5kIGNhbGwKKy8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6RG9udE1lcmdl
KS4gVGhlIGxhdHRlciBvcHRpb24gaXMgc2FmZXN0IGJlY2F1c2UKKy8vICAgIGl0IHBlcmZvcm1z
IHNvbWUgdXNlZnVsIGludGVncml0eSBjaGVja3MuCisvLworLy8gQWZ0ZXIgdGhlIENGQSBpcyBy
dW4sIHRoZSBpbnRlci1ibG9jayBzdGF0ZSBpcyBzYXZlZCBhdCB0aGUgaGVhZHMgYW5kIHRhaWxz
IG9mIGFsbAorLy8gYmFzaWMgYmxvY2tzLiBUaGlzIGFsbG93cyB0aGUgaW50cmEtYmxvY2sgc3Rh
dGUgdG8gYmUgcmVtYXRlcmlhbGl6ZWQgYnkganVzdAorLy8gZXhlY3V0aW5nIHRoZSBDRkEgZm9y
IHRoYXQgYmxvY2suIElmIHlvdSBuZWVkIHRvIGtub3cgaW50ZXItYmxvY2sgc3RhdGUgb25seSwg
dGhlbgorLy8geW91IG9ubHkgbmVlZCB0byBleGFtaW5lIHRoZSBCYXNpY0Jsb2NrOjptX3ZhbHVl
c0F0SGVhZCBvciBtX3ZhbHVlc0F0VGFpbCBmaWVsZHMuCisvLworLy8gUnVubmluZyB0aGlzIGFu
YWx5c2lzIGludm9sdmVzIHRoZSBmb2xsb3dpbmcsIG1vZHVsbyB0aGUgaW50ZXItYmxvY2sgc3Rh
dGUKKy8vIG1lcmdpbmcgYW5kIGNvbnZlcmdlbmNlIGZpeHBvaW50OgorLy8KKy8vIEFic3RyYWN0
U3RhdGUgc3RhdGUoY29kZUJsb2NrLCBncmFwaCk7CisvLyBzdGF0ZS5iZWdpbkJhc2ljQmxvY2so
YmFzaWNCbG9jayk7CisvLyBib29sIGVuZFJlYWNoZWQgPSB0cnVlOworLy8gZm9yIChOb2RlSW5k
ZXggaWR4ID0gYmFzaWNCbG9jay5iZWdpbjsgaWR4IDwgYmFzaWNCbG9jay5lbmQ7ICsraWR4KSB7
CisvLyAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKGlkeCkpCisvLyAgICAgICAgIGJyZWFrOworLy8g
fQorLy8gYm9vbCByZXN1bHQgPSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKDxlaXRoZXIgTWVyZ2Ugb3Ig
RG9udE1lcmdlPik7CisKK2NsYXNzIEFic3RyYWN0U3RhdGUgeworcHVibGljOgorICAgIGVudW0g
TWVyZ2VNb2RlIHsKKyAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0
U3RhdGUgd2l0aCBiYXNpYyBibG9ja3MuCisgICAgICAgIERvbnRNZXJnZSwKKyAgICAgICAgCisg
ICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwg
b2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrIGJlaW5nIGFuYWx5emVkLgorICAgICAgICBN
ZXJnZVRvVGFpbCwKKyAgICAgICAgCisgICAgICAgIC8vIE1lcmdlIHRoZSBzdGF0ZSBpbiBBYnN0
cmFjdFN0YXRlIHdpdGggdGhlIHRhaWwgb2YgdGhlIGJhc2ljCisgICAgICAgIC8vIGJsb2NrLCBh
bmQgd2l0aCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29yIGJsb2Nrcy4KKyAgICAgICAgTWVyZ2VUb1N1
Y2Nlc3NvcnMKKyAgICB9OworICAgIAorICAgIEFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiwgR3Jh
cGgmKTsKKyAgICAKKyAgICB+QWJzdHJhY3RTdGF0ZSgpOworICAgIAorICAgIEFic3RyYWN0VmFs
dWUmIGZvck5vZGUoTm9kZUluZGV4IG5vZGVJbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBt
X25vZGVzW25vZGVJbmRleCAtIG1fYmxvY2stPmJlZ2luXTsKKyAgICB9CisgICAgCisgICAgLy8g
Q2FsbCB0aGlzIGJlZm9yZSBiZWdpbm5pbmcgQ0ZBIHRvIGluaXRpYWxpemUgdGhlIGFic3RyYWN0
IHZhbHVlcyBvZgorICAgIC8vIGFyZ3VtZW50cywgYW5kIHRvIGluZGljYXRlIHdoaWNoIGJsb2Nr
cyBzaG91bGQgYmUgbGlzdGVkIGZvciBDRkEKKyAgICAvLyBleGVjdXRpb24uCisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZShHcmFwaCYpOworCisgICAgLy8gU3RhcnQgYWJzdHJhY3RseSBleGVj
dXRpbmcgdGhlIGdpdmVuIGJhc2ljIGJsb2NrLiBJbml0aWFsaXplcyB0aGUKKyAgICAvLyBub3Rp
b24gb2YgYWJzdHJhY3Qgc3RhdGUgdG8gd2hhdCB3ZSBiZWxpZXZlIGl0IHRvIGJlIGF0IHRoZSBo
ZWFkCisgICAgLy8gb2YgdGhlIGJhc2ljIGJsb2NrLCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljIGJs
b2NrJ3MgZGF0YSBzdHJ1Y3R1cmVzLgorICAgIC8vIFRoaXMgbWV0aG9kIGFsc28gc2V0cyBjZmFT
aG91bGRSZXZpc2l0IHRvIGZhbHNlLgorICAgIHZvaWQgYmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxv
Y2sqKTsKKyAgICAKKyAgICAvLyBGaW5pc2ggYWJzdHJhY3RseSBleGVjdXRpbmcgYSBiYXNpYyBi
bG9jay4gSWYgTWVyZ2VUb1RhaWwgb3IKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycyBpcyBwYXNz
ZWQsIHRoZW4gdGhpcyBtZXJnZXMgZXZlcnl0aGluZyB3ZSBoYXZlCisgICAgLy8gbGVhcm5lZCBh
Ym91dCBob3cgdGhlIHN0YXRlIGNoYW5nZXMgZHVyaW5nIHRoaXMgYmxvY2sncyBleGVjdXRpb24g
aW50bworICAgIC8vIHRoZSBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4gVGhlcmUgYXJlIHRocmVl
IHJldHVybiBtb2RlcywgZGVwZW5kaW5nCisgICAgLy8gb24gdGhlIHZhbHVlIG9mIG1lcmdlTW9k
ZToKKyAgICAvLworICAgIC8vIERvbnRNZXJnZToKKyAgICAvLyAgICBBbHdheXMgcmV0dXJucyBm
YWxzZS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9UYWlsOgorICAgIC8vICAgIFJldHVybnMgdHJ1
ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLgorICAg
IC8vICAgIFRoaXMgbWVhbnMgdGhhdCB5b3UgbXVzdCBjYWxsIG1lcmdlVG9TdWNjZXNzb3JzKCks
IGFuZCBpZiB0aGF0CisgICAgLy8gICAgcmV0dXJucyB0cnVlLCB0aGVuIHlvdSBtdXN0IHJldmlz
aXQgKGF0IGxlYXN0KSB0aGUgc3VjY2Vzc29yCisgICAgLy8gICAgYmxvY2tzLiBGYWxzZSB3aWxs
IGFsd2F5cyBiZSByZXR1cm5lZCBpZiB0aGUgYmxvY2sgaXMgdGVybWluYWwKKyAgICAvLyAgICAo
aS5lLiBlbmRzIGluIFRocm93IG9yIFJldHVybiwgb3IgaGFzIGEgRm9yY2VPU1JFeGl0IGluc2lk
ZSBpdCkuCisgICAgLy8KKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29yczoKKyAgICAvLyAgICBSZXR1
cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3YXMgY2hhbmdl
ZCwKKyAgICAvLyAgICBhbmQsIGlmIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZHMgb2Ygc3VjY2Vzc29y
cyB3YXMgY2hhbmdlZC4KKyAgICAvLyAgICBBIHRydWUgcmV0dXJuIG1lYW5zIHRoYXQgeW91IG11
c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIFRo
aXMgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gdHJ1ZSBmb3IgYmFzaWMgYmxvY2tzCisg
ICAgLy8gICAgdGhhdCBtdXN0IGJlIHZpc2l0ZWQgbmV4dC4KKyAgICBib29sIGVuZEJhc2ljQmxv
Y2soTWVyZ2VNb2RlKTsKKyAgICAKKyAgICAvLyBSZXNldCB0aGUgQWJzdHJhY3RTdGF0ZS4gVGhp
cyB0aHJvd3MgYXdheSBhbnkgcmVzdWx0cywgYW5kIGF0IHRoaXMgcG9pbnQKKyAgICAvLyB5b3Ug
Y2FuIHNhZmVseSBjYWxsIGJlZ2luQmFzaWNCbG9jaygpIG9uIGFueSBiYXNpYyBibG9jay4KKyAg
ICB2b2lkIHJlc2V0KCk7CisgICAgCisgICAgLy8gQWJzdHJhY3RseSBleGVjdXRlcyB0aGUgZ2l2
ZW4gbm9kZS4gVGhlIG5ldyBhYnN0cmFjdCBzdGF0ZSBpcyBzdG9yZWQgaW50byBhbgorICAgIC8v
IGFic3RyYWN0IHJlZ2lzdGVyIGZpbGUgc3RvcmVkIGluICp0aGlzLiBMb2FkcyBvZiBsb2NhbCB2
YXJpYWJsZXMgKHRoYXQgc3BhbgorICAgIC8vIGJhc2ljIGJsb2NrcykgaW50ZXJyb2dhdGUgdGhl
IGJhc2ljIGJsb2NrJ3Mgbm90aW9uIG9mIHRoZSBzdGF0ZSBhdCB0aGUgaGVhZC4KKyAgICAvLyBT
dG9yZXMgdG8gbG9jYWwgdmFyaWFibGVzIGFyZSBoYW5kbGVkIGluIGVuZEJhc2ljQmxvY2soKS4g
VGhpcyByZXR1cm5zIHRydWUKKyAgICAvLyBpZiBleGVjdXRpb24gc2hvdWxkIGNvbnRpbnVlIHBh
c3QgdGhpcyBub2RlLiBOb3RhYmx5LCBpdCB3aWxsIHJldHVybiB0cnVlCisgICAgLy8gZm9yIGJs
b2NrIHRlcm1pbmFscywgc28gbG9uZyBhcyB0aG9zZSB0ZXJtaW5hbHMgYXJlIG5vdCBSZXR1cm4g
b3IgdmFyaWFudHMKKyAgICAvLyBvZiBUaHJvdy4KKyAgICBib29sIGV4ZWN1dGUoTm9kZUluZGV4
KTsKKyAgICAKKyAgICAvLyBJcyB0aGUgZXhlY3V0aW9uIHN0YXRlIHN0aWxsIHZhbGlkPyBUaGlz
IHdpbGwgYmUgZmFsc2UgaWYgZXhlY3V0ZSgpIGhhcworICAgIC8vIHJldHVybmVkIGZhbHNlIHBy
ZXZpb3VzbHkuCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9pc1ZhbGlkOyB9
CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIGFic3RyYWN0IHN0YXRlIHN0b3JlZCBhdCB0aGUgZmly
c3QgYmxvY2sncyB0YWlsIGludG8gdGhlIHNlY29uZAorICAgIC8vIGJsb2NrJ3MgaGVhZC4gUmV0
dXJucyB0cnVlIGlmIHRoZSBzZWNvbmQgYmxvY2sncyBzdGF0ZSBjaGFuZ2VkLiBJZiBzbywKKyAg
ICAvLyB0aGF0IGJsb2NrIG11c3QgYmUgYWJzdHJhY3RseSBpbnRlcnByZXRlZCBhZ2Fpbi4gVGhp
cyBhbHNvIHNldHMKKyAgICAvLyB0by0+Y2ZhU2hvdWxkUmV2aXNpdCB0byB0cnVlLCBpZiBpdCBy
ZXR1cm5zIHRydWUsIG9yIGlmIHRvIGhhcyBub3QgYmVlbgorICAgIC8vIHZpc2l0ZWQgeWV0Lgor
ICAgIHN0YXRpYyBib29sIG1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsK
KyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBibG9j
aydzIHRhaWwgaW50byBhbGwgb2YgaXRzCisgICAgLy8gc3VjY2Vzc29ycy4gUmV0dXJucyB0cnVl
IGlmIGFueSBvZiB0aGUgc3VjY2Vzc29ycycgc3RhdGVzIGNoYW5nZWQuIE5vdGUKKyAgICAvLyB0
aGF0IHRoaXMgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgaW4gZW5kQmFzaWNCbG9jaygpIGlmIE1l
cmdlTW9kZSBpcworICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzLgorICAgIHN0YXRpYyBib29sIG1l
cmdlVG9TdWNjZXNzb3JzKEdyYXBoJiwgQmFzaWNCbG9jayopOworCisjaWZuZGVmIE5ERUJVRwor
ICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpOworI2VuZGlmCisgICAgCitwcml2YXRlOgorICAgIHZv
aWQgY2xvYmJlclN0cnVjdHVyZXMoTm9kZUluZGV4KTsKKyAgICAKKyAgICBib29sIG1lcmdlU3Rh
dGVBdFRhaWwoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIGluVmFy
aWFibGUsIE5vZGVJbmRleCk7CisgICAgCisgICAgc3RhdGljIGJvb2wgbWVyZ2VWYXJpYWJsZUJl
dHdlZW5CbG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNv
dXJjZSwgTm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9k
ZUluZGV4KTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIEdyYXBoJiBt
X2dyYXBoOworICAgIAorICAgIFZlY3RvcjxBYnN0cmFjdFZhbHVlLCAzMj4gbV9ub2RlczsKKyAg
ICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiBtX3ZhcmlhYmxlczsKKyAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrOworICAgIGJvb2wgbV9oYXZlU3RydWN0dXJlczsKKyAgICAKKyAgICBib29sIG1faXNW
YWxpZDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWJzdHJhY3RTdGF0ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHQWJzdHJhY3RWYWx1ZV9oCisjZGVmaW5lIERGR0Fic3Ry
YWN0VmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVNldC5oIgorI2luY2x1ZGUgIkpTQ2VsbC5o
IgorI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHsKK3B1YmxpYzoKKyAgICBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKCkKKyAgICAgICAgOiBtX3N0cnVjdHVyZSgwKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKKyAgICAgICAgOiBtX3N0cnVjdHVyZShzdHJ1Y3R1cmUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlKGNvbnN0IFN0cnVjdHVyZVNldCYgc2V0KQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChzZXQuc2l6ZSgpKSB7CisgICAgICAgIGNhc2UgMDoKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc2V0WzBdOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlID0gcmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIo
KQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lk
IG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSByZWludGVycHJldF9jYXN0
PFN0cnVjdHVyZSo+KDEpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSB0b3AoKQorICAgIHsKKyAgICAgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB2YWx1
ZTsKKyAgICAgICAgdmFsdWUubWFrZVRvcCgpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorICAgIAorICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpICYmICFpc1RvcCgpKTsKKyAgICAgICAgaWYg
KG1fc3RydWN0dXJlKQorICAgICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBh
ZGRBbGwoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1Rv
cCgpIHx8ICFvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGlmIChvdGhlci5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW1fc3RydWN0dXJlKSB7
CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyWzBdOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90aGVyWzBdKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVB
YnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghb3RoZXIubV9zdHJ1Y3R1
cmUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkgeworICAg
ICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICBpZiAobV9zdHJ1Y3R1cmUg
PT0gb3RoZXIubV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgbWFrZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgY29udGFpbnMoU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
aWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1
cm4gb3RoZXIuY29udGFpbnMobV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIGRv
ZXNOb3RDb250YWluQW55T3RoZXJUaGFuKFN0cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghbV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIG1fc3RydWN0dXJlID09IHN0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBp
c1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
b3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChvdGhl
ci5zaXplKCkgPiAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
bV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF07CisgICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRP
Zihjb25zdCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobV9z
dHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlmIChvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG90aGVyLmlzU3Vic2V0T2Yo
KnRoaXMpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQm
IG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG90aGVyLnNpemUoKSkgeworICAgICAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBv
dGhlclswXTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKG1fc3RydWN0
dXJlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fc3RydWN0dXJl
ID0gMDsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlQWJzdHJh
Y3RWYWx1ZSYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkgeworICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAg
IHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5cGUgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIShv
dGhlciAmIFByZWRpY3RDZWxsKSkgeworICAgICAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihtX3N0cnVjdHVyZSkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIShwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZSkgJiBvdGhl
cikpCisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNDbGVhcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIW1fc3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzVG9wKCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0g
cmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsgfQorICAgIAorICAgIGJvb2wgaXNOZWl0
aGVyQ2xlYXJOb3JUb3AoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obV9zdHJ1Y3R1cmUpID4gMTsgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIHJldHVybiAhIW1fc3RydWN0
dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIGF0KHNpemVfdCBpKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJl
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChpLCAhaSk7CisgICAgICAgIHJldHVybiBtX3N0cnVj
dHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBvcGVyYXRvcltdKHNpemVfdCBpKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGkpOworICAgIH0KKyAgICAKKyAgICBTdHJ1
Y3R1cmUqIGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KDApOworICAgIH0K
KyAgICAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0
Q2VsbDsKKyAgICAgICAgaWYgKGlzQ2xlYXIoKSkKKyAgICAgICAgICAgIHJldHVybiBQcmVkaWN0
Tm9uZTsKKyAgICAgICAgcmV0dXJuIHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJl
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJl
ID09IG90aGVyLm1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAg
dm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAg
ICAgICAgICBmcHJpbnRmKG91dCwgIlRPUCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAgICAgICAgaWYgKG1f
c3RydWN0dXJlKQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1fc3RydWN0dXJlKTsK
KyAgICAgICAgZnByaW50ZihvdXQsICJdIik7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgLy8gVGhpcyBjYW4gb25seSByZW1lbWJlciBvbmUgc3RydWN0dXJlIGF0IGEgdGltZS4KKyAg
ICBTdHJ1Y3R1cmUqIG1fc3RydWN0dXJlOworfTsKKworc3RydWN0IEFic3RyYWN0VmFsdWUgewor
ICAgIEFic3RyYWN0VmFsdWUoKQorICAgICAgICA6IG1fdHlwZShQcmVkaWN0Tm9uZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV90eXBlID0g
UHJlZGljdE5vbmU7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNDbGVhcigpCisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRp
Y3ROb25lICYmIG1fc3RydWN0dXJlLmlzQ2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBt
YWtlVG9wKCkKKyAgICB7CisgICAgICAgIG1fdHlwZSA9IFByZWRpY3RUb3A7CisgICAgICAgIG1f
c3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9iYmVyU3RydWN0
dXJlcygpCisgICAgeworICAgICAgICBpZiAobV90eXBlICYgUHJlZGljdENlbGwpIHsKKyAgICAg
ICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fc3RydWN0dXJlLmlzQ2xlYXIoKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNUb3AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdHlwZSA9PSBQcmVkaWN0VG9wICYmIG1fc3RydWN0dXJlLmlzVG9wKCk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBBYnN0cmFj
dFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1ha2VUb3AoKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmFkZCh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCkpOworICAgICAgICAKKyAgICAgICAgbV90eXBlID0gcHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAg
IHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuYWRk
KHN0cnVjdHVyZSk7CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVkaWN0aW9uRnJvbVN0
cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChQcmVkaWN0ZWRU
eXBlIHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZSAmIFByZWRpY3RDZWxsKQorICAgICAg
ICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBtX3R5cGUgPSB0eXBlOworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IG90aGVyLm1fdHlwZSAmJiBtX3N0cnVjdHVy
ZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBtZXJnZShjb25z
dCBBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRp
Y3Rpb24obV90eXBlLCBvdGhlci5tX3R5cGUpIHwgbV9zdHJ1Y3R1cmUuYWRkQWxsKG90aGVyLm1f
c3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBtZXJnZShQcmVkaWN0ZWRUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBtZXJnZVByZWRpY3Rpb24obV90eXBlLCB0eXBlKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICh0eXBlICYgUHJlZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVj
dHVyZS5tYWtlVG9wKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBtX3R5cGUgJj0gb3RoZXIucHJlZGljdGlv
bkZyb21TdHJ1Y3R1cmVzKCk7CisgICAgICAgIG1fc3RydWN0dXJlLmZpbHRlcihvdGhlcik7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIGlmICh0eXBlID09IFByZWRpY3RUb3ApCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fdHlwZSAmPSB0eXBlOworICAgICAgICBtX3N0cnVjdHVyZS5maWx0ZXIodHlwZSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdmFsaWRhdGUoSlNWYWx1ZSB2YWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IAorICAgICAgICBpZiAobWVyZ2VQcmVkaWN0aW9ucyhtX3R5cGUsIHByZWRpY3Rpb25Gcm9tVmFs
dWUodmFsdWUpKSAhPSBtX3R5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQobV90eXBlICYgUHJlZGljdENlbGwpOworICAgICAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlLmNvbnRhaW5zKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRF
QlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGZwcmludGYob3V0
LCAiKCVzLCAiLCBwcmVkaWN0aW9uVG9TdHJpbmcobV90eXBlKSk7CisgICAgICAgIG1fc3RydWN0
dXJlLmR1bXAob3V0KTsKKyAgICAgICAgZnByaW50ZihvdXQsICIpIik7CisgICAgfQorI2VuZGlm
CisKKyAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIG1fc3RydWN0dXJlOworICAgIFByZWRpY3Rl
ZFR5cGUgbV90eXBlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFjdFZhbHVlX2gKKworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHQmFzaWNCbG9ja19oCisjZGVmaW5lIERGR0Jhc2ljQmxv
Y2tfaAorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVl
LmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUgIkRGR09wZXJhbmRzLmgiCisjaW5j
bHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit0eXBlZGVmIFZlY3RvciA8QmxvY2tJbmRleCwgMj4g
UHJlZGVjZXNzb3JMaXN0OworCitzdHJ1Y3QgQmFzaWNCbG9jayB7CisgICAgQmFzaWNCbG9jayh1
bnNpZ25lZCBieXRlY29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4sIHVuc2lnbmVkIG51bUFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQorICAgICAgICA6IGJ5dGVjb2RlQmVnaW4oYnl0ZWNv
ZGVCZWdpbikKKyAgICAgICAgLCBiZWdpbihiZWdpbikKKyAgICAgICAgLCBlbmQoTm9Ob2RlKQor
ICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQorICAgICAgICAsIGNmYUhhc1Zpc2l0ZWQoZmFs
c2UpCisgICAgICAgICwgY2ZhU2hvdWxkUmV2aXNpdChmYWxzZSkKKyAgICAgICAgLCB2YXJpYWJs
ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFyaWFibGVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVlc0F0SGVhZChudW1B
cmd1bWVudHMsIG51bUxvY2FscykKKyAgICAgICAgLCB2YWx1ZXNBdFRhaWwobnVtQXJndW1lbnRz
LCBudW1Mb2NhbHMpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBpbmxpbmUgQmxvY2tJbmRl
eCBnZXRCeXRlY29kZUJlZ2luKE93blB0cjxCYXNpY0Jsb2NrPiogYmxvY2spCisgICAgeworICAg
ICAgICByZXR1cm4gKCpibG9jayktPmJ5dGVjb2RlQmVnaW47CisgICAgfQorCisgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVCZWdpbjsKKyAgICBOb2RlSW5kZXggYmVnaW47CisgICAgTm9kZUluZGV4IGVu
ZDsKKyAgICBib29sIGlzT1NSVGFyZ2V0OworICAgIGJvb2wgY2ZhSGFzVmlzaXRlZDsKKyAgICBi
b29sIGNmYVNob3VsZFJldmlzaXQ7CisgICAgCisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVj
ZXNzb3JzOworICAgIAorICAgIE9wZXJhbmRzPE5vZGVJbmRleCwgTm9kZUluZGV4VHJhaXRzPiB2
YXJpYWJsZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+
IHZhcmlhYmxlc0F0VGFpbDsKKyAgICAKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2YWx1
ZXNBdEhlYWQ7CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzQXRUYWlsOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CisKKyNlbmRpZiAvLyBERkdCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDk3MDE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIC8vIFVzZWQgaW4gaW1wbGVt
ZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhIGxvY2FsIHZhcmlh
YmxlLgogICAgIE5vZGVJbmRleCBnZXRMb2NhbCh1bnNpZ25lZCBvcGVyYW5kKQogICAgIHsKLSAg
ICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFp
bFtvcGVyYW5kXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVu
dEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCk7CiAKICAgICAgICAgaWYgKG5v
ZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25v
ZGVJbmRleF07CkBAIC0xNDQsMTUgKzE0NCwxNSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5k
ZXggcGhpID0gYWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAg
ICAgICAgbV9sb2NhbFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2Nr
LCBwaGksIG9wZXJhbmQpKTsKICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2Nh
bCwgT3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJs
b2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKSA9IG5vZGVJbmRl
eDsKICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0SGVhZFtvcGVy
YW5kXS5zZXRGaXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZShvcGVyYW5kLCBub2RlSW5kZXgpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CiAgICAgdm9pZCBzZXRMb2Nh
bCh1bnNpZ25lZCBvcGVyYW5kLCBOb2RlSW5kZXggdmFsdWUpCiAgICAgewotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUgPSBhZGRUb0dyYXBoKFNl
dExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwor
ICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpID0g
YWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5k
KSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0
LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQgaXMgYW4gYXJndW1lbnQuCkBAIC0xNjEsNyArMTYx
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9j
b2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMpOwogCi0gICAg
ICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRh
aWxbYXJndW1lbnRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJy
ZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCk7CiAKICAgICAgICAg
aWYgKG5vZGVJbmRleCAhPSBOb05vZGUpIHsKICAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dy
YXBoW25vZGVJbmRleF07CkBAIC0xNzAsNyArMTcwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
ICAgICAvLyB0aGUgR2V0TG9jYWwgdG8gdGhlIFNldEFyZ3VtZW50LgogICAgICAgICAgICAgICAg
IEFTU0VSVChub2RlLmxvY2FsKCkgPT0gc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihvcGVy
YW5kKSk7CiAgICAgICAgICAgICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwg
T3BJbmZvKG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpLCBub2RlSW5kZXgpOwotICAgICAgICAg
ICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWUg
PSBub2RlSW5kZXg7CisgICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIG5vZGVJbmRleDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTg2LDkgKzE4
Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwg
T3BJbmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2FyZ3VtZW50UGhpU3RhY2su
YXBwZW5kKFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgYXJndW1lbnQpKTsKICAg
ICAgICAgbm9kZUluZGV4ID0gYWRkVG9HcmFwaChHZXRMb2NhbCwgT3BJbmZvKHZhcmlhYmxlQWNj
ZXNzRGF0YSksIHBoaSk7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFp
bFthcmd1bWVudF0udmFsdWUgPSBub2RlSW5kZXg7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwogICAgICAgICAK
LSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRG
aXJzdFRpbWUobm9kZUluZGV4KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0
SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgbm9kZUluZGV4KTsKICAgICAgICAg
CiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQpAQCAtMTk3LDcgKzE5Nyw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fY29kZUJsb2Nr
LT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7CiAg
ICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzKTsKIAotICAgICAgICBtX2N1
cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gYWRkVG9HcmFw
aChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVl
KTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIEdldCBhbiBvcGVyYW5kLCBhbmQg
cGVyZm9ybSBhIFRvSW50MzIvVG9OdW1iZXIgY29udmVyc2lvbiBvbiBpdC4KQEAgLTc4Myw4ICs3
ODMsOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
IGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG1fbnVtQXJndW1lbnRzOyAr
K2FyZ3VtZW50KSB7CiAgICAgICAgICAgICBOb2RlSW5kZXggc2V0QXJndW1lbnQgPSBhZGRUb0dy
YXBoKFNldEFyZ3VtZW50LCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKGFyZ3VtZW50IC0g
bV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSkpKTsKICAgICAgICAgICAgIG1fZ3JhcGgubV9hcmd1bWVudHNbYXJndW1lbnRdID0g
c2V0QXJndW1lbnQ7Ci0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhl
YWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRBcmd1bWVudCk7Ci0gICAgICAgICAgICBtX2N1
cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnNldEZpcnN0VGltZShzZXRB
cmd1bWVudCk7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNl
dEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBzZXRBcmd1bWVudCk7CisgICAgICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3Vt
ZW50LCBzZXRBcmd1bWVudCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2ODksMTYgKzE2ODks
MTYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cHJvY2Vzc1BoaVN0YWNrKCkKICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW3ByZWRl
Y2Vzc29yc1tpXV0uZ2V0KCk7CiAKLSAgICAgICAgICAgIFZhcmlhYmxlUmVjb3JkJiB2YXIgPSAo
c3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1
bWVudHNBdFRhaWxbdmFyTm9dIDogcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdFRhaWxbdmFy
Tm9dOworICAgICAgICAgICAgTm9kZUluZGV4JiB2YXIgPSAoc3RhY2tUeXBlID09IEFyZ3VtZW50
UGhpU3RhY2spID8gcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KHZh
ck5vKSA6IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbCh2YXJObyk7CiAK
LSAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3IgPSB2YXIudmFsdWU7Cisg
ICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29yID0gdmFyOwogICAgICAgICAg
ICAgaWYgKHZhbHVlSW5QcmVkZWNlc3NvciA9PSBOb05vZGUpIHsKICAgICAgICAgICAgICAgICB2
YWx1ZUluUHJlZGVjZXNzb3IgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNj
ZXNzRGF0YShzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjayA/IHZhck5vIC0gbV9jb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycyAtIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSA6
IHZhck5vKSkpOwotICAgICAgICAgICAgICAgIHZhci5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRl
Y2Vzc29yKTsKKyAgICAgICAgICAgICAgICB2YXIgPSB2YWx1ZUluUHJlZGVjZXNzb3I7CiAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKQotICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFt2YXJOb10uc2V0
Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgIHByZWRl
Y2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZSh2YXJObywg
dmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fbG9jYWxzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRp
bWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJl
ZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIHBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5
KHByZWRlY2Vzc29yQmxvY2ssIHZhbHVlSW5QcmVkZWNlc3NvciwgdmFyTm8pKTsKICAgICAgICAg
ICAgIH0gZWxzZSBpZiAobV9ncmFwaFt2YWx1ZUluUHJlZGVjZXNzb3JdLm9wID09IEdldExvY2Fs
KSB7CiAgICAgICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB0aGUgVmFyaWFi
bGVBY2Nlc3NEYXRhcyBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlCkBAIC0xNzU4LDExICsxNzU4
LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnNldHVwUHJlZGVjZXNzb3JzKCkKICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbYmxvY2stPmVuZCAtIDFdOwogICAgICAgICBBU1NFUlQobm9k
ZS5pc1Rlcm1pbmFsKCkpOwogCi0gICAgICAgIGlmIChub2RlLmlzSnVtcCgpKQotICAgICAgICAg
ICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNl
dCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICBlbHNlIGlmIChub2Rl
LmlzQnJhbmNoKCkpIHsKLSAgICAgICAgICAgIG1fZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNl
dChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4
KTsKLSAgICAgICAgICAgIG1fZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAg
ICAgaWYgKG5vZGUuaXNKdW1wKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0VGFrZW5CbG9ja0lu
ZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tu
b2RlLnRha2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAg
ICAgICAgfSBlbHNlIGlmIChub2RlLmlzQnJhbmNoKCkpIHsKKyAgICAgICAgICAgIG5vZGUuc2V0
VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKSkpOworICAgICAgICAgICAgbm9kZS5z
ZXROb3RUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
bm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29y
cy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpXS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShy
ZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMTEgKzE4OCwxMSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5v
ZGVJbmRleCBub2RlSW5kZXgsIENvCiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0K
ICAgICBpZiAgKG5vZGUuaXNCcmFuY2goKSB8fCBub2RlLmlzSnVtcCgpKSB7Ci0gICAgICAgIHBy
aW50ZigiJXNUOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIGJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSkpOworICAgICAgICBwcmludGYo
IiVzVDojJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBub2RlLnRha2VuQmxvY2tJbmRleCgp
KTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0Jy
YW5jaCgpKSB7Ci0gICAgICAgIHByaW50ZigiJXNGOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDog
IiIsIGJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSkpOworICAgICAgICBwcmludGYoIiVzRjojJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIi
LCBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpKTsKICAgICAgICAgaGFzUHJpbnRlZCA9IHRydWU7
CiAgICAgfQogICAgICh2b2lkKWhhc1ByaW50ZWQ7CkBAIC0yMzksOCArMjM5LDE1IEBAIHZvaWQg
R3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KIHZvaWQgR3JhcGg6OmR1bXAoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCiB7CiAgICAgZm9yIChzaXplX3QgYiA9IDA7IGIgPCBtX2Jsb2Nr
cy5zaXplKCk7ICsrYikgewotICAgICAgICBwcmludGYoIkJsb2NrICMldSAoYmMjJXUpOiAgJXNc
biIsIChpbnQpYiwgbV9ibG9ja3NbYl0tPmJ5dGVjb2RlQmVnaW4sIG1fYmxvY2tzW2JdLT5pc09T
UlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIiKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IG1fYmxvY2tzW2JdLT5iZWdpbjsgaSA8IG1fYmxvY2tzW2JdLT5lbmQ7ICsraSkKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1tiXS5nZXQoKTsKKyAgICAgICAgcHJpbnRmKCJC
bG9jayAjJXUgKGJjIyV1KTogICVzXG4iLCAoaW50KWIsIGJsb2NrLT5ieXRlY29kZUJlZ2luLCBi
bG9jay0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7CisgICAgICAgIHByaW50
ZigiICB2YXJzOiAiKTsKKyAgICAgICAgaWYgKGJsb2NrLT5jZmFIYXNWaXNpdGVkKQorICAgICAg
ICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdEhlYWQsIHN0ZG91dCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByaW50ZigiPGVtcHR5PiIpOworICAgICAgICBwcmludGYoIlxu
Iik7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBibG9jay0+YmVnaW47IGkgPCBibG9jay0+ZW5k
OyArK2kpCiAgICAgICAgICAgICBkdW1wKGksIGNvZGVCbG9jayk7CiAgICAgfQogICAgIHByaW50
ZigiUGhpIE5vZGVzOlxuIik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dy
YXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5o
CShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgogI2lu
Y2x1ZGUgIkRGR05vZGUuaCIKICNpbmNsdWRlICJQcmVkaWN0aW9uVHJhY2tlci5oIgogI2luY2x1
ZGUgIlJlZ2lzdGVyRmlsZS5oIgpAQCAtNDMsMjkgKzQ0LDYgQEAgY2xhc3MgRXhlY1N0YXRlOwog
CiBuYW1lc3BhY2UgREZHIHsKIAotLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRpc3Rpbmd1aXNoIHZh
cnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KLWlubGluZSBib29sIG9wZXJhbmRJc0Fy
Z3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQotCi10eXBlZGVmIHVp
bnQzMl90IEJsb2NrSW5kZXg7Ci0KLS8vIEZvciBldmVyeSBsb2NhbCB2YXJpYWJsZSB3ZSB0cmFj
ayBhbnkgZXhpc3RpbmcgZ2V0IG9yIHNldCBvZiB0aGUgdmFsdWUuCi0vLyBXZSB0cmFjayB0aGUg
Z2V0IHNvIHRoYXQgdGhlc2UgbWF5IGJlIHNoYXJlZCwgYW5kIHdlIHRyYWNrIHRoZSBzZXQgdG8K
LS8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlLCBhbmQgdG8gcmVmZXJlbmNlIHRoZSBmaW5h
bCBkZWZpbml0aW9uLgotc3RydWN0IFZhcmlhYmxlUmVjb3JkIHsKLSAgICBWYXJpYWJsZVJlY29y
ZCgpCi0gICAgICAgIDogdmFsdWUoTm9Ob2RlKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBzZXRGaXJzdFRpbWUoTm9kZUluZGV4IG5vZGVJbmRleCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VCh2YWx1ZSA9PSBOb05vZGUpOwotICAgICAgICB2YWx1ZSA9IG5vZGVJbmRleDsKLSAgICB9Ci0K
LSAgICBOb2RlSW5kZXggdmFsdWU7Ci19OwotCiBzdHJ1Y3QgTWV0aG9kQ2hlY2tEYXRhIHsKICAg
ICAvLyBJdCBpcyBzYWZlIHRvIHJlZmVyIHRvIHRoZXNlIGRpcmVjdGx5IGJlY2F1c2UgdGhleSBh
cmUgc2hhZG93ZWQgYnkKICAgICAvLyB0aGUgb2xkIEpJVCdzIENvZGVCbG9jaydzIE1ldGhvZENh
bGxMaW5rSW5mby4KQEAgLTExMSw0MCArODksNiBAQCBzdHJ1Y3QgUmVzb2x2ZUdsb2JhbERhdGEg
ewogICAgIHVuc2lnbmVkIHJlc29sdmVJbmZvSW5kZXg7CiB9OwogCi10eXBlZGVmIFZlY3RvciA8
QmxvY2tJbmRleCwgMj4gUHJlZGVjZXNzb3JMaXN0OwotCi1zdHJ1Y3QgQmFzaWNCbG9jayB7Ci0g
ICAgQmFzaWNCbG9jayh1bnNpZ25lZCBieXRlY29kZUJlZ2luLCBOb2RlSW5kZXggYmVnaW4sIHVu
c2lnbmVkIG51bUFyZ3VtZW50cywgdW5zaWduZWQgbnVtTG9jYWxzKQotICAgICAgICA6IGJ5dGVj
b2RlQmVnaW4oYnl0ZWNvZGVCZWdpbikKLSAgICAgICAgLCBiZWdpbihiZWdpbikKLSAgICAgICAg
LCBlbmQoTm9Ob2RlKQotICAgICAgICAsIGlzT1NSVGFyZ2V0KGZhbHNlKQotICAgICAgICAsIG1f
YXJndW1lbnRzQXRIZWFkKG51bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fsc0F0SGVhZChu
dW1Mb2NhbHMpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdFRhaWwobnVtQXJndW1lbnRzKQotICAg
ICAgICAsIG1fbG9jYWxzQXRUYWlsKG51bUxvY2FscykKLSAgICB7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+
KiBibG9jaykKLSAgICB7Ci0gICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsK
LSAgICB9Ci0KLSAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOwotICAgIE5vZGVJbmRleCBiZWdp
bjsKLSAgICBOb2RlSW5kZXggZW5kOwotICAgIGJvb2wgaXNPU1JUYXJnZXQ7Ci0KLSAgICBQcmVk
ZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7Ci0gICAgCi0gICAgVmVjdG9yPFZhcmlhYmxlUmVj
b3JkLCA4PiBtX2FyZ3VtZW50c0F0SGVhZDsKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDE2
PiBtX2xvY2Fsc0F0SGVhZDsKLSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1f
YXJndW1lbnRzQXRUYWlsOwotICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxz
QXRUYWlsOwotfTsKLQogLy8gCiAvLyA9PT0gR3JhcGggPT09CiAvLwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNw
cAkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
ZGVHZW5lcmF0b3IzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOTMsOCArMTE5Myw4IEBA
IHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdl
bmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJh
bmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUm
IGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJs
b2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewog
ICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMTI1NCw4ICsxMjU0LDggQEAgYm9vbCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFpfREZH
T3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0g
YXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7Cisg
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7
CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24g
PSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtMTM5Niw4ICsxMzk2LDggQEAgdm9pZCBKSVRD
b2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpu
b25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5j
aE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJy
YW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJs
b2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAg
ICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxv
Y2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4g
JiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3I2NC5jcHAJKHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMxLDggKzExMzEs
OCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiB2b2lkIEpJVENv
ZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxsKE5vZGVJbmRleCBv
cGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBO
b2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2pp
dC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFr
ZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgaWYgKHRha2VuID09IChtX2Jsb2NrICsgMSkp
IHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKQEAgLTExOTIsOCArMTE5Miw4IEBAIGJvb2wg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVDb20KIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJh
bmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBa
X0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9k
ZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0
KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgp
OworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxsUmVzdWx0Q29uZGl0
aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTEzMjEsOCArMTMyMSw4IEBAIHZvaWQg
SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBi
cmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBh
dChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsK
KyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAg
ICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
IAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2ggdG8gdGhlIHRha2Vu
IGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRh
a2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBmYWxsIHRocm91Z2gu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0
b3IuaAkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTM5Myw2ICsxMzkzLDExIEBAIHBy
b3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAorICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2ppdC5ncmFwaCgpLm1fYmxvY2tzW21fYmxvY2tdLmdldCgp
OworICAgIH0KKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoY29uc3QgY2hhciogbGFi
ZWwgPSAwKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuaAkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0pJVENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwMiwyMyArNDAyLDE5IEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoREZHX09TUl9FTlRSWSkKICAgICAgICAgT1NSRW50cnlEYXRhKiBl
bnRyeSA9IGNvZGVCbG9jaygpLT5hcHBlbmRERkdPU1JFbnRyeURhdGEoYmFzaWNCbG9jay5ieXRl
Y29kZUJlZ2luLCBkaWZmZXJlbmNlQmV0d2VlbihtX3N0YXJ0T2ZDb2RlLCBsYWJlbCgpKSk7CiAg
ICAgICAgIAotICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgYWN0aW9uYWJsZVByZWRpY3Rp
b25zKGJhc2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpLCBiYXNpY0Jsb2NrLm1fbG9j
YWxzQXRIZWFkLnNpemUoKSk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJh
c2ljQmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIE5v
ZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVl
OwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0gICAgICAgICAgICAgICAg
YWN0aW9uYWJsZVByZWRpY3Rpb25zLnNldEFyZ3VtZW50KGksIGFjdGlvbmFibGVQcmVkaWN0aW9u
RnJvbVByZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCkpKTsKLSAgICAgICAgfQorICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcyA9IGJhc2ljQmxvY2sudmFsdWVzQXRIZWFkOwogICAgICAgICAKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBiYXNpY0Jsb2NrLm1fbG9jYWxz
QXRIZWFkW2ldLnZhbHVlOwotICAgICAgICAgICAgaWYgKG5vZGVJbmRleCAhPSBOb05vZGUpCi0g
ICAgICAgICAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnNldFZhcmlhYmxlKGksIGFjdGlv
bmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUobV9ncmFwaFtub2RlSW5kZXhdLnZhcmlh
YmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgLy8gRml4IHRoZSBleHBl
Y3RlZCB2YWx1ZXM6IGluIG91ciBwcm90b2NvbCwgYSBkZWFkIHZhcmlhYmxlIHdpbGwgaGF2ZSBh
biBleHBlY3RlZAorICAgICAgICAvLyB2YWx1ZSBvZiAoTm9uZSwgW10pLiBCdXQgdGhlIG9sZCBK
SVQgbWF5IHN0YXNoIHNvbWUgdmFsdWVzIHRoZXJlLiBTbyB3ZSByZWFsbHkKKyAgICAgICAgLy8g
bmVlZCAoVG9wLCBUT1ApLgorICAgICAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3Vt
ZW50IDwgYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICAgICAgaWYgKGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLmFy
Z3VtZW50KGFyZ3VtZW50KSA9PSBOb05vZGUpCisgICAgICAgICAgICAgICAgZW50cnktPm1fZXhw
ZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLm1ha2VUb3AoKTsKKyAgICAgICAgfQorICAg
ICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgYmFzaWNCbG9jay52YXJpYWJsZXNB
dEhlYWQubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICAgICAgaWYgKGJhc2lj
QmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGxvY2FsKSA9PSBOb05vZGUpCisgICAgICAgICAg
ICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLm1ha2VUb3AoKTsKICAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgYWN0aW9uYWJsZVByZWRpY3Rpb25zLnBhY2soKTsK
LSAgICAgICAgCi0gICAgICAgIGVudHJ5LT5tX3ByZWRpY3Rpb25zID0gYWN0aW9uYWJsZVByZWRp
Y3Rpb25zOwogI2Vsc2UKICAgICAgICAgVU5VU0VEX1BBUkFNKGJhc2ljQmxvY2spOwogI2VuZGlm
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gOTcwMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjYsMTAgKzI2LDggQEAKICNpZm5kZWYgREZHTm9kZV9oCiAjZGVmaW5lIERGR05vZGVfaAogCi0j
aW5jbHVkZSAiREZHU3RydWN0dXJlU2V0LmgiCiAjaW5jbHVkZSA8d3RmL0JvdW5kc0NoZWNrZWRQ
b2ludGVyLmg+CiAjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL1VuaW9u
RmluZC5oPgogCiAvLyBFbWl0IHZhcmlvdXMgbG9nZ2luZyBpbmZvcm1hdGlvbiBmb3IgZGVidWdn
aW5nLCBpbmNsdWRpbmcgZHVtcGluZyB0aGUgZGF0YWZsb3cgZ3JhcGhzLgogI2RlZmluZSBFTkFC
TEVfREZHX0RFQlVHX1ZFUkJPU0UgMApAQCAtNjcsNiArNjUsOCBAQAogI2lmIEVOQUJMRShERkdf
SklUKQogCiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIK
KyNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKICNpbmNsdWRlICJKU1ZhbHVlLmgi
CiAjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgogI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgpA
QCAtNzQsMTUgKzc0LDE2IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAot
Ly8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVyIG51bWJlciAoc3BpbGwgbG9jYXRpb24pLgot
Ly8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMgdHlwZS1jaGVja2VkIGF0IGNvbXBpbGUgdGlt
ZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMuCi1lbnVtIFZpcnR1YWxSZWdpc3RlciB7IElu
dmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9OwotQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1
YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZpcnR1YWxSZWdpc3Rlcl9pc18zMmJpdCk7Ci0K
IC8vIFR5cGUgZm9yIGEgcmVmZXJlbmNlIHRvIGFub3RoZXIgbm9kZSBpbiB0aGUgZ3JhcGguCiB0
eXBlZGVmIHVpbnQzMl90IE5vZGVJbmRleDsKIHN0YXRpYyBjb25zdCBOb2RlSW5kZXggTm9Ob2Rl
ID0gVUlOVF9NQVg7CiAKK3R5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKKworc3RydWN0IE5v
ZGVJbmRleFRyYWl0cyB7CisgICAgc3RhdGljIE5vZGVJbmRleCBkZWZhdWx0VmFsdWUoKSB7IHJl
dHVybiBOb05vZGU7IH0KK307CisKIC8vIEluZm9ybWF0aW9uIHVzZWQgdG8gbWFwIGJhY2sgZnJv
bSBhbiBleGNlcHRpb24gdG8gYW55IGhhbmRsZXIvc291cmNlIGluZm9ybWF0aW9uLAogLy8gYW5k
IHRvIGltcGxlbWVudCBPU1IuCiAvLyAoUHJlc2VudGx5IGltcGxlbWVudGVkIGFzIGEgYnl0ZWNv
ZGUgaW5kZXgpLgpAQCAtMTEwLDUxICsxMTEsNiBAQCBwcml2YXRlOgogICAgIHVpbnQzMl90IG1f
Ynl0ZWNvZGVJbmRleDsKIH07CiAKLWNsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVibGljIFVu
aW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEoKQotICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihz
dGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24o
UHJlZGljdE5vbmUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBWYXJpYWJsZUFjY2Vzc0RhdGEo
VmlydHVhbFJlZ2lzdGVyIGxvY2FsKQotICAgICAgICA6IG1fbG9jYWwobG9jYWwpCi0gICAgICAg
ICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmly
dHVhbFJlZ2lzdGVyIGxvY2FsKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2xvY2FsID09IGZp
bmQoKS0+bV9sb2NhbCk7Ci0gICAgICAgIHJldHVybiBtX2xvY2FsOwotICAgIH0KLSAgICAKLSAg
ICBpbnQgb3BlcmFuZCgpCi0gICAgewotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihs
b2NhbCgpKTsKLSAgICB9Ci0gICAgCi0gICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5cGUgcHJl
ZGljdGlvbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmluZCgpLT5t
X3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOwotICAgIH0KLSAgICAKLSAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3Rpb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVkaWN0aW9u
OwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgLy8gVGhpcyBpcyBzbGlnaHRseSBzcGFjZS1p
bmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCi0gICAgLy8gd2ls
bCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHByZWRpY3Rp
b24uIEJ1dAotICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNvZGUsIGFu
ZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCi0gICAgLy8gdXNhZ2UgZm9yIHZhcmlhYmxlIGFj
Y2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KLQotICAgIFZpcnR1YWxSZWdpc3RlciBtX2xv
Y2FsOwotICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOwotfTsKLQogc3RydWN0IFN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhIHsKICAgICBTdHJ1Y3R1cmUqIHByZXZpb3VzU3RydWN0dXJlOwog
ICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlOwpAQCAtNTY0LDYgKzUyMCw3IEBAIHN0cnVjdCBO
b2RlIHsKICAgICAKICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSgp
CiAgICAgeworICAgICAgICBBU1NFUlQoaGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOwogICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZUFjY2Vzc0RhdGEqPihtX29wSW5mbykt
PmZpbmQoKTsKICAgICB9CiAgICAgCkBAIC03NTUsMTMgKzcxMiwzNyBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIHJldHVybiBvcCAmIE5vZGVJc1Rlcm1pbmFsOwogICAgIH0KIAotICAgIHVuc2ln
bmVkIHRha2VuQnl0ZWNvZGVPZmZzZXQoKQorICAgIHVuc2lnbmVkIHRha2VuQnl0ZWNvZGVPZmZz
ZXREdXJpbmdQYXJzaW5nKCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlz
SnVtcCgpKTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvOwogICAgIH0KIAotICAgIHVuc2lnbmVk
IG5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKQorICAgIHVuc2lnbmVkIG5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXREdXJpbmdQYXJzaW5nKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsK
KyAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRUYWtl
bkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOworICAgICAgICBtX29wSW5mbyA9IGJsb2NrSW5kZXg7
CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0Tm90VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5kZXgg
YmxvY2tJbmRleCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpKTsKKyAgICAgICAg
bV9vcEluZm8yID0gYmxvY2tJbmRleDsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCB0YWtl
bkJsb2NrSW5kZXgoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1w
KCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm87CisgICAgfQorICAgIAorICAgIEJsb2NrSW5k
ZXggbm90VGFrZW5CbG9ja0luZGV4KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpc0JyYW5jaCgp
KTsKICAgICAgICAgcmV0dXJuIG1fb3BJbmZvMjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRW50cnkuY3BwCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRW50cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywzNCArNzcs
MzggQEAgdm9pZCogcHJlcGFyZU9TUkVudHJ5KEV4ZWNTdGF0ZSogZXhlYywgQwogICAgIC8vICAg
IGludG8gYSBsZXNzLWxpa2VseSBwYXRoLiBTbywgdGhlIHdpc2VzdCBjb3Vyc2Ugb2YgYWN0aW9u
IGlzIHRvIHNpbXBseSBub3QKICAgICAvLyAgICBPU1IgYXQgdGhpcyB0aW1lLgogICAgIAotICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudFVw
cGVyQm91bmQoKTsgKytpKSB7Ci0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rp
b24gPSBlbnRyeS0+bV9wcmVkaWN0aW9ucy5hcmd1bWVudChpKTsKLSAgICAgICAgaWYgKHByZWRp
Y3Rpb24gPT0gTm9BY3Rpb25hYmxlUHJlZGljdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChpID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpIHsK
KyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgeworICAgICAgICBpZiAo
YXJndW1lbnQgPj0gZXhlYy0+YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgewogI2lmIEVO
QUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVk
IGJlY2F1c2UgYXJndW1lbnQgJXUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICVzLlxuIiwgaSwg
YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJWx1IHdhcyBub3QgcGFzc2Vk
LCBleHBlY3RlZCAiLCBhcmd1bWVudCk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZh
bHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRm
KCIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFsRGF0YSwgZXhlYy0+
YXJndW1lbnQoaSAtIDEpLCBwcmVkaWN0aW9uKSkgeworICAgICAgICBKU1ZhbHVlIHZhbHVlOwor
ICAgICAgICBpZiAoIWFyZ3VtZW50KQorICAgICAgICAgICAgdmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHZhbHVlID0gZXhlYy0+YXJndW1l
bnQoYXJndW1lbnQgLSAxKTsKKyAgICAgICAgCisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLnZhbGlkYXRlKHZhbHVlKSkgewogI2lmIEVOQUJM
RShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJl
Y2F1c2UgYXJndW1lbnQgJXUgaXMgJXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+YXJndW1l
bnQoaSAtIDEpLmRlc2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJl
ZGljdGlvbikpOworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFy
Z3VtZW50ICVsdSBpcyAlcywgZXhwZWN0ZWQgIiwgYXJndW1lbnQsIHZhbHVlLmRlc2NyaXB0aW9u
KCkpOworICAgICAgICAgICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1l
bnQpLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBlbnRyeS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZVVwcGVyQm91bmQo
KTsgKytpKSB7Ci0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHByZWRpY3Rpb24gPSBlbnRy
eS0+bV9wcmVkaWN0aW9ucy52YXJpYWJsZShpKTsKLSAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAK
LSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5yZWdp
c3RlcnMoKVtpXS5qc1ZhbHVlKCksIHByZWRpY3Rpb24pKSB7CisgICAgZm9yIChzaXplX3QgbG9j
YWwgPSAwOyBsb2NhbCA8IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mTG9jYWxzKCk7
ICsrbG9jYWwpIHsKKyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChs
b2NhbCkudmFsaWRhdGUoZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKSkpIHsKICNp
ZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZh
aWxlZCBiZWNhdXNlIHZhcmlhYmxlICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIsIGksIGV4ZWMt
PnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGlj
dGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAlbHUgaXMgJXMsIGV4cGVjdGVkICIsIGxvY2FsLCBleGVj
LT5yZWdpc3RlcnMoKVtsb2NhbF0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCkpOworICAgICAgICAg
ICAgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMubG9jYWwobG9jYWwpLmR1bXAoc3Rkb3V0KTsKKyAg
ICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCShy
ZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnku
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsOCBAQAogI2lmbmRlZiBERkdPU1JFbnRyeV9o
CiAjZGVmaW5lIERGR09TUkVudHJ5X2gKIAotI2luY2x1ZGUgIkFjdGlvbmFibGVQcmVkaWN0aW9u
LmgiCisjaW5jbHVkZSAiREZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR09wZXJhbmRz
LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0zOSw3ICs0MCw3IEBAIG5hbWVzcGFjZSBERkcg
ewogc3RydWN0IE9TUkVudHJ5RGF0YSB7CiAgICAgdW5zaWduZWQgbV9ieXRlY29kZUluZGV4Owog
ICAgIHVuc2lnbmVkIG1fbWFjaGluZUNvZGVPZmZzZXQ7Ci0gICAgQWN0aW9uYWJsZVByZWRpY3Rp
b25zIG1fcHJlZGljdGlvbnM7CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV9leHBlY3Rl
ZFZhbHVlczsKIH07CiAKIGlubGluZSB1bnNpZ25lZCBnZXRPU1JFbnRyeURhdGFCeXRlY29kZUlu
ZGV4KE9TUkVudHJ5RGF0YSogb3NyRW50cnlEYXRhKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYW5kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmFuZHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPcGVy
YW5kc19oCisjZGVmaW5lIERGR09wZXJhbmRzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGRp
c3Rpbmd1aXNoIHZhcnMgJiB0ZW1wb3JhcmllcyBmcm9tIGFyZ3VtZW50cy4KK2lubGluZSBib29s
IG9wZXJhbmRJc0FyZ3VtZW50KGludCBvcGVyYW5kKSB7IHJldHVybiBvcGVyYW5kIDwgMDsgfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJhaXRzOworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorc3RydWN0IE9wZXJhbmRWYWx1ZVRyYWl0cyB7CisgICAgc3RhdGlj
IFQgZGVmYXVsdFZhbHVlKCkgeyByZXR1cm4gVCgpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCB0eXBlbmFtZSBUcmFpdHMgPSBPcGVyYW5kVmFsdWVUcmFpdHM8VD4gPgorY2xhc3MgT3Bl
cmFuZHMgeworcHVibGljOgorICAgIE9wZXJhbmRzKCkgeyB9CisgICAgCisgICAgZXhwbGljaXQg
T3BlcmFuZHMoc2l6ZV90IG51bUFyZ3VtZW50cywgc2l6ZV90IG51bUxvY2FscykKKyAgICB7Cisg
ICAgICAgIG1fYXJndW1lbnRzLmZpbGwoVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSwgbnVtQXJndW1l
bnRzKTsKKyAgICAgICAgbV9sb2NhbHMuZmlsbChUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpLCBudW1M
b2NhbHMpOworICAgIH0KKyAgICAKKyAgICBzaXplX3QgbnVtYmVyT2ZBcmd1bWVudHMoKSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0KKyAgICBzaXplX3QgbnVtYmVyT2ZMb2Nh
bHMoKSBjb25zdCB7IHJldHVybiBtX2xvY2Fscy5zaXplKCk7IH0KKyAgICAKKyAgICBUJiBhcmd1
bWVudChzaXplX3QgaWR4KSB7IHJldHVybiBtX2FyZ3VtZW50c1tpZHhdOyB9CisgICAgY29uc3Qg
VCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHNbaWR4XTsg
fQorICAgIAorICAgIFQmIGxvY2FsKHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07
IH0KKyAgICBjb25zdCBUJiBsb2NhbChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBtX2xvY2Fs
c1tpZHhdOyB9CisgICAgCisgICAgdm9pZCBzZXRMb2NhbChzaXplX3QgaWR4LCBjb25zdCBUJiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpKSB7CisgICAg
ICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fbG9jYWxzLnNpemUoKTsKKyAgICAgICAgICAgIG1f
bG9jYWxzLnJlc2l6ZShpZHggKyAxKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRT
aXplOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICAgICAgbV9sb2NhbHNb
aV0gPSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2xvY2Fsc1tpZHhdID0gdmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0QXJndW1l
bnRGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQobV9hcmd1bWVudHNbaWR4XSA9PSBUcmFpdHM6OmRlZmF1bHRWYWx1ZSgpKTsKKyAgICAg
ICAgYXJndW1lbnQoaWR4KSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldExvY2Fs
Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlkeCA+PSBtX2xvY2Fscy5zaXplKCkgfHwgbV9sb2NhbHNbaWR4XSA9PSBUcmFpdHM6OmRl
ZmF1bHRWYWx1ZSgpKTsKKyAgICAgICAgc2V0TG9jYWwoaWR4LCB2YWx1ZSk7CisgICAgfQorICAg
IAorICAgIFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpCisgICAgeworICAgICAgICBpZiAob3BlcmFu
ZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJh
bmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNp
emU7CisgICAgICAgICAgICByZXR1cm4gbV9hcmd1bWVudHNbYXJndW1lbnRdOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICByZXR1cm4gbV9sb2NhbHNbb3BlcmFuZF07CisgICAgfQorICAg
IAorICAgIGNvbnN0IFQmIG9wZXJhbmQoaW50IG9wZXJhbmQpIGNvbnN0IHsgcmV0dXJuIGNvbnN0
X2Nhc3Q8Y29uc3QgVCY+KGNvbnN0X2Nhc3Q8T3BlcmFuZHMqPih0aGlzKS0+b3BlcmFuZChvcGVy
YW5kKSk7IH0KKyAgICAKKyAgICB2b2lkIHNldE9wZXJhbmQoaW50IG9wZXJhbmQsIGNvbnN0IFQm
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7
CisgICAgICAgICAgICBpbnQgYXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgp
ICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgbV9hcmd1
bWVudHNbYXJndW1lbnRdID0gdmFsdWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHNldExvY2FsKG9wZXJhbmQsIHZhbHVlKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBU
cmFpdHM6OmRlZmF1bHRWYWx1ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFpdHM6OmRl
ZmF1bHRWYWx1ZSgpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFQsIDg+IG1f
YXJndW1lbnRzOworICAgIFZlY3RvcjxULCAxNj4gbV9sb2NhbHM7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgordm9pZCBkdW1wT3BlcmFuZHMoT3BlcmFuZHM8VD4mIG9wZXJhbmRzLCBGSUxF
KiBvdXQpCit7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IG9wZXJh
bmRzLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgaWYgKGFyZ3Vt
ZW50KQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIgIik7CisgICAgICAgIG9wZXJhbmRzLmFy
Z3VtZW50KGFyZ3VtZW50KS5kdW1wKG91dCk7CisgICAgfQorICAgIGZwcmludGYob3V0LCAiIDog
Iik7CisgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IG9wZXJhbmRzLm51bWJlck9m
TG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAgICAgZnBy
aW50ZihvdXQsICIgIik7CisgICAgICAgIG9wZXJhbmRzLmxvY2FsKGxvY2FsKS5kdW1wKG91dCk7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09wZXJhbmRzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCShyZXZpc2lvbiA5NzAxNCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAi
REZHQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZH
U2NvcmVCb2FyZC5oIgogI2luY2x1ZGUgPHd0Zi9GaXhlZEFycmF5Lmg+CkBAIC01NSw0NSArNTYs
MTEgQEAgcHVibGljOgogICAgIHZvaWQgZml4cG9pbnQoKQogICAgIHsKICNpZiBFTkFCTEUoREZH
X0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2Nr
KTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKICNlbmRpZgogCi0jaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0gMDsK
LSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gVXAgaGVyZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dh
cmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhhdCB0byBiZQotICAgICAgICAgICAgLy8gbW9y
ZSBwcm9maXRhYmxlLgotICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2Fy
ZCgpOwotICAgICAgICAgICAgaWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7Ci0gICAgICAgIAotI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKLSAgICAgICAgbV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAgICAgZG8gewotICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEZv
cndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHkt
c29ydGVkIGFuZAotICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBjb2RlLgotICAgICAgICAgICAg
cHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdl
ZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8g
QmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9n
aWNhbCBjb2RlIHdpbGwKLSAgICAgICAgICAgIC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNw
ZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQgZmxvdy4KLSAgICAgICAgICAg
IC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBm
b3J3YXJkIGZpeHBvaW50Ci0gICAgICAgICAgICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFu
ZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KLSAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOwotICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpOwot
ICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAgICAgICAKKyAgICAgICAgcHJvcGFnYXRl
QXJpdGhOb2RlRmxhZ3MoKTsKKyAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnMoKTsKICAgICAg
ICAgZml4dXAoKTsKICAgICAgICAgCiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQpAQCAtMTEwLDYgKzc3LDEzIEBAIHB1YmxpYzoKIAogICAgICAgICBhbGxvY2F0ZVZp
cnR1YWxSZWdpc3RlcnMoKTsKIAorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciB2aXJ0dWFsIHJlZ2lzdGVyIGFsbG9j
YXRpb246XG4iKTsKKyAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKKyNlbmRpZgor
CisgICAgICAgIGdsb2JhbENGQSgpOworCiAjaWYgRU5BQkxFKERGR19ERUJVR19WRVJCT1NFKQog
ICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHByb3BhZ2F0aW9uOlxuIik7CiAgICAgICAgIG1f
Z3JhcGguZHVtcChtX2NvZGVCbG9jayk7CkBAIC0yNzQsNiArMjQ4LDI1IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncyhtX2dyYXBoW21fY29tcGlsZUluZGV4
XSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MoKQorICAg
IHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIG1f
Y291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBVcCBoZXJlIHdlIHN0YXJ0IHdp
dGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0aGF0IHRvIGJlCisgICAgICAg
ICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVG
bGFnc0JhY2t3YXJkKCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7
CisgICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0ZvcndhcmQoKTsKKyAgICAgICAg
fSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCiAgICAgYm9vbCBzZXRQcmVkaWN0aW9u
KFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIEFTU0VSVChtX2dyYXBo
W21fY29tcGlsZUluZGV4XS5oYXNSZXN1bHQoKSk7CkBAIC02MDgsNyArNjAxLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQotICAgICAgICBwcmludGYoIiVzICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW21fY29t
cGlsZUluZGV4XS5wcmVkaWN0aW9uKCkpKTsKKyAgICAgICAgcHJpbnRmKCIlc1xuIiwgcHJlZGlj
dGlvblRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOwogI2Vu
ZGlmCiAgICAgICAgIAogICAgICAgICBtX2NoYW5nZWQgfD0gY2hhbmdlZDsKQEAgLTYzMiw2ICs2
MjUsMjkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyht
X2dyYXBoW21fY29tcGlsZUluZGV4XSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgcHJvcGFnYXRl
UHJlZGljdGlvbnMoKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIGRvIHsKKyAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
b3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXItb3B0aW1hbCBmb3IgYm90aCB0b3BvbG9naWNhbGx5
LXNvcnRlZCBhbmQKKyAgICAgICAgICAgIC8vIERGUy1zb3J0ZWQgY29kZS4KKyAgICAgICAgICAg
IHByb3BhZ2F0ZVByZWRpY3Rpb25zRm9yd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5n
ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhvb2QgdGhhdCBwYXRob2xv
Z2ljYWwgY29kZSB3aWxsCisgICAgICAgICAgICAvLyBjYXVzZSBzbG93bmVzcy4gTG9vcHMgKGVz
cGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAg
ICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQgZGV0ZWN0cyBpZiB0aGUg
Zm9yd2FyZCBmaXhwb2ludAorICAgICAgICAgICAgLy8gZm91bmQgYSBzb3VuZCBzb2x1dGlvbiBh
bmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCisgICAgICAgICAgICBtX2NoYW5n
ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zQmFja3dhcmQoKTsK
KyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCB0b0Rv
dWJsZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKG1fZ3JhcGhbbm9k
ZUluZGV4XS5vcCA9PSBWYWx1ZVRvTnVtYmVyKSB7CkBAIC0xNDI0LDYgKzE0NDAsODEgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgIG1fY29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVycyA9IGNh
bGxlZVJlZ2lzdGVyczsKICAgICB9CiAgICAgCisgICAgdm9pZCBwZXJmb3JtQmxvY2tDRkEoQWJz
dHJhY3RTdGF0ZSYgc3RhdGUsIEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7CisgICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsK
KyAgICAgICAgaWYgKCFibG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHBy
aW50ZigiICAgQmxvY2sgIyV1IChiYyMldSk6XG4iLCBibG9ja0luZGV4LCBibG9jay0+Ynl0ZWNv
ZGVCZWdpbik7CisjZW5kaWYKKyAgICAgICAgc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKGJsb2NrKTsK
KyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50
ZigiICAgICAgaGVhZCB2YXJzOiAiKTsKKyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1
ZXNBdEhlYWQsIHN0ZG91dCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAg
ICBmb3IgKE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YmVnaW47IG5vZGVJbmRleCA8IGJs
b2NrLT5lbmQ7ICsrbm9kZUluZGV4KSB7CisgICAgICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZUlu
ZGV4XS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgICAgIHByaW50Zigi
ICAgICAgJXMgQCV1OiAiLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCksIG5v
ZGVJbmRleCk7CisgICAgICAgICAgICBzdGF0ZS5kdW1wKHN0ZG91dCk7CisgICAgICAgICAgICBw
cmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICAgIGlmICghc3RhdGUuZXhlY3V0ZShub2Rl
SW5kZXgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjaWYgRU5BQkxFKERG
R19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICAgIHRhaWwg
cmVnczogIik7CisgICAgICAgIHN0YXRlLmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJc
biIpOworI2VuZGlmCisgICAgICAgIG1fY2hhbmdlZCB8PSBzdGF0ZS5lbmRCYXNpY0Jsb2NrKEFi
c3RyYWN0U3RhdGU6Ok1lcmdlVG9TdWNjZXNzb3JzKTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiICAgICAgdGFpbCB2YXJzOiAiKTsK
KyAgICAgICAgZHVtcE9wZXJhbmRzKGJsb2NrLT52YWx1ZXNBdFRhaWwsIHN0ZG91dCk7CisgICAg
ICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgIH0KKyAgICAKKyAgICB2b2lkIHBlcmZvcm1G
b3J3YXJkQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiQ0ZBIFsldV1cbiIsICsr
bV9jb3VudCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9j
ayA9IDA7IGJsb2NrIDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2spCisgICAgICAg
ICAgICBwZXJmb3JtQmxvY2tDRkEoc3RhdGUsIGJsb2NrKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBnbG9iYWxDRkEoKQorICAgIHsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCisgICAgICAgIG1fY291bnQgPSAwOworI2VuZGlmCisgICAgICAgIAorICAgICAgICAv
LyBUaGlzIGltcGxlbWVudHMgYSBwc2V1ZG8td29ya2xpc3QtYmFzZWQgZm9yd2FyZCBDRkEsIGV4
Y2VwdCB0aGF0IHRoZSB2aXNpdCBvcmRlcgorICAgICAgICAvLyBvZiBibG9ja3MgaXMgdGhlIGJ5
dGVjb2RlIHByb2dyYW0gb3JkZXIgKHdoaWNoIGlzIG5lYXJseSB0b3BvbG9naWNhbCksIGFuZAor
ICAgICAgICAvLyBpbnN0ZWFkIG9mIGEgd29ya2xpc3Qgd2UganVzdCB3YWxrIGFsbCBiYXNpYyBi
bG9ja3MgY2hlY2tpbmcgaWYgY2ZhU2hvdWxkUmV2aXNpdAorICAgICAgICAvLyBpcyBzZXQgdG8g
dHJ1ZS4gVGhpcyBpcyBsaWtlbHkgdG8gYmFsYW5jZSB0aGUgZWZmaWNpZW5jeSBwcm9wZXJ0aWVz
IG9mIGJvdGgKKyAgICAgICAgLy8gd29ya2xpc3QtYmFzZWQgYW5kIGZvcndhcmQgZml4cG9pbnQt
YmFzZWQgYXBwcm9hY2hlcy4gTGlrZSBhIHdvcmtsaXN0LWJhc2VkCisgICAgICAgIC8vIGFwcHJv
YWNoLCBpdCB3b24ndCB2aXNpdCBjb2RlIGlmIGl0J3MgbWVhbmluZ2xlc3MgdG8gZG8gc28gKG5v
dGhpbmcgY2hhbmdlZCBhdAorICAgICAgICAvLyB0aGUgaGVhZCBvZiB0aGUgYmxvY2sgb3IgdGhl
IHByZWRlY2Vzc29ycyBoYXZlIG5vdCBiZWVuIHZpc2l0ZWQpLiBMaWtlIGEgZm9yd2FyZAorICAg
ICAgICAvLyBmaXhwb2ludC1iYXNlZCBhcHByb2FjaCwgaXQgaGFzIGEgaGlnaCBwcm9iYWJpbGl0
eSBvZiBvbmx5IHZpc2l0aW5nIGEgYmxvY2sKKyAgICAgICAgLy8gYWZ0ZXIgYWxsIHByZWRlY2Vz
c29ycyBoYXZlIGJlZW4gdmlzaXRlZC4gT25seSBsb29wcyB3aWxsIGNhdXNlIHRoaXMgYW5hbHlz
aXMgdG8KKyAgICAgICAgLy8gcmV2aXNpdCBibG9ja3MsIGFuZCB0aGUgYW1vdW50IG9mIHJldmlz
aXRpbmcgaXMgcHJvcG9ydGlvbmFsIHRvIGxvb3AgZGVwdGguCisgICAgICAgIAorICAgICAgICBB
YnN0cmFjdFN0YXRlOjppbml0aWFsaXplKG1fZ3JhcGgpOworICAgICAgICAKKyAgICAgICAgQWJz
dHJhY3RTdGF0ZSBzdGF0ZShtX2NvZGVCbG9jaywgbV9ncmFwaCk7CisgICAgICAgIAorICAgICAg
ICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHBlcmZv
cm1Gb3J3YXJkQ0ZBKHN0YXRlKTsKKyAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKKyAgICB9
CisgICAgCiAgICAgR3JhcGgmIG1fZ3JhcGg7CiAgICAgSlNHbG9iYWxEYXRhJiBtX2dsb2JhbERh
dGE7CiAgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24g
OTcwMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNDcsNyArMzQ3LDcgQEAgSklUQ29tcGlsZXI6Okp1
bXAgU3BlY3VsYXRpdmVKSVQ6OmNvbnZlcgogICAgIHJldHVybiBub3ROdW1iZXI7CiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCB2b2lk
KiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUm
IG5vZGUsIHZvaWQqIHZwdHIsIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rpb25DaGVjaykKIHsK
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMzU5LDgg
KzM1OSwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAg
R1BSUmVnIHJlc3VsdFRhZ0dQUiA9IHJlc3VsdFRhZy5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0
UGF5bG9hZEdQUiA9IHJlc3VsdFBheWxvYWQuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoMSksIHJl
c3VsdFBheWxvYWRHUFIpOwpAQCAtMzgwLDkgKzM4Miw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUoTm9kZSYgbm9kZSwKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBpZiAoTm9k
ZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUu
Y2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmds
b2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0RXF1
YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5h
bE9iamVjdFByZWRpY3Rpb24pOwogICAgIGVsc2UgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFy
cmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBp
bGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsK
KyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlmICghYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgJiYgIWF0KG5vZGUuY2hpbGQyKCkpLnNo
b3VsZFNwZWN1bGF0ZU51bWJlcigpKQogICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBlZXBob2xl
Q29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgZWxzZSBpZiAoKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpIHx8IGF0KG5vZGUuY2hpbGQyKCkp
LnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSAmJiAhTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdl
cihhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7CkBAIC00MzgsNyArNDQw
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdChOb2RlSW5kZXggbm9kZUluZGV4LCB2b2lkKiB2cHRyKQordm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgs
IHZvaWQqIHZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9w
ZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0VGFn
KHRoaXMpOwpAQCAtNDUxLDE0ICs0NTMsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdE9yT3RoZQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xl
YW5UYWcpLCByZXN1bHRUYWcuZ3ByKCkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVl
VGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVzdWx0UGF5bG9hZEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBpc051bGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpOwotICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2
YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKKyAgICBp
ZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKIAogICAgIGlzTnVsbC5saW5rKCZtX2ppdCk7
CiAKQEAgLTQ3NCwxMSArNDc4LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dp
Y2FsTm90KE4KICAgICAvLyBGSVhNRTogTmVlZCB0byBhZGQgZmFzdCBwYXRocyBmb3Iga25vd24g
Ym9vbGVhbnMuCiAKICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmlu
YWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIp
OworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RPck90
aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsK
KyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2Vy
KCkpIHsKQEAgLTU0NCwyMCArNTQ4LDIyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVM
b2dpY2FsTm90KE4KICNlbmRpZgogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0
T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9j
a0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVj
aykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQ
UlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQUigpOwogICAgIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFs
dWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7Ci0gICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cih2cHRyKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRh
a2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBpc051bGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1
YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpOwotICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2
YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKKyAgICBp
ZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpKTsKIAogICAgIGlzTnVsbC5saW5rKCZtX2ppdCk7
CiAKQEAgLTU2OSwxNSArNTc1LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RP
ck90aGVyQnIKIAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBub2RlKQog
ewotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUu
bm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtl
bkJsb2NrSW5kZXgoKTsKIAogICAgIC8vIEZJWE1FOiBBZGQgZmFzdCBjYXNlcyBmb3Iga25vd24g
Qm9vbGVhbiEKIAogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5h
bE9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2Rl
LmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIpOworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgp
LCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIs
ICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
QXJyYXlWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEo
KSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNB
cnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51
bWJlcigpKSB7CiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJ
bnRlZ2VyKCkpIHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CkBAIC02NDMsNiAr
NjQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAg
Y2FzZSBHZXRMb2NhbDogewogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2Rl
LnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFs
dWUmIHZhbHVlID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsK
IAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRo
ZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQ
cmVkaWN0Tm9uZSkgewpAQCAtNjgzLDcgKzY5MCwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2
aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4odGFn
LmdwcigpLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJKUyk7CiAKLSAgICAgICAgRGF0YUZv
cm1hdCBmb3JtYXQgPSBpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pID8gRGF0YUZvcm1h
dEpTQm9vbGVhbiA6IERhdGFGb3JtYXRKUzsKKyAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Cisg
ICAgICAgIGlmIChpc0NlbGxQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCisgICAgICAgICAgICBm
b3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVk
aWN0aW9uKHZhbHVlLm1fdHlwZSkpCisgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNC
b29sZWFuOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlM7
CisKICAgICAgICAgbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdLmluaXRKU1ZhbHVl
KG1fY29tcGlsZUluZGV4LCBub2RlLnJlZkNvdW50KCksIHRhZy5ncHIoKSwgcmVzdWx0Lmdwcigp
LCBmb3JtYXQpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC03MTIsNyArNzI2LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICB9IGVsc2UgaWYg
KGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BS
UmVnIGNlbGxHUFIgPSBjZWxsLmdwcigpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNBcnJheVByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAg
ICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5v
ZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICB9IGVsc2UgeyAvLyBGSVhNRTogQWRkIEJvb2xlYW5QcmVkaWN0aW9uIGhhbmRsaW5nCkBA
IC0xMjk4LDcgKzEzMTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBw
cm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4K
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJh
eSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2Rl
LmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOwogCkBAIC0xMzMzLDcgKzEzNDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5
LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVj
dG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8g
YmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25v
d25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51
c2UoKTsKQEAgLTE0MjAsNyArMTQzNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1
ZVRhZ0dQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0
b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5
KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFn
ZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNDY2LDcgKzE0ODEsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BS
ID0gc3RvcmFnZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9y
YWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9k
ZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE1MTMsNyArMTUyOCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDog
ewotICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBCbG9j
a0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAgaWYgKHRha2Vu
ICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0
YWtlbik7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKQEAgLTE1MjQsOCArMTUz
OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
aWYgKGlzU3RyaWN0SW50MzIobm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3Bl
cmFuZCBvcCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2Rl
Lm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgICAgICBCbG9ja0luZGV4IHRha2Vu
ID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFr
ZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvOwogICAgICAgICAgICAgCkBAIC0xNzM2LDcgKzE3NTEsOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc09iamVjdFBy
ZWRpY3Rpb24oYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihK
SVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSks
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdW
UHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRk
cmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAg
Y2VsbFJlc3VsdCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTc3OCw5ICsxNzk0LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdG90
eXBlIGlzIGFuIG9iamVjdC4gSWYgd2UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZQogICAgICAgICAv
LyB0aGF0IGl0J3MgYSBGaW5hbE9iamVjdCB0aGVuIHdlIHNwZWN1bGF0ZSBvbiB0aGF0IGRpcmVj
dGx5LiBPdGhlcndpc2Ugd2UKICAgICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNl
ZCkgY2hlY2suCi0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdCgpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90
b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNGaW5hbE9iamVjdFZQdHIpKSk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgeworICAgICAgICAgICAg
aWYgKCFpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBy
b3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKICAgICAgICAgfQpAQCAtMTkx
Niw3ICsxOTMzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25BcnJh
eShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHJlc3VsdEdQUik7CkBAIC0xOTM1LDcgKzE5NTIsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICAg
ICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3Ry
aW5nVlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQ
Uik7CkBAIC0xOTUyLDYgKzE5NjksMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6IHsKKyAgICAgICAg
aWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5pc1N1YnNldE9m
KG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
CiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CkBAIC0yMDc4LDcg
KzIxMDAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNjcmF0Y2hH
UFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKKyAgICAgICAgaWYgKCFtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuZG9lc05vdENvbnRhaW5BbnlP
dGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpCisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOwogICAgICAg
ICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZSAhPSBtX2ppdC5jb2RlQmxvY2soKS0+Z2xv
YmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgpKSB7CiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUtPnN0
cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hl
Y2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gOTcwMTQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTAsNyArNDUwLDcgQEAgSklUQ29tcGlsZXI6Okp1bXAgU3BlY3VsYXRp
dmVKSVQ6OmNvbnZlcgogICAgIHJldHVybiBub3ROdW1iZXI7CiB9CiAKLXZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyKQordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQq
IHZwdHIsIFByZWRpY3Rpb25DaGVja2VyIHByZWRpY3Rpb25DaGVjaykKIHsKICAgICBTcGVjdWxh
dGVDZWxsT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtNDYwLDggKzQ2MCwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIG9wMkdQ
UiA9IG9wMi5ncHIoKTsKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAg
IAotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9w
MkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFw
cmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2pp
dC5tb3ZlKEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CkBAIC01MDEsOSArNTAzLDkgQEAg
Ym9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogCiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CiAgICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRT
cGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkp
KQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2Rl
LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJl
ZGljdGlvbik7CiAgICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hv
dWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkK
LSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rpb24pOwogICAgIGVsc2UK
ICAgICAgICAgbm9uU3BlY3VsYXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9u
LCBvcGVyYXRpb24pOwogICAgIApAQCAtNTI5LDcgKzUzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVWYWx1ZUFkZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCAqdnB0cikKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXgg
bm9kZUluZGV4LCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAg
IEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKQEAgLTUzNyw3ICs1MzksOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0T3JPdGhlCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTU0
NSw3ICs1NDgsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAg
ICAgCiAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICBtX2ppdC5hbmRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgcmVzdWx0
R1BSKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0
aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIG1faml0Lm1v
dmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRH
UFIpOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNTY2LDExICs1NzAsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9i
amVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qo
bm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7Cisg
ICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2Fs
Tm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAg
ICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkg
ewpAQCAtNjMwLDE5ICs2MzQsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2lj
YWxOb3QoTgogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgRGF0
YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0KIAotdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJ
bmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0cikK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBu
b2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZw
dHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFs
dWUodGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3Rlcik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAgICAgCiAg
ICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVm
aW5lZCksIHZhbHVlR1BSKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIGlmIChu
ZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAg
ICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgYWRkQnJhbmNoKG1faml0
Lmp1bXAoKSwgbm90VGFrZW4pOwogICAgIApAQCAtNjU0LDggKzY2MCw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsK
ICAgICAKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5k
ZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChu
b2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90
VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hp
bGQxKCkpKSB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0
aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CkBAIC02NzMsOSArNjc5LDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAKICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVj
dE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9i
YWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJC
cmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGVt
aXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVy
QnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgp
KS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewogICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBib29sIGludmVydCA9
IGZhbHNlOwpAQCAtNzA4LDkgKzcxNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSYgbm8KICAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7CiAgICAgICAgICAgICBh
ZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkp
KSksIG5vdFRha2VuKTsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YWtlbik7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIGlmIChwcmVkaWN0Qm9vbGVhbikgeworCiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAg
ICAgfSBlbHNlIHsKQEAgLTc0OCwxNSArNzUyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZhbHVlc0F0SGVh
ZC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVk
aWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KLSAg
ICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKKyAgICAgICAgaWYgKHByZWRp
Y3Rpb24gPT0gUHJlZGljdE5vbmUgfHwgdmFsdWUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAoaXNJ
bnQzMlByZWRpY3Rpb24odmFsdWUubV90eXBlKSkgewogICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAK
ICAgICAgICAgICAgIC8vIExpa2UgaW50ZWdlclJlc3VsdCwgYnV0IGRvbid0IHVzZUNoaWxkcmVu
IC0gb3VyIGNoaWxkcmVuIGFyZSBwaGkgbm9kZXMsCkBAIC03NzUsOSArNzgwLDkgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2dwcnMucmV0YWlu
KHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogCiAgICAgICAg
IERhdGFGb3JtYXQgZm9ybWF0OwotICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGlj
dGlvbikpCisgICAgICAgIGlmIChpc0NlbGxQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAg
ICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNDZWxsOwotICAgICAgICBlbHNlIGlmIChpc0Jv
b2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5Q
cmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0
SlNCb29sZWFuOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0
SlM7CkBAIC04MjAsNyArODI1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSBjZWxsLmdwcigpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAg
ICAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIs
IEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTE0MDgsNyArMTQxNCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJh
c2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92
ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3Rl
ZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAg
ICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKQEAgLTE0NDIsNyArMTQ0OCw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5l
ZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBo
YXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUg
Y2hlY2suCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKIAogICAgICAgICBiYXNlLnVzZSgpOwpAQCAtMTUyNCw3ICsxNTMwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAg
d3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJp
ZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CiAKLSAg
ICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE1Njcs
NyArMTU3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcg
c3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAg
ICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAg
ICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTYxMCw3ICsx
NjE2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2pp
dC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRl
eCgpOwogICAgICAgICBpZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwpAQCAtMTYyMSw4ICsxNjI3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpKSB8
fCBhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5i
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwot
ICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRl
eEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAg
ICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgICAg
ICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAKQEAgLTE3
OTUsOSArMTgwMSwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0
VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CisgICAgICAgICAgICBpZiAoIWlzT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0
aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BS
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRj
aEdQUik7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4
KTsKQEAgLTE4MDcsNyArMTgxNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgp
KS5wcmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlz
VmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29t
cGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBpZiAo
IWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRD
b21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRy
KSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODQ3LDkgKzE4NTYs
MTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAv
LyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBo
YXZlIHJlYXNvbiB0byBiZWxpZXZlCiAgICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0
IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAgICAg
ICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKLSAg
ICAgICAgZWxzZSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVGaW5hbE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwor
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hH
UFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1
cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihP
YmplY3RUeXBlKSkpOwogICAgICAgICB9CkBAIC0xOTc4LDcgKzE5ODgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0g
YmFzZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAg
ICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsK
QEAgLTE5OTcsNyArMjAwNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tu
b3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3Ry
aW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKQEAgLTIwMTIsNiArMjAyMiwxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGlmIChtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVj
dHVyZVNldCgpKSkgeworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBB
U1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwpAQCAtMjEzMSw3ICsyMTQ2LDggQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
YmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNo
UHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1l
dGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmRvZXNOb3RDb250YWluQW55T3RoZXJUaGFuKG1l
dGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKICAgICAgICAgaWYgKG1ldGhv
ZENoZWNrRGF0YS5wcm90b3R5cGUgIT0gbV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgp
LT5tZXRob2RDYWxsRHVtbXkoKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxl
cjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEucHJvdG90eXBlLT5zdHJ1Y3R1cmVBZGRy
ZXNzKCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQu
YnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90
b3R5cGVTdHJ1Y3R1cmUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gOTcwMTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDggKzEyNSw4IEBAIHZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25k
aXRpb24pCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0g
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZURvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMTM3LDExICsxMzcsMTEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YgogICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hO
b2RlSW5kZXgsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2
b2lkKiB2cHRyLCBQcmVkaWN0aW9uQ2hlY2tlciBwcmVkaWN0aW9uQ2hlY2spCiB7CiAgICAgTm9k
ZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtl
biA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5
dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2Vu
QmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwogICAgIApAQCAtMTU4LDggKzE1
OCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwog
ICAgIAotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYg
KCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOwogICAgIAogICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDFH
UFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkK
QEAgLTE2OSw4ICsxNzEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVP
YmplCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5v
ZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJh
bmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkp
OwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JC
eXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAg
QmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxv
Y2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAg
ICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9j
ay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAm
IGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgpAQCAt
MjE5LDExICsyMjEsMTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJh
bgogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUu
Y2hpbGQyKCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5v
ZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2Rl
LmNoaWxkMigpKSkpIHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5
KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0
VlB0cik7CisgICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBi
cmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlz
RmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgfSBlbHNlIGlmIChub2Rl
Lm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpOworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxp
dHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
LCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjU2LDE4
ICsyNTgsMjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAg
IG1faml0LmJyZWFrcG9pbnQoKTsKICNlbmRpZgogCi0gICAgQVNTRVJUKG1fYXJndW1lbnRzLnNp
emUoKSA9PSBibG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkpOworICAgIEFTU0VSVChtX2Fy
Z3VtZW50cy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFk
W2ldLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVz
QXRIZWFkLmFyZ3VtZW50KGkpOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKICAg
ICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmls
ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3Vy
Y2U6OmZvclByZWRpY3Rpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJl
ZGljdGlvbigpKTsKICAgICB9CiAgICAgCi0gICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9
PSBibG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOworICAgIG1fc3RhdGUucmVzZXQoKTsKKyAg
ICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jaygmYmxvY2spOworICAgIAorICAgIEFTU0VSVChtX3Zh
cmlhYmxlcy5zaXplKCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZh
bHVlOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFk
LmxvY2FsKGkpOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAg
IG1fdmFyaWFibGVzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAg
ICAgIGVsc2UKQEAgLTMzNyw2ICszNDIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KEJhc2ljQmxvY2smCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICNlbmRpZgogICAg
ICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0IHN0YXRlIGlzIHJl
bWF0ZXJpYWxpemVkIGZvciB0aGUgbmV4dCBub2RlLgorICAgICAgICBtX3N0YXRlLmV4ZWN1dGUo
bV9jb21waWxlSW5kZXgpOworICAgICAgICAKICAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJh
dGUoKSkKICAgICAgICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC01MzcsNyAr
NTQ1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQQogICAgIEdQ
UlJlZyBzdHJpbmdSZWcgPSBzdHJpbmcuZ3ByKCk7CiAgICAgR1BSUmVnIGluZGV4UmVnID0gaW5k
ZXguZ3ByKCk7CiAgICAgCi0gICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQor
ICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ1JlZyks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJp
bmdWUHRyKSkpOwogICAgIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZp
bHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UK
QEAgLTU2Niw3ICs1NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxP
blN0CiAgICAgR1BSUmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCi0gICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hp
bGQxKCkpKQorICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzU3RyaW5nVlB0cikpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2Fu
IGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFy
Z2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmgJKHJldmlzaW9uIDk3MDE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFC
TEUoREZHX0pJVCkKIAorI2luY2x1ZGUgPGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg+CiAjaW5jbHVk
ZSA8ZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgewpAQCAtNDE3LDQzICs0MTgsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGlu
Zm8uaXNKU0ludGVnZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0tub3duQXJyYXkoTm9k
ZUluZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChvcDEpOwotICAgICAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKLSAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAg
IHJldHVybiBpc0FycmF5UHJlZGljdGlvbihub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCkpOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6Ci0gICAgICAg
IGNhc2UgTmV3QXJyYXlCdWZmZXI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0tub3duU3RyaW5nKE5vZGVJbmRleCBvcDEpCi0gICAg
ewotICAgICAgICBzd2l0Y2ggKGF0KG9wMSkub3ApIHsKLSAgICAgICAgY2FzZSBTdHJDYXQ6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIGJv
b2wgY29tcGFyZShOb2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1h
Y3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSik7CiAgICAg
Ym9vbCBjb21waWxlUGVlcEhvbGVCcmFuY2goTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBaX0RGR09wZXJh
dGlvbl9FSkopOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlJiwg
Tm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24pOwogICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmLCBOb2RlSW5k
ZXggYnJhbmNoTm9kZUluZGV4LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKLSAgICB2
b2lkIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNo
Tm9kZUluZGV4LCB2b2lkKiB2cHRyKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShO
b2RlJiwgdm9pZCogdnB0cik7CisgICAgdm9pZCBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0
eShOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0ciwgUHJlZGljdGlv
bkNoZWNrZXIpOworICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2
cHRyLCBQcmVkaWN0aW9uQ2hlY2tlcik7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSYp
OwotICAgIHZvaWQgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCB2YWx1
ZSwgdm9pZCogdnB0cik7CisgICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qo
Tm9kZUluZGV4IHZhbHVlLCB2b2lkKiB2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsK
ICAgICB2b2lkIGNvbXBpbGVMb2dpY2FsTm90KE5vZGUmKTsKLSAgICB2b2lkIGVtaXRPYmplY3RP
ck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRl
eCBub3RUYWtlbiwgdm9pZCAqdnB0cik7CisgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChOb2RlSW5kZXggdmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgZW1pdEJy
YW5jaChOb2RlJik7CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7
CkBAIC01NzUsNiArNTQ5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsK
ICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CiAgICAgCisgICAgQWJzdHJhY3RT
dGF0ZSBtX3N0YXRlOworICAgIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3Zl
cnlGb3IoY29uc3QgVmFsdWVTb3VyY2UmKTsKIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZh
bHVlUmVjb3ZlcnlGb3IoaW50IG9wZXJhbmQpCkBAIC04MDcsNiArNzgzLDcgQEAgaW5saW5lIFNw
ZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV92YXJpYWJsZXMoaml0Lmdy
YXBoKCkubV9sb2NhbFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1l
cmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKQorICAgICwgbV9zdGF0ZShtX2ppdC5jb2RlQmxv
Y2soKSwgbV9qaXQuZ3JhcGgoKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCShyZXZpc2lvbiA5NzAxNCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYg
KzI2LDEyIEBACiAjaWZuZGVmIERGR1N0cnVjdHVyZVNldF9oCiAjZGVmaW5lIERGR1N0cnVjdHVy
ZVNldF9oCiAKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM0LDYgKzQwLDggQEAg
Y2xhc3MgU3RydWN0dXJlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZTsKKwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1
cmVTZXQoKSB7IH0KQEAgLTQzLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9zdHJ1Y3R1
cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1fc3RydWN0dXJlcy5jbGVhcigpOworICAgIH0KKyAgICAKICAgICB2b2lk
IGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghY29udGFp
bnMoc3RydWN0dXJlKSk7CkBAIC0xMDQsMTAgKzExNyw1MCBAQCBwdWJsaWM6CiAgICAgCiAgICAg
U3RydWN0dXJlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmxhc3QoKTsgfQog
CisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAorICAg
IHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSByZXN1bHQgPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytp
KQorICAgICAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKHJlc3VsdCwgcHJlZGljdGlvbkZyb21TdHJ1
Y3R1cmUobV9zdHJ1Y3R1cmVzW2ldKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZXMuc2l6ZSgpICE9IG90
aGVyLm1fc3RydWN0dXJlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNbaV0p
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsICJbIik7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoaSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7Cisg
ICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmVzW2ldKTsKKyAgICAgICAg
fQorICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKyAgICAKIHByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisgICAgCiAgICAg
VmVjdG9yPFN0cnVjdHVyZSosIDI+IG1fc3RydWN0dXJlczsKIH07CiAKIH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKIAorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAjZW5kaWYgLy8gREZH
U3RydWN0dXJlU2V0X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAorI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGFfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisvLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBs
b2NhdGlvbikuCisvLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQgYXQg
Y29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KK2VudW0gVmlydHVhbFJl
Z2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07CitDT01QSUxFX0FTU0VSVChz
aXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVyX2lz
XzMyYml0KTsKKworY2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZh
cmlhYmxlQWNjZXNzRGF0YT4geworcHVibGljOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCisg
ICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWluKCkpKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9u
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVn
aXN0ZXIgbG9jYWwpCisgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0
ZXIgbG9jYWwoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xv
Y2FsKTsKKyAgICAgICAgcmV0dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGludCBvcGVy
YW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlv
biwgcHJlZGljdGlvbik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlv
bigpCisgICAgeworICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50
LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUgdGhl
IHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0Cisg
ICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0
IGV4cGVjdCBERkcgc3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVz
IGRvIGJlIHNpZ25pZmljYW50LgorCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7CisgICAg
UHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110310</attachid>
            <date>2011-10-09 13:40:49 -0700</date>
            <delta_ts>2011-10-10 15:48:11 -0700</delta_ts>
            <desc>the patch - merged with ByVal changes</desc>
            <filename>cfa_patch_10.diff</filename>
            <type>text/plain</type>
            <size>168863</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRlZCBhIGNvbnRyb2wgZmxvdyBhbmFseXNpcyAoQ0ZBKS4gSXQgY3VycmVu
dGx5IHByb3BhZ2F0ZXMgdHlwZQorICAgICAgICBwcm9vZnMgb25seS4gRm9yIGV4YW1wbGUsIGlm
IGFsbCBwcmVkZWNlc3NvcnMgdG8gYSBiYXNpYyBibG9jayBoYXZlCisgICAgICAgIGNoZWNrcyB0
aGF0IHZhcmlhYmxlIFggaXMgYSBKU0ZpbmFsT2JqZWN0IHdpdGggc3RydWN0dXJlIDB4YWJjZGVm
LCB0aGVuCisgICAgICAgIHRoaXMgYmFzaWMgYmxvY2sgd2lsbCBub3cga25vdyB0aGlzIGZhY3Qg
YW5kIHdpbGwga25vdyB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgIGhhdmUgdG8gZW1pdCBlaXRo
ZXIgSlNGaW5hbE9iamVjdCBjaGVja3Mgb3IgYW55IHN0cnVjdHVyZSBjaGVja3Mgc2luY2UKKyAg
ICAgICAgdGhlIHN0cnVjdHVyZSBpcyBwcmVjaXNlbHkga25vdy4gVGhlIENGQSB0YWtlcyBoZWFw
IHNpZGUtZWZmZWN0cyBpbnRvCisgICAgICAgIGFjY291bnQgKHRob3VnaCBzb21ld2hhdCBjb25z
ZXJ2YXRpdmVseSksIHNvIHRoYXQgaWYgdGhlIG9iamVjdCBwb2ludGVkCisgICAgICAgIHRvIGJ5
IHZhcmlhYmxlIFggY291bGQgaGF2ZSBwb3NzaWJseSB1bmRlcmdvbmUgYSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbgorICAgICAgICB0aGVuIHRoaXMgaXMgcmVmbGVjdGVkOiB0aGUgYW5hbHlzaXMgbWF5
IHNpbXBseSBzYXkgdGhhdCBYJ3Mgc3RydWN0dXJlCisgICAgICAgIGlzIHVua25vd24uCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gcHJvcGFnYXRlcyBhIHdlYWx0aCBvZiBvdGhlciB0eXBl
IGluZm9ybWF0aW9uIHdoaWNoIGlzCisgICAgICAgIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZC4g
Rm9yIGV4YW1wbGUsIHdlIG5vdyBrbm93IHdoZW4gYSB2YXJpYWJsZSBjYW4KKyAgICAgICAgb25s
eSBob2xkIGRvdWJsZXMuIEV2ZW4gaWYgYSB2YXJpYWJsZSBtYXkgaG9sZCBvdGhlciB0eXBlcyBh
dCBkaWZmZXJlbnQKKyAgICAgICAgcG9pbnRzIGluIGl0cyBsaXZlIHJhbmdlLCB3ZSBjYW4gc3Rp
bGwgcHJvdmUgZXhhY3RseSB3aGVuIGl0IHdpbGwgb25seQorICAgICAgICBiZSBkb3VibGUuCisg
ICAgICAgIAorICAgICAgICBUaGVyZSdzIGEgYnVuY2ggb2Ygc3R1ZmYgdGhhdCB0aGUgQ0ZBIGNv
dWxkIGRvIHRoYXQgaXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgZG8sIGxpa2UgcHJlY2lzZSBo
YW5kbGluZyBvZiBQdXRTdHJ1Y3R1cmUgKGkuZS4gc3RydWN0dXJlIHRyYW5zaXRpb25zKSwKKyAg
ICAgICAgcHJlY2lzZSBoYW5kbGluZyBvZiBDaGVja0Z1bmN0aW9uIGFuZCBDaGVja01ldGhvZCwg
ZXRjLiBTbyB0aGlzIGlzCisgICAgICAgIHZlcnkgbXVjaCBpbnRlbmRlZCB0byBiZSBhIHN0YXJ0
aW5nIHBvaW50IHJhdGhlciB0aGFuIGFuIGVuZCB1bnRvCisgICAgICAgIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaXMgYSAyJSB3aW4gb24gVjggKG1vc3RseSBkdWUgdG8gYSAxNiUg
d2luIG9uIHJpY2hhcmRzKSBhbmQgYSAxJSB3aW4KKyAgICAgICAgb24gS3Jha2VuIChtb3N0bHkg
ZHVlIHRvIGEgNiUgd2luIG9uIGltYWdpbmctZGVzYXR1cmF0ZSkuIE5ldXRyYWwgb24KKyAgICAg
ICAgU3VuU3BpZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvblRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpp
c0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
YXNpY0Jsb2NrOjpnZXRCeXRlY29kZUJlZ2luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXR1cFByZWRlY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpi
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0VGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzZXROb3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFr
ZW5CbG9ja0luZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Om9wZXJhbmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kVmFsdWVUcmFp
dHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Ok9wZXJhbmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fscyk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWxGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6
Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0T3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6cGVyZm9ybUZvcndhcmRDRkEpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6Omdsb2JhbENGQSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDogQWRkZWQuCisKIDIw
MTEtMTAtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcg
c2hvdWxkIG5vdCBhbHdheXMgc3BlY3VsYXRlIHRoYXQgYSBCeVZhbCBhY2Nlc3MgaGFzIGFuIGlu
dGVnZXIgaW5kZXgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1
ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKLQlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBcCkBAIC0xMDUsNiArMTA0LDEwIEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTGFiZWxTY29wZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVn
aXN0ZXJJRC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29lci9kZmcvREZHQmFzaWNCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAgXApAQCAtMTIyLDYgKzEyNSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhbmRzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBcCkBAIC0xMzUsNiArMTM5
LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVTZXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNp
b24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTQzOCwxMCArMTQzOCw2IEBACiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRl
Y29kZVxDb2RlQmxvY2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE1ODUsNiArMTU4MSwx
MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGRmZ1xERkdJbnRyaW5zaWMuaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgog
ICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAg
PEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwu
LlxkZmdcREZHT1NSRW50cnkuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAgICAgIDwvRmlsdGVy
PgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUxLDgg
KzUxLDEzIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFB
MzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlD
MDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNw
cCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNG
Q0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNEMzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5k
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAx
NzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8q
IERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNG
Q0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdB
YnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQz
RkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8q
IERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
Y3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5
RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi87IH07Ci0JCTBGNjM2REEy
MTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZB
IC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1Ry
ZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAg
Ki87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsg
fTsgfTsKQEAgLTgwOSw4ICs4MTQsMTMgQEAKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6
ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5
QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1
ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZn
L0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzEx
NDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR09wZXJhbmRzLmg7IHBhdGggPSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8q
IFBhY2tlZEludFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNr
ZWRJbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2MzZEQTExNDJE
MjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFjdGlvbmFibGVQcmVkaWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNC
MjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyODMsNiArMjI5MywxMiBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjYyMDE2
RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCisJCQkJMEY2MjAx
NkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKKwkJCQkwRjYyMDE2
RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGNjIwMTcw
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEY2MjAxNzExNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi8sCisJCQkJMEY2MjAxNzIxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovLAogCQkJCTBGRkY0QkIyMTQzOTU1
RTYwMDY1NUJDMCAvKiBERkdTdHJ1Y3R1cmVTZXQuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhERjgy
MDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovLApAQCAtMjM4NCw3ICsyNDAwLDYg
QEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2
NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywKIAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAx
NzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4NzAsMTMgKzI4ODUsMTcgQEAKIAkJCQlBNzA0
NTZCMDE0MjdGQjkxMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9u
YWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NTIxRTEzMTQyOTE2OUEwMDND
OEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ1MkFBRTE0MzAzNUEwMDAy
NkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg4MEYxRTE0MzI4QkI5
MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xvYmFsVGhp
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNGQ0QzNzAw
NjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3NjE0M0ZD
RDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAx
NzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTM0MDgsNiArMzQyNyw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFBODAwQjA4
RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4
MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCShyZXZpc2lvbiA5NzAzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWN0aW9uYWJsZVByZWRpY3Rpb25faAot
I2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCi0KLSNpbmNsdWRlICJKU0FycmF5LmgiCi0j
aW5jbHVkZSAiSlNWYWx1ZS5oIgotI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKLSNpbmNsdWRl
IDx3dGYvUGFja2VkSW50VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBBbiBhY3Rp
b25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQgb24gc3RvcmVzIHRvIGxv
Y2FsIHZhcmlhYmxlcwotLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4gcGFzc2luZyBhcmd1bWVu
dHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCi0vLyBpbiBDb2RlQmxvY2su
Ci0KLWVudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24gewotICAgIE5vQWN0aW9uYWJsZVByZWRpY3Rp
b24sCi0gICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKLSAgICBFbmZvcmNlQXJyYXlQcmVkaWN0
aW9uLAotICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgotfTsKLQotaW5saW5lIEFjdGlvbmFi
bGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUoUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uKQotewotICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKLSAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rpb247Ci0gICAgCi0gICAg
aWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3Jj
ZUFycmF5UHJlZGljdGlvbjsKLSAgICAKLSAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjsKLSAgICAK
LSAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKLX0KLQotaW5saW5lIGJvb2wgdmFs
dWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVl
LCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQotewotICAgIHN3aXRjaCAocHJlZGlj
dGlvbikgewotICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJu
IHZhbHVlLmlzSW50MzIoKTsKLQotICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKLSAg
ICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0KLSAgICBjYXNlIEVu
Zm9yY2VCb29sZWFuUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBO
b0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQot
Ci1pbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhBY3Rpb25h
YmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQotewotICAgIHN3aXRjaCAocHJlZGljdGlvbikgewot
ICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNl
SW50MzIiOwotICAgICAgICAKLSAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246Ci0gICAg
ICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKLSAgICAgICAgCi0gICAgY2FzZSBFbmZvcmNlQm9v
bGVhblByZWRpY3Rpb246Ci0gICAgICAgIHJldHVybiAiRW5mb3JjZUJvb2xlYW4iOwotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFibGVQcmVkaWN0aW9uIjsK
LSAgICB9Ci19Ci0KLXR5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlvbmFibGVQcmVkaWN0aW9u
LCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKLQotY2xhc3MgQWN0aW9uYWJsZVByZWRp
Y3Rpb25zIHsKLXB1YmxpYzoKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMoKSB7IH0KLQotICAg
IEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bVZhcmlhYmxlcykKLSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLmVuc3VyZVNpemUobnVtQXJn
dW1lbnRzKTsKLSAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShudW1WYXJpYWJsZXMpOwot
ICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICBtX3ZhcmlhYmxlcy5jbGVh
ckFsbCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3Vt
ZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fYXJndW1l
bnRzLnNldChhcmd1bWVudCwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJl
ZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChh
cmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gTm9BY3Rp
b25hYmxlUHJlZGljdGlvbjsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldChhcmd1bWVu
dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0VmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUs
IEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV92YXJpYWJsZXMu
c2V0KHZhcmlhYmxlLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQotICAgIHsKLSAgICAgICAgaWYgKHZhcmlh
YmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uOwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMuZ2V0KHZhcmlhYmxlKTsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJvdW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdmFyaWFibGVVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdm9p
ZCBwYWNrKCkKLSAgICB7Ci0gICAgICAgIHBhY2tWZWN0b3IobV9hcmd1bWVudHMpOwotICAgICAg
ICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0
YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3ImIHZlY3RvcikK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCi0gICAgICAgICAgICAg
ICAgbGFzdFNldEluZGV4ID0gaTsKLSAgICAgICAgfQotICAgICAgICB2ZWN0b3IucmVzaXplKGxh
c3RTZXRJbmRleCArIDEpOwotICAgIH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZl
Y3RvciBtX2FyZ3VtZW50czsKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX3Zhcmlh
YmxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQWN0aW9uYWJsZVBy
ZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVkaWN0ZWRUeXBlLmNwcAkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDMyICs0
NCw1NSBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiAgICAgc3Rh
dGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hh
cj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKICAgICAKKyAgICBib29sIGlzVG9wID0gdHJ1ZTsK
KyAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Q2VsbE90aGVyKQogICAgICAgICBwdHIuc3Ry
Y2F0KCJPdGhlcmNlbGwiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAg
CiAgICAgaWYgKHZhbHVlICYgUHJlZGljdE9iamVjdE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0
KCJPdGhlcm9iaiIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAg
ICBpZiAodmFsdWUgJiBQcmVkaWN0RmluYWxPYmplY3QpCiAgICAgICAgIHB0ci5zdHJjYXQoIkZp
bmFsIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogCiAgICAgaWYgKHZhbHVl
ICYgUHJlZGljdEFycmF5KQogICAgICAgICBwdHIuc3RyY2F0KCJBcnJheSIpOworICAgIGVsc2UK
KyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0U3Ry
aW5nKQogICAgICAgICBwdHIuc3RyY2F0KCJTdHJpbmciKTsKKyAgICBlbHNlCisgICAgICAgIGlz
VG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMyKQogICAgICAg
ICBwdHIuc3RyY2F0KCJJbnQiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdERvdWJsZSkKICAgICAgICAgcHRyLnN0cmNhdCgi
RG91YmxlIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlm
ICh2YWx1ZSAmIFByZWRpY3RCb29sZWFuKQogICAgICAgICBwdHIuc3RyY2F0KCJCb29sIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RPdGhlcikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXIiKTsKKyAgICBlbHNlCisgICAg
ICAgIGlzVG9wID0gZmFsc2U7CisgICAgCisgICAgaWYgKGlzVG9wKQorICAgICAgICByZXR1cm4g
IlRvcCI7CiAgICAgCiAgICAgKnB0cisrID0gMDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gOTcwMzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRp
Y3RCb29sZWEKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RPdGhlciAgICAgICAg
ID0gMHg0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCiBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4N2ZmZjsgLy8gSXQg
Y2FuIGJlIGFueSBvZiB0aGUgYWJvdmUuCiAKK3R5cGVkZWYgYm9vbCAoKlByZWRpY3Rpb25DaGVj
a2VyKShQcmVkaWN0ZWRUeXBlKTsKKwogaW5saW5lIGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVk
aWN0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3RDZWxsKSAm
JiAhKHZhbHVlICYgflByZWRpY3RDZWxsKTsKQEAgLTExNSw2ICsxMTcsMTAgQEAgaW5saW5lIGJv
b2wgaXNPdGhlclByZWRpY3Rpb24oUHJlZGljdGVkVAogY29uc3QgY2hhciogcHJlZGljdGlvblRv
U3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpOwogI2VuZGlmCiAKKy8vIE1lcmdlIHR3byBwcmVk
aWN0aW9ucy4gTm90ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGp1c3QgZG9lcyBsZWZ0IHwgcmlnaHQu
IEl0IG1heQorLy8gc2VlbSB0ZW1wdGluZyB0byBkbyBzbyBkaXJlY3RseSwgYnV0IHlvdSB3b3Vs
ZCBiZSBkb2luZyBzbyBhdCB5b3VyIG93biBwZXJpbCwKKy8vIHNpbmNlIHRoZSBtZXJnaW5nIHBy
b3RvY29sIFByZWRpY3RlZFR5cGUgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSAoYW5kIGhhcyBhbHJl
YWR5CisvLyBjaGFuZ2VkIHNldmVyYWwgdGltZXMgaW4gaXRzIGhpc3RvcnkpLgogaW5saW5lIFBy
ZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCiB7CiAgICAgcmV0dXJuIGxlZnQgfCByaWdodDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFj
dFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisjZGVmaW5lIEVOQUJMRV9DRkFfUFJPRklMSU5HIDAKKworI2lmIEVOQUJMRShD
RkFfUFJPRklMSU5HKQorI2RlZmluZSBQUk9GSUxFKGZsYWcpIFNhbXBsaW5nRmxhZ3M6OlNjb3Bl
ZEZsYWcgc2NvcGVkRmxhZyhmbGFnKQorI2Vsc2UKKyNkZWZpbmUgUFJPRklMRShmbGFnKSBkbyB7
IH0gd2hpbGUgKGZhbHNlKQorI2VuZGlmCisKK0Fic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIEdyYXBoJiBncmFwaCkKKyAgICA6IG1fY29kZUJsb2NrKGNv
ZGVCbG9jaykKKyAgICAsIG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyhjb2RlQmxv
Y2stPm1fbnVtUGFyYW1ldGVycywgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDAp
Cit7CisgICAgc2l6ZV90IG1heEJsb2NrU2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGdyYXBoLm1fYmxvY2tzW2ldLmdldCgpOworICAgICAgICBpZiAoYmxvY2stPmVuZCAt
IGJsb2NrLT5iZWdpbiA+IG1heEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIG1heEJsb2NrU2l6ZSA9
IGJsb2NrLT5lbmQgLSBibG9jay0+YmVnaW47CisgICAgfQorICAgIG1fbm9kZXMucmVzaXplKG1h
eEJsb2NrU2l6ZSk7Cit9CisKK0Fic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRlKCkgeyB9CisK
K3ZvaWQgQWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxv
Y2spCit7CisgICAgUFJPRklMRSgxNyk7CisgICAgCisgICAgQVNTRVJUKCFtX2Jsb2NrKTsKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPmVuZCAtIGJhc2ljQmxv
Y2stPmJlZ2luOyArK2kpCisgICAgICAgIG1fbm9kZXNbaV0uY2xlYXIoKTsKKyAgICBtX3Zhcmlh
YmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAgICBtX2hhdmVTdHJ1Y3R1cmVzID0g
ZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkFy
Z3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLmFyZ3VtZW50KGkpLm1f
c3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkpIHsKKyAgICAgICAgICAgIG1faGF2ZVN0
cnVjdHVyZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLmxvY2FsKGkpLm1fc3RydWN0dXJlLmlzTmVp
dGhlckNsZWFyTm9yVG9wKCkpIHsKKyAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYmFzaWNC
bG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAgIGJhc2ljQmxvY2stPmNmYUhhc1Zp
c2l0ZWQgPSB0cnVlOworICAgIG1fYmxvY2sgPSBiYXNpY0Jsb2NrOworICAgIG1faXNWYWxpZCA9
IHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3JhcGgp
Cit7CisgICAgUFJPRklMRSgxNyk7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1fYmxv
Y2tzWzBdLmdldCgpOworICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBncmFwaFtyb290
LT52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSldLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCk7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAg
ICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoUHJlZGljdEludDMy
KTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RBcnJheSk7
CisgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgICAgICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RCb29sZWFu
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50
KGkpLm1ha2VUb3AoKTsKKyAgICB9Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNC
bG9jayhNZXJnZU1vZGUgbWVyZ2VNb2RlKQoreworICAgIFBST0ZJTEUoMTgpOworICAgIEFTU0VS
VChtX2Jsb2NrKTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2s7IC8vIFNh
dmUgdGhlIGJsb2NrIGZvciBzdWNjZXNzb3IgbWVyZ2luZy4KKyAgICAKKyAgICBpZiAoIW1faXNW
YWxpZCkgeworICAgICAgICByZXNldCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGlmIChtZXJnZU1vZGUg
IT0gRG9udE1lcmdlIHx8ICFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgZm9yIChzaXplX3Qg
YXJndW1lbnQgPSAwOyBhcmd1bWVudCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZB
cmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0
ZUF0VGFpbChibG9jay0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgbV92YXJpYWJs
ZXMuYXJndW1lbnQoYXJndW1lbnQpLCBibG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFy
Z3VtZW50KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2Fs
IDwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKQorICAg
ICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVN0YXRlQXRUYWlsKGJsb2NrLT52YWx1ZXNBdFRhaWwu
bG9jYWwobG9jYWwpLCBtX3ZhcmlhYmxlcy5sb2NhbChsb2NhbCksIGJsb2NrLT52YXJpYWJsZXNB
dFRhaWwubG9jYWwobG9jYWwpKTsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG1lcmdlTW9kZSAh
PSBEb250TWVyZ2UgfHwgIWNoYW5nZWQpOworICAgIAorICAgIHJlc2V0KCk7CisgICAgCisgICAg
aWYgKG1lcmdlTW9kZSAhPSBNZXJnZVRvU3VjY2Vzc29ycykKKyAgICAgICAgcmV0dXJuIGNoYW5n
ZWQ7CisgICAgCisgICAgcmV0dXJuIG1lcmdlVG9TdWNjZXNzb3JzKG1fZ3JhcGgsIGJsb2NrKTsK
K30KKwordm9pZCBBYnN0cmFjdFN0YXRlOjpyZXNldCgpCit7CisgICAgbV9ibG9jayA9IDA7Cisg
ICAgbV9pc1ZhbGlkID0gZmFsc2U7Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZShO
b2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIFBST0ZJTEUoMTkpOworICAgIEFTU0VSVChtX2Js
b2NrKTsKKyAgICBBU1NFUlQobV9pc1ZhbGlkKTsKKyAgICAgICAgCisgICAgTm9kZSYgbm9kZSA9
IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICAgICAgCisgICAgaWYgKCFub2RlLnNob3VsZEdlbmVy
YXRlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAKKyAgICBzd2l0Y2ggKG5vZGUu
b3ApIHsKKyAgICBjYXNlIEpTQ29uc3RhbnQ6IHsKKyAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IG1f
Z3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobV9jb2RlQmxvY2ssIG5vZGVJbmRleCk7CisgICAgICAg
IGlmICh2YWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVl
OworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkgPSBtX3ZhcmlhYmxlcy5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBTZXRMb2NhbDogeworICAgICAg
ICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgp
LT5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJ
bnQzMik7CisgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5
KTsKKyAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RCb29sZWFu
KTsKKyAgICAgICAgCisgICAgICAgIG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2NhbCgpKSA9
IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
ICAgIAorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBz
dGF0ZSBvZiBhcmd1bWVudHMgaGFzIGJlZW4gc2V0LgorICAgICAgICBBU1NFUlQoIW1fYmxvY2st
PnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5vZGUubG9jYWwoKSkuaXNDbGVhcigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgor
ICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgQml0UlNoaWZ0OgorICAgIGNhc2UgQml0TFNoaWZ0
OgorICAgIGNhc2UgQml0VVJTaGlmdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBVSW50MzJUb051bWJl
cjoKKyAgICAgICAgaWYgKCFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgaWYg
KCFtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7Cisg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9OdW1iZXI6CisgICAgICAgIGlmICht
X2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBWYWx1ZVRvRG91YmxlOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVl
QWRkOgorICAgIGNhc2UgQXJpdGhBZGQ6IHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1
bGF0ZUludGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigp
XSkgJiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZU51bWJlcihtX2dyYXBoW25v
ZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSkgeworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobm9kZS5vcCA9PSBWYWx1ZUFkZCk7CisgICAg
ICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAgICAgIGZvck5vZGUobm9kZUlu
ZGV4KS5zZXQoUHJlZGljdFN0cmluZyB8IFByZWRpY3RJbnQzMiB8IFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOgor
ICAgIGNhc2UgQXJpdGhNdWw6CisgICAgY2FzZSBBcml0aERpdjoKKyAgICBjYXNlIEFyaXRoTWlu
OgorICAgIGNhc2UgQXJpdGhNYXg6IHsKKyAgICAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0
ZUludGVnZXIobV9ncmFwaFtub2RlLmNoaWxkMSgpXSwgbV9ncmFwaFtub2RlLmNoaWxkMigpXSkg
JiYgbm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShu
b2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoTW9kOiB7CisgICAgICAg
IGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8
fCBtX2dyYXBoW25vZGUuY2hpbGQyKCldLnNob3VsZE5vdFNwZWN1bGF0ZUludGVnZXIoKSB8fCAh
bm9kZS5jYW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
KyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoQWJzOgorICAgICAgICBpZiAo
bV9ncmFwaFtub2RlLmNoaWxkMSgpXS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkgJiYgbm9kZS5j
YW5TcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIEFyaXRoU3FydDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBMb2dpY2FsTm90OiB7CisgICAgICAgIE5vZGUmIGNoaWxkID0gbV9ncmFwaFtub2RlLmNo
aWxkMSgpXTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlv
bigpKSB8fCAhY2hpbGQucHJlZGljdGlvbigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBlbHNlIGlmIChjaGlsZC5z
aG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8IFByZWRpY3RPdGhlcik7
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5IHwg
UHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkp
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVy
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4
KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29tcGFyZUxlc3M6Cisg
ICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgIGNhc2UgQ29tcGFyZUdyZWF0ZXI6CisgICAgY2Fz
ZSBDb21wYXJlR3JlYXRlckVxOgorICAgIGNhc2UgQ29tcGFyZUVxOiB7CisgICAgICAgIE5vZGUm
IGxlZnQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBOb2RlJiByaWdodCA9IG1f
Z3JhcGhbbm9kZS5jaGlsZDIoKV07CisgICAgICAgIFByZWRpY3RlZFR5cGUgZmlsdGVyOworICAg
ICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihsZWZ0LCByaWdodCkpCisgICAg
ICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0SW50MzI7CisgICAgICAgIGVsc2UgaWYgKE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZU51bWJlcihsZWZ0LCByaWdodCkpCisgICAgICAgICAgICBmaWx0ZXIgPSBQ
cmVkaWN0TnVtYmVyOworICAgICAgICBlbHNlIGlmIChub2RlLm9wID09IENvbXBhcmVFcSAmJiBO
b2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChsZWZ0LCByaWdodCkpCisgICAgICAgICAg
ICBmaWx0ZXIgPSBQcmVkaWN0RmluYWxPYmplY3Q7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGxlZnQsIHJpZ2h0KSkK
KyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RBcnJheTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBmaWx0ZXIgPSBQcmVkaWN0VG9wOworICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVy
ZXMobm9kZUluZGV4KTsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihmaWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihm
aWx0ZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29sZWFuKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDb21wYXJlU3Ry
aWN0RXE6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEJvb2xlYW4pOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFyQ29kZUF0OgorICAg
ICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3RyaW5nKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgCisgICAgY2FzZSBTdHJpbmdDaGFyQXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RTdHJpbmcpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2Ug
R2V0QnlWYWw6IHsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBpbmRleFByZWRpY3Rpb24gPSBtX2dy
YXBoW25vZGUuY2hpbGQyKCldLnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKCEoaW5kZXhQcmVk
aWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBpbmRleFByZWRpY3Rpb24pIHsKKyAgICAgICAgICAg
IGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkubWFrZVRvcCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0ucHJlZGljdGlvbigpID09IFByZWRpY3RTdHJpbmcp
IHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJp
bmcpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGljdElu
dDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQy
KCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFr
ZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1
dEJ5VmFsOgorICAgIGNhc2UgUHV0QnlWYWxBbGlhczogeworICAgICAgICBQcmVkaWN0ZWRUeXBl
IGluZGV4UHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwor
ICAgICAgICBpZiAoIShpbmRleFByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYmIGluZGV4UHJl
ZGljdGlvbikgeworICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEFy
cmF5UHVzaDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEFy
cmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0TnVtYmVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEFycmF5UG9wOgorICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgSnVtcDoKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJy
YW5jaDogeworICAgICAgICAvLyBUaGVyZSBpcyBwcm9iYWJseSBwcm9maXQgdG8gYmUgZm91bmQg
aW4gZG9pbmcgc3BhcnNlIGNvbmRpdGlvbmFsIGNvbnN0YW50CisgICAgICAgIC8vIHByb3BhZ2F0
aW9uLCBhbmQgdG8gdGFrZSBpdCBvbmUgc3RlcCBmdXJ0aGVyLCB3aGVyZSBhIHZhcmlhYmxlJ3Mg
dmFsdWUKKyAgICAgICAgLy8gaXMgc3BlY2lhbGl6ZWQgb24gZWFjaCBkaXJlY3Rpb24gb2YgYSBi
cmFuY2guIEZvciBub3csIHdlIGRvbid0IGRvIHRoaXMuCisgICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24o
Y2hpbGQucHJlZGljdGlvbigpKSB8fCAhY2hpbGQucHJlZGljdGlvbigpKQorICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBl
bHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkKKyAgICAg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCB8
IFByZWRpY3RPdGhlcik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUFy
cmF5T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdEFycmF5IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hv
dWxkU3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisg
ICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIFRocm93UmVmZXJlbmNl
RXJyb3I6CisgICAgICAgIG1faXNWYWxpZCA9IGZhbHNlOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgVG9QcmltaXRpdmU6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBt
X2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRl
SW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAor
ICAgICAgICBQcmVkaWN0ZWRUeXBlIHR5cGUgPSBzb3VyY2UubV90eXBlOworICAgICAgICBpZiAo
dHlwZSAmIH4oUHJlZGljdE51bWJlciB8IFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbikp
IHsKKyAgICAgICAgICAgIHR5cGUgJj0gKFByZWRpY3ROdW1iZXIgfCBQcmVkaWN0U3RyaW5nIHwg
UHJlZGljdEJvb2xlYW4pOworICAgICAgICAgICAgdHlwZSB8PSBQcmVkaWN0U3RyaW5nOworICAg
ICAgICB9CisgICAgICAgIGRlc3RpbmF0aW9uLnNldCh0eXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBTdHJDYXQ6CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBOZXdBcnJheToKKyAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgorICAgICAgICBm
b3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+YXJyYXlT
dHJ1Y3R1cmUoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0
dXJlKCkpOworICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIENvbnZlcnRUaGlzOiB7CisgICAgICAgIE5vZGUmIGNo
aWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgc291
cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgZGVz
dGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgaWYg
KGlzT2JqZWN0UHJlZGljdGlvbihzb3VyY2UubV90eXBlKSkgeworICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgc2ltcGxlIGNhc2UuIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBzb3VyY2UgaXMg
YW4KKyAgICAgICAgICAgIC8vIG9iamVjdCwgc28gdGhlcmUncyBub3RoaW5nIHRvIGRvLiBJIGRv
bid0IHRoaW5rIHRoaXMgY2FzZSB3aWxsCisgICAgICAgICAgICAvLyBiZSBoaXQsIGJ1dCB0aGVu
IGFnYWluLCB5b3UgbmV2ZXIga25vdy4KKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBp
ZiAoaXNPdGhlclByZWRpY3Rpb24oY2hpbGQucHJlZGljdGlvbigpKSkgeworICAgICAgICAgICAg
c291cmNlLmZpbHRlcihQcmVkaWN0T3RoZXIpOworICAgICAgICAgICAgZGVzdGluYXRpb24uc2V0
KFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkp
KSB7CisgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFByZWRpY3RPYmplY3RNYXNrKTsKKyAgICAg
ICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICBkZXN0aW5hdGlvbiA9IHNvdXJjZTsKKyAgICAgICAg
ZGVzdGluYXRpb24ubWVyZ2UoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDcmVhdGVUaGlzOiB7CisgICAgICAgIE5vZGUm
IGNoaWxkID0gbV9ncmFwaFtub2RlLmNoaWxkMSgpXTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
c291cmNlID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
ZGVzdGluYXRpb24gPSBmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
aWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCisgICAgICAgICAgICBzb3Vy
Y2UuZmlsdGVyKFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgZGVz
dGluYXRpb24uc2V0KFByZWRpY3RGaW5hbE9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAgICAgICAgIAorICAgIGNhc2UgTmV3T2JqZWN0OgorICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3QoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1
cmUoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBmb3JOb2RlKG5vZGVJ
bmRleCkuc2V0KFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBHZXRTY29wZUNoYWluOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RDZWxsT3RoZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgR2V0U2NvcGVkVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0U2NvcGVkVmFyOgor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlJZDoKKyAgICBjYXNlIEdldE1ldGhvZDoKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBj
bG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
bWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QXJy
YXlMZW5ndGg6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RB
cnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFN0cmluZ0xlbmd0aDoKKyAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrU3RydWN0dXJlOgorICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBj
b25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKG5vZGUuc3RydWN0dXJlU2V0KCkpOworICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVz
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFB1dFN0cnVj
dHVyZToKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0UHJvcGVydHlTdG9yYWdlOgorICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5jbGVhcigpOyAvLyBUaGUgcmVzdWx0IGlzIG5vdCBhIEpTIHZhbHVl
LgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0QnlPZmZzZXQ6Cisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAg
ICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBDaGVja01ldGhvZDoKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBiZSBhYmxl
IHRvIHByb3BhZ2F0ZSB0aGUgc3RydWN0dXJlIHNldHMgb2YgY29uc3RhbnRzIChpLmUuIHByb3Rv
dHlwZXMpLgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihtX2dyYXBoLm1f
bWV0aG9kQ2hlY2tEYXRhW25vZGUubWV0aG9kQ2hlY2tEYXRhSW5kZXgoKV0uc3RydWN0dXJlKTsK
KyAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIENoZWNrRnVuY3Rpb246CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RPYmplY3RPdGhlcik7CisgICAgICAgIC8vIEZJWE1FOiBTaG91bGQg
YmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGZ1bmN0
aW9uIGlzLgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlJZDoK
KyAgICBjYXNlIFB1dEJ5SWREaXJlY3Q6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4
KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldEdsb2JhbFZhcjoK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIENoZWNrSGFzSW5zdGFuY2U6CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgLy8gU2FkbHksIHdlIGRv
bid0IHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgQ2hlY2tIYXNJbnN0YW5jZQor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgSW5zdGFuY2VPZjoKKyAgICAg
ICAgLy8gQWdhaW4sIHNhZGx5LCB3ZSBkb24ndCBwcm9wYWdhdGUgdGhlIGZhY3QgdGhhdCB3ZSd2
ZSBkb25lIEluc3RhbmNlT2YKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVk
aWN0Q2VsbCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQaGk6Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBCcmVha3BvaW50OgorICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIENvbnN0cnVj
dDoKKyAgICBjYXNlIFJlc29sdmU6CisgICAgY2FzZSBSZXNvbHZlQmFzZToKKyAgICBjYXNlIFJl
c29sdmVCYXNlU3RyaWN0UHV0OgorICAgIGNhc2UgUmVzb2x2ZUdsb2JhbDoKKyAgICAgICAgY2xv
YmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1h
a2VUb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEZvcmNlT1NS
RXhpdDoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBQaGFudG9tOgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgcmV0dXJuIG1faXNWYWxpZDsKK30KKworaW5saW5lIHZvaWQgQWJzdHJhY3RTdGF0ZTo6Y2xv
YmJlclN0cnVjdHVyZXMoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBQUk9GSUxFKDIxKTsK
KyAgICBpZiAoIW1faGF2ZVN0cnVjdHVyZXMpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHNp
emVfdCBpID0gbm9kZUluZGV4IC0gbV9ibG9jay0+YmVnaW4gKyAxOyBpLS0gPiAwOykKKyAgICAg
ICAgbV9ub2Rlc1tpXS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKytpKQorICAgICAgICBtX3Zh
cmlhYmxlcy5hcmd1bWVudChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytpKQorICAgICAgICBt
X3ZhcmlhYmxlcy5sb2NhbChpKS5jbG9iYmVyU3RydWN0dXJlcygpOworICAgIG1faGF2ZVN0cnVj
dHVyZXMgPSBmYWxzZTsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VTdGF0
ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJp
YWJsZSwgTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBBYnN0cmFjdFZhbHVlKiBz
b3VyY2U7CisgICAgICAgIAorICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW25vZGVJbmRleF07Cisg
ICAgaWYgKCFub2RlLnJlZkNvdW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBzd2l0Y2ggKG5vZGUub3ApIHsKKyAgICBjYXNlIFBoaToKKyAgICBjYXNlIFNldEFyZ3VtZW50
OgorICAgICAgICAvLyBUaGUgYmxvY2sgdHJhbnNmZXJzIHRoZSB2YWx1ZSBmcm9tIGhlYWQgdG8g
dGFpbC4KKyAgICAgICAgc291cmNlID0gJmluVmFyaWFibGU7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBHZXRMb2NhbDoKKyAgICAgICAgLy8gVGhlIGJsb2NrIHJlZmlu
ZXMgdGhlIHZhbHVlIHdpdGggYWRkaXRpb25hbCBzcGVjdWxhdGlvbnMuCisgICAgICAgIHNvdXJj
ZSA9ICZmb3JOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgLy8gVGhlIGJsb2NrIHNldHMgdGhlIHZhcmlhYmxl
LCBhbmQgcG90ZW50aWFsbHkgcmVmaW5lcyBpdCwgYm90aAorICAgICAgICAvLyBiZWZvcmUgYW5k
IGFmdGVyIHNldHRpbmcgaXQuCisgICAgICAgIHNvdXJjZSA9ICZmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHNvdXJjZSA9IDA7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoZGVzdGluYXRpb24gPT0gKnNvdXJjZSkgeworICAgICAgICAv
LyBBYnN0cmFjdCBleGVjdXRpb24gZGlkIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCB2YWx1ZSBvZiB0
aGUgdmFyaWFibGUsIGZvciB0aGlzCisgICAgICAgIC8vIGJhc2ljIGJsb2NrLCBvbiB0aGlzIGl0
ZXJhdGlvbi4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBBYnN0
cmFjdCBleGVjdXRpb24gcmVhY2hlZCBhIG5ldyBjb25jbHVzaW9uIGFib3V0IHRoZSBzcGVjdWxh
dGlvbnMgcmVhY2hlZCBhYm91dAorICAgIC8vIHRoaXMgdmFyaWFibGUgYWZ0ZXIgZXhlY3V0aW9u
IG9mIHRoaXMgYmFzaWMgYmxvY2suIFVwZGF0ZSB0aGUgc3RhdGUsIGFuZCByZXR1cm4KKyAgICAv
LyB0cnVlIHRvIGluZGljYXRlIHRoYXQgdGhlIGZpeHBvaW50IG11c3QgZ28gb24hCisgICAgZGVz
dGluYXRpb24gPSAqc291cmNlOworICAgIHJldHVybiB0cnVlOworfQorCitpbmxpbmUgYm9vbCBB
YnN0cmFjdFN0YXRlOjptZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sK
KyAgICBBU1NFUlQoZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCkgPT0g
dG8tPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKKyAgICBBU1NFUlQoZnJv
bS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gdG8tPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpKTsKKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAg
ICAKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgZnJvbS0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgIGNoYW5n
ZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3ModG8tPnZhbHVlc0F0SGVhZC5hcmd1bWVu
dChhcmd1bWVudCksIGZyb20tPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIHRvLT52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwu
YXJndW1lbnQoYXJndW1lbnQpKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxv
Y2FsIDwgZnJvbS0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpCisg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VWYXJpYWJsZUJldHdlZW5CbG9ja3ModG8tPnZhbHVlc0F0
SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhbHVlc0F0VGFpbC5sb2NhbChsb2NhbCksIHRvLT52
YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpLCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubG9jYWwo
bG9jYWwpKTsKKworICAgIGlmICghdG8tPmNmYUhhc1Zpc2l0ZWQpCisgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgIAorICAgIHRvLT5jZmFTaG91bGRSZXZpc2l0IHw9IGNoYW5nZWQ7CisgICAg
CisgICAgcmV0dXJuIGNoYW5nZWQ7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlVG9TdWNjZXNzb3JzKEdyYXBoJiBncmFwaCwgQmFzaWNCbG9jayogYmFzaWNCbG9jaykKK3sK
KyAgICBQUk9GSUxFKDIwKTsKKworICAgIE5vZGUmIHRlcm1pbmFsID0gZ3JhcGhbYmFzaWNCbG9j
ay0+ZW5kIC0gMV07CisgICAgCisgICAgQVNTRVJUKHRlcm1pbmFsLmlzVGVybWluYWwoKSk7Cisg
ICAgCisgICAgc3dpdGNoICh0ZXJtaW5hbC5vcCkgeworICAgIGNhc2UgSnVtcDoKKyAgICAgICAg
cmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRha2VuQmxv
Y2tJbmRleCgpXS5nZXQoKSk7CisgICAgICAgIAorICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBy
ZXR1cm4gbWVyZ2UoYmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwudGFrZW5CbG9j
a0luZGV4KCldLmdldCgpKQorICAgICAgICAgICAgfCBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5t
X2Jsb2Nrc1t0ZXJtaW5hbC5ub3RUYWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICAK
KyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhyb3dSZWZlcmVu
Y2VFcnJvcjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VWYXJpYWJsZUJldHdlZW5C
bG9ja3MoQWJzdHJhY3RWYWx1ZSYgZGVzdGluYXRpb24sIEFic3RyYWN0VmFsdWUmIHNvdXJjZSwg
Tm9kZUluZGV4IGRlc3RpbmF0aW9uTm9kZUluZGV4LCBOb2RlSW5kZXggc291cmNlTm9kZUluZGV4
KQoreworICAgIGlmIChkZXN0aW5hdGlvbk5vZGVJbmRleCA9PSBOb05vZGUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBBU1NFUlRfVU5VU0VEKHNvdXJjZU5vZGVJbmRleCwgc291
cmNlTm9kZUluZGV4ICE9IE5vTm9kZSk7CisgICAgCisgICAgLy8gRklYTUU6IFdlIGNvdWxkIGRv
IHNvbWUgc3BhcnNlIGNvbmRpdGlvbmFsIHByb3BhZ2F0aW9uIGhlcmUhCisgICAgCisgICAgcmV0
dXJuIGRlc3RpbmF0aW9uLm1lcmdlKHNvdXJjZSk7Cit9CisKKyNpZm5kZWYgTkRFQlVHCit2b2lk
IEFic3RyYWN0U3RhdGU6OmR1bXAoRklMRSogb3V0KQoreworICAgIGJvb2wgZmlyc3QgPSB0cnVl
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ub2Rlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV9ub2Rlc1tpXS5pc0NsZWFyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKGZpcnN0KQorICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZnByaW50ZihvdXQsICIgIik7CisgICAgICAgIGZwcmludGYob3V0LCAi
QCVsdToiLCBpICsgbV9ibG9jay0+YmVnaW4pOworICAgICAgICBtX25vZGVzW2ldLmR1bXAob3V0
KTsKKyAgICB9Cit9CisjZW5kaWYKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTk2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
REZHQWJzdHJhY3RTdGF0ZV9oCisjZGVmaW5lIERGR0Fic3RyYWN0U3RhdGVfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkRG
R0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdHcmFwaC5oIgorI2luY2x1ZGUgIkRGR05v
ZGUuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBDb2RlQmxvY2s7CisKK25hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQmFzaWNCbG9jazsKKwor
Ly8gVGhpcyBpbXBsZW1lbnRzIHRoZSBub3Rpb24gb2YgYW4gYWJzdHJhY3Qgc3RhdGUgZm9yIGZs
b3ctc2Vuc2l0aXZlIGludHJhcHJvY2VkdXJhbAorLy8gY29udHJvbCBmbG93IGFuYWx5c2lzIChD
RkEpLCB3aXRoIGEgZm9jdXMgb24gdGhlIGVsaW1pbmF0aW9uIG9mIHJlZHVuZGFudCB0eXBlIGNo
ZWNrcy4KKy8vIEl0IGFsc28gaW1wbGVtZW50cyBtb3N0IG9mIHRoZSBtZWNoYW5pc21zIG9mIGFi
c3RyYWN0IGludGVycHJldGF0aW9uIHRoYXQgc3VjaCBhbgorLy8gYW5hbHlzaXMgd291bGQgdXNl
LiBUaGlzIGNsYXNzIHNob3VsZCBiZSB1c2VkIGluIHR3byBpZGlvbXM6CisvLworLy8gMSkgUGVy
Zm9ybWluZyB0aGUgQ0ZBLiBJbiB0aGlzIGNhc2UsIEFic3RyYWN0U3RhdGUgc2hvdWxkIGJlIHJ1
biBvdmVyIGFsbCBiYXNpYworLy8gICAgYmxvY2tzIHJlcGVhdGVkbHkgdW50aWwgY29udmVyZ2Vu
Y2UgaXMgcmVhY2hlZC4gQ29udmVyZ2VuY2UgaXMgZGVmaW5lZCBieQorLy8gICAgZW5kQmFzaWNC
bG9jayhBYnN0cmFjdFN0YXRlOjpNZXJnZVRvU3VjY2Vzc29ycykgcmV0dXJuaW5nIGZhbHNlIGZv
ciBhbGwgYmxvY2tzLgorLy8KKy8vIDIpIFJlbWF0ZXJpYWxpemluZyB0aGUgcmVzdWx0cyBvZiBh
IHByZXZpb3VzbHkgZXhlY3V0ZWQgQ0ZBLiBJbiB0aGlzIGNhc2UsCisvLyAgICBBYnN0cmFjdFN0
YXRlIHNob3VsZCBiZSBydW4gb3ZlciB3aGF0ZXZlciBiYXNpYyBibG9jayB5b3UncmUgaW50ZXJl
c3RlZCBpbiB1cAorLy8gICAgdG8gdGhlIHBvaW50IG9mIHRoZSBub2RlIGF0IHdoaWNoIHlvdSdk
IGxpa2UgdG8gaW50ZXJyb2dhdGUgdGhlIGtub3duIHR5cGUKKy8vICAgIG9mIGFsbCBvdGhlciBu
b2Rlcy4gQXQgdGhpcyBwb2ludCBpdCdzIHNhZmUgdG8gZGlzY2FyZCB0aGUgQWJzdHJhY3RTdGF0
ZSBlbnRpcmVseSwKKy8vICAgIGNhbGwgcmVzZXQoKSwgb3IgdG8gcnVuIGl0IHRvIHRoZSBlbmQg
b2YgdGhlIGJhc2ljIGJsb2NrIGFuZCBjYWxsCisvLyAgICBlbmRCYXNpY0Jsb2NrKEFic3RyYWN0
U3RhdGU6OkRvbnRNZXJnZSkuIFRoZSBsYXR0ZXIgb3B0aW9uIGlzIHNhZmVzdCBiZWNhdXNlCisv
LyAgICBpdCBwZXJmb3JtcyBzb21lIHVzZWZ1bCBpbnRlZ3JpdHkgY2hlY2tzLgorLy8KKy8vIEFm
dGVyIHRoZSBDRkEgaXMgcnVuLCB0aGUgaW50ZXItYmxvY2sgc3RhdGUgaXMgc2F2ZWQgYXQgdGhl
IGhlYWRzIGFuZCB0YWlscyBvZiBhbGwKKy8vIGJhc2ljIGJsb2Nrcy4gVGhpcyBhbGxvd3MgdGhl
IGludHJhLWJsb2NrIHN0YXRlIHRvIGJlIHJlbWF0ZXJpYWxpemVkIGJ5IGp1c3QKKy8vIGV4ZWN1
dGluZyB0aGUgQ0ZBIGZvciB0aGF0IGJsb2NrLiBJZiB5b3UgbmVlZCB0byBrbm93IGludGVyLWJs
b2NrIHN0YXRlIG9ubHksIHRoZW4KKy8vIHlvdSBvbmx5IG5lZWQgdG8gZXhhbWluZSB0aGUgQmFz
aWNCbG9jazo6bV92YWx1ZXNBdEhlYWQgb3IgbV92YWx1ZXNBdFRhaWwgZmllbGRzLgorLy8KKy8v
IFJ1bm5pbmcgdGhpcyBhbmFseXNpcyBpbnZvbHZlcyB0aGUgZm9sbG93aW5nLCBtb2R1bG8gdGhl
IGludGVyLWJsb2NrIHN0YXRlCisvLyBtZXJnaW5nIGFuZCBjb252ZXJnZW5jZSBmaXhwb2ludDoK
Ky8vCisvLyBBYnN0cmFjdFN0YXRlIHN0YXRlKGNvZGVCbG9jaywgZ3JhcGgpOworLy8gc3RhdGUu
YmVnaW5CYXNpY0Jsb2NrKGJhc2ljQmxvY2spOworLy8gYm9vbCBlbmRSZWFjaGVkID0gdHJ1ZTsK
Ky8vIGZvciAoTm9kZUluZGV4IGlkeCA9IGJhc2ljQmxvY2suYmVnaW47IGlkeCA8IGJhc2ljQmxv
Y2suZW5kOyArK2lkeCkgeworLy8gICAgIGlmICghc3RhdGUuZXhlY3V0ZShpZHgpKQorLy8gICAg
ICAgICBicmVhazsKKy8vIH0KKy8vIGJvb2wgcmVzdWx0ID0gc3RhdGUuZW5kQmFzaWNCbG9jayg8
ZWl0aGVyIE1lcmdlIG9yIERvbnRNZXJnZT4pOworCitjbGFzcyBBYnN0cmFjdFN0YXRlIHsKK3B1
YmxpYzoKKyAgICBlbnVtIE1lcmdlTW9kZSB7CisgICAgICAgIC8vIERvbid0IG1lcmdlIHRoZSBz
dGF0ZSBpbiBBYnN0cmFjdFN0YXRlIHdpdGggYmFzaWMgYmxvY2tzLgorICAgICAgICBEb250TWVy
Z2UsCisgICAgICAgIAorICAgICAgICAvLyBNZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0
ZSB3aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNpYworICAgICAgICAvLyBibG9jayBiZWluZyBhbmFs
eXplZC4KKyAgICAgICAgTWVyZ2VUb1RhaWwsCisgICAgICAgIAorICAgICAgICAvLyBNZXJnZSB0
aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIHRoZSB0YWlsIG9mIHRoZSBiYXNpYworICAg
ICAgICAvLyBibG9jaywgYW5kIHdpdGggdGhlIGhlYWRzIG9mIHN1Y2Nlc3NvciBibG9ja3MuCisg
ICAgICAgIE1lcmdlVG9TdWNjZXNzb3JzCisgICAgfTsKKyAgICAKKyAgICBBYnN0cmFjdFN0YXRl
KENvZGVCbG9jayosIEdyYXBoJik7CisgICAgCisgICAgfkFic3RyYWN0U3RhdGUoKTsKKyAgICAK
KyAgICBBYnN0cmFjdFZhbHVlJiBmb3JOb2RlKE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9ub2Rlc1tub2RlSW5kZXggLSBtX2Jsb2NrLT5iZWdpbl07CisgICAg
fQorICAgIAorICAgIC8vIENhbGwgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIENGQSB0byBpbml0aWFs
aXplIHRoZSBhYnN0cmFjdCB2YWx1ZXMgb2YKKyAgICAvLyBhcmd1bWVudHMsIGFuZCB0byBpbmRp
Y2F0ZSB3aGljaCBibG9ja3Mgc2hvdWxkIGJlIGxpc3RlZCBmb3IgQ0ZBCisgICAgLy8gZXhlY3V0
aW9uLgorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoR3JhcGgmKTsKKworICAgIC8vIFN0YXJ0
IGFic3RyYWN0bHkgZXhlY3V0aW5nIHRoZSBnaXZlbiBiYXNpYyBibG9jay4gSW5pdGlhbGl6ZXMg
dGhlCisgICAgLy8gbm90aW9uIG9mIGFic3RyYWN0IHN0YXRlIHRvIHdoYXQgd2UgYmVsaWV2ZSBp
dCB0byBiZSBhdCB0aGUgaGVhZAorICAgIC8vIG9mIHRoZSBiYXNpYyBibG9jaywgYWNjb3JkaW5n
IHRvIHRoZSBiYXNpYyBibG9jaydzIGRhdGEgc3RydWN0dXJlcy4KKyAgICAvLyBUaGlzIG1ldGhv
ZCBhbHNvIHNldHMgY2ZhU2hvdWxkUmV2aXNpdCB0byBmYWxzZS4KKyAgICB2b2lkIGJlZ2luQmFz
aWNCbG9jayhCYXNpY0Jsb2NrKik7CisgICAgCisgICAgLy8gRmluaXNoIGFic3RyYWN0bHkgZXhl
Y3V0aW5nIGEgYmFzaWMgYmxvY2suIElmIE1lcmdlVG9UYWlsIG9yCisgICAgLy8gTWVyZ2VUb1N1
Y2Nlc3NvcnMgaXMgcGFzc2VkLCB0aGVuIHRoaXMgbWVyZ2VzIGV2ZXJ5dGhpbmcgd2UgaGF2ZQor
ICAgIC8vIGxlYXJuZWQgYWJvdXQgaG93IHRoZSBzdGF0ZSBjaGFuZ2VzIGR1cmluZyB0aGlzIGJs
b2NrJ3MgZXhlY3V0aW9uIGludG8KKyAgICAvLyB0aGUgYmxvY2sncyBkYXRhIHN0cnVjdHVyZXMu
IFRoZXJlIGFyZSB0aHJlZSByZXR1cm4gbW9kZXMsIGRlcGVuZGluZworICAgIC8vIG9uIHRoZSB2
YWx1ZSBvZiBtZXJnZU1vZGU6CisgICAgLy8KKyAgICAvLyBEb250TWVyZ2U6CisgICAgLy8gICAg
QWx3YXlzIHJldHVybnMgZmFsc2UuCisgICAgLy8KKyAgICAvLyBNZXJnZVRvVGFpbDoKKyAgICAv
LyAgICBSZXR1cm5zIHRydWUgaWYgdGhlIHN0YXRlIG9mIHRoZSBibG9jayBhdCB0aGUgdGFpbCB3
YXMgY2hhbmdlZC4KKyAgICAvLyAgICBUaGlzIG1lYW5zIHRoYXQgeW91IG11c3QgY2FsbCBtZXJn
ZVRvU3VjY2Vzc29ycygpLCBhbmQgaWYgdGhhdAorICAgIC8vICAgIHJldHVybnMgdHJ1ZSwgdGhl
biB5b3UgbXVzdCByZXZpc2l0IChhdCBsZWFzdCkgdGhlIHN1Y2Nlc3NvcgorICAgIC8vICAgIGJs
b2Nrcy4gRmFsc2Ugd2lsbCBhbHdheXMgYmUgcmV0dXJuZWQgaWYgdGhlIGJsb2NrIGlzIHRlcm1p
bmFsCisgICAgLy8gICAgKGkuZS4gZW5kcyBpbiBUaHJvdyBvciBSZXR1cm4sIG9yIGhhcyBhIEZv
cmNlT1NSRXhpdCBpbnNpZGUgaXQpLgorICAgIC8vCisgICAgLy8gTWVyZ2VUb1N1Y2Nlc3NvcnM6
CisgICAgLy8gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgYXQgdGhl
IHRhaWwgd2FzIGNoYW5nZWQsCisgICAgLy8gICAgYW5kLCBpZiB0aGUgc3RhdGUgYXQgdGhlIGhl
YWRzIG9mIHN1Y2Nlc3NvcnMgd2FzIGNoYW5nZWQuCisgICAgLy8gICAgQSB0cnVlIHJldHVybiBt
ZWFucyB0aGF0IHlvdSBtdXN0IHJldmlzaXQgKGF0IGxlYXN0KSB0aGUgc3VjY2Vzc29yCisgICAg
Ly8gICAgYmxvY2tzLiBUaGlzIGFsc28gc2V0cyBjZmFTaG91bGRSZXZpc2l0IHRvIHRydWUgZm9y
IGJhc2ljIGJsb2NrcworICAgIC8vICAgIHRoYXQgbXVzdCBiZSB2aXNpdGVkIG5leHQuCisgICAg
Ym9vbCBlbmRCYXNpY0Jsb2NrKE1lcmdlTW9kZSk7CisgICAgCisgICAgLy8gUmVzZXQgdGhlIEFi
c3RyYWN0U3RhdGUuIFRoaXMgdGhyb3dzIGF3YXkgYW55IHJlc3VsdHMsIGFuZCBhdCB0aGlzIHBv
aW50CisgICAgLy8geW91IGNhbiBzYWZlbHkgY2FsbCBiZWdpbkJhc2ljQmxvY2soKSBvbiBhbnkg
YmFzaWMgYmxvY2suCisgICAgdm9pZCByZXNldCgpOworICAgIAorICAgIC8vIEFic3RyYWN0bHkg
ZXhlY3V0ZXMgdGhlIGdpdmVuIG5vZGUuIFRoZSBuZXcgYWJzdHJhY3Qgc3RhdGUgaXMgc3RvcmVk
IGludG8gYW4KKyAgICAvLyBhYnN0cmFjdCByZWdpc3RlciBmaWxlIHN0b3JlZCBpbiAqdGhpcy4g
TG9hZHMgb2YgbG9jYWwgdmFyaWFibGVzICh0aGF0IHNwYW4KKyAgICAvLyBiYXNpYyBibG9ja3Mp
IGludGVycm9nYXRlIHRoZSBiYXNpYyBibG9jaydzIG5vdGlvbiBvZiB0aGUgc3RhdGUgYXQgdGhl
IGhlYWQuCisgICAgLy8gU3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxlcyBhcmUgaGFuZGxlZCBpbiBl
bmRCYXNpY0Jsb2NrKCkuIFRoaXMgcmV0dXJucyB0cnVlCisgICAgLy8gaWYgZXhlY3V0aW9uIHNo
b3VsZCBjb250aW51ZSBwYXN0IHRoaXMgbm9kZS4gTm90YWJseSwgaXQgd2lsbCByZXR1cm4gdHJ1
ZQorICAgIC8vIGZvciBibG9jayB0ZXJtaW5hbHMsIHNvIGxvbmcgYXMgdGhvc2UgdGVybWluYWxz
IGFyZSBub3QgUmV0dXJuIG9yIHZhcmlhbnRzCisgICAgLy8gb2YgVGhyb3cuCisgICAgYm9vbCBl
eGVjdXRlKE5vZGVJbmRleCk7CisgICAgCisgICAgLy8gSXMgdGhlIGV4ZWN1dGlvbiBzdGF0ZSBz
dGlsbCB2YWxpZD8gVGhpcyB3aWxsIGJlIGZhbHNlIGlmIGV4ZWN1dGUoKSBoYXMKKyAgICAvLyBy
ZXR1cm5lZCBmYWxzZSBwcmV2aW91c2x5LgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNWYWxpZDsgfQorICAgIAorICAgIC8vIE1lcmdlIHRoZSBhYnN0cmFjdCBzdGF0ZSBz
dG9yZWQgYXQgdGhlIGZpcnN0IGJsb2NrJ3MgdGFpbCBpbnRvIHRoZSBzZWNvbmQKKyAgICAvLyBi
bG9jaydzIGhlYWQuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2Vjb25kIGJsb2NrJ3Mgc3RhdGUgY2hh
bmdlZC4gSWYgc28sCisgICAgLy8gdGhhdCBibG9jayBtdXN0IGJlIGFic3RyYWN0bHkgaW50ZXJw
cmV0ZWQgYWdhaW4uIFRoaXMgYWxzbyBzZXRzCisgICAgLy8gdG8tPmNmYVNob3VsZFJldmlzaXQg
dG8gdHJ1ZSwgaWYgaXQgcmV0dXJucyB0cnVlLCBvciBpZiB0byBoYXMgbm90IGJlZW4KKyAgICAv
LyB2aXNpdGVkIHlldC4KKyAgICBzdGF0aWMgYm9vbCBtZXJnZShCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0byk7CisgICAgCisgICAgLy8gTWVyZ2UgdGhlIGFic3RyYWN0IHN0YXRlIHN0
b3JlZCBhdCB0aGUgYmxvY2sncyB0YWlsIGludG8gYWxsIG9mIGl0cworICAgIC8vIHN1Y2Nlc3Nv
cnMuIFJldHVybnMgdHJ1ZSBpZiBhbnkgb2YgdGhlIHN1Y2Nlc3NvcnMnIHN0YXRlcyBjaGFuZ2Vk
LiBOb3RlCisgICAgLy8gdGhhdCB0aGlzIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIGluIGVuZEJh
c2ljQmxvY2soKSBpZiBNZXJnZU1vZGUgaXMKKyAgICAvLyBNZXJnZVRvU3VjY2Vzc29ycy4KKyAg
ICBzdGF0aWMgYm9vbCBtZXJnZVRvU3VjY2Vzc29ycyhHcmFwaCYsIEJhc2ljQmxvY2sqKTsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KTsKKyNlbmRpZgorICAgIAor
cHJpdmF0ZToKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKE5vZGVJbmRleCk7CisgICAgCisg
ICAgYm9vbCBtZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0
cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXgpOworICAgIAorICAgIHN0YXRpYyBib29s
IG1lcmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBB
YnN0cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9k
ZUluZGV4IHNvdXJjZU5vZGVJbmRleCk7CisgICAgCisgICAgQ29kZUJsb2NrKiBtX2NvZGVCbG9j
azsKKyAgICBHcmFwaCYgbV9ncmFwaDsKKyAgICAKKyAgICBWZWN0b3I8QWJzdHJhY3RWYWx1ZSwg
MzI+IG1fbm9kZXM7CisgICAgT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4gbV92YXJpYWJsZXM7Cisg
ICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBib29sIG1faGF2ZVN0cnVjdHVyZXM7CisgICAg
CisgICAgYm9vbCBtX2lzVmFsaWQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisK
KyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3RyYWN0U3RhdGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RW
YWx1ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Fic3RyYWN0VmFsdWVfaAor
I2RlZmluZSBERkdBYnN0cmFjdFZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKKyNp
bmNsdWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSB7
CitwdWJsaWM6CisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSgpCisgICAgICAgIDogbV9zdHJ1
Y3R1cmUoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUo
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgICAgIDogbV9zdHJ1Y3R1cmUoc3RydWN0dXJlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZShjb25zdCBTdHJ1
Y3R1cmVTZXQmIHNldCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2V0LnNpemUoKSkgeworICAg
ICAgICBjYXNlIDA6CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX3N0cnVj
dHVyZSA9IHNldFswXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U3Ry
dWN0dXJlKj4oMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9
CisgICAgCisgICAgdm9pZCBtYWtlVG9wKCkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlID0g
cmVpbnRlcnByZXRfY2FzdDxTdHJ1Y3R1cmUqPigxKTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgdG9wKCkKKyAgICB7CisgICAgICAgIFN0cnVjdHVyZUFi
c3RyYWN0VmFsdWUgdmFsdWU7CisgICAgICAgIHZhbHVlLm1ha2VUb3AoKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZChTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJlKSAmJiAhaXNUb3Ao
KSk7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgewor
ICAgICAgICBpZiAoaXNUb3AoKSB8fCAhb3RoZXIuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICBpZiAob3RoZXIuc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgbWFr
ZVRvcCgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCFtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBvdGhlclswXTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0cnVjdHVy
ZSA9PSBvdGhlclswXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbWFrZVRv
cCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBhZGRBbGwo
Y29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAo
IW90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVy
LmlzVG9wKCkpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAg
aWYgKG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKFN0
cnVjdHVyZSogc3RydWN0dXJlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IHN0cnVj
dHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgaXNTdWJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIG90aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBkb2VzTm90Q29udGFpbkFueU90aGVyVGhhbihTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmU7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNTdXBlcnNldE9mKGNvbnN0IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoIW90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAob3RoZXIuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyWzBdOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAob3RoZXIuaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKG1fc3RydWN0dXJlKSB7CisgICAgICAgICAgICBpZiAob3RoZXIubV9zdHJ1
Y3R1cmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3Ry
dWN0dXJlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBv
dGhlci5pc1N1YnNldE9mKCp0aGlzKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoY29u
c3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoaXNUb3AoKSkgewor
ICAgICAgICAgICAgc3dpdGNoIChvdGhlci5zaXplKCkpIHsKKyAgICAgICAgICAgIGNhc2UgMDoK
KyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgICAg
IG1fc3RydWN0dXJlID0gb3RoZXJbMF07CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChvdGhlci5j
b250YWlucyhtX3N0cnVjdHVyZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBtX3N0cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9w
KCkpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc3RydWN0dXJlID09IG90
aGVyLm1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAob3RoZXIu
aXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihQcmVkaWN0ZWRUeXBlIG90aGVyKQorICAgIHsK
KyAgICAgICAgaWYgKCEob3RoZXIgJiBQcmVkaWN0Q2VsbCkpIHsKKyAgICAgICAgICAgIGNsZWFy
KCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdHJ1Y3R1cmUpIDw9IDEpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCEocHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9z
dHJ1Y3R1cmUpICYgb3RoZXIpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgIH0K
KyAgICAKKyAgICBib29sIGlzQ2xlYXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFt
X3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RydWN0dXJlID09IHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJlKj4oMSk7IH0KKyAgICAK
KyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RydWN0dXJlKSA+IDE7IH0KKyAgICAKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBy
ZXR1cm4gISFtX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgU3RydWN0dXJlKiBhdChzaXpl
X3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCghaXNUb3AoKSk7CisgICAgICAgIEFT
U0VSVChtX3N0cnVjdHVyZSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoaSwgIWkpOworICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogb3BlcmF0
b3JbXShzaXplX3QgaSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpKTsKKyAgICB9
CisgICAgCisgICAgU3RydWN0dXJlKiBsYXN0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBhdCgwKTsKKyAgICB9CisgICAgCisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0
cnVjdHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAg
ICByZXR1cm4gUHJlZGljdENlbGw7CisgICAgICAgIGlmIChpc0NsZWFyKCkpCisgICAgICAgICAg
ICByZXR1cm4gUHJlZGljdE5vbmU7CisgICAgICAgIHJldHVybiBwcmVkaWN0aW9uRnJvbVN0cnVj
dHVyZShtX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisjaWZu
ZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAgICAgICBpZiAo
aXNUb3AoKSkgeworICAgICAgICAgICAgZnByaW50ZihvdXQsICJUT1AiKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnByaW50ZihvdXQsICJbIik7
CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXAi
LCBtX3N0cnVjdHVyZSk7CisgICAgICAgIGZwcmludGYob3V0LCAiXSIpOworICAgIH0KKyNlbmRp
ZgorCitwcml2YXRlOgorICAgIC8vIFRoaXMgY2FuIG9ubHkgcmVtZW1iZXIgb25lIHN0cnVjdHVy
ZSBhdCBhIHRpbWUuCisgICAgU3RydWN0dXJlKiBtX3N0cnVjdHVyZTsKK307CisKK3N0cnVjdCBB
YnN0cmFjdFZhbHVlIHsKKyAgICBBYnN0cmFjdFZhbHVlKCkKKyAgICAgICAgOiBtX3R5cGUoUHJl
ZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7Cisg
ICAgICAgIG1fdHlwZSA9IFByZWRpY3ROb25lOworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdHlwZSA9PSBQcmVkaWN0Tm9uZSAmJiBtX3N0cnVjdHVyZS5pc0NsZWFyKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBtX3R5cGUgPSBQcmVkaWN0
VG9wOworICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgY2xvYmJlclN0cnVjdHVyZXMoKQorICAgIHsKKyAgICAgICAgaWYgKG1fdHlwZSAmIFByZWRp
Y3RDZWxsKSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChtX3N0cnVjdHVy
ZS5pc0NsZWFyKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzVG9wKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdFRvcCAmJiBtX3N0cnVjdHVyZS5pc1Rv
cCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgQWJzdHJhY3RWYWx1ZSB0b3AoKQorICAgIHsK
KyAgICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tYWtlVG9wKCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0KEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAgICBp
ZiAodmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5hZGQodmFsdWUuYXND
ZWxsKCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fdHlwZSA9IHByZWRpY3Rp
b25Gcm9tVmFsdWUodmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKKyAgICB7CisgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
IG1fc3RydWN0dXJlLmFkZChzdHJ1Y3R1cmUpOworICAgICAgICAKKyAgICAgICAgbV90eXBlID0g
cHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBzZXQoUHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgJiBQcmVk
aWN0Q2VsbCkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAgbV90eXBlID0gdHlw
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFic3RyYWN0VmFsdWUm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdHlwZSA9PSBvdGhlci5tX3R5
cGUgJiYgbV9zdHJ1Y3R1cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorICAg
IGJvb2wgbWVyZ2UoY29uc3QgQWJzdHJhY3RWYWx1ZSYgb3RoZXIpCisgICAgeworICAgICAgICBy
ZXR1cm4gbWVyZ2VQcmVkaWN0aW9uKG1fdHlwZSwgb3RoZXIubV90eXBlKSB8IG1fc3RydWN0dXJl
LmFkZEFsbChvdGhlci5tX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbWVyZ2Uo
UHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgbWVyZ2VQcmVkaWN0aW9uKG1fdHlw
ZSwgdHlwZSk7CisgICAgICAgIAorICAgICAgICBpZiAodHlwZSAmIFByZWRpY3RDZWxsKQorICAg
ICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZp
bHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgbV90eXBlICY9
IG90aGVyLnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcygpOworICAgICAgICBtX3N0cnVjdHVyZS5m
aWx0ZXIob3RoZXIpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihQcmVkaWN0ZWRUeXBl
IHR5cGUpCisgICAgeworICAgICAgICBpZiAodHlwZSA9PSBQcmVkaWN0VG9wKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX3R5cGUgJj0gdHlwZTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUu
ZmlsdGVyKHR5cGUpOworICAgIH0KKyAgICAKKyAgICBib29sIHZhbGlkYXRlKEpTVmFsdWUgdmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAKKyAgICAgICAgaWYgKG1lcmdlUHJlZGljdGlvbnMobV90eXBlLCBw
cmVkaWN0aW9uRnJvbVZhbHVlKHZhbHVlKSkgIT0gbV90eXBlKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKG1fc3RydWN0dXJlLmlzVG9wKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmICh2YWx1ZS5pc0NlbGwo
KSkgeworICAgICAgICAgICAgQVNTRVJUKG1fdHlwZSAmIFByZWRpY3RDZWxsKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3N0cnVjdHVyZS5jb250YWlucyh2YWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJl
KCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAg
ICAgICBmcHJpbnRmKG91dCwgIiglcywgIiwgcHJlZGljdGlvblRvU3RyaW5nKG1fdHlwZSkpOwor
ICAgICAgICBtX3N0cnVjdHVyZS5kdW1wKG91dCk7CisgICAgICAgIGZwcmludGYob3V0LCAiKSIp
OworICAgIH0KKyNlbmRpZgorCisgICAgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSBtX3N0cnVjdHVy
ZTsKKyAgICBQcmVkaWN0ZWRUeXBlIG1fdHlwZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQWJzdHJh
Y3RWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0Jhc2ljQmxvY2tfaAorI2Rl
ZmluZSBERkdCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
REZHQWJzdHJhY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJERkdP
cGVyYW5kcy5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordHlwZWRlZiBWZWN0b3Ig
PEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKKworc3RydWN0IEJhc2ljQmxvY2sgewor
ICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgTm9kZUluZGV4IGJlZ2luLCB1
bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykKKyAgICAgICAgOiBieXRl
Y29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCisgICAgICAgICwgYmVnaW4oYmVnaW4pCisgICAgICAg
ICwgZW5kKE5vTm9kZSkKKyAgICAgICAgLCBpc09TUlRhcmdldChmYWxzZSkKKyAgICAgICAgLCBj
ZmFIYXNWaXNpdGVkKGZhbHNlKQorICAgICAgICAsIGNmYVNob3VsZFJldmlzaXQoZmFsc2UpCisg
ICAgICAgICwgdmFyaWFibGVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAg
ICAsIHZhcmlhYmxlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAgICAgLCB2
YWx1ZXNBdEhlYWQobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwgdmFsdWVzQXRU
YWlsKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMg
aW5saW5lIEJsb2NrSW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbihPd25QdHI8QmFzaWNCbG9jaz4qIGJs
b2NrKQorICAgIHsKKyAgICAgICAgcmV0dXJuICgqYmxvY2spLT5ieXRlY29kZUJlZ2luOworICAg
IH0KKworICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW47CisgICAgTm9kZUluZGV4IGJlZ2luOwor
ICAgIE5vZGVJbmRleCBlbmQ7CisgICAgYm9vbCBpc09TUlRhcmdldDsKKyAgICBib29sIGNmYUhh
c1Zpc2l0ZWQ7CisgICAgYm9vbCBjZmFTaG91bGRSZXZpc2l0OworICAgIAorICAgIFByZWRlY2Vz
c29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICAKKyAgICBPcGVyYW5kczxOb2RlSW5kZXgsIE5v
ZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRIZWFkOworICAgIE9wZXJhbmRzPE5vZGVJbmRleCwg
Tm9kZUluZGV4VHJhaXRzPiB2YXJpYWJsZXNBdFRhaWw7CisgICAgCisgICAgT3BlcmFuZHM8QWJz
dHJhY3RWYWx1ZT4gdmFsdWVzQXRIZWFkOworICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZh
bHVlc0F0VGFpbDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHQmFzaWNCbG9ja19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBVc2VkIGluIGltcGxlbWVudGluZyBnZXQvc2V0LCBhYm92ZSwgd2hlcmUgdGhlIG9wZXJhbmQg
aXMgYSBsb2NhbCB2YXJpYWJsZS4KICAgICBOb2RlSW5kZXggZ2V0TG9jYWwodW5zaWduZWQgb3Bl
cmFuZCkKICAgICB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9wZXJhbmQpOwog
CiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTQ0LDE1ICsxNDQsMTUgQEAgcHJpdmF0ZToK
ICAgICAgICAgTm9kZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVB
Y2Nlc3NEYXRhKSk7CiAgICAgICAgIG1fbG9jYWxQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRy
eShtX2N1cnJlbnRCbG9jaywgcGhpLCBvcGVyYW5kKSk7CiAgICAgICAgIG5vZGVJbmRleCA9IGFk
ZFRvR3JhcGgoR2V0TG9jYWwsIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAg
ICAgICBtX2N1cnJlbnRCbG9jay0+bV9sb2NhbHNBdFRhaWxbb3BlcmFuZF0udmFsdWUgPSBub2Rl
SW5kZXg7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwubG9jYWwob3Bl
cmFuZCkgPSBub2RlSW5kZXg7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9s
b2NhbHNBdEhlYWRbb3BlcmFuZF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIG1f
Y3VycmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUob3BlcmFuZCwg
bm9kZUluZGV4KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgfQog
ICAgIHZvaWQgc2V0TG9jYWwodW5zaWduZWQgb3BlcmFuZCwgTm9kZUluZGV4IHZhbHVlKQogICAg
IHsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVl
ID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNzRGF0YShvcGVy
YW5kKSksIHZhbHVlKTsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5s
b2NhbChvcGVyYW5kKSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gVXNlZCBpbiBpbXBs
ZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5kIGlzIGFuIGFyZ3VtZW50
LgpAQCAtMTYxLDcgKzE2MSw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gb3BlcmFuZCArIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgKyBSZWdpc3RlckZpbGU6
OkNhbGxGcmFtZUhlYWRlclNpemU7CiAgICAgICAgIEFTU0VSVChhcmd1bWVudCA8IG1fbnVtQXJn
dW1lbnRzKTsKIAotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1l
bnQpOwogCiAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKSB7CiAgICAgICAgICAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwpAQCAtMTcwLDcgKzE3MCw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgLy8gdGhlIEdldExvY2FsIHRvIHRoZSBTZXRBcmd1bWVudC4K
ICAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5sb2NhbCgpID09IHN0YXRpY19jYXN0PFZpcnR1
YWxSZWdpc3Rlcj4ob3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRv
R3JhcGgoR2V0TG9jYWwsIE9wSW5mbyhub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpKSwgbm9kZUlu
ZGV4KTsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdFRhaWxb
YXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICAgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQoYXJndW1lbnQpID0gbm9kZUluZGV4OwogICAg
ICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAKQEAgLTE4Niw5ICsxODYsOSBAQCBwcml2YXRlOgogICAgICAgICBOb2RlSW5kZXggcGhpID0g
YWRkVG9HcmFwaChQaGksIE9wSW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpKTsKICAgICAgICAgbV9h
cmd1bWVudFBoaVN0YWNrLmFwcGVuZChQaGlTdGFja0VudHJ5KG1fY3VycmVudEJsb2NrLCBwaGks
IGFyZ3VtZW50KSk7CiAgICAgICAgIG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoR2V0TG9jYWwsIE9w
SW5mbyh2YXJpYWJsZUFjY2Vzc0RhdGEpLCBwaGkpOwotICAgICAgICBtX2N1cnJlbnRCbG9jay0+
bV9hcmd1bWVudHNBdFRhaWxbYXJndW1lbnRdLnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJ
bmRleDsKICAgICAgICAgCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVh
ZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKG5vZGVJbmRleCk7CisgICAgICAgIG1fY3VycmVudEJs
b2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIG5vZGVJ
bmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0KQEAgLTE5
Nyw3ICsxOTcsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVudCA9IG9wZXJh
bmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxlOjpDYWxsRnJh
bWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFyZ3VtZW50cyk7
CiAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52
YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEo
b3BlcmFuZCkpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuYXJndW1lbnQoYXJndW1lbnQpID0gYWRkVG9HcmFwaChTZXRMb2NhbCwgT3BJbmZvKG5ld1Zh
cmlhYmxlQWNjZXNzRGF0YShvcGVyYW5kKSksIHZhbHVlKTsKICAgICB9CiAKICAgICAvLyBHZXQg
YW4gb3BlcmFuZCwgYW5kIHBlcmZvcm0gYSBUb0ludDMyL1RvTnVtYmVyIGNvbnZlcnNpb24gb24g
aXQuCkBAIC03ODMsOCArNzgzLDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1
bnNpZ25lZAogICAgICAgICBmb3IgKHVuc2lnbmVkIGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBt
X251bUFyZ3VtZW50czsgKythcmd1bWVudCkgewogICAgICAgICAgICAgTm9kZUluZGV4IHNldEFy
Z3VtZW50ID0gYWRkVG9HcmFwaChTZXRBcmd1bWVudCwgT3BJbmZvKG5ld1ZhcmlhYmxlQWNjZXNz
RGF0YShhcmd1bWVudCAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZp
bGU6OkNhbGxGcmFtZUhlYWRlclNpemUpKSk7CiAgICAgICAgICAgICBtX2dyYXBoLm1fYXJndW1l
bnRzW2FyZ3VtZW50XSA9IHNldEFyZ3VtZW50OwotICAgICAgICAgICAgbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzQXRIZWFkW2FyZ3VtZW50XS5zZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQpOwot
ICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS5z
ZXRGaXJzdFRpbWUoc2V0QXJndW1lbnQpOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZh
cmlhYmxlc0F0SGVhZC5zZXRBcmd1bWVudEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQp
OworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5zZXRBcmd1bWVu
dEZpcnN0VGltZShhcmd1bWVudCwgc2V0QXJndW1lbnQpOwogICAgICAgICB9CiAgICAgfQogCkBA
IC0xNjg5LDE2ICsxNjg5LDE2IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnByb2Nlc3NQaGlTdGFj
aygpCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvckJsb2NrID0gbV9ncmFw
aC5tX2Jsb2Nrc1twcmVkZWNlc3NvcnNbaV1dLmdldCgpOwogCi0gICAgICAgICAgICBWYXJpYWJs
ZVJlY29yZCYgdmFyID0gKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vz
c29yQmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW3Zhck5vXSA6IHByZWRlY2Vzc29yQmxvY2stPm1f
bG9jYWxzQXRUYWlsW3Zhck5vXTsKKyAgICAgICAgICAgIE5vZGVJbmRleCYgdmFyID0gKHN0YWNr
VHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrKSA/IHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0
VGFpbC5hcmd1bWVudCh2YXJObykgOiBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwodmFyTm8pOwogCi0gICAgICAgICAgICBOb2RlSW5kZXggdmFsdWVJblByZWRlY2Vzc29y
ID0gdmFyLnZhbHVlOworICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3NvciA9
IHZhcjsKICAgICAgICAgICAgIGlmICh2YWx1ZUluUHJlZGVjZXNzb3IgPT0gTm9Ob2RlKSB7CiAg
ICAgICAgICAgICAgICAgdmFsdWVJblByZWRlY2Vzc29yID0gYWRkVG9HcmFwaChQaGksIE9wSW5m
byhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhpU3RhY2sgPyB2
YXJObyAtIG1fY29kZUJsb2NrLT5tX251bVBhcmFtZXRlcnMgLSBSZWdpc3RlckZpbGU6OkNhbGxG
cmFtZUhlYWRlclNpemUgOiB2YXJObykpKTsKLSAgICAgICAgICAgICAgICB2YXIuc2V0Rmlyc3RU
aW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgdmFyID0gdmFsdWVJblBy
ZWRlY2Vzc29yOwogICAgICAgICAgICAgICAgIGlmIChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlT
dGFjaykKLSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9hcmd1bWVudHNB
dEhlYWRbdmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAg
ICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRG
aXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT5tX2xvY2Fsc0F0SGVhZFt2
YXJOb10uc2V0Rmlyc3RUaW1lKHZhbHVlSW5QcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAg
ICAgIHByZWRlY2Vzc29yQmxvY2stPnZhcmlhYmxlc0F0SGVhZC5zZXRMb2NhbEZpcnN0VGltZSh2
YXJObywgdmFsdWVJblByZWRlY2Vzc29yKTsKICAgICAgICAgICAgICAgICBwaGlTdGFjay5hcHBl
bmQoUGhpU3RhY2tFbnRyeShwcmVkZWNlc3NvckJsb2NrLCB2YWx1ZUluUHJlZGVjZXNzb3IsIHZh
ck5vKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZ3JhcGhbdmFsdWVJblByZWRlY2Vzc29y
XS5vcCA9PSBHZXRMb2NhbCkgewogICAgICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJl
IHRoYXQgdGhlIFZhcmlhYmxlQWNjZXNzRGF0YXMgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZQpA
QCAtMTc1OCwxMSArMTc1OCwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpzZXR1cFByZWRlY2Vz
c29ycygpCiAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2Jsb2NrLT5lbmQgLSAxXTsKICAg
ICAgICAgQVNTRVJUKG5vZGUuaXNUZXJtaW5hbCgpKTsKIAotICAgICAgICBpZiAobm9kZS5pc0p1
bXAoKSkKLSAgICAgICAgICAgIG1fZ3JhcGguYmxvY2tGb3JCeXRlY29kZU9mZnNldChub2RlLnRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSkubV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKLSAgICAg
ICAgZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7Ci0gICAgICAgICAgICBtX2dyYXBoLmJsb2Nr
Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpLm1fcHJlZGVjZXNz
b3JzLmFwcGVuZChpbmRleCk7Ci0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpLm1fcHJlZGVjZXNzb3JzLmFwcGVu
ZChpbmRleCk7CisgICAgICAgIGlmIChub2RlLmlzSnVtcCgpKSB7CisgICAgICAgICAgICBub2Rl
LnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChu
b2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgICAgIG1f
Z3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFw
cGVuZChpbmRleCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS5pc0JyYW5jaCgpKSB7CisgICAg
ICAgICAgICBub2RlLnNldFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkpKTsKKyAg
ICAgICAgICAgIG5vZGUuc2V0Tm90VGFrZW5CbG9ja0luZGV4KG1fZ3JhcGguYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmco
KSkpOworICAgICAgICAgICAgbV9ncmFwaC5tX2Jsb2Nrc1tub2RlLnRha2VuQmxvY2tJbmRleCgp
XS0+bV9wcmVkZWNlc3NvcnMuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9i
bG9ja3Nbbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChp
bmRleCk7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDExICsxODgsMTEgQEAgdm9p
ZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogICAgICAgICBoYXNQcmludGVk
ID0gdHJ1ZTsKICAgICB9CiAgICAgaWYgIChub2RlLmlzQnJhbmNoKCkgfHwgbm9kZS5pc0p1bXAo
KSkgewotICAgICAgICBwcmludGYoIiVzVDojJXUiLCBoYXNQcmludGVkID8gIiwgIiA6ICIiLCBi
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpKTsK
KyAgICAgICAgcHJpbnRmKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgbm9kZS50
YWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIGhhc1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAg
ICBpZiAgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICBwcmludGYoIiVzRjojJXUiLCBoYXNQ
cmludGVkID8gIiwgIiA6ICIiLCBibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RU
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpKTsKKyAgICAgICAgcHJpbnRmKCIlc0Y6IyV1IiwgaGFzUHJp
bnRlZCA/ICIsICIgOiAiIiwgbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKSk7CiAgICAgICAgIGhh
c1ByaW50ZWQgPSB0cnVlOwogICAgIH0KICAgICAodm9pZCloYXNQcmludGVkOwpAQCAtMjM5LDgg
KzIzOSwxNSBAQCB2b2lkIEdyYXBoOjpkdW1wKE5vZGVJbmRleCBub2RlSW5kZXgsIENvCiB2b2lk
IEdyYXBoOjpkdW1wKENvZGVCbG9jayogY29kZUJsb2NrKQogewogICAgIGZvciAoc2l6ZV90IGIg
PSAwOyBiIDwgbV9ibG9ja3Muc2l6ZSgpOyArK2IpIHsKLSAgICAgICAgcHJpbnRmKCJCbG9jayAj
JXUgKGJjIyV1KTogICVzXG4iLCAoaW50KWIsIG1fYmxvY2tzW2JdLT5ieXRlY29kZUJlZ2luLCBt
X2Jsb2Nrc1tiXS0+aXNPU1JUYXJnZXQgPyAiIChPU1IgdGFyZ2V0KSIgOiAiIik7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSBtX2Jsb2Nrc1tiXS0+YmVnaW47IGkgPCBtX2Jsb2Nrc1tiXS0+ZW5k
OyArK2kpCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NbYl0uZ2V0KCk7Cisg
ICAgICAgIHByaW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICAlc1xuIiwgKGludCliLCBibG9jay0+
Ynl0ZWNvZGVCZWdpbiwgYmxvY2stPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIp
OworICAgICAgICBwcmludGYoIiAgdmFyczogIik7CisgICAgICAgIGlmIChibG9jay0+Y2ZhSGFz
VmlzaXRlZCkKKyAgICAgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBz
dGRvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYoIjxlbXB0eT4iKTsKKyAg
ICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gYmxvY2stPmJlZ2lu
OyBpIDwgYmxvY2stPmVuZDsgKytpKQogICAgICAgICAgICAgZHVtcChpLCBjb2RlQmxvY2spOwog
ICAgIH0KICAgICBwcmludGYoIlBoaSBOb2RlczpcbiIpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBF
TkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkRGR0Jh
c2ljQmxvY2suaCIKICNpbmNsdWRlICJERkdOb2RlLmgiCiAjaW5jbHVkZSAiUHJlZGljdGlvblRy
YWNrZXIuaCIKICNpbmNsdWRlICJSZWdpc3RlckZpbGUuaCIKQEAgLTQzLDI5ICs0NCw2IEBAIGNs
YXNzIEV4ZWNTdGF0ZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKLS8vIGhlbHBlciBmdW5jdGlvbiB0
byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVudHMuCi1pbmxpbmUg
Ym9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4gb3BlcmFuZCA8IDA7
IH0KLQotdHlwZWRlZiB1aW50MzJfdCBCbG9ja0luZGV4OwotCi0vLyBGb3IgZXZlcnkgbG9jYWwg
dmFyaWFibGUgd2UgdHJhY2sgYW55IGV4aXN0aW5nIGdldCBvciBzZXQgb2YgdGhlIHZhbHVlLgot
Ly8gV2UgdHJhY2sgdGhlIGdldCBzbyB0aGF0IHRoZXNlIG1heSBiZSBzaGFyZWQsIGFuZCB3ZSB0
cmFjayB0aGUgc2V0IHRvCi0vLyByZXRyaWV2ZSB0aGUgY3VycmVudCB2YWx1ZSwgYW5kIHRvIHJl
ZmVyZW5jZSB0aGUgZmluYWwgZGVmaW5pdGlvbi4KLXN0cnVjdCBWYXJpYWJsZVJlY29yZCB7Ci0g
ICAgVmFyaWFibGVSZWNvcmQoKQotICAgICAgICA6IHZhbHVlKE5vTm9kZSkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgc2V0Rmlyc3RUaW1lKE5vZGVJbmRleCBub2RlSW5kZXgpCi0gICAg
ewotICAgICAgICBBU1NFUlQodmFsdWUgPT0gTm9Ob2RlKTsKLSAgICAgICAgdmFsdWUgPSBub2Rl
SW5kZXg7Ci0gICAgfQotCi0gICAgTm9kZUluZGV4IHZhbHVlOwotfTsKLQogc3RydWN0IE1ldGhv
ZENoZWNrRGF0YSB7CiAgICAgLy8gSXQgaXMgc2FmZSB0byByZWZlciB0byB0aGVzZSBkaXJlY3Rs
eSBiZWNhdXNlIHRoZXkgYXJlIHNoYWRvd2VkIGJ5CiAgICAgLy8gdGhlIG9sZCBKSVQncyBDb2Rl
QmxvY2sncyBNZXRob2RDYWxsTGlua0luZm8uCkBAIC0xMTEsNDAgKzg5LDYgQEAgc3RydWN0IFJl
c29sdmVHbG9iYWxEYXRhIHsKICAgICB1bnNpZ25lZCByZXNvbHZlSW5mb0luZGV4OwogfTsKIAot
dHlwZWRlZiBWZWN0b3IgPEJsb2NrSW5kZXgsIDI+IFByZWRlY2Vzc29yTGlzdDsKLQotc3RydWN0
IEJhc2ljQmxvY2sgewotICAgIEJhc2ljQmxvY2sodW5zaWduZWQgYnl0ZWNvZGVCZWdpbiwgTm9k
ZUluZGV4IGJlZ2luLCB1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bUxvY2FscykK
LSAgICAgICAgOiBieXRlY29kZUJlZ2luKGJ5dGVjb2RlQmVnaW4pCi0gICAgICAgICwgYmVnaW4o
YmVnaW4pCi0gICAgICAgICwgZW5kKE5vTm9kZSkKLSAgICAgICAgLCBpc09TUlRhcmdldChmYWxz
ZSkKLSAgICAgICAgLCBtX2FyZ3VtZW50c0F0SGVhZChudW1Bcmd1bWVudHMpCi0gICAgICAgICwg
bV9sb2NhbHNBdEhlYWQobnVtTG9jYWxzKQotICAgICAgICAsIG1fYXJndW1lbnRzQXRUYWlsKG51
bUFyZ3VtZW50cykKLSAgICAgICAgLCBtX2xvY2Fsc0F0VGFpbChudW1Mb2NhbHMpCi0gICAgewot
ICAgIH0KLQotICAgIHN0YXRpYyBpbmxpbmUgQmxvY2tJbmRleCBnZXRCeXRlY29kZUJlZ2luKE93
blB0cjxCYXNpY0Jsb2NrPiogYmxvY2spCi0gICAgewotICAgICAgICByZXR1cm4gKCpibG9jaykt
PmJ5dGVjb2RlQmVnaW47Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYnl0ZWNvZGVCZWdpbjsKLSAg
ICBOb2RlSW5kZXggYmVnaW47Ci0gICAgTm9kZUluZGV4IGVuZDsKLSAgICBib29sIGlzT1NSVGFy
Z2V0OwotCi0gICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwotICAgIAotICAgIFZl
Y3RvcjxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdEhlYWQ7Ci0gICAgVmVjdG9yPFZh
cmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHNBdEhlYWQ7Ci0gICAgCi0gICAgVmVjdG9yPFZhcmlh
YmxlUmVjb3JkLCA4PiBtX2FyZ3VtZW50c0F0VGFpbDsKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNv
cmQsIDE2PiBtX2xvY2Fsc0F0VGFpbDsKLX07Ci0KIC8vIAogLy8gPT09IEdyYXBoID09PQogLy8K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IzMl82NC5jcHAJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTkzLDggKzExOTMsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9u
CiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2hOdWxs
KE5vZGVJbmRleCBvcGVyYW5kLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVy
dCkKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBC
bG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hO
b2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJy
YW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJy
YW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgCiAgICAgaWYgKHRha2VuID09ICht
X2Jsb2NrICsgMSkpIHsKICAgICAgICAgaW52ZXJ0ID0gIWludmVydDsKQEAgLTEyNTQsOCArMTI1
NCw4IEBAIGJvb2wgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVDb20KIHZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaChOb2RlJiBub2RlLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kLCBaX0RGR09wZXJhdGlvbl9FSkogaGVscGVyRnVuY3Rpb24pCiB7CiAgICAgTm9k
ZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtl
biA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5
dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2Vu
QmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOwogCiAgICAgSklUQ29tcGlsZXI6OlJlc3VsdENvbmRpdGlvbiBjYWxs
UmVzdWx0Q29uZGl0aW9uID0gSklUQ29tcGlsZXI6Ok5vblplcm87CiAKQEAgLTEzOTYsOCArMTM5
Niw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklU
Q29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZVN0cmljdEVxKE5vZGUmIG5vZGUs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJy
YW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBt
X2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBo
KCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2Nr
SW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJs
b2NrSW5kZXgoKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24gd2lsbCBicmFuY2gg
dG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQsIHN3aXRjaCB0YWtl
biB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9uIHNvIHdlIGNhbiBm
YWxsIHRocm91Z2guCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3I2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTEzMSw4ICsxMTMxLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2
ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNo
TnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBp
bnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0g
ICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4
IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGlmICh0YWtlbiA9
PSAobV9ibG9jayArIDEpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBAIC0xMTkyLDgg
KzExOTIsOCBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQ29tCiB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9k
ZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAg
IE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXgg
dGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hO
b2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFr
ZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50
YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5u
b3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24g
Y2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC0xMzIxLDgg
KzEzMjEsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiB2b2lk
IEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBu
b2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBOb2Rl
JiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2Vu
ID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5n
cmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0
ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5C
bG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFr
ZW5CbG9ja0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJh
bmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2gg
dGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBj
YW4gZmFsbCB0aHJvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb2RlR2VuZXJhdG9yLmgJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Mjks
NiArMTQyOSwxMSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBCYXNpY0Js
b2NrKiBibG9jaygpCisgICAgeworICAgICAgICByZXR1cm4gbV9qaXQuZ3JhcGgoKS5tX2Jsb2Nr
c1ttX2Jsb2NrXS5nZXQoKTsKKyAgICB9CisKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1w
KGNvbnN0IGNoYXIqIGxhYmVsID0gMCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MDIs
MjMgKzQwMiwxOSBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERGR19PU1JfRU5UUlkpCiAgICAgICAg
IE9TUkVudHJ5RGF0YSogZW50cnkgPSBjb2RlQmxvY2soKS0+YXBwZW5kREZHT1NSRW50cnlEYXRh
KGJhc2ljQmxvY2suYnl0ZWNvZGVCZWdpbiwgZGlmZmVyZW5jZUJldHdlZW4obV9zdGFydE9mQ29k
ZSwgbGFiZWwoKSkpOwogICAgICAgICAKLSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb25zIGFj
dGlvbmFibGVQcmVkaWN0aW9ucyhiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKSwg
YmFzaWNCbG9jay5tX2xvY2Fsc0F0SGVhZC5zaXplKCkpOwotCi0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fYXJndW1lbnRzQXRIZWFkLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFzaWNCbG9jay5tX2FyZ3VtZW50
c0F0SGVhZFtpXS52YWx1ZTsKLSAgICAgICAgICAgIGlmIChub2RlSW5kZXggIT0gTm9Ob2RlKQot
ICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRBcmd1bWVudChpLCBhY3Rp
b25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGhbbm9kZUluZGV4XS52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7Ci0gICAgICAgIH0KKyAgICAgICAgZW50
cnktPm1fZXhwZWN0ZWRWYWx1ZXMgPSBiYXNpY0Jsb2NrLnZhbHVlc0F0SGVhZDsKICAgICAgICAg
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBiYXNpY0Jsb2NrLm1fbG9jYWxzQXRI
ZWFkLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmFz
aWNCbG9jay5tX2xvY2Fsc0F0SGVhZFtpXS52YWx1ZTsKLSAgICAgICAgICAgIGlmIChub2RlSW5k
ZXggIT0gTm9Ob2RlKQotICAgICAgICAgICAgICAgIGFjdGlvbmFibGVQcmVkaWN0aW9ucy5zZXRW
YXJpYWJsZShpLCBhY3Rpb25hYmxlUHJlZGljdGlvbkZyb21QcmVkaWN0ZWRUeXBlKG1fZ3JhcGhb
bm9kZUluZGV4XS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKSk7CisgICAgICAg
IC8vIEZpeCB0aGUgZXhwZWN0ZWQgdmFsdWVzOiBpbiBvdXIgcHJvdG9jb2wsIGEgZGVhZCB2YXJp
YWJsZSB3aWxsIGhhdmUgYW4gZXhwZWN0ZWQKKyAgICAgICAgLy8gdmFsdWUgb2YgKE5vbmUsIFtd
KS4gQnV0IHRoZSBvbGQgSklUIG1heSBzdGFzaCBzb21lIHZhbHVlcyB0aGVyZS4gU28gd2UgcmVh
bGx5CisgICAgICAgIC8vIG5lZWQgKFRvcCwgVE9QKS4KKyAgICAgICAgZm9yIChzaXplX3QgYXJn
dW1lbnQgPSAwOyBhcmd1bWVudCA8IGJhc2ljQmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9m
QXJndW1lbnRzKCk7ICsrYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChiYXNpY0Jsb2NrLnZh
cmlhYmxlc0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCkgPT0gTm9Ob2RlKQorICAgICAgICAgICAg
ICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5tYWtlVG9wKCk7
CisgICAgICAgIH0KKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJhc2lj
QmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCk7ICsrbG9jYWwpIHsKKyAgICAg
ICAgICAgIGlmIChiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5sb2NhbChsb2NhbCkgPT0gTm9O
b2RlKQorICAgICAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2Fs
KS5tYWtlVG9wKCk7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGFjdGlvbmFibGVQcmVk
aWN0aW9ucy5wYWNrKCk7Ci0gICAgICAgIAotICAgICAgICBlbnRyeS0+bV9wcmVkaWN0aW9ucyA9
IGFjdGlvbmFibGVQcmVkaWN0aW9uczsKICNlbHNlCiAgICAgICAgIFVOVVNFRF9QQVJBTShiYXNp
Y0Jsb2NrKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJl
dmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDEwICsyNiw4IEBACiAjaWZuZGVmIERGR05vZGVfaAogI2RlZmlu
ZSBERkdOb2RlX2gKIAotI2luY2x1ZGUgIkRGR1N0cnVjdHVyZVNldC5oIgogI2luY2x1ZGUgPHd0
Zi9Cb3VuZHNDaGVja2VkUG9pbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgotI2lu
Y2x1ZGUgPHd0Zi9VbmlvbkZpbmQuaD4KIAogLy8gRW1pdCB2YXJpb3VzIGxvZ2dpbmcgaW5mb3Jt
YXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhlIGRhdGFmbG93IGdyYXBo
cy4KICNkZWZpbmUgRU5BQkxFX0RGR19ERUJVR19WRVJCT1NFIDAKQEAgLTY3LDYgKzY1LDggQEAK
ICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkRGR09wZXJhbmRzLmgiCisjaW5jbHVkZSAiREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgiCiAjaW5j
bHVkZSAiSlNWYWx1ZS5oIgogI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKICNpbmNsdWRlICJW
YWx1ZVByb2ZpbGUuaCIKQEAgLTc0LDE1ICs3NCwxNiBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAKLS8vIFR5cGUgZm9yIGEgdmlydHVhbCByZWdpc3RlciBudW1iZXIgKHNw
aWxsIGxvY2F0aW9uKS4KLS8vIFVzaW5nIGFuIGVudW0gdG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tl
ZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dyYW1tZXIgZXJyb3JzLgotZW51bSBWaXJ0
dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyID0gLTEgfTsKLUNPTVBJTEVfQVNT
RVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNpemVvZihpbnQpLCBWaXJ0dWFsUmVnaXN0
ZXJfaXNfMzJiaXQpOwotCiAvLyBUeXBlIGZvciBhIHJlZmVyZW5jZSB0byBhbm90aGVyIG5vZGUg
aW4gdGhlIGdyYXBoLgogdHlwZWRlZiB1aW50MzJfdCBOb2RlSW5kZXg7CiBzdGF0aWMgY29uc3Qg
Tm9kZUluZGV4IE5vTm9kZSA9IFVJTlRfTUFYOwogCit0eXBlZGVmIHVpbnQzMl90IEJsb2NrSW5k
ZXg7CisKK3N0cnVjdCBOb2RlSW5kZXhUcmFpdHMgeworICAgIHN0YXRpYyBOb2RlSW5kZXggZGVm
YXVsdFZhbHVlKCkgeyByZXR1cm4gTm9Ob2RlOyB9Cit9OworCiAvLyBJbmZvcm1hdGlvbiB1c2Vk
IHRvIG1hcCBiYWNrIGZyb20gYW4gZXhjZXB0aW9uIHRvIGFueSBoYW5kbGVyL3NvdXJjZSBpbmZv
cm1hdGlvbiwKIC8vIGFuZCB0byBpbXBsZW1lbnQgT1NSLgogLy8gKFByZXNlbnRseSBpbXBsZW1l
bnRlZCBhcyBhIGJ5dGVjb2RlIGluZGV4KS4KQEAgLTExMCw1MSArMTExLDYgQEAgcHJpdmF0ZToK
ICAgICB1aW50MzJfdCBtX2J5dGVjb2RlSW5kZXg7CiB9OwogCi1jbGFzcyBWYXJpYWJsZUFjY2Vz
c0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7Ci1wdWJsaWM6Ci0g
ICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKLSAgICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCi0gICAgICAg
ICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgVmFy
aWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKLSAgICAgICAgOiBtX2xvY2Fs
KGxvY2FsKQotICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOwotICAgICAgICByZXR1cm4gbV9sb2NhbDsK
LSAgICB9Ci0gICAgCi0gICAgaW50IG9wZXJhbmQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4obG9jYWwoKSk7Ci0gICAgfQotICAgIAotICAgIGJvb2wgcHJlZGljdChQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCi0gICAgewotICAgICAgICByZXR1cm4gbWVyZ2VQcmVk
aWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9uLCBwcmVkaWN0aW9uKTsKLSAgICB9Ci0gICAgCi0g
ICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaW5k
KCktPm1fcHJlZGljdGlvbjsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIC8vIFRoaXMgaXMg
c2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZpZWQg
d2l0aAotICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2ZSB0
aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKLSAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1wbGlm
aWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQotICAgIC8vIHVzYWdl
IGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCi0KLSAgICBWaXJ0
dWFsUmVnaXN0ZXIgbV9sb2NhbDsKLSAgICBQcmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsKLX07
Ci0KIHN0cnVjdCBTdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSB7CiAgICAgU3RydWN0dXJlKiBwcmV2
aW91c1N0cnVjdHVyZTsKICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZTsKQEAgLTU2NCw2ICs1
MjAsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJp
YWJsZUFjY2Vzc0RhdGEoKQogICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1ZhcmlhYmxlQWNjZXNz
RGF0YSgpKTsKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVBY2Nlc3NE
YXRhKj4obV9vcEluZm8pLT5maW5kKCk7CiAgICAgfQogICAgIApAQCAtNzU1LDEzICs3MTIsMzcg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gb3AgJiBOb2RlSXNUZXJtaW5hbDsKICAg
ICB9CiAKLSAgICB1bnNpZ25lZCB0YWtlbkJ5dGVjb2RlT2Zmc2V0KCkKKyAgICB1bnNpZ25lZCB0
YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpCiAgICAgewogICAgICAgICBBU1NFUlQo
aXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzsKICAgICB9
CiAKLSAgICB1bnNpZ25lZCBub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkKKyAgICB1bnNpZ25lZCBu
b3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNCcmFuY2goKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzI7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0VGFrZW5CbG9ja0luZGV4KEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0JyYW5jaCgpIHx8IGlzSnVtcCgpKTsKKyAgICAgICAgbV9vcElu
Zm8gPSBibG9ja0luZGV4OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldE5vdFRha2VuQmxvY2tJ
bmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFu
Y2goKSk7CisgICAgICAgIG1fb3BJbmZvMiA9IGJsb2NrSW5kZXg7CisgICAgfQorICAgIAorICAg
IEJsb2NrSW5kZXggdGFrZW5CbG9ja0luZGV4KCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Jy
YW5jaCgpIHx8IGlzSnVtcCgpKTsKKyAgICAgICAgcmV0dXJuIG1fb3BJbmZvOworICAgIH0KKyAg
ICAKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuQmxvY2tJbmRleCgpCiAgICAgewogICAgICAgICBB
U1NFUlQoaXNCcmFuY2goKSk7CiAgICAgICAgIHJldHVybiBtX29wSW5mbzI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkocmV2aXNpb24gOTcwMzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzcsMzQgKzc3LDM4IEBAIHZvaWQqIHByZXBhcmVPU1JFbnRyeShFeGVjU3RhdGUqIGV4
ZWMsIEMKICAgICAvLyAgICBpbnRvIGEgbGVzcy1saWtlbHkgcGF0aC4gU28sIHRoZSB3aXNlc3Qg
Y291cnNlIG9mIGFjdGlvbiBpcyB0byBzaW1wbHkgbm90CiAgICAgLy8gICAgT1NSIGF0IHRoaXMg
dGltZS4KICAgICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgZW50cnktPm1fcHJlZGlj
dGlvbnMuYXJndW1lbnRVcHBlckJvdW5kKCk7ICsraSkgewotICAgICAgICBBY3Rpb25hYmxlUHJl
ZGljdGlvbiBwcmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMuYXJndW1lbnQoaSk7Ci0g
ICAgICAgIGlmIChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCi0gICAgICAg
ICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoaSA+PSBleGVjLT5hcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcygpKSB7CisgICAgZm9yIChzaXplX3QgYXJndW1lbnQgPSAwOyBhcmd1bWVudCA8
IGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLm51bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQp
IHsKKyAgICAgICAgaWYgKGFyZ3VtZW50ID49IGV4ZWMtPmFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKCkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRm
KCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IHdhcyBub3QgcGFzc2VkLCBleHBl
Y3RlZCAlcy5cbiIsIGksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikp
OworICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICVs
dSB3YXMgbm90IHBhc3NlZCwgZXhwZWN0ZWQgIiwgYXJndW1lbnQpOworICAgICAgICAgICAgZW50
cnktPm1fZXhwZWN0ZWRWYWx1ZXMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAoc3Rkb3V0KTsKKyAg
ICAgICAgICAgIHByaW50ZigiLlxuIik7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGds
b2JhbERhdGEsIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAg
SlNWYWx1ZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFhcmd1bWVudCkKKyAgICAgICAgICAgIHZhbHVl
ID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2YWx1
ZSA9IGV4ZWMtPmFyZ3VtZW50KGFyZ3VtZW50IC0gMSk7CisgICAgICAgIAorICAgICAgICBpZiAo
IWVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS52YWxpZGF0ZSh2YWx1
ZSkpIHsKICNpZiBFTkFCTEUoSklUX1ZFUkJPU0VfT1NSKQotICAgICAgICAgICAgcHJpbnRmKCIg
ICAgT1NSIGZhaWxlZCBiZWNhdXNlIGFyZ3VtZW50ICV1IGlzICVzLCBleHBlY3RlZCAlcy5cbiIs
IGksIGV4ZWMtPmFyZ3VtZW50KGkgLSAxKS5kZXNjcmlwdGlvbigpLCBhY3Rpb25hYmxlUHJlZGlj
dGlvblRvU3RyaW5nKHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBm
YWlsZWQgYmVjYXVzZSBhcmd1bWVudCAlbHUgaXMgJXMsIGV4cGVjdGVkICIsIGFyZ3VtZW50LCB2
YWx1ZS5kZXNjcmlwdGlvbigpKTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVz
LmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5c
biIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cnktPm1fcHJlZGljdGlvbnMudmFy
aWFibGVVcHBlckJvdW5kKCk7ICsraSkgewotICAgICAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBw
cmVkaWN0aW9uID0gZW50cnktPm1fcHJlZGljdGlvbnMudmFyaWFibGUoaSk7Ci0gICAgICAgIGlm
IChwcmVkaWN0aW9uID09IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghdmFsdWVPYmV5c1ByZWRpY3Rpb24oZ2xvYmFs
RGF0YSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLCBwcmVkaWN0aW9uKSkgeworICAg
IGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5u
dW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgIGlmICghZW50cnktPm1fZXhwZWN0
ZWRWYWx1ZXMubG9jYWwobG9jYWwpLnZhbGlkYXRlKGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5q
c1ZhbHVlKCkpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHBy
aW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSB2YXJpYWJsZSAldSBpcyAlcywgZXhwZWN0ZWQg
JXMuXG4iLCBpLCBleGVjLT5yZWdpc3RlcnMoKVtpXS5qc1ZhbHVlKCkuZGVzY3JpcHRpb24oKSwg
YWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJWx1IGlzICVzLCBleHBlY3Rl
ZCAiLCBsb2NhbCwgZXhlYy0+cmVnaXN0ZXJzKClbbG9jYWxdLmpzVmFsdWUoKS5kZXNjcmlwdGlv
bigpKTsKKyAgICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS5k
dW1wKHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFbnRyeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRW50cnkuaAkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkVudHJ5LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAKICNpZm5k
ZWYgREZHT1NSRW50cnlfaAogI2RlZmluZSBERkdPU1JFbnRyeV9oCiAKLSNpbmNsdWRlICJBY3Rp
b25hYmxlUHJlZGljdGlvbi5oIgorI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNs
dWRlICJERkdPcGVyYW5kcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMzksNyArNDAsNyBA
QCBuYW1lc3BhY2UgREZHIHsKIHN0cnVjdCBPU1JFbnRyeURhdGEgewogICAgIHVuc2lnbmVkIG1f
Ynl0ZWNvZGVJbmRleDsKICAgICB1bnNpZ25lZCBtX21hY2hpbmVDb2RlT2Zmc2V0OwotICAgIEFj
dGlvbmFibGVQcmVkaWN0aW9ucyBtX3ByZWRpY3Rpb25zOworICAgIE9wZXJhbmRzPEFic3RyYWN0
VmFsdWU+IG1fZXhwZWN0ZWRWYWx1ZXM7CiB9OwogCiBpbmxpbmUgdW5zaWduZWQgZ2V0T1NSRW50
cnlEYXRhQnl0ZWNvZGVJbmRleChPU1JFbnRyeURhdGEqIG9zckVudHJ5RGF0YSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmFuZHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgREZHT3BlcmFuZHNfaAorI2RlZmluZSBERkdPcGVyYW5kc19oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIGhlbHBl
ciBmdW5jdGlvbiB0byBkaXN0aW5ndWlzaCB2YXJzICYgdGVtcG9yYXJpZXMgZnJvbSBhcmd1bWVu
dHMuCitpbmxpbmUgYm9vbCBvcGVyYW5kSXNBcmd1bWVudChpbnQgb3BlcmFuZCkgeyByZXR1cm4g
b3BlcmFuZCA8IDA7IH0KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IE9wZXJhbmRWYWx1
ZVRyYWl0czsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBPcGVyYW5kVmFsdWVUcmFp
dHMgeworICAgIHN0YXRpYyBUIGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIFQoKTsgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVHJhaXRzID0gT3BlcmFuZFZhbHVlVHJhaXRz
PFQ+ID4KK2NsYXNzIE9wZXJhbmRzIHsKK3B1YmxpYzoKKyAgICBPcGVyYW5kcygpIHsgfQorICAg
IAorICAgIGV4cGxpY2l0IE9wZXJhbmRzKHNpemVfdCBudW1Bcmd1bWVudHMsIHNpemVfdCBudW1M
b2NhbHMpCisgICAgeworICAgICAgICBtX2FyZ3VtZW50cy5maWxsKFRyYWl0czo6ZGVmYXVsdFZh
bHVlKCksIG51bUFyZ3VtZW50cyk7CisgICAgICAgIG1fbG9jYWxzLmZpbGwoVHJhaXRzOjpkZWZh
dWx0VmFsdWUoKSwgbnVtTG9jYWxzKTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IG51bWJlck9m
QXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisgICAgc2l6
ZV90IG51bWJlck9mTG9jYWxzKCkgY29uc3QgeyByZXR1cm4gbV9sb2NhbHMuc2l6ZSgpOyB9Cisg
ICAgCisgICAgVCYgYXJndW1lbnQoc2l6ZV90IGlkeCkgeyByZXR1cm4gbV9hcmd1bWVudHNbaWR4
XTsgfQorICAgIGNvbnN0IFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1f
YXJndW1lbnRzW2lkeF07IH0KKyAgICAKKyAgICBUJiBsb2NhbChzaXplX3QgaWR4KSB7IHJldHVy
biBtX2xvY2Fsc1tpZHhdOyB9CisgICAgY29uc3QgVCYgbG9jYWwoc2l6ZV90IGlkeCkgY29uc3Qg
eyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQorICAgIAorICAgIHZvaWQgc2V0TG9jYWwoc2l6ZV90
IGlkeCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAoaWR4ID49IG1fbG9jYWxz
LnNpemUoKSkgeworICAgICAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBtX2xvY2Fscy5zaXplKCk7
CisgICAgICAgICAgICBtX2xvY2Fscy5yZXNpemUoaWR4ICsgMSk7CisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IG1fbG9jYWxzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgICAgIG1fbG9jYWxzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgbV9sb2NhbHNbaWR4XSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNldEFyZ3VtZW50Rmlyc3RUaW1lKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYXJndW1lbnRzW2lkeF0gPT0gVHJhaXRzOjpkZWZhdWx0
VmFsdWUoKSk7CisgICAgICAgIGFyZ3VtZW50KGlkeCkgPSB2YWx1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRMb2NhbEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpZHggPj0gbV9sb2NhbHMuc2l6ZSgpIHx8IG1fbG9jYWxzW2lk
eF0gPT0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKSk7CisgICAgICAgIHNldExvY2FsKGlkeCwgdmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBUJiBvcGVyYW5kKGludCBvcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgaWYgKG9wZXJhbmRJc0FyZ3VtZW50KG9wZXJhbmQpKSB7CisgICAgICAgICAgICBpbnQg
YXJndW1lbnQgPSBvcGVyYW5kICsgbV9hcmd1bWVudHMuc2l6ZSgpICsgUmVnaXN0ZXJGaWxlOjpD
YWxsRnJhbWVIZWFkZXJTaXplOworICAgICAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzW2FyZ3Vt
ZW50XTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fbG9jYWxzW29wZXJh
bmRdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBUJiBvcGVyYW5kKGludCBvcGVyYW5kKSBjb25z
dCB7IHJldHVybiBjb25zdF9jYXN0PGNvbnN0IFQmPihjb25zdF9jYXN0PE9wZXJhbmRzKj4odGhp
cyktPm9wZXJhbmQob3BlcmFuZCkpOyB9CisgICAgCisgICAgdm9pZCBzZXRPcGVyYW5kKGludCBv
cGVyYW5kLCBjb25zdCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1
bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1f
YXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAg
ICAgICAgICAgIG1fYXJndW1lbnRzW2FyZ3VtZW50XSA9IHZhbHVlOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzZXRMb2NhbChvcGVyYW5kLCB2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1f
YXJndW1lbnRzW2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fbG9jYWxz
W2ldID0gVHJhaXRzOjpkZWZhdWx0VmFsdWUoKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IFZlY3RvcjxULCA4PiBtX2FyZ3VtZW50czsKKyAgICBWZWN0b3I8VCwgMTY+IG1fbG9jYWxzOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3ZvaWQgZHVtcE9wZXJhbmRzKE9wZXJhbmRzPFQ+
JiBvcGVyYW5kcywgRklMRSogb3V0KQoreworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsg
YXJndW1lbnQgPCBvcGVyYW5kcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7Cisg
ICAgICAgIGlmIChhcmd1bWVudCkKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAg
ICAgICBvcGVyYW5kcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChvdXQpOworICAgIH0KKyAgICBm
cHJpbnRmKG91dCwgIiA6ICIpOworICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBv
cGVyYW5kcy5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAgICAgIGlmIChsb2NhbCkK
KyAgICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAgICAgICBvcGVyYW5kcy5sb2NhbChs
b2NhbCkuZHVtcChvdXQpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwor
CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPcGVyYW5kc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9yLmNwcAkocmV2
aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJ
VCkKIAorI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5o
IgogI2luY2x1ZGUgIkRGR1Njb3JlQm9hcmQuaCIKICNpbmNsdWRlIDx3dGYvRml4ZWRBcnJheS5o
PgpAQCAtNTUsNDUgKzU2LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGZpeHBvaW50KCkKICAgICB7
CiAjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgIG1fZ3JhcGgu
ZHVtcChtX2NvZGVCbG9jayk7CisgICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVCbG9jayk7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICAg
ICAgbV9jb3VudCA9IDA7Ci0jZW5kaWYKLSAgICAgICAgZG8gewotICAgICAgICAgICAgbV9jaGFu
Z2VkID0gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFVwIGhlcmUgd2Ugc3Rh
cnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0IHRoYXQgdG8gYmUKLSAg
ICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KLSAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzQmFja3dhcmQoKTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2NoYW5nZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzRm9yd2FyZCgpOwotICAg
ICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAgICAgICAKLSNpZiBFTkFCTEUoREZHX0RFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAg
ICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICAvLyBGb3J3YXJkIHByb3BhZ2F0aW9uIGlzIG5lYXItb3B0aW1hbCBmb3IgYm90
aCB0b3BvbG9naWNhbGx5LXNvcnRlZCBhbmQKLSAgICAgICAgICAgIC8vIERGUy1zb3J0ZWQgY29k
ZS4KLSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rpb25zRm9yd2FyZCgpOwotICAgICAgICAg
ICAgaWYgKCFtX2NoYW5nZWQpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIC8vIEJhY2t3YXJkIHByb3BhZ2F0aW9uIHJlZHVjZXMgdGhlIGxpa2VsaWhv
b2QgdGhhdCBwYXRob2xvZ2ljYWwgY29kZSB3aWxsCi0gICAgICAgICAgICAvLyBjYXVzZSBzbG93
bmVzcy4gTG9vcHMgKGVzcGVjaWFsbHkgbmVzdGVkIG9uZXMpIHJlc2VtYmxlIGJhY2t3YXJkIGZs
b3cuCi0gICAgICAgICAgICAvLyBUaGlzIHBhc3MgY2FwdHVyZXMgdHdvIGNhc2VzOiAoMSkgaXQg
ZGV0ZWN0cyBpZiB0aGUgZm9yd2FyZCBmaXhwb2ludAotICAgICAgICAgICAgLy8gZm91bmQgYSBz
b3VuZCBzb2x1dGlvbiBhbmQgKDIpIHNob3J0LWNpcmN1aXRzIGJhY2t3YXJkIGZsb3cuCi0gICAg
ICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByb3BhZ2F0ZVByZWRpY3Rp
b25zQmFja3dhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCisg
ICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKCk7CisgICAgICAgIHByb3BhZ2F0ZVByZWRp
Y3Rpb25zKCk7CiAgICAgICAgIGZpeHVwKCk7CiAgICAgICAgIAogI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKQEAgLTExMCw2ICs3NywxMyBAQCBwdWJsaWM6CiAKICAg
ICAgICAgYWxsb2NhdGVWaXJ0dWFsUmVnaXN0ZXJzKCk7CiAKKyNpZiBFTkFCTEUoREZHX0RFQlVH
X1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgdmlydHVh
bCByZWdpc3RlciBhbGxvY2F0aW9uOlxuIik7CisgICAgICAgIG1fZ3JhcGguZHVtcChtX2NvZGVC
bG9jayk7CisjZW5kaWYKKworICAgICAgICBnbG9iYWxDRkEoKTsKKwogI2lmIEVOQUJMRShERkdf
REVCVUdfVkVSQk9TRSkKICAgICAgICAgcHJpbnRmKCJHcmFwaCBhZnRlciBwcm9wYWdhdGlvbjpc
biIpOwogICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwpAQCAtMjc0LDYgKzI0OCwy
NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MobV9ncmFw
aFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKKyAgICB2b2lkIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAgICAgICBkbyB7CisgICAgICAg
ICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVXAg
aGVyZSB3ZSBzdGFydCB3aXRoIGEgYmFja3dhcmQgcGFzcyBiZWNhdXNlIHdlIHN1c3BlY3QgdGhh
dCB0byBiZQorICAgICAgICAgICAgLy8gbW9yZSBwcm9maXRhYmxlLgorICAgICAgICAgICAgcHJv
cGFnYXRlQXJpdGhOb2RlRmxhZ3NCYWNrd2FyZCgpOworICAgICAgICAgICAgaWYgKCFtX2NoYW5n
ZWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3NGb3J3
YXJkKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgfQorICAgIAogICAgIGJv
b2wgc2V0UHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgewogICAgICAg
ICBBU1NFUlQobV9ncmFwaFttX2NvbXBpbGVJbmRleF0uaGFzUmVzdWx0KCkpOwpAQCAtNjA4LDcg
KzYwMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCIlcyAiLCBwcmVkaWN0aW9uVG9TdHJp
bmcobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlvbigpKSk7CisgICAgICAgIHByaW50
ZigiJXNcbiIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVk
aWN0aW9uKCkpKTsKICNlbmRpZgogICAgICAgICAKICAgICAgICAgbV9jaGFuZ2VkIHw9IGNoYW5n
ZWQ7CkBAIC02MzIsNiArNjI1LDI5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwcm9wYWdhdGVO
b2RlUHJlZGljdGlvbnMobV9ncmFwaFttX2NvbXBpbGVJbmRleF0pOwogICAgIH0KICAgICAKKyAg
ICB2b2lkIHByb3BhZ2F0ZVByZWRpY3Rpb25zKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAg
ICAgICBkbyB7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJv
dGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCisgICAgICAgICAgICAvLyBERlMtc29ydGVkIGNv
ZGUuCisgICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKKyAgICAgICAg
ICAgIGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlo
b29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAorICAgICAgICAgICAgLy8gY2F1c2Ugc2xv
d25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBm
bG93LgorICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0
IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKKyAgICAgICAgICAgIC8vIGZvdW5kIGEg
c291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgorICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0
aW9uc0JhY2t3YXJkKCk7CisgICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7CisgICAgfQorICAg
IAogICAgIHZvaWQgdG9Eb3VibGUoTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAgICAgICAg
IGlmIChtX2dyYXBoW25vZGVJbmRleF0ub3AgPT0gVmFsdWVUb051bWJlcikgewpAQCAtMTQ0NSw2
ICsxNDYxLDgxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2NvZGVCbG9jay0+bV9udW1DYWxs
ZWVSZWdpc3RlcnMgPSBjYWxsZWVSZWdpc3RlcnM7CiAgICAgfQogICAgIAorICAgIHZvaWQgcGVy
Zm9ybUJsb2NrQ0ZBKEFic3RyYWN0U3RhdGUmIHN0YXRlLCBCbG9ja0luZGV4IGJsb2NrSW5kZXgp
CisgICAgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxv
Y2tJbmRleF0uZ2V0KCk7CisgICAgICAgIGlmICghYmxvY2stPmNmYVNob3VsZFJldmlzaXQpCisg
ICAgICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJC
T1NFKQorICAgICAgICBwcmludGYoIiAgIEJsb2NrICMldSAoYmMjJXUpOlxuIiwgYmxvY2tJbmRl
eCwgYmxvY2stPmJ5dGVjb2RlQmVnaW4pOworI2VuZGlmCisgICAgICAgIHN0YXRlLmJlZ2luQmFz
aWNCbG9jayhibG9jayk7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NF
KQorICAgICAgICBwcmludGYoIiAgICAgIGhlYWQgdmFyczogIik7CisgICAgICAgIGR1bXBPcGVy
YW5kcyhibG9jay0+dmFsdWVzQXRIZWFkLCBzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7
CisjZW5kaWYKKyAgICAgICAgZm9yIChOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2stPmJlZ2lu
OyBub2RlSW5kZXggPCBibG9jay0+ZW5kOyArK25vZGVJbmRleCkgeworICAgICAgICAgICAgaWYg
KCFtX2dyYXBoW25vZGVJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAg
ICAgICAgICBwcmludGYoIiAgICAgICVzIEAldTogIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25v
ZGVJbmRleF0ub3ApLCBub2RlSW5kZXgpOworICAgICAgICAgICAgc3RhdGUuZHVtcChzdGRvdXQp
OworICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoIXN0
YXRlLmV4ZWN1dGUobm9kZUluZGV4KSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJp
bnRmKCIgICAgICB0YWlsIHJlZ3M6ICIpOworICAgICAgICBzdGF0ZS5kdW1wKHN0ZG91dCk7Cisg
ICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICBtX2NoYW5nZWQgfD0gc3RhdGUu
ZW5kQmFzaWNCbG9jayhBYnN0cmFjdFN0YXRlOjpNZXJnZVRvU3VjY2Vzc29ycyk7CisjaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIiAgICAg
IHRhaWwgdmFyczogIik7CisgICAgICAgIGR1bXBPcGVyYW5kcyhibG9jay0+dmFsdWVzQXRUYWls
LCBzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICB9CisgICAgCisg
ICAgdm9pZCBwZXJmb3JtRm9yd2FyZENGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSkKKyAgICB7Cisj
aWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYo
IkNGQSBbJXVdXG4iLCArK21fY291bnQpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBmb3Ig
KEJsb2NrSW5kZXggYmxvY2sgPSAwOyBibG9jayA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyAr
K2Jsb2NrKQorICAgICAgICAgICAgcGVyZm9ybUJsb2NrQ0ZBKHN0YXRlLCBibG9jayk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZ2xvYmFsQ0ZBKCkKKyAgICB7CisjaWYgRU5BQkxFKERGR19ERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBtX2NvdW50ID0gMDsKKyNlbmRpZgorICAg
ICAgICAKKyAgICAgICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgcHNldWRvLXdvcmtsaXN0LWJhc2Vk
IGZvcndhcmQgQ0ZBLCBleGNlcHQgdGhhdCB0aGUgdmlzaXQgb3JkZXIKKyAgICAgICAgLy8gb2Yg
YmxvY2tzIGlzIHRoZSBieXRlY29kZSBwcm9ncmFtIG9yZGVyICh3aGljaCBpcyBuZWFybHkgdG9w
b2xvZ2ljYWwpLCBhbmQKKyAgICAgICAgLy8gaW5zdGVhZCBvZiBhIHdvcmtsaXN0IHdlIGp1c3Qg
d2FsayBhbGwgYmFzaWMgYmxvY2tzIGNoZWNraW5nIGlmIGNmYVNob3VsZFJldmlzaXQKKyAgICAg
ICAgLy8gaXMgc2V0IHRvIHRydWUuIFRoaXMgaXMgbGlrZWx5IHRvIGJhbGFuY2UgdGhlIGVmZmlj
aWVuY3kgcHJvcGVydGllcyBvZiBib3RoCisgICAgICAgIC8vIHdvcmtsaXN0LWJhc2VkIGFuZCBm
b3J3YXJkIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoZXMuIExpa2UgYSB3b3JrbGlzdC1iYXNlZAor
ICAgICAgICAvLyBhcHByb2FjaCwgaXQgd29uJ3QgdmlzaXQgY29kZSBpZiBpdCdzIG1lYW5pbmds
ZXNzIHRvIGRvIHNvIChub3RoaW5nIGNoYW5nZWQgYXQKKyAgICAgICAgLy8gdGhlIGhlYWQgb2Yg
dGhlIGJsb2NrIG9yIHRoZSBwcmVkZWNlc3NvcnMgaGF2ZSBub3QgYmVlbiB2aXNpdGVkKS4gTGlr
ZSBhIGZvcndhcmQKKyAgICAgICAgLy8gZml4cG9pbnQtYmFzZWQgYXBwcm9hY2gsIGl0IGhhcyBh
IGhpZ2ggcHJvYmFiaWxpdHkgb2Ygb25seSB2aXNpdGluZyBhIGJsb2NrCisgICAgICAgIC8vIGFm
dGVyIGFsbCBwcmVkZWNlc3NvcnMgaGF2ZSBiZWVuIHZpc2l0ZWQuIE9ubHkgbG9vcHMgd2lsbCBj
YXVzZSB0aGlzIGFuYWx5c2lzIHRvCisgICAgICAgIC8vIHJldmlzaXQgYmxvY2tzLCBhbmQgdGhl
IGFtb3VudCBvZiByZXZpc2l0aW5nIGlzIHByb3BvcnRpb25hbCB0byBsb29wIGRlcHRoLgorICAg
ICAgICAKKyAgICAgICAgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShtX2dyYXBoKTsKKyAgICAg
ICAgCisgICAgICAgIEFic3RyYWN0U3RhdGUgc3RhdGUobV9jb2RlQmxvY2ssIG1fZ3JhcGgpOwor
ICAgICAgICAKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICBwZXJmb3JtRm9yd2FyZENGQShzdGF0ZSk7CisgICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7CisgICAgfQorICAgIAogICAgIEdyYXBoJiBtX2dyYXBoOwogICAgIEpTR2xvYmFs
RGF0YSYgbV9nbG9iYWxEYXRhOwogICAgIENvZGVCbG9jayogbV9jb2RlQmxvY2s7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ3LDcgKzM0Nyw3IEBA
IEpJVENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1cm4gbm90
TnVtYmVyOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHko
Tm9kZSYgbm9kZSwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmpl
Y3RFcXVhbGl0eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyLCBQcmVkaWN0aW9uQ2hlY2tlciBwcmVk
aWN0aW9uQ2hlY2spCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxk
MigpKTsKQEAgLTM1OSw4ICszNTksMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaQogICAgIEdQUlJlZyByZXN1bHRUYWdHUFIgPSByZXN1bHRUYWcuZ3ByKCk7CiAg
ICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQYXlsb2FkLmdwcigpOwogICAgIAot
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVk
aWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5t
b3ZlKEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAgLTM4MCw5ICszODIsOSBAQCBib29s
IFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsCiAgICAgICAgIHJldHVybiB0cnVl
OwogCiAgICAgaWYgKE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hp
bGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0
eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAg
Y29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlmIChOb2RlOjpz
aG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkp
KQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJlZGljdGlvbik7CiAgICAgZWxz
ZSBpZiAoIWF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmICFhdChu
b2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKICAgICAgICAgbm9uU3BlY3Vs
YXRpdmVOb25QZWVwaG9sZUNvbXBhcmUobm9kZSwgY29uZGl0aW9uLCBvcGVyYXRpb24pOwogICAg
IGVsc2UgaWYgKChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSB8fCBh
dChub2RlLmNoaWxkMigpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgJiYgIU5vZGU6OnNob3Vs
ZFNwZWN1bGF0ZUludGVnZXIoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkg
ewpAQCAtNDM4LDcgKzQ0MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZUFk
ZChOb2QKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCogdnB0cikK
K3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2Rl
SW5kZXggbm9kZUluZGV4LCB2b2lkKiB2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQog
ewogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdFRhZyh0aGlzKTsKQEAgLTQ1MSwxNCArNDUzLDE2IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVzdWx0VGFnLmdwcigpKTsKICAgICAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKTsK
LSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNo
ZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
CiAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNOdWxsID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpKSk7CiAKICAgICBpc051
bGwubGluaygmbV9qaXQpOwogCkBAIC00NzQsMTEgKzQ3OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAgLy8gRklYTUU6IE5lZWQgdG8gYWRkIGZhc3Qg
cGF0aHMgZm9yIGtub3duIGJvb2xlYW5zLgogCiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmpl
Y3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
RmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90
KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFp
c0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxl
T2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChu
b2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9y
T3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKSB7CkBAIC01NDQsMjAgKzU0OCwyMiBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAjZW5kaWYKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJ
bmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0cikKK3ZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2RlSW5kZXgsIEJs
b2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIsIGJvb2wgbmVl
ZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZUluZGV4KTsKICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKICAgICBH
UFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigpOwogICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
OwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9u
Q2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBhZGRCcmFuY2go
bV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CiAg
ICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNOdWxsID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Ok51
bGxUYWcpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmlu
ZWRUYWcpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpKSk7CiAKICAgICBpc051
bGwubGluaygmbV9qaXQpOwogCkBAIC01NjksMTUgKzU3NSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSYgbm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5i
bG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwot
ICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRl
Y29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtl
biA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICAvLyBGSVhNRTogQWRkIGZhc3Qg
Y2FzZXMgZm9yIGtub3duIEJvb2xlYW4hCiAKICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
RmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRP
YmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJh
bmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewogICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBib29sIGludmVydCA9IGZh
bHNlOwpAQCAtNjQzLDYgKzY0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgUHJlZGljdGVkVHlwZSBw
cmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5k
KG5vZGUubG9jYWwoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZv
ciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYg
KHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKQEAgLTY4Myw3ICs2OTAsMTQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2dwcnMucmV0YWlu
KHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogICAgICAgICBt
X2dwcnMucmV0YWluKHRhZy5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwog
Ci0gICAgICAgIERhdGFGb3JtYXQgZm9ybWF0ID0gaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0
aW9uKSA/IERhdGFGb3JtYXRKU0Jvb2xlYW4gOiBEYXRhRm9ybWF0SlM7CisgICAgICAgIERhdGFG
b3JtYXQgZm9ybWF0OworICAgICAgICBpZiAoaXNDZWxsUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUp
KQorICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKKyAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQorICAgICAgICAgICAgZm9ybWF0
ID0gRGF0YUZvcm1hdEpTQm9vbGVhbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9ybWF0
ID0gRGF0YUZvcm1hdEpTOworCiAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lz
dGVyXS5pbml0SlNWYWx1ZShtX2NvbXBpbGVJbmRleCwgbm9kZS5yZWZDb3VudCgpLCB0YWcuZ3By
KCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNzEy
LDcgKzcyNiw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgfSBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAg
ICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBp
ZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJh
eVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxl
cjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsgLy8gRklYTUU6IEFkZCBCb29sZWFuUHJlZGlj
dGlvbiBoYW5kbGluZwpAQCAtMTMxNSw3ICsxMzMwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBh
cnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBt
X3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNl
IHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFp
c0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2
ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIApAQCAtMTM2OCw3ICsxMzgzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQg
YmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBt
X3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGlj
dGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAg
ICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwog
CiAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0xNDU1LDcgKzE0NzAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3cml0ZUJhcnJp
ZXIoYmFzZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclBy
b3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAgICBp
ZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIs
IEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTUwMSw3ICsxNTE2
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBH
UFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdl
TGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICgh
aXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNB
cnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNTQ4LDcgKzE1NjMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAg
Y2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBo
KCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKKyAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAg
ICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICAgICAgYWRkQnJhbmNo
KG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CkBAIC0xNTU5LDggKzE1NzQsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAg
QmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIApAQCAtMTc3MSw3ICsx
Nzg2LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0
aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNPYmplY3RQcmVkaWN0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4MTMsOSArMTgyOSwxMCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5
IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJl
bGlldmUKICAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxh
dGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCiAgICAgICAgIC8vIGRvIHRoZSBzbG93
IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwotICAgICAgICBlbHNlIHsKKyAg
ICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkp
IHsKKyAgICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3Rv
R1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAg
ICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBl
T2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CiAg
ICAgICAgIH0KQEAgLTE5NTEsNyArMTk2OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAg
aWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAg
ICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwpAQCAtMTk3MCw3ICsxOTg3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5j
aGlsZDEoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVu
Z3RoKCkpLCByZXN1bHRHUFIpOwpAQCAtMTk4Nyw2ICsyMDA0LDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIENoZWNrU3RydWN0
dXJlOiB7CisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1
Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKSkgeworICAgICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXpl
KCkpOwpAQCAtMjExMyw3ICsyMTM1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAg
IEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7Cisg
ICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmRv
ZXNOb3RDb250YWluQW55T3RoZXJUaGFuKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKQorICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9m
ZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVj
dHVyZSkpKTsKICAgICAgICAgaWYgKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUgIT0gbV9qaXQu
Y29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5tZXRob2RDYWxsRHVtbXkoKSkgewogICAgICAg
ICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0Rh
dGEucHJvdG90eXBlLT5zdHJ1Y3R1cmVBZGRyZXNzKCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVk
SW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUpKSk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJl
dmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUwLDcgKzQ1MCw3IEBAIEpJVENvbXBpbGVy
OjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1cm4gbm90TnVtYmVyOwogfQog
Ci12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwg
dm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eShO
b2RlJiBub2RlLCB2b2lkKiB2cHRyLCBQcmVkaWN0aW9uQ2hlY2tlciBwcmVkaWN0aW9uQ2hlY2sp
CiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTQ2
MCw4ICs0NjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQog
ICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJl
c3VsdC5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0
aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNh
c2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9w
MkdQUik7CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIpOwpAQCAt
NTAxLDkgKzUwMyw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9kZSYgbm9kZSwK
IAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIERh
dGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEg
JiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5jaGlsZDEoKSksIGF0
KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1f
aml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBjb21waWxlT2Jq
ZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwg
aXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFy
ZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChu
b2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdEVxdWFs
aXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0
aW9uKTsKICAgICBlbHNlCiAgICAgICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJl
KG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAKQEAgLTUyOSw3ICs1MzEsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZv
aWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2lj
YWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRp
b25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwog
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC01MzcsNyArNTM5LDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAg
bV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkp
LCByZXN1bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CiAgICAgCkBAIC01NDUsNyArNTQ4LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdE9yT3RoZQogICAgIAogICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7
CiAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVu
ZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAg
aWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkp
KTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1
ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICAKICAgICBkb25lLmxpbmsoJm1faml0KTsKQEAgLTU2
NiwxMSArNTcwLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4K
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5h
bE9iamVjdFZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9k
ZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmlu
YWxPYmplY3RPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmpl
Y3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
QXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUu
Y2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhl
clByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVj
dWxhdGVJbnRlZ2VyKCkpIHsKQEAgLTYzMCwxOSArNjM0LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9j
b21waWxlSW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4sIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGlj
aXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNo
KE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFr
ZW4sIHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJy
YW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5v
dFRha2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygm
bV9qaXQpOwogICAgIAogICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCB2YWx1ZUdQUik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxs
KSkpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZh
bHVlTnVsbCkpKSk7CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAg
IGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsKICAgICAKQEAgLTY1NCw4ICs2NjAs
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHZhbHVlR1BS
ID0gdmFsdWUuZ3ByKCk7CiAgICAgCi0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBo
KCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90
VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGlmIChpc0tub3du
Qm9vbGVhbihub2RlLmNoaWxkMSgpKSkgewogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0
Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwpAQCAtNjczLDkg
KzY3OSw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAg
ICAgCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICB9IGVsc2UgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0g
ICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RU
YWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGVt
aXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RPck90aGVy
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAg
fSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIo
KSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtl
biwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBl
bWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAg
ICAgYm9vbCBpbnZlcnQgPSBmYWxzZTsKQEAgLTcwOCw5ICs3MTQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgIGlmIChwcmVkaWN0Qm9vbGVhbikg
ewogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c0Jvb2xlYW4oZmFsc2UpKSkpLCBub3RUYWtlbik7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAocHJlZGljdEJvb2xlYW4pIHsKKwogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgdmFs
dWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03NDgsMTUgKzc1MiwxNiBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIEdldExvY2FsOiB7
CiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NE
YXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9j
aygpLT52YWx1ZXNBdEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0
IHRvIGNvbXBpbGUuCi0gICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7Cisg
ICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lIHx8IHZhbHVlLmlzQ2xlYXIoKSkg
ewogICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBHUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGlvbikpIHsK
KyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpIHsKICAgICAgICAg
ICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpLCBy
ZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgICAgICAvLyBMaWtlIGludGVnZXJSZXN1bHQsIGJ1dCBk
b24ndCB1c2VDaGlsZHJlbiAtIG91ciBjaGlsZHJlbiBhcmUgcGhpIG5vZGVzLApAQCAtNzc1LDkg
Kzc4MCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgbV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRl
ckpTKTsKIAogICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKLSAgICAgICAgaWYgKGlzQXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoaXNDZWxsUHJlZGljdGlvbih2YWx1
ZS5tX3R5cGUpKQogICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKLSAgICAg
ICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgZWxz
ZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQogICAgICAgICAgICAgZm9y
bWF0ID0gRGF0YUZvcm1hdEpTQm9vbGVhbjsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZm9y
bWF0ID0gRGF0YUZvcm1hdEpTOwpAQCAtODIwLDcgKzgyNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5UHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
Y2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0g
Y2VsbC5ncHIoKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsK
ICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0xNDIzLDcgKzE0Mjks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAg
Ly8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250
YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYg
d2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAg
dGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAg
ICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCkBAIC0x
NDczLDcgKzE0NzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9w
ZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAg
ICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwg
d2UgY2FuIHNraXAgdGhlIGNoZWNrLgotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKQEAgLTE1NTgs
NyArMTU2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgCiAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGls
ZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VM
ZW5ndGhHUFIpOwogCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQor
ICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFn
ZUdQUik7CkBAIC0xNjAxLDcgKzE2MDcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlR1BSID0gc3RvcmFnZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwog
ICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BS
KTsKQEAgLTE2NDQsNyArMTY1MCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIERGRzo6SnVtcDogewotICAgICAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9k
ZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9k
ZS50YWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAgaWYgKHRha2VuICE9IChtX2Jsb2NrICsgMSkp
CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKQEAgLTE2NTUsOCArMTY2MSw4IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgaWYgKGlzU3RyaWN0SW50MzIo
bm9kZS5jaGlsZDEoKSkgfHwgYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdl
cigpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcCh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRl
Y29kZU9mZnNldCgpKTsKLSAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5n
cmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVP
ZmZzZXQoKSk7CisgICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2Nr
SW5kZXgoKTsKKyAgICAgICAgICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRha2Vu
QmxvY2tJbmRleCgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOwogICAg
ICAgICAgICAgCkBAIC0xODI5LDkgKzE4MzUsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHRoaXNWYWx1ZUdQUiA9IHRoaXNW
YWx1ZS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNj
cmF0Y2hHUFIpOwotICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBz
Y3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICAgICAgaWYgKCFpc090aGVyUHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgeworICAgICAgICAgICAg
ICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgICAgICAg
ICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwp
KSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxP
YmplY3QoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BS
LCBtX2NvbXBpbGVJbmRleCk7CkBAIC0xODQxLDcgKzE4NDksOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc09iamVjdFByZWRpY3Rpb24o
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpKSkgewogICAgICAgICAgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgdGhpc1ZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBp
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwor
ICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlz
VmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgY2VsbFJlc3Vs
dCh0aGlzVmFsdWUuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpA
QCAtMTg4MSw5ICsxODkwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgLy8gTmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgcHJvdG90eXBlIGlzIGFu
IG9iamVjdC4gSWYgd2UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZQogICAgICAgICAvLyB0aGF0IGl0
J3MgYSBGaW5hbE9iamVjdCB0aGVuIHdlIHNwZWN1bGF0ZSBvbiB0aGF0IGRpcmVjdGx5LiBPdGhl
cndpc2Ugd2UKICAgICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNlZCkgY2hlY2su
Ci0gICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dCgpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9i
amVjdFZQdHIpKSk7Ci0gICAgICAgIGVsc2UgeworICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgeworICAgICAgICAgICAgaWYgKCFpc0Zp
bmFsT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFs
T2JqZWN0VlB0cikpKTsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2Ny
YXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKICAgICAgICAgfQpAQCAtMjAxMiw3ICsyMDIy
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBH
UFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNo
aWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHJlc3VsdEdQUik7CkBAIC0yMDMxLDcgKzIwNDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIo
KTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0g
ICAgICAgIGlmICghaXNLbm93blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFp
c1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CkBAIC0y
MDQ2LDYgKzIwNTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDaGVja1N0cnVjdHVyZTogeworICAg
ICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vi
c2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpIHsKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAogICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAKICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKQEAgLTIx
NjUsNyArMjE4MCw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgc2Ny
YXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6
VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkpOworICAgICAgICBpZiAo
IW1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0cnVjdHVyZS5kb2VzTm90Q29udGFp
bkFueU90aGVyVGhhbihtZXRob2RDaGVja0RhdGEuc3RydWN0dXJlKSkKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CiAg
ICAgICAgIGlmIChtZXRob2RDaGVja0RhdGEucHJvdG90eXBlICE9IG1faml0LmNvZGVCbG9jaygp
LT5nbG9iYWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15KCkpIHsKICAgICAgICAgICAgIG1faml0
Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlw
ZS0+c3RydWN0dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRo
b2RDaGVja0RhdGEucHJvdG90eXBlU3RydWN0dXJlKSkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDk3MDMwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNSw4ICsxMjUsOCBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0
KSBjb25zdAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNo
KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpEb3Vi
bGVDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFu
Y2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2Nr
SW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5
dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBC
bG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9j
a0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAK
ICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKQEAgLTEz
NywxMSArMTM3LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZURvdWIK
ICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwogfQogCi12b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiBub2RlLCBO
b2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJy
YW5jaE5vZGVJbmRleCwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIgcHJlZGljdGlvbkNo
ZWNrKQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAg
IEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9m
ZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBu
b3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
YnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiA9IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDsKICAg
ICAKQEAgLTE1OCw4ICsxNTgsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZQogICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAgICAgR1BSUmVnIG9wMkdQ
UiA9IG9wMi5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVk
aWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRy
KGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CiAgICAgaWYgKG5vdFRha2VuICE9
IChtX2Jsb2NrICsgMSkpCkBAIC0xNjksOCArMTcxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xl
SW50ZWdlckJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRD
b21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAgICAgTm9kZSYgYnJh
bmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5C
eXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgo
KS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2Rl
T2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJ
bmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxv
Y2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJyYW5jaCB0
byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNoIHRha2Vu
IHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2UgY2FuIGZh
bGwgdGhyb3VnaC4KQEAgLTIxOSwxMSArMjIxLDExIEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUJyYW4KICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09
IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhv
bGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEo
KS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0
RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmlu
YWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAgICAgICAgICAgICB1c2Uo
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRl
QXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAgICAg
ICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBt
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgICAgIGNvbXBpbGVQZWVw
SG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rpb24pOwogICAgICAgICAgICAgdXNlKG5v
ZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwogICAgICAgICB9
IGVsc2UKQEAgLTI1NiwxOCArMjU4LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
QmFzaWNCbG9jayYKICAgICBtX2ppdC5icmVha3BvaW50KCk7CiAjZW5kaWYKIAotICAgIEFTU0VS
VChtX2FyZ3VtZW50cy5zaXplKCkgPT0gYmxvY2subV9hcmd1bWVudHNBdEhlYWQuc2l6ZSgpKTsK
KyAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkFyZ3VtZW50cygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYXJndW1l
bnRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5t
X2FyZ3VtZW50c0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5hcmd1bWVudChpKTsKICAgICAgICAgaWYgKG5vZGVJbmRl
eCA9PSBOb05vZGUpCiAgICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFZhbHVlU291cmNlKFZh
bHVlSW5SZWdpc3RlckZpbGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2FyZ3VtZW50
c1tpXSA9IFZhbHVlU291cmNlOjpmb3JQcmVkaWN0aW9uKGF0KG5vZGVJbmRleCkudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7CiAgICAgfQogICAgIAotICAgIEFTU0VSVChtX3Zh
cmlhYmxlcy5zaXplKCkgPT0gYmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKKyAgICBtX3N0
YXRlLnJlc2V0KCk7CisgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2soJmJsb2NrKTsKKyAgICAK
KyAgICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyaWFibGVz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay5tX2xv
Y2Fsc0F0SGVhZFtpXS52YWx1ZTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2Nr
LnZhcmlhYmxlc0F0SGVhZC5sb2NhbChpKTsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBOb05v
ZGUpCiAgICAgICAgICAgICBtX3ZhcmlhYmxlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5SZWdp
c3RlckZpbGUpOwogICAgICAgICBlbHNlCkBAIC0zMzcsNiArMzQyLDkgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxu
Iik7CiAjZW5kaWYKICAgICAgICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBhYnN0
cmFjdCBzdGF0ZSBpcyByZW1hdGVyaWFsaXplZCBmb3IgdGhlIG5leHQgbm9kZS4KKyAgICAgICAg
bV9zdGF0ZS5leGVjdXRlKG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgCiAgICAgICAgIGlmIChu
b2RlLnNob3VsZEdlbmVyYXRlKCkpCiAgICAgICAgICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAg
ICAgfQpAQCAtNTM3LDcgKzU0NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRD
aGFyQ29kZUEKICAgICBHUFJSZWcgc3RyaW5nUmVnID0gc3RyaW5nLmdwcigpOwogICAgIEdQUlJl
ZyBpbmRleFJlZyA9IGluZGV4LmdwcigpOwogICAgIAotICAgIGlmICghaXNLbm93blN0cmluZyhu
b2RlLmNoaWxkMSgpKSkKKyAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdHJpbmdSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJp
c29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhh
dCBhcmUgdG9vIGxhcmdlCkBAIC01NjYsNyArNTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAg
ICBHUFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAotICAgIGlmICghaXNLbm93
blN0cmluZyhub2RlLmNoaWxkMSgpKSkKKyAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAKICAgICAvLyB1bnNpZ25lZCBjb21w
YXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMg
dGhhdCBhcmUgdG9vIGxhcmdlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlIDxkZmcvREZHQWJzdHJhY3RT
dGF0ZS5oPgogI2luY2x1ZGUgPGRmZy9ERkdKSVRDb2RlR2VuZXJhdG9yLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKQEAgLTQxNyw0MyArNDE4LDE2IEBAIHByaXZhdGU6CiAg
ICAgICAgIHJldHVybiBpbmZvLmlzSlNJbnRlZ2VyKCk7CiAgICAgfQogICAgIAotICAgIGJvb2wg
aXNLbm93bkFycmF5KE5vZGVJbmRleCBvcDEpCi0gICAgewotICAgICAgICBOb2RlJiBub2RlID0g
YXQob3AxKTsKLSAgICAgICAgc3dpdGNoIChub2RlLm9wKSB7Ci0gICAgICAgIGNhc2UgR2V0TG9j
YWw6Ci0gICAgICAgICAgICByZXR1cm4gaXNBcnJheVByZWRpY3Rpb24obm9kZS52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIE5l
d0FycmF5OgotICAgICAgICBjYXNlIE5ld0FycmF5QnVmZmVyOgotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNLbm93blN0cmluZyhOb2Rl
SW5kZXggb3AxKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChhdChvcDEpLm9wKSB7Ci0gICAgICAg
IGNhc2UgU3RyQ2F0OgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAg
IH0KLSAgICAKICAgICBib29sIGNvbXBhcmUoTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlv
bmFsQ29uZGl0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBaX0RGR09wZXJh
dGlvbl9FSkopOwogICAgIGJvb2wgY29tcGlsZVBlZXBIb2xlQnJhbmNoKE5vZGUmLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRp
dGlvbiwgWl9ERkdPcGVyYXRpb25fRUpKKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZUludGVn
ZXJCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKICAgICB2b2lkIGNvbXBpbGVQZWVwSG9sZURvdWJsZUJyYW5j
aChOb2RlJiwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRvdWJsZUNv
bmRpdGlvbik7Ci0gICAgdm9pZCBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiwg
Tm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cik7Ci0gICAgdm9pZCBjb21waWxl
T2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZwdHIpOworICAgIHZvaWQgY29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQq
IHZwdHIsIFByZWRpY3Rpb25DaGVja2VyKTsKKyAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0
eShOb2RlJiwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIpOwogICAgIHZvaWQgY29tcGls
ZVZhbHVlQWRkKE5vZGUmKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5v
dChOb2RlSW5kZXggdmFsdWUsIHZvaWQqIHZwdHIpOworICAgIHZvaWQgY29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCB2YWx1ZSwgdm9pZCogdnB0ciwgYm9vbCBuZWVkU3Bl
Y3VsYXRpb25DaGVjayk7CiAgICAgdm9pZCBjb21waWxlTG9naWNhbE5vdChOb2RlJik7Ci0gICAg
dm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXggdmFsdWUsIEJsb2NrSW5kZXgg
dGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIpOworICAgIHZvaWQgZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVlLCBCbG9ja0luZGV4IHRha2VuLCBCbG9j
a0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsK
ICAgICB2b2lkIGVtaXRCcmFuY2goTm9kZSYpOwogICAgIAogICAgIHZvaWQgY29tcGlsZUdldENo
YXJDb2RlQXQoTm9kZSYpOwpAQCAtNTc1LDYgKzU0OSw4IEBAIHByaXZhdGU6CiAgICAgaW50IG1f
bGFzdFNldE9wZXJhbmQ7CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4Rm9yT1NSOwogICAg
IAorICAgIEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKKyAgICAKICAgICBWYWx1ZVJlY292ZXJ5IGNv
bXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGNvbnN0IFZhbHVlU291cmNlJik7CiAKICAgICBWYWx1ZVJl
Y292ZXJ5IGNvbXB1dGVWYWx1ZVJlY292ZXJ5Rm9yKGludCBvcGVyYW5kKQpAQCAtODA3LDYgKzc4
Myw3IEBAIGlubGluZSBTcGVjdWxhdGl2ZUpJVDo6U3BlY3VsYXRpdmVKSVQoSkkKICAgICAsIG1f
dmFyaWFibGVzKGppdC5ncmFwaCgpLm1fbG9jYWxWYXJzKQogICAgICwgbV9sYXN0U2V0T3BlcmFu
ZChzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQogICAgICwgbV9ieXRlY29kZUluZGV4
Rm9yT1NSKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKSkKKyAgICAsIG1fc3Rh
dGUobV9qaXQuY29kZUJsb2NrKCksIG1faml0LmdyYXBoKCkpCiB7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaAkocmV2aXNpb24gOTcwMzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiw2ICsyNiwxMiBAQAogI2lmbmRlZiBERkdTdHJ1Y3R1cmVTZXRfaAogI2Rl
ZmluZSBERkdTdHJ1Y3R1cmVTZXRfaAogCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKKyNpbmNsdWRl
IDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC0zNCw2ICs0MCw4IEBAIGNsYXNzIFN0cnVjdHVyZTsKIAogbmFtZXNwYWNlIERGRyB7CiAKK2Ns
YXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisKIGNsYXNzIFN0cnVjdHVyZVNldCB7CiBwdWJs
aWM6CiAgICAgU3RydWN0dXJlU2V0KCkgeyB9CkBAIC00Myw2ICs1MSwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKICAgICB9CiAgICAgCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZXMuY2xlYXIoKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgewogICAgICAg
ICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkpOwpAQCAtMTA0LDEwICsxMTcsNTAgQEAgcHVi
bGljOgogICAgIAogICAgIFN0cnVjdHVyZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlcy5sYXN0KCk7IH0KIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1
cmVzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcmVzdWx0ID0gUHJlZGlj
dE5vbmU7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0
dXJlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1lcmdlUHJlZGljdGlvbihyZXN1bHQsIHBy
ZWRpY3Rpb25Gcm9tU3RydWN0dXJlKG1fc3RydWN0dXJlc1tpXSkpOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zdHJ1Y3R1
cmVzLnNpemUoKSAhPSBvdGhlci5tX3N0cnVjdHVyZXMuc2l6ZSgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3N0
cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMo
bV9zdHJ1Y3R1cmVzW2ldKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyNpZm5kZWYg
TkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkKKyAgICB7CisgICAgICAgIGZwcmludGYo
b3V0LCAiWyIpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKGkpCisgICAgICAgICAgICAgICAgZnByaW50
ZihvdXQsICIsICIpOworICAgICAgICAgICAgZnByaW50ZihvdXQsICIlcCIsIG1fc3RydWN0dXJl
c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZnByaW50ZihvdXQsICJdIik7CisgICAgfQorI2Vu
ZGlmCisgICAgCiBwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOworICAgIAogICAgIFZlY3RvcjxTdHJ1Y3R1cmUqLCAyPiBtX3N0cnVjdHVyZXM7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwogI2VuZGlmIC8vIERGR1N0cnVjdHVyZVNldF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gKKyNkZWZpbmUgREZH
VmFyaWFibGVBY2Nlc3NEYXRhX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gVHlwZSBmb3IgYSB2aXJ0dWFsIHJlZ2lzdGVy
IG51bWJlciAoc3BpbGwgbG9jYXRpb24pLgorLy8gVXNpbmcgYW4gZW51bSB0byBtYWtlIHRoaXMg
dHlwZS1jaGVja2VkIGF0IGNvbXBpbGUgdGltZSwgdG8gYXZlcnQgcHJvZ3JhbW1lciBlcnJvcnMu
CitlbnVtIFZpcnR1YWxSZWdpc3RlciB7IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIgPSAtMSB9Owor
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFZpcnR1YWxSZWdpc3RlcikgPT0gc2l6ZW9mKGludCksIFZp
cnR1YWxSZWdpc3Rlcl9pc18zMmJpdCk7CisKK2NsYXNzIFZhcmlhYmxlQWNjZXNzRGF0YTogcHVi
bGljIFVuaW9uRmluZDxWYXJpYWJsZUFjY2Vzc0RhdGE+IHsKK3B1YmxpYzoKKyAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEoKQorICAgICAgICA6IG1fbG9jYWwoc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lz
dGVyPihzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpKSkKKyAgICAgICAgLCBtX3ByZWRp
Y3Rpb24oUHJlZGljdE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEoVmlydHVhbFJlZ2lzdGVyIGxvY2FsKQorICAgICAgICA6IG1fbG9jYWwobG9jYWwpCisg
ICAgICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2xvY2Fs
ID09IGZpbmQoKS0+bV9sb2NhbCk7CisgICAgICAgIHJldHVybiBtX2xvY2FsOworICAgIH0KKyAg
ICAKKyAgICBpbnQgb3BlcmFuZCgpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50Pihsb2NhbCgpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBwcmVkaWN0KFByZWRpY3RlZFR5
cGUgcHJlZGljdGlvbikKKyAgICB7CisgICAgICAgIHJldHVybiBtZXJnZVByZWRpY3Rpb24oZmlu
ZCgpLT5tX3ByZWRpY3Rpb24sIHByZWRpY3Rpb24pOworICAgIH0KKyAgICAKKyAgICBQcmVkaWN0
ZWRUeXBlIHByZWRpY3Rpb24oKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmQoKS0+bV9wcmVk
aWN0aW9uOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBzbGlnaHRseSBz
cGFjZS1pbmVmZmljaWVudCwgc2luY2UgYW55dGhpbmcgd2UncmUgdW5pZmllZCB3aXRoCisgICAg
Ly8gd2lsbCBoYXZlIHRoZSBzYW1lIG9wZXJhbmQgYW5kIHNob3VsZCBoYXZlIHRoZSBzYW1lIHBy
ZWRpY3Rpb24uIEJ1dAorICAgIC8vIHB1dHRpbmcgdGhlbSBoZXJlIHNpbXBsaWZpZXMgdGhlIGNv
ZGUsIGFuZCB3ZSBkb24ndCBleHBlY3QgREZHIHNwYWNlCisgICAgLy8gdXNhZ2UgZm9yIHZhcmlh
YmxlIGFjY2VzcyBub2RlcyBkbyBiZSBzaWduaWZpY2FudC4KKworICAgIFZpcnR1YWxSZWdpc3Rl
ciBtX2xvY2FsOworICAgIFByZWRpY3RlZFR5cGUgbV9wcmVkaWN0aW9uOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110424</attachid>
            <date>2011-10-10 15:48:11 -0700</date>
            <delta_ts>2011-10-10 16:21:55 -0700</delta_ts>
            <desc>the patch - address Gavin&apos;s most recent comments</desc>
            <filename>cfa_patch_12.diff</filename>
            <type>text/plain</type>
            <size>169275</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRlZCBhIGNvbnRyb2wgZmxvdyBhbmFseXNpcyAoQ0ZBKS4gSXQgY3VycmVu
dGx5IHByb3BhZ2F0ZXMgdHlwZQorICAgICAgICBwcm9vZnMgb25seS4gRm9yIGV4YW1wbGUsIGlm
IGFsbCBwcmVkZWNlc3NvcnMgdG8gYSBiYXNpYyBibG9jayBoYXZlCisgICAgICAgIGNoZWNrcyB0
aGF0IHZhcmlhYmxlIFggaXMgYSBKU0ZpbmFsT2JqZWN0IHdpdGggc3RydWN0dXJlIDB4YWJjZGVm
LCB0aGVuCisgICAgICAgIHRoaXMgYmFzaWMgYmxvY2sgd2lsbCBub3cga25vdyB0aGlzIGZhY3Qg
YW5kIHdpbGwga25vdyB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgIGhhdmUgdG8gZW1pdCBlaXRo
ZXIgSlNGaW5hbE9iamVjdCBjaGVja3Mgb3IgYW55IHN0cnVjdHVyZSBjaGVja3Mgc2luY2UKKyAg
ICAgICAgdGhlIHN0cnVjdHVyZSBpcyBwcmVjaXNlbHkga25vdy4gVGhlIENGQSB0YWtlcyBoZWFw
IHNpZGUtZWZmZWN0cyBpbnRvCisgICAgICAgIGFjY291bnQgKHRob3VnaCBzb21ld2hhdCBjb25z
ZXJ2YXRpdmVseSksIHNvIHRoYXQgaWYgdGhlIG9iamVjdCBwb2ludGVkCisgICAgICAgIHRvIGJ5
IHZhcmlhYmxlIFggY291bGQgaGF2ZSBwb3NzaWJseSB1bmRlcmdvbmUgYSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbgorICAgICAgICB0aGVuIHRoaXMgaXMgcmVmbGVjdGVkOiB0aGUgYW5hbHlzaXMgbWF5
IHNpbXBseSBzYXkgdGhhdCBYJ3Mgc3RydWN0dXJlCisgICAgICAgIGlzIHVua25vd24uCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gcHJvcGFnYXRlcyBhIHdlYWx0aCBvZiBvdGhlciB0eXBl
IGluZm9ybWF0aW9uIHdoaWNoIGlzCisgICAgICAgIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZC4g
Rm9yIGV4YW1wbGUsIHdlIG5vdyBrbm93IHdoZW4gYSB2YXJpYWJsZSBjYW4KKyAgICAgICAgb25s
eSBob2xkIGRvdWJsZXMuIEV2ZW4gaWYgYSB2YXJpYWJsZSBtYXkgaG9sZCBvdGhlciB0eXBlcyBh
dCBkaWZmZXJlbnQKKyAgICAgICAgcG9pbnRzIGluIGl0cyBsaXZlIHJhbmdlLCB3ZSBjYW4gc3Rp
bGwgcHJvdmUgZXhhY3RseSB3aGVuIGl0IHdpbGwgb25seQorICAgICAgICBiZSBkb3VibGUuCisg
ICAgICAgIAorICAgICAgICBUaGVyZSdzIGEgYnVuY2ggb2Ygc3R1ZmYgdGhhdCB0aGUgQ0ZBIGNv
dWxkIGRvIHRoYXQgaXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgZG8sIGxpa2UgcHJlY2lzZSBo
YW5kbGluZyBvZiBQdXRTdHJ1Y3R1cmUgKGkuZS4gc3RydWN0dXJlIHRyYW5zaXRpb25zKSwKKyAg
ICAgICAgcHJlY2lzZSBoYW5kbGluZyBvZiBDaGVja0Z1bmN0aW9uIGFuZCBDaGVja01ldGhvZCwg
ZXRjLiBTbyB0aGlzIGlzCisgICAgICAgIHZlcnkgbXVjaCBpbnRlbmRlZCB0byBiZSBhIHN0YXJ0
aW5nIHBvaW50IHJhdGhlciB0aGFuIGFuIGVuZCB1bnRvCisgICAgICAgIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaXMgYSAyJSB3aW4gb24gVjggKG1vc3RseSBkdWUgdG8gYSAxNiUg
d2luIG9uIHJpY2hhcmRzKSBhbmQgYSAxJSB3aW4KKyAgICAgICAgb24gS3Jha2VuIChtb3N0bHkg
ZHVlIHRvIGEgNiUgd2luIG9uIGltYWdpbmctZGVzYXR1cmF0ZSkuIE5ldXRyYWwgb24KKyAgICAg
ICAgU3VuU3BpZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvblRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpp
c0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
YXNpY0Jsb2NrOjpnZXRCeXRlY29kZUJlZ2luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXR1cFByZWRlY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpi
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0VGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzZXROb3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFr
ZW5CbG9ja0luZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Om9wZXJhbmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kVmFsdWVUcmFp
dHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Ok9wZXJhbmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fscyk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWxGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6
Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0T3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6cGVyZm9ybUZvcndhcmRDRkEpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6Omdsb2JhbENGQSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDogQWRkZWQuCisKIDIw
MTEtMTAtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcg
c2hvdWxkIG5vdCBhbHdheXMgc3BlY3VsYXRlIHRoYXQgYSBCeVZhbCBhY2Nlc3MgaGFzIGFuIGlu
dGVnZXIgaW5kZXgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1
ZmZlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5o
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKLQlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaCBcCkBAIC0xMDUsNiArMTA0LDEwIEBAIGphdmFz
Y3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvTGFiZWxTY29wZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05v
ZGVzQ29kZWdlbi5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVn
aXN0ZXJJRC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUu
Y3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29lci9kZmcvREZHQmFzaWNCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAgXApAQCAtMTIyLDYgKzEyNSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhbmRzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBcCkBAIC0xMzUsNiArMTM5
LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVTZXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNw
cCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNp
b24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTQzOCwxMCArMTQzOCw2IEBACiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCi0J
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgot
CQkJCT4KLQkJCTwvRmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRl
Y29kZVxDb2RlQmxvY2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE1ODUsNiArMTU4MSwx
MCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4u
XGRmZ1xERkdJbnRyaW5zaWMuaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgog
ICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAg
PEZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwu
LlxkZmdcREZHT1NSRW50cnkuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgor
ICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAgICAgIDwvRmlsdGVy
PgogCQk8RmlsdGVyCiAJCQlOYW1lPSJ5YXJyIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUxLDgg
KzUxLDEzIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFB
MzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlD
MDAwQ0Y3ODRBIC8qIEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNw
cCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNG
Q0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGNjIwMTc1MTQzRkNEMzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5k
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAx
NzExNDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8q
IERGR0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjIwMTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNG
Q0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdB
YnN0cmFjdFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY2MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQz
RkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8q
IERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUu
Y3BwICovOyB9OwogCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5
RjE0MkQyN0QyMDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi87IH07Ci0JCTBGNjM2REEy
MTQyRDI3RjAwMEIyRTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZB
IC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi87IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4
RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291
bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1Ry
ZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAg
Ki87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsg
fTsgfTsKQEAgLTgwOSw4ICs4MTQsMTMgQEAKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8q
IFNpemVMaW1pdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6
ZUxpbWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5
QTIwMENGNzg0QSAvKiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
NDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZH
QWJzdHJhY3RTdGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdBYnN0cmFjdFN0YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R0Fic3RyYWN0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJz
dHJhY3RTdGF0ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1
ZS5oOyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEY2MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZn
L0RGR0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzEx
NDNGQ0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR09wZXJhbmRzLmg7IHBhdGggPSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8q
IFBhY2tlZEludFZlY3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNr
ZWRJbnRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2MzZEQTExNDJE
MjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEFjdGlvbmFibGVQcmVkaWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNC
MjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyODMsNiArMjI5MywxMiBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjYyMDE2
RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCisJCQkJMEY2MjAx
NkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKKwkJCQkwRjYyMDE2
RjE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGNjIwMTcw
MTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEY2MjAxNzExNDNG
Q0QyRjAwNjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi8sCisJCQkJMEY2MjAxNzIxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovLAogCQkJCTBGRkY0QkIyMTQzOTU1
RTYwMDY1NUJDMCAvKiBERkdTdHJ1Y3R1cmVTZXQuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhERjgy
MDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMyOERG
ODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5oICovLApAQCAtMjM4NCw3ICsyNDAwLDYg
QEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2
NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rpb24uaCAqLywKIAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAx
NzlDOTQgLyogVmFsdWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlD
OTQgLyogUHJlZGljdGVkVHlwZS5jcHAgKi8sCiAJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0
IC8qIFByZWRpY3RlZFR5cGUuaCAqLywKQEAgLTI4NzAsMTMgKzI4ODUsMTcgQEAKIAkJCQlBNzA0
NTZCMDE0MjdGQjkxMDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9y
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9u
YWJsZVByZWRpY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NTIxRTEzMTQyOTE2OUEwMDND
OEQwQyAvKiBDYXJkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ1MkFBRTE0MzAzNUEwMDAy
NkRDOUYgLyogVW5pb25GaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg4MEYxRTE0MzI4QkI5
MDBCMDhENDIgLyogREZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkUyMjhFRDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGRjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xvYmFsVGhp
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNGQ0QzNzAw
NjhCNzdDIC8qIERGR09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3NjE0M0ZD
RDNCMDA2OEI3N0MgLyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAx
NzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGNjIwMTc4MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTM0MDgsNiArMzQyNyw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFBODAwQjA4
RDQyIC8qIERGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4
MEY0RDE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCShyZXZpc2lvbiA5NzAzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQWN0aW9uYWJsZVByZWRpY3Rpb25faAot
I2RlZmluZSBBY3Rpb25hYmxlUHJlZGljdGlvbl9oCi0KLSNpbmNsdWRlICJKU0FycmF5LmgiCi0j
aW5jbHVkZSAiSlNWYWx1ZS5oIgotI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKLSNpbmNsdWRl
IDx3dGYvUGFja2VkSW50VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBBbiBhY3Rp
b25hYmxlIHByZWRpY3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQgb24gc3RvcmVzIHRvIGxv
Y2FsIHZhcmlhYmxlcwotLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4gcGFzc2luZyBhcmd1bWVu
dHMgdG8gZnVuY3Rpb25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCi0vLyBpbiBDb2RlQmxvY2su
Ci0KLWVudW0gQWN0aW9uYWJsZVByZWRpY3Rpb24gewotICAgIE5vQWN0aW9uYWJsZVByZWRpY3Rp
b24sCi0gICAgRW5mb3JjZUludDMyUHJlZGljdGlvbiwKLSAgICBFbmZvcmNlQXJyYXlQcmVkaWN0
aW9uLAotICAgIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbgotfTsKLQotaW5saW5lIEFjdGlvbmFi
bGVQcmVkaWN0aW9uIGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUoUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uKQotewotICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0
aW9uKSkKLSAgICAgICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rpb247Ci0gICAgCi0gICAg
aWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3Jj
ZUFycmF5UHJlZGljdGlvbjsKLSAgICAKLSAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVk
aWN0aW9uKSkKLSAgICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjsKLSAgICAK
LSAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKLX0KLQotaW5saW5lIGJvb2wgdmFs
dWVPYmV5c1ByZWRpY3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVl
LCBBY3Rpb25hYmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQotewotICAgIHN3aXRjaCAocHJlZGlj
dGlvbikgewotICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJu
IHZhbHVlLmlzSW50MzIoKTsKLQotICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKLSAg
ICAgICAgcmV0dXJuIGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0KLSAgICBjYXNlIEVu
Zm9yY2VCb29sZWFuUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigp
OwotICAgICAgICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBO
b0FjdGlvbmFibGVQcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQot
Ci1pbmxpbmUgY29uc3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhBY3Rpb25h
YmxlUHJlZGljdGlvbiBwcmVkaWN0aW9uKQotewotICAgIHN3aXRjaCAocHJlZGljdGlvbikgewot
ICAgIGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNl
SW50MzIiOwotICAgICAgICAKLSAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246Ci0gICAg
ICAgIHJldHVybiAiRW5mb3JjZUFycmF5IjsKLSAgICAgICAgCi0gICAgY2FzZSBFbmZvcmNlQm9v
bGVhblByZWRpY3Rpb246Ci0gICAgICAgIHJldHVybiAiRW5mb3JjZUJvb2xlYW4iOwotICAgICAg
ICAKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFibGVQcmVkaWN0aW9uIjsK
LSAgICB9Ci19Ci0KLXR5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlvbmFibGVQcmVkaWN0aW9u
LCAyPiBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvcjsKLQotY2xhc3MgQWN0aW9uYWJsZVByZWRp
Y3Rpb25zIHsKLXB1YmxpYzoKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMoKSB7IH0KLQotICAg
IEFjdGlvbmFibGVQcmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51
bVZhcmlhYmxlcykKLSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLmVuc3VyZVNpemUobnVtQXJn
dW1lbnRzKTsKLSAgICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShudW1WYXJpYWJsZXMpOwot
ICAgICAgICBtX2FyZ3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICBtX3ZhcmlhYmxlcy5jbGVh
ckFsbCgpOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3Vt
ZW50LCBBY3Rpb25hYmxlUHJlZGljdGlvbiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fYXJndW1l
bnRzLnNldChhcmd1bWVudCwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJl
ZGljdGlvbiBhcmd1bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChh
cmd1bWVudCA+PSBtX2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gTm9BY3Rp
b25hYmxlUHJlZGljdGlvbjsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldChhcmd1bWVu
dCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgc2V0VmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUs
IEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV92YXJpYWJsZXMu
c2V0KHZhcmlhYmxlLCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIEFjdGlvbmFibGVQcmVkaWN0
aW9uIHZhcmlhYmxlKHVuc2lnbmVkIHZhcmlhYmxlKQotICAgIHsKLSAgICAgICAgaWYgKHZhcmlh
YmxlID49IG1fdmFyaWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFi
bGVQcmVkaWN0aW9uOwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMuZ2V0KHZhcmlhYmxlKTsK
LSAgICB9Ci0gICAgCi0gICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJvdW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdmFyaWFibGVVcHBlckJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdm9p
ZCBwYWNrKCkKLSAgICB7Ci0gICAgICAgIHBhY2tWZWN0b3IobV9hcmd1bWVudHMpOwotICAgICAg
ICBwYWNrVmVjdG9yKG1fdmFyaWFibGVzKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0
YXRpYyB2b2lkIHBhY2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3ImIHZlY3RvcikK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlm
ICh2ZWN0b3IuZ2V0KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCi0gICAgICAgICAgICAg
ICAgbGFzdFNldEluZGV4ID0gaTsKLSAgICAgICAgfQotICAgICAgICB2ZWN0b3IucmVzaXplKGxh
c3RTZXRJbmRleCArIDEpOwotICAgIH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZl
Y3RvciBtX2FyZ3VtZW50czsKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX3Zhcmlh
YmxlczsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQWN0aW9uYWJsZVBy
ZWRpY3Rpb25faApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3Rl
ZFR5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Q
cmVkaWN0ZWRUeXBlLmNwcAkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDMyICs0
NCw1NSBAQCBjb25zdCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiAgICAgc3Rh
dGljIGNoYXIgZGVzY3JpcHRpb25bc2l6ZV07CiAgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hh
cj4gcHRyKGRlc2NyaXB0aW9uLCBzaXplKTsKICAgICAKKyAgICBib29sIGlzVG9wID0gdHJ1ZTsK
KyAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0Q2VsbE90aGVyKQogICAgICAgICBwdHIuc3Ry
Y2F0KCJPdGhlcmNlbGwiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAg
CiAgICAgaWYgKHZhbHVlICYgUHJlZGljdE9iamVjdE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0
KCJPdGhlcm9iaiIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAg
ICBpZiAodmFsdWUgJiBQcmVkaWN0RmluYWxPYmplY3QpCiAgICAgICAgIHB0ci5zdHJjYXQoIkZp
bmFsIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogCiAgICAgaWYgKHZhbHVl
ICYgUHJlZGljdEFycmF5KQogICAgICAgICBwdHIuc3RyY2F0KCJBcnJheSIpOworICAgIGVsc2UK
KyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0U3Ry
aW5nKQogICAgICAgICBwdHIuc3RyY2F0KCJTdHJpbmciKTsKKyAgICBlbHNlCisgICAgICAgIGlz
VG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMyKQogICAgICAg
ICBwdHIuc3RyY2F0KCJJbnQiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAg
ICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdERvdWJsZSkKICAgICAgICAgcHRyLnN0cmNhdCgi
RG91YmxlIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlm
ICh2YWx1ZSAmIFByZWRpY3RCb29sZWFuKQogICAgICAgICBwdHIuc3RyY2F0KCJCb29sIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RPdGhlcikKICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXIiKTsKKyAgICBlbHNlCisgICAg
ICAgIGlzVG9wID0gZmFsc2U7CisgICAgCisgICAgaWYgKGlzVG9wKQorICAgICAgICByZXR1cm4g
IlRvcCI7CiAgICAgCiAgICAgKnB0cisrID0gMDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gOTcwMzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw4IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRp
Y3RCb29sZWEKIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RPdGhlciAgICAgICAg
ID0gMHg0MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCiBzdGF0aWMg
Y29uc3QgUHJlZGljdGVkVHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4N2ZmZjsgLy8gSXQg
Y2FuIGJlIGFueSBvZiB0aGUgYWJvdmUuCiAKK3R5cGVkZWYgYm9vbCAoKlByZWRpY3Rpb25DaGVj
a2VyKShQcmVkaWN0ZWRUeXBlKTsKKwogaW5saW5lIGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVk
aWN0ZWRUeXBlIHZhbHVlKQogewogICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3RDZWxsKSAm
JiAhKHZhbHVlICYgflByZWRpY3RDZWxsKTsKQEAgLTExNSw2ICsxMTcsMTAgQEAgaW5saW5lIGJv
b2wgaXNPdGhlclByZWRpY3Rpb24oUHJlZGljdGVkVAogY29uc3QgY2hhciogcHJlZGljdGlvblRv
U3RyaW5nKFByZWRpY3RlZFR5cGUgdmFsdWUpOwogI2VuZGlmCiAKKy8vIE1lcmdlIHR3byBwcmVk
aWN0aW9ucy4gTm90ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGp1c3QgZG9lcyBsZWZ0IHwgcmlnaHQu
IEl0IG1heQorLy8gc2VlbSB0ZW1wdGluZyB0byBkbyBzbyBkaXJlY3RseSwgYnV0IHlvdSB3b3Vs
ZCBiZSBkb2luZyBzbyBhdCB5b3VyIG93biBwZXJpbCwKKy8vIHNpbmNlIHRoZSBtZXJnaW5nIHBy
b3RvY29sIFByZWRpY3RlZFR5cGUgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSAoYW5kIGhhcyBhbHJl
YWR5CisvLyBjaGFuZ2VkIHNldmVyYWwgdGltZXMgaW4gaXRzIGhpc3RvcnkpLgogaW5saW5lIFBy
ZWRpY3RlZFR5cGUgbWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3Rl
ZFR5cGUgcmlnaHQpCiB7CiAgICAgcmV0dXJuIGxlZnQgfCByaWdodDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFj
dFN0YXRlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBERkcgeworCisjZGVmaW5lIENGQV9QUk9GSUxJTkcgMAorCisjaWYgQ0ZBX1BST0ZJTElORwor
I2RlZmluZSBQUk9GSUxFKGZsYWcpIFNhbXBsaW5nRmxhZ3M6OlNjb3BlZEZsYWcgc2NvcGVkRmxh
ZyhmbGFnKQorI2Vsc2UKKyNkZWZpbmUgUFJPRklMRShmbGFnKSBkbyB7IH0gd2hpbGUgKGZhbHNl
KQorI2VuZGlmCisKKy8vIFByb2ZpbGluZyBmbGFncworI2RlZmluZSBGTEFHX0ZPUl9CTE9DS19J
TklUSUFMSVpBVElPTiAgMTcKKyNkZWZpbmUgRkxBR19GT1JfQkxPQ0tfRU5EICAgICAgICAgICAg
IDE4CisjZGVmaW5lIEZMQUdfRk9SX0VYRUNVVElPTiAgICAgICAgICAgICAxOQorI2RlZmluZSBG
TEFHX0ZPUl9NRVJHRV9UT19TVUNDRVNTT1JTICAgMjAKKyNkZWZpbmUgRkxBR19GT1JfU1RSVUNU
VVJFX0NMT0JCRVJJTkcgIDIxCisKK0Fic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIEdyYXBoJiBncmFwaCkKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9j
aykKKyAgICAsIG1fZ3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyhjb2RlQmxvY2stPm1f
bnVtUGFyYW1ldGVycywgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDApCit7Cisg
ICAgc2l6ZV90IG1heEJsb2NrU2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBn
cmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGdyYXBoLm1fYmxvY2tzW2ldLmdldCgpOworICAgICAgICBpZiAoYmxvY2stPmVuZCAtIGJsb2Nr
LT5iZWdpbiA+IG1heEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIG1heEJsb2NrU2l6ZSA9IGJsb2Nr
LT5lbmQgLSBibG9jay0+YmVnaW47CisgICAgfQorICAgIG1fbm9kZXMucmVzaXplKG1heEJsb2Nr
U2l6ZSk7Cit9CisKK0Fic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQg
QWJzdHJhY3RTdGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCit7
CisgICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19JTklUSUFMSVpBVElPTik7CisgICAgCisgICAg
QVNTRVJUKCFtX2Jsb2NrKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2lj
QmxvY2stPmVuZCAtIGJhc2ljQmxvY2stPmJlZ2luOyArK2kpCisgICAgICAgIG1fbm9kZXNbaV0u
Y2xlYXIoKTsKKyAgICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAg
ICBtX2hhdmVTdHJ1Y3R1cmVzID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmFy
aWFibGVzLmFyZ3VtZW50KGkpLm1fc3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkpIHsK
KyAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxl
cy5udW1iZXJPZkxvY2FscygpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLmxvY2Fs
KGkpLm1fc3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkpIHsKKyAgICAgICAgICAgIG1f
aGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAg
IGJhc2ljQmxvY2stPmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOworICAgIG1fYmxvY2sgPSBiYXNpY0Js
b2NrOworICAgIG1faXNWYWxpZCA9IHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5p
dGlhbGl6ZShHcmFwaCYgZ3JhcGgpCit7CisgICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19JTklU
SUFMSVpBVElPTik7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdl
dCgpOworICAgIHJvb3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkg
eworICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBncmFwaFtyb290LT52YXJpYWJs
ZXNBdEhlYWQuYXJndW1lbnQoaSldLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7
CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAg
IHJvb3QtPnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAg
ICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICBy
b290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RBcnJheSk7CisgICAgICAg
IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICBy
b290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VU
b3AoKTsKKyAgICB9Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJn
ZU1vZGUgbWVyZ2VNb2RlKQoreworICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfRU5EKTsKKyAg
ICBBU1NFUlQobV9ibG9jayk7CisgICAgCisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nr
OyAvLyBTYXZlIHRoZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdpbmcuCisgICAgCisgICAgaWYg
KCFtX2lzVmFsaWQpIHsKKyAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobWVy
Z2VNb2RlICE9IERvbnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51
bWJlck9mQXJndW1lbnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1l
cmdlU3RhdGVBdFRhaWwoYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIG1f
dmFyaWFibGVzLmFyZ3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1
bWVudChhcmd1bWVudCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAw
OyBsb2NhbCA8IGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2Nh
bCkKKyAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVz
QXRUYWlsLmxvY2FsKGxvY2FsKSwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKGxvY2FsKSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChtZXJn
ZU1vZGUgIT0gRG9udE1lcmdlIHx8ICFjaGFuZ2VkKTsKKyAgICAKKyAgICByZXNldCgpOworICAg
IAorICAgIGlmIChtZXJnZU1vZGUgIT0gTWVyZ2VUb1N1Y2Nlc3NvcnMpCisgICAgICAgIHJldHVy
biBjaGFuZ2VkOworICAgIAorICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dyYXBoLCBi
bG9jayk7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQoreworICAgIG1fYmxvY2sg
PSAwOworICAgIG1faXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4
ZWN1dGUoTm9kZUluZGV4IG5vZGVJbmRleCkKK3sKKyAgICBQUk9GSUxFKEZMQUdfRk9SX0VYRUNV
VElPTik7CisgICAgQVNTRVJUKG1fYmxvY2spOworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAg
ICAgICAKKyAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAKKyAg
ICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgSlNDb25zdGFudDogeworICAg
ICAgICBKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9j
aywgbm9kZUluZGV4KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAg
bV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
dmFsdWUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEdl
dExvY2FsOiB7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJh
bmQobm9kZS5sb2NhbCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIFNldExvY2FsOiB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50
MzJQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVBy
ZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5maWx0ZXIoUHJlZGljdEJvb2xlYW4pOworICAgICAgICAKKyAgICAgICAgbV92YXJpYWJsZXMu
b3BlcmFuZChub2RlLmxvY2FsKCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAg
ICAgLy8gQXNzZXJ0IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCisg
ICAgICAgIEFTU0VSVCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgp
KS5pc0NsZWFyKCkpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQml0
QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRSU2hp
ZnQ6CisgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAK
KyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRl
SW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91
YmxlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQ
cmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFs
dWVUb0ludDMyOgorICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90
U3BlY3VsYXRlSW50ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5m
aWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVU
b051bWJlcjoKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQo
UHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGZv
ck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIAorICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAg
ICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCld
LCBtX2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkg
eworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMy
KTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQz
Mik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3Bl
Y3VsYXRlTnVtYmVyKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIo
KV0pKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRp
Y3ROdW1iZXIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91
YmxlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChub2Rl
Lm9wID09IFZhbHVlQWRkKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nIHwgUHJlZGljdElu
dDMyIHwgUHJlZGljdE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAg
IAorICAgIGNhc2UgQXJpdGhTdWI6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRo
RGl2OgorICAgIGNhc2UgQXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBt
X2dyYXBoW25vZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgewor
ICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7
CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5m
aWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJl
ZGljdERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNh
c2UgQXJpdGhNb2Q6IHsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxk
Tm90U3BlY3VsYXRlSW50ZWdlcigpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkTm90
U3BlY3VsYXRlSW50ZWdlcigpIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAg
ICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7Cisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsK
KyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRp
Y3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2Ug
QXJpdGhBYnM6CisgICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1
bGF0ZUludGVnZXIoKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3Vi
bGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTcXJ0Ogor
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAg
ICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgTm9kZSYg
Y2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFuUHJl
ZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7Cisg
ICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigp
KQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFs
T2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3Bl
Y3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkp
LmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChj
aGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5z
aG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0
KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisg
ICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBD
b21wYXJlR3JlYXRlcjoKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2FzZSBDb21w
YXJlRXE6IHsKKyAgICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07Cisg
ICAgICAgIE5vZGUmIHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgUHJl
ZGljdGVkVHlwZSBmaWx0ZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRl
Z2VyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RJbnQzMjsKKyAg
ICAgICAgZWxzZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkK
KyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3ROdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKG5v
ZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxl
ZnQsIHJpZ2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9iamVjdDsKKyAg
ICAgICAgZWxzZSBpZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3Vs
YXRlQXJyYXkobGVmdCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdEFycmF5
OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7CisgICAg
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5zZXQoUHJlZGljdEJvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNl
IFN0cmluZ0NoYXJDb2RlQXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KFByZWRpY3RTdHJpbmcpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQ
cmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQz
Mik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAg
ICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICBQcmVkaWN0ZWRUeXBl
IGluZGV4UHJlZGljdGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOwor
ICAgICAgICBpZiAoIShpbmRleFByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYmIGluZGV4UHJl
ZGljdGlvbikgeworICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0
aW9uKCkgPT0gUHJlZGljdFN0cmluZykgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5k
ZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlWYWw6CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7
CisgICAgICAgIFByZWRpY3RlZFR5cGUgaW5kZXhQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNo
aWxkMigpXS5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlmICghKGluZGV4UHJlZGljdGlvbiAmIFBy
ZWRpY3RJbnQzMikgJiYgaW5kZXhQcmVkaWN0aW9uKSB7CisgICAgICAgICAgICBjbG9iYmVyU3Ry
dWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VU
b3AoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgICAgIAorICAgIGNhc2UgQXJyYXlQdXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgQXJyYXlQb3A6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRp
Y3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBKdW1wOgorICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgIC8vIFRoZXJlIGlzIHByb2Jh
Ymx5IHByb2ZpdCB0byBiZSBmb3VuZCBpbiBkb2luZyBzcGFyc2UgY29uZGl0aW9uYWwgY29uc3Rh
bnQKKyAgICAgICAgLy8gcHJvcGFnYXRpb24sIGFuZCB0byB0YWtlIGl0IG9uZSBzdGVwIGZ1cnRo
ZXIsIHdoZXJlIGEgdmFyaWFibGUncyB2YWx1ZQorICAgICAgICAvLyBpcyBzcGVjaWFsaXplZCBv
biBlYWNoIGRpcmVjdGlvbiBvZiBhIGJyYW5jaC4gRm9yIG5vdywgd2UgZG9uJ3QgZG8gdGhpcy4K
KyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBp
ZiAoaXNCb29sZWFuUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVk
aWN0aW9uKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0Qm9vbGVhbik7CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0T3JPdGhlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAo
Y2hpbGQuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAg
ICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBl
bHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRocm93Ogor
ICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBUb1ByaW1pdGl2ZTogewor
ICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2Rl
KG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGls
ZDEoKSk7CisgICAgICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2Rl
SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IHNvdXJj
ZS5tX3R5cGU7CisgICAgICAgIGlmICh0eXBlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdFN0
cmluZyB8IFByZWRpY3RCb29sZWFuKSkgeworICAgICAgICAgICAgdHlwZSAmPSAoUHJlZGljdE51
bWJlciB8IFByZWRpY3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICB0eXBl
IHw9IFByZWRpY3RTdHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb24uc2V0KHR5
cGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFN0ckNh
dDoKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIE5ld0FycmF5OgorICAgIGNhc2UgTmV3
QXJyYXlCdWZmZXI6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2st
Pmdsb2JhbE9iamVjdCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdS
ZWdleHA6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2Jh
bE9iamVjdCgpLT5yZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29udmVydFRo
aXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAg
ICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAg
ICAgICAgICAgIAorICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBr
bm93IHRoYXQgdGhlIHNvdXJjZSBpcyBhbgorICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVy
ZSdzIG5vdGhpbmcgdG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAg
ICAgIC8vIGJlIGhpdCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgorICAgICAgICAg
ICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGlmIChpc090aGVyUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0
aW9uKCkpKSB7CisgICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFByZWRpY3RPdGhlcik7CisgICAg
ICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0
aW9uKGNoaWxkLnByZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJl
ZGljdE9iamVjdE1hc2spOworICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0
aW9uID0gc291cmNlOworICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShQcmVkaWN0T2JqZWN0T3Ro
ZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIENyZWF0
ZVRoaXM6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwor
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsK
KyAgICAgICAgICAgIAorICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoKSkKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGljdEZpbmFsT2JqZWN0KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBOZXdPYmplY3Q6
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRDYWxsZWU6
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFNjb3BlQ2hhaW46CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdENlbGxPdGhlcik7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBQdXRTY29wZWRWYXI6CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRl
eCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeUlkOgorICAg
IGNhc2UgR2V0TWV0aG9kOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0Q2VsbCk7CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5maWx0ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgp
LnNldChQcmVkaWN0SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgR2V0U3RyaW5nTGVuZ3RoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUg
dGhlIHN0cnVjdHVyZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKSk7Cisg
ICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhu
b2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVj
dHVyZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRQ
cm9wZXJ0eVN0b3JhZ2U6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3RDZWxsKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSBy
ZXN1bHQgaXMgbm90IGEgSlMgdmFsdWUuCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdENlbGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0aG9kOgorICAgICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBv
ZiBjb25zdGFudHMgKGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0Rh
dGFJbmRleCgpXS5zdHJ1Y3R1cmUpOworICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE9iamVjdE90aGVyKTsKKyAg
ICAgICAgLy8gRklYTUU6IFNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0
IHdlIGtub3cgd2hhdCB0aGUgZnVuY3Rpb24gaXMuCisgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgCisgICAgY2FzZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgR2V0R2xvYmFsVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRv
cCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0R2xvYmFsVmFy
OgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5j
ZToKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOwor
ICAgICAgICAvLyBTYWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUg
ZG9uZSBDaGVja0hhc0luc3RhbmNlCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBJbnN0YW5jZU9mOgorICAgICAgICAvLyBBZ2Fpbiwgc2FkbHksIHdlIGRvbid0IHByb3Bh
Z2F0ZSB0aGUgZmFjdCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VPZgorICAgICAgICBmb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIFBoaToKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIEJyZWFrcG9pbnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBD
YWxsOgorICAgIGNhc2UgQ29uc3RydWN0OgorICAgIGNhc2UgUmVzb2x2ZToKKyAgICBjYXNlIFJl
c29sdmVCYXNlOgorICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgY2FzZSBSZXNv
bHZlR2xvYmFsOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAorICAgIGNhc2UgRm9yY2VPU1JFeGl0OgorICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsK
KyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFBoYW50b206CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV9pc1ZhbGlkOworfQorCitpbmxpbmUg
dm9pZCBBYnN0cmFjdFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyhOb2RlSW5kZXggbm9kZUluZGV4
KQoreworICAgIFBST0ZJTEUoRkxBR19GT1JfU1RSVUNUVVJFX0NMT0JCRVJJTkcpOworICAgIGlm
ICghbV9oYXZlU3RydWN0dXJlcykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkg
PSBub2RlSW5kZXggLSBtX2Jsb2NrLT5iZWdpbiArIDE7IGktLSA+IDA7KQorICAgICAgICBtX25v
ZGVzW2ldLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3ZhcmlhYmxlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVz
LmFyZ3VtZW50KGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgIG1fdmFyaWFi
bGVzLmxvY2FsKGkpLmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgbV9oYXZlU3RydWN0dXJlcyA9
IGZhbHNlOworfQorCitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWls
KEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBO
b2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsK
KyAgICAgICAgCisgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAo
IW5vZGUucmVmQ291bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRj
aCAobm9kZS5vcCkgeworICAgIGNhc2UgUGhpOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAg
ICAgIC8vIFRoZSBibG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgor
ICAgICAgICBzb3VyY2UgPSAmaW5WYXJpYWJsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAKKyAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUg
dmFsdWUgd2l0aCBhZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZv
ck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IFNldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBw
b3RlbnRpYWxseSByZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIg
c2V0dGluZyBpdC4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZS5jaGlsZDEoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgc291cmNlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIGlmIChkZXN0aW5hdGlvbiA9PSAqc291cmNlKSB7CisgICAgICAgIC8vIEFic3Ry
YWN0IGV4ZWN1dGlvbiBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJp
YWJsZSwgZm9yIHRoaXMKKyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9u
LgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0IGV4
ZWN1dGlvbiByZWFjaGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyBy
ZWFjaGVkIGFib3V0CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhp
cyBiYXNpYyBibG9jay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUg
dG8gaW5kaWNhdGUgdGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlv
biA9ICpzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0
U3RhdGU6Om1lcmdlKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEFT
U0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFy
aWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChmcm9tLT52YXJp
YWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJl
ck9mTG9jYWxzKCkpOworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAg
IGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRh
aWwubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3Vt
ZW50KSwgZnJvbS0+dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5hcmd1bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVu
dChhcmd1bWVudCkpOworICAgIAorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBm
cm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAg
Y2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxv
Y2FsKGxvY2FsKSwgZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxl
c0F0SGVhZC5sb2NhbChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkp
OworCisgICAgaWYgKCF0by0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7
CisgICAgCisgICAgdG8tPmNmYVNob3VsZFJldmlzaXQgfD0gY2hhbmdlZDsKKyAgICAKKyAgICBy
ZXR1cm4gY2hhbmdlZDsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1
Y2Nlc3NvcnMoR3JhcGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoreworICAgIFBS
T0ZJTEUoRkxBR19GT1JfTUVSR0VfVE9fU1VDQ0VTU09SUyk7CisKKyAgICBOb2RlJiB0ZXJtaW5h
bCA9IGdyYXBoW2Jhc2ljQmxvY2stPmVuZCAtIDFdOworICAgIAorICAgIEFTU0VSVCh0ZXJtaW5h
bC5pc1Rlcm1pbmFsKCkpOworICAgIAorICAgIHN3aXRjaCAodGVybWluYWwub3ApIHsKKyAgICBj
YXNlIEp1bXA6CisgICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nr
c1t0ZXJtaW5hbC50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICAKKyAgICBjYXNl
IEJyYW5jaDoKKyAgICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tz
W3Rlcm1pbmFsLnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSkKKyAgICAgICAgICAgIHwgbWVyZ2Uo
YmFzaWNCbG9jaywgZ3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCld
LmdldCgpKTsKKyAgICAgICAgCisgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUaHJvdzoKKyAg
ICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1l
cmdlVmFyaWFibGVCZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0
cmFjdFZhbHVlJiBzb3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUlu
ZGV4IHNvdXJjZU5vZGVJbmRleCkKK3sKKyAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXggPT0g
Tm9Ob2RlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUX1VOVVNFRChz
b3VyY2VOb2RlSW5kZXgsIHNvdXJjZU5vZGVJbmRleCAhPSBOb05vZGUpOworICAgIAorICAgIC8v
IEZJWE1FOiBXZSBjb3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25hbCBwcm9wYWdhdGlvbiBo
ZXJlIQorICAgIAorICAgIHJldHVybiBkZXN0aW5hdGlvbi5tZXJnZShzb3VyY2UpOworfQorCisj
aWZuZGVmIE5ERUJVRwordm9pZCBBYnN0cmFjdFN0YXRlOjpkdW1wKEZJTEUqIG91dCkKK3sKKyAg
ICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9kZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fbm9kZXNbaV0uaXNDbGVhcigpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgICAgIGZpcnN0ID0g
ZmFsc2U7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAg
ICAgICBmcHJpbnRmKG91dCwgIkAlbHU6IiwgaSArIG1fYmxvY2stPmJlZ2luKTsKKyAgICAgICAg
bV9ub2Rlc1tpXS5kdW1wKG91dCk7CisgICAgfQorfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0Fic3RyYWN0U3RhdGVfaAorI2RlZmluZSBERkdBYnN0cmFj
dFN0YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHR3JhcGgu
aCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgQ29kZUJsb2NrOworCituYW1lc3BhY2UgREZHIHsKKworc3Ry
dWN0IEJhc2ljQmxvY2s7CisKKy8vIFRoaXMgaW1wbGVtZW50cyB0aGUgbm90aW9uIG9mIGFuIGFi
c3RyYWN0IHN0YXRlIGZvciBmbG93LXNlbnNpdGl2ZSBpbnRyYXByb2NlZHVyYWwKKy8vIGNvbnRy
b2wgZmxvdyBhbmFseXNpcyAoQ0ZBKSwgd2l0aCBhIGZvY3VzIG9uIHRoZSBlbGltaW5hdGlvbiBv
ZiByZWR1bmRhbnQgdHlwZSBjaGVja3MuCisvLyBJdCBhbHNvIGltcGxlbWVudHMgbW9zdCBvZiB0
aGUgbWVjaGFuaXNtcyBvZiBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiB0aGF0IHN1Y2ggYW4KKy8v
IGFuYWx5c2lzIHdvdWxkIHVzZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgdXNlZCBpbiB0d28gaWRp
b21zOgorLy8KKy8vIDEpIFBlcmZvcm1pbmcgdGhlIENGQS4gSW4gdGhpcyBjYXNlLCBBYnN0cmFj
dFN0YXRlIHNob3VsZCBiZSBydW4gb3ZlciBhbGwgYmFzaWMKKy8vICAgIGJsb2NrcyByZXBlYXRl
ZGx5IHVudGlsIGNvbnZlcmdlbmNlIGlzIHJlYWNoZWQuIENvbnZlcmdlbmNlIGlzIGRlZmluZWQg
YnkKKy8vICAgIGVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMp
IHJldHVybmluZyBmYWxzZSBmb3IgYWxsIGJsb2Nrcy4KKy8vCisvLyAyKSBSZW1hdGVyaWFsaXpp
bmcgdGhlIHJlc3VsdHMgb2YgYSBwcmV2aW91c2x5IGV4ZWN1dGVkIENGQS4gSW4gdGhpcyBjYXNl
LAorLy8gICAgQWJzdHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgd2hhdGV2ZXIgYmFzaWMg
YmxvY2sgeW91J3JlIGludGVyZXN0ZWQgaW4gdXAKKy8vICAgIHRvIHRoZSBwb2ludCBvZiB0aGUg
bm9kZSBhdCB3aGljaCB5b3UnZCBsaWtlIHRvIGludGVycm9nYXRlIHRoZSBrbm93biB0eXBlCisv
LyAgICBvZiBhbGwgb3RoZXIgbm9kZXMuIEF0IHRoaXMgcG9pbnQgaXQncyBzYWZlIHRvIGRpc2Nh
cmQgdGhlIEFic3RyYWN0U3RhdGUgZW50aXJlbHksCisvLyAgICBjYWxsIHJlc2V0KCksIG9yIHRv
IHJ1biBpdCB0byB0aGUgZW5kIG9mIHRoZSBiYXNpYyBibG9jayBhbmQgY2FsbAorLy8gICAgZW5k
QmFzaWNCbG9jayhBYnN0cmFjdFN0YXRlOjpEb250TWVyZ2UpLiBUaGUgbGF0dGVyIG9wdGlvbiBp
cyBzYWZlc3QgYmVjYXVzZQorLy8gICAgaXQgcGVyZm9ybXMgc29tZSB1c2VmdWwgaW50ZWdyaXR5
IGNoZWNrcy4KKy8vCisvLyBBZnRlciB0aGUgQ0ZBIGlzIHJ1biwgdGhlIGludGVyLWJsb2NrIHN0
YXRlIGlzIHNhdmVkIGF0IHRoZSBoZWFkcyBhbmQgdGFpbHMgb2YgYWxsCisvLyBiYXNpYyBibG9j
a3MuIFRoaXMgYWxsb3dzIHRoZSBpbnRyYS1ibG9jayBzdGF0ZSB0byBiZSByZW1hdGVyaWFsaXpl
ZCBieSBqdXN0CisvLyBleGVjdXRpbmcgdGhlIENGQSBmb3IgdGhhdCBibG9jay4gSWYgeW91IG5l
ZWQgdG8ga25vdyBpbnRlci1ibG9jayBzdGF0ZSBvbmx5LCB0aGVuCisvLyB5b3Ugb25seSBuZWVk
IHRvIGV4YW1pbmUgdGhlIEJhc2ljQmxvY2s6Om1fdmFsdWVzQXRIZWFkIG9yIG1fdmFsdWVzQXRU
YWlsIGZpZWxkcy4KKy8vCisvLyBSdW5uaW5nIHRoaXMgYW5hbHlzaXMgaW52b2x2ZXMgdGhlIGZv
bGxvd2luZywgbW9kdWxvIHRoZSBpbnRlci1ibG9jayBzdGF0ZQorLy8gbWVyZ2luZyBhbmQgY29u
dmVyZ2VuY2UgZml4cG9pbnQ6CisvLworLy8gQWJzdHJhY3RTdGF0ZSBzdGF0ZShjb2RlQmxvY2ss
IGdyYXBoKTsKKy8vIHN0YXRlLmJlZ2luQmFzaWNCbG9jayhiYXNpY0Jsb2NrKTsKKy8vIGJvb2wg
ZW5kUmVhY2hlZCA9IHRydWU7CisvLyBmb3IgKE5vZGVJbmRleCBpZHggPSBiYXNpY0Jsb2NrLmJl
Z2luOyBpZHggPCBiYXNpY0Jsb2NrLmVuZDsgKytpZHgpIHsKKy8vICAgICBpZiAoIXN0YXRlLmV4
ZWN1dGUoaWR4KSkKKy8vICAgICAgICAgYnJlYWs7CisvLyB9CisvLyBib29sIHJlc3VsdCA9IHN0
YXRlLmVuZEJhc2ljQmxvY2soPGVpdGhlciBNZXJnZSBvciBEb250TWVyZ2U+KTsKKworY2xhc3Mg
QWJzdHJhY3RTdGF0ZSB7CitwdWJsaWM6CisgICAgZW51bSBNZXJnZU1vZGUgeworICAgICAgICAv
LyBEb24ndCBtZXJnZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIGJhc2ljIGJsb2Nr
cy4KKyAgICAgICAgRG9udE1lcmdlLAorICAgICAgICAKKyAgICAgICAgLy8gTWVyZ2UgdGhlIHN0
YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCB0aGUgdGFpbCBvZiB0aGUgYmFzaWMKKyAgICAgICAg
Ly8gYmxvY2sgYmVpbmcgYW5hbHl6ZWQuCisgICAgICAgIE1lcmdlVG9UYWlsLAorICAgICAgICAK
KyAgICAgICAgLy8gTWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCB0aGUgdGFp
bCBvZiB0aGUgYmFzaWMKKyAgICAgICAgLy8gYmxvY2ssIGFuZCB3aXRoIHRoZSBoZWFkcyBvZiBz
dWNjZXNzb3IgYmxvY2tzLgorICAgICAgICBNZXJnZVRvU3VjY2Vzc29ycworICAgIH07CisgICAg
CisgICAgQWJzdHJhY3RTdGF0ZShDb2RlQmxvY2sqLCBHcmFwaCYpOworICAgIAorICAgIH5BYnN0
cmFjdFN0YXRlKCk7CisgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlSW5kZXgg
bm9kZUluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbbm9kZUluZGV4IC0gbV9i
bG9jay0+YmVnaW5dOworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lu
bmluZyBDRkEgdG8gaW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCisgICAgLy8gYXJn
dW1lbnRzLCBhbmQgdG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9y
IENGQQorICAgIC8vIGV4ZWN1dGlvbi4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEdyYXBo
Jik7CisKKyAgICAvLyBTdGFydCBhYnN0cmFjdGx5IGV4ZWN1dGluZyB0aGUgZ2l2ZW4gYmFzaWMg
YmxvY2suIEluaXRpYWxpemVzIHRoZQorICAgIC8vIG5vdGlvbiBvZiBhYnN0cmFjdCBzdGF0ZSB0
byB3aGF0IHdlIGJlbGlldmUgaXQgdG8gYmUgYXQgdGhlIGhlYWQKKyAgICAvLyBvZiB0aGUgYmFz
aWMgYmxvY2ssIGFjY29yZGluZyB0byB0aGUgYmFzaWMgYmxvY2sncyBkYXRhIHN0cnVjdHVyZXMu
CisgICAgLy8gVGhpcyBtZXRob2QgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gZmFsc2Uu
CisgICAgdm9pZCBiZWdpbkJhc2ljQmxvY2soQmFzaWNCbG9jayopOworICAgIAorICAgIC8vIEZp
bmlzaCBhYnN0cmFjdGx5IGV4ZWN1dGluZyBhIGJhc2ljIGJsb2NrLiBJZiBNZXJnZVRvVGFpbCBv
cgorICAgIC8vIE1lcmdlVG9TdWNjZXNzb3JzIGlzIHBhc3NlZCwgdGhlbiB0aGlzIG1lcmdlcyBl
dmVyeXRoaW5nIHdlIGhhdmUKKyAgICAvLyBsZWFybmVkIGFib3V0IGhvdyB0aGUgc3RhdGUgY2hh
bmdlcyBkdXJpbmcgdGhpcyBibG9jaydzIGV4ZWN1dGlvbiBpbnRvCisgICAgLy8gdGhlIGJsb2Nr
J3MgZGF0YSBzdHJ1Y3R1cmVzLiBUaGVyZSBhcmUgdGhyZWUgcmV0dXJuIG1vZGVzLCBkZXBlbmRp
bmcKKyAgICAvLyBvbiB0aGUgdmFsdWUgb2YgbWVyZ2VNb2RlOgorICAgIC8vCisgICAgLy8gRG9u
dE1lcmdlOgorICAgIC8vICAgIEFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIC8vCisgICAgLy8g
TWVyZ2VUb1RhaWw6CisgICAgLy8gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGUg
YmxvY2sgYXQgdGhlIHRhaWwgd2FzIGNoYW5nZWQuCisgICAgLy8gICAgVGhpcyBtZWFucyB0aGF0
IHlvdSBtdXN0IGNhbGwgbWVyZ2VUb1N1Y2Nlc3NvcnMoKSwgYW5kIGlmIHRoYXQKKyAgICAvLyAg
ICByZXR1cm5zIHRydWUsIHRoZW4geW91IG11c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNj
ZXNzb3IKKyAgICAvLyAgICBibG9ja3MuIEZhbHNlIHdpbGwgYWx3YXlzIGJlIHJldHVybmVkIGlm
IHRoZSBibG9jayBpcyB0ZXJtaW5hbAorICAgIC8vICAgIChpLmUuIGVuZHMgaW4gVGhyb3cgb3Ig
UmV0dXJuLCBvciBoYXMgYSBGb3JjZU9TUkV4aXQgaW5zaWRlIGl0KS4KKyAgICAvLworICAgIC8v
IE1lcmdlVG9TdWNjZXNzb3JzOgorICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUg
b2YgdGhlIGJsb2NrIGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLAorICAgIC8vICAgIGFuZCwgaWYg
dGhlIHN0YXRlIGF0IHRoZSBoZWFkcyBvZiBzdWNjZXNzb3JzIHdhcyBjaGFuZ2VkLgorICAgIC8v
ICAgIEEgdHJ1ZSByZXR1cm4gbWVhbnMgdGhhdCB5b3UgbXVzdCByZXZpc2l0IChhdCBsZWFzdCkg
dGhlIHN1Y2Nlc3NvcgorICAgIC8vICAgIGJsb2Nrcy4gVGhpcyBhbHNvIHNldHMgY2ZhU2hvdWxk
UmV2aXNpdCB0byB0cnVlIGZvciBiYXNpYyBibG9ja3MKKyAgICAvLyAgICB0aGF0IG11c3QgYmUg
dmlzaXRlZCBuZXh0LgorICAgIGJvb2wgZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUpOworICAgIAor
ICAgIC8vIFJlc2V0IHRoZSBBYnN0cmFjdFN0YXRlLiBUaGlzIHRocm93cyBhd2F5IGFueSByZXN1
bHRzLCBhbmQgYXQgdGhpcyBwb2ludAorICAgIC8vIHlvdSBjYW4gc2FmZWx5IGNhbGwgYmVnaW5C
YXNpY0Jsb2NrKCkgb24gYW55IGJhc2ljIGJsb2NrLgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICAK
KyAgICAvLyBBYnN0cmFjdGx5IGV4ZWN1dGVzIHRoZSBnaXZlbiBub2RlLiBUaGUgbmV3IGFic3Ry
YWN0IHN0YXRlIGlzIHN0b3JlZCBpbnRvIGFuCisgICAgLy8gYWJzdHJhY3QgcmVnaXN0ZXIgZmls
ZSBzdG9yZWQgaW4gKnRoaXMuIExvYWRzIG9mIGxvY2FsIHZhcmlhYmxlcyAodGhhdCBzcGFuCisg
ICAgLy8gYmFzaWMgYmxvY2tzKSBpbnRlcnJvZ2F0ZSB0aGUgYmFzaWMgYmxvY2sncyBub3Rpb24g
b2YgdGhlIHN0YXRlIGF0IHRoZSBoZWFkLgorICAgIC8vIFN0b3JlcyB0byBsb2NhbCB2YXJpYWJs
ZXMgYXJlIGhhbmRsZWQgaW4gZW5kQmFzaWNCbG9jaygpLiBUaGlzIHJldHVybnMgdHJ1ZQorICAg
IC8vIGlmIGV4ZWN1dGlvbiBzaG91bGQgY29udGludWUgcGFzdCB0aGlzIG5vZGUuIE5vdGFibHks
IGl0IHdpbGwgcmV0dXJuIHRydWUKKyAgICAvLyBmb3IgYmxvY2sgdGVybWluYWxzLCBzbyBsb25n
IGFzIHRob3NlIHRlcm1pbmFscyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50cworICAgIC8vIG9m
IFRocm93LgorICAgIGJvb2wgZXhlY3V0ZShOb2RlSW5kZXgpOworICAgIAorICAgIC8vIElzIHRo
ZSBleGVjdXRpb24gc3RhdGUgc3RpbGwgdmFsaWQ/IFRoaXMgd2lsbCBiZSBmYWxzZSBpZiBleGVj
dXRlKCkgaGFzCisgICAgLy8gcmV0dXJuZWQgZmFsc2UgcHJldmlvdXNseS4KKyAgICBib29sIGlz
VmFsaWQoKSBjb25zdCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICAKKyAgICAvLyBNZXJnZSB0
aGUgYWJzdHJhY3Qgc3RhdGUgc3RvcmVkIGF0IHRoZSBmaXJzdCBibG9jaydzIHRhaWwgaW50byB0
aGUgc2Vjb25kCisgICAgLy8gYmxvY2sncyBoZWFkLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlY29u
ZCBibG9jaydzIHN0YXRlIGNoYW5nZWQuIElmIHNvLAorICAgIC8vIHRoYXQgYmxvY2sgbXVzdCBi
ZSBhYnN0cmFjdGx5IGludGVycHJldGVkIGFnYWluLiBUaGlzIGFsc28gc2V0cworICAgIC8vIHRv
LT5jZmFTaG91bGRSZXZpc2l0IHRvIHRydWUsIGlmIGl0IHJldHVybnMgdHJ1ZSwgb3IgaWYgdG8g
aGFzIG5vdCBiZWVuCisgICAgLy8gdmlzaXRlZCB5ZXQuCisgICAgc3RhdGljIGJvb2wgbWVyZ2Uo
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworICAgIAorICAgIC8vIE1lcmdlIHRo
ZSBhYnN0cmFjdCBzdGF0ZSBzdG9yZWQgYXQgdGhlIGJsb2NrJ3MgdGFpbCBpbnRvIGFsbCBvZiBp
dHMKKyAgICAvLyBzdWNjZXNzb3JzLiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBzdWNjZXNz
b3JzJyBzdGF0ZXMgY2hhbmdlZC4gTm90ZQorICAgIC8vIHRoYXQgdGhpcyBpcyBhdXRvbWF0aWNh
bGx5IGNhbGxlZCBpbiBlbmRCYXNpY0Jsb2NrKCkgaWYgTWVyZ2VNb2RlIGlzCisgICAgLy8gTWVy
Z2VUb1N1Y2Nlc3NvcnMuCisgICAgc3RhdGljIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgm
LCBCYXNpY0Jsb2NrKik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91
dCk7CisjZW5kaWYKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyhO
b2RlSW5kZXgpOworICAgIAorICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVl
JiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKKyAg
ICAKKyAgICBzdGF0aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZh
bHVlJiBkZXN0aW5hdGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGlu
YXRpb25Ob2RlSW5kZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpOworICAgIAorICAgIENv
ZGVCbG9jayogbV9jb2RlQmxvY2s7CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgCisgICAgVmVj
dG9yPEFic3RyYWN0VmFsdWUsIDMyPiBtX25vZGVzOworICAgIE9wZXJhbmRzPEFic3RyYWN0VmFs
dWU+IG1fdmFyaWFibGVzOworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2hh
dmVTdHJ1Y3R1cmVzOworICAgIAorICAgIGJvb2wgbV9pc1ZhbGlkOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAv
LyBERkdBYnN0cmFjdFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdBYnN0cmFjdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
RkdBYnN0cmFjdFZhbHVlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RWYWx1ZV9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZH
U3RydWN0dXJlU2V0LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJlZGljdGVk
VHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFN0cnVj
dHVyZUFic3RyYWN0VmFsdWUgeworcHVibGljOgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUo
KQorICAgICAgICA6IG1fc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1
Y3R1cmVBYnN0cmFjdFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IG1fc3Ry
dWN0dXJlKHN0cnVjdHVyZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3Ry
YWN0VmFsdWUoY29uc3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHNldC5zaXplKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUg
PSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSAxOgor
ICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBzZXRbMF07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSBy
ZWludGVycHJldF9jYXN0PFN0cnVjdHVyZSo+KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0
cnVjdHVyZSA9IDA7CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAg
ICAgICBtX3N0cnVjdHVyZSA9IHRvcFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIHZhbHVlOworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7CisgICAgICAgIHJldHVy
biB2YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CisgICAgeworICAgICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkp
OworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIH0KKyAg
ICAKKyAgICBib29sIGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAg
ICAgICAgaWYgKGlzVG9wKCkgfHwgIW90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKKyAgICAgICAgICAgIG1ha2VU
b3AoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICgh
bV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUg
PT0gb3RoZXJbMF0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1ha2VUb3Ao
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgYWRkQWxsKGNv
bnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFv
dGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5p
c1RvcCgpKSB7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlm
IChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWlucyhTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1
cmUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIHJldHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1
cmUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgaWYgKG90aGVyLnNpemUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc1N1YnNldE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGlmIChtX3N0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0
dXJlKQorICAgICAgICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVj
dHVyZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3Ro
ZXIuaXNTdWJzZXRPZigqdGhpcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0
IFN0cnVjdHVyZVNldCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAob3RoZXIuc2l6ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBt
X3N0cnVjdHVyZSA9IG90aGVyWzBdOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIuY29u
dGFpbnMobV9zdHJ1Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVBYnN0cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgp
KSB7CisgICAgICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhl
ci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG90aGVyLmlz
VG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlwZSBvdGhlcikKKyAgICB7Cisg
ICAgICAgIGlmICghKG90aGVyICYgUHJlZGljdENlbGwpKSB7CisgICAgICAgICAgICBjbGVhcigp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
aXNDbGVhck9yVG9wKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCEocHJl
ZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpICYgb3RoZXIpKQorICAgICAgICAgICAg
bV9zdHJ1Y3R1cmUgPSAwOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBpc1RvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlID09IHRvcFZhbHVlKCk7IH0KKyAg
ICAKKyAgICBib29sIGlzQ2xlYXJPclRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlIDw9
IHRvcFZhbHVlKCk7IH0KKyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyBy
ZXR1cm4gIWlzQ2xlYXJPclRvcCgpOyB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuICEhbV9zdHJ1
Y3R1cmU7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1
cmUpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGksICFpKTsKKyAgICAgICAgcmV0dXJuIG1fc3Ry
dWN0dXJlOworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaSk7CisgICAgfQorICAgIAorICAgIFN0
cnVjdHVyZSogbGFzdCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoMCk7CisgICAg
fQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRp
Y3RDZWxsOworICAgICAgICBpZiAoaXNDbGVhcigpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRp
Y3ROb25lOworICAgICAgICByZXR1cm4gcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1
cmUpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJz
dHJhY3RWYWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1
cmUgPT0gb3RoZXIubV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAg
ICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAg
ICAgICAgICAgIGZwcmludGYob3V0LCAiVE9QIik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZwcmludGYob3V0LCAiWyIpOworICAgICAgICBpZiAo
bV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmUp
OworICAgICAgICBmcHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8U3RydWN0dXJlKj4oMSk7IH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVy
IG9uZSBzdHJ1Y3R1cmUgYXQgYSB0aW1lLgorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cit9
OworCitzdHJ1Y3QgQWJzdHJhY3RWYWx1ZSB7CisgICAgQWJzdHJhY3RWYWx1ZSgpCisgICAgICAg
IDogbV90eXBlKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVh
cigpCisgICAgeworICAgICAgICBtX3R5cGUgPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgbV9zdHJ1
Y3R1cmUuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFyKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVh
cigpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV90
eXBlID0gUHJlZGljdFRvcDsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKKyAgICB7CisgICAgICAgIGlmICht
X3R5cGUgJiBQcmVkaWN0Q2VsbCkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NF
UlQobV9zdHJ1Y3R1cmUuaXNDbGVhcigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3RUb3AgJiYgbV9z
dHJ1Y3R1cmUuaXNUb3AoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWUg
dG9wKCkKKyAgICB7CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1
bHQubWFrZVRvcCgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2
b2lkIHNldChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIo
KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUu
YWRkKHZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIAorICAgICAgICBtX3R5
cGUgPSBwcmVkaWN0aW9uRnJvbVZhbHVlKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBz
ZXQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVh
cigpOworICAgICAgICBtX3N0cnVjdHVyZS5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAg
ICAgIG1fdHlwZSA9IHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2V0KFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlm
ICh0eXBlICYgUHJlZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAg
IG1fdHlwZSA9IHR5cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBB
YnN0cmFjdFZhbHVlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUg
PT0gb3RoZXIubV90eXBlICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSkg
fCBtX3N0cnVjdHVyZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG1lcmdlKFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1lcmdlUHJl
ZGljdGlvbihtX3R5cGUsIHR5cGUpOworICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgJiBQcmVk
aWN0Q2VsbCkKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAg
ICAgIG1fdHlwZSAmPSBvdGhlci5wcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICAgICAg
bV9zdHJ1Y3R1cmUuZmlsdGVyKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIo
UHJlZGljdGVkVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gUHJlZGljdFRv
cCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV90eXBlICY9IHR5cGU7CisgICAgICAg
IG1fc3RydWN0dXJlLmZpbHRlcih0eXBlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB2YWxpZGF0
ZShKU1ZhbHVlIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtZXJnZVByZWRpY3Rp
b25zKG1fdHlwZSwgcHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1ZSkpICE9IG1fdHlwZSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3N0cnVjdHVyZS5p
c1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAo
dmFsdWUuaXNDZWxsKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2Vs
bCk7CisgICAgICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxs
KCktPnN0cnVjdHVyZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0
KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHByZWRpY3Rpb25Ub1N0cmlu
ZyhtX3R5cGUpKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBmcHJp
bnRmKG91dCwgIikiKTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFs
dWUgbV9zdHJ1Y3R1cmU7CisgICAgUHJlZGljdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR0Fic3RyYWN0VmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYXNp
Y0Jsb2NrX2gKKyNkZWZpbmUgREZHQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworI2luY2x1ZGUgIkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5
cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisKK3N0cnVjdCBC
YXNpY0Jsb2NrIHsKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJ
bmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisg
ICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAgICAsIGJlZ2luKGJl
Z2luKQorICAgICAgICAsIGVuZChOb05vZGUpCisgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2Up
CisgICAgICAgICwgY2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAgICAgLCBjZmFTaG91bGRSZXZp
c2l0KGZhbHNlKQorICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxv
Y2FscykKKyAgICAgICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMp
CisgICAgICAgICwgdmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAg
ICAsIHZhbHVlc0F0VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICB7CisgICAgfQor
CisgICAgc3RhdGljIGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJh
c2ljQmxvY2s+KiBibG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNv
ZGVCZWdpbjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOworICAgIE5vZGVJ
bmRleCBiZWdpbjsKKyAgICBOb2RlSW5kZXggZW5kOworICAgIGJvb2wgaXNPU1JUYXJnZXQ7Cisg
ICAgYm9vbCBjZmFIYXNWaXNpdGVkOworICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKKyAgICAK
KyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgCisgICAgT3BlcmFuZHM8
Tm9kZUluZGV4LCBOb2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0SGVhZDsKKyAgICBPcGVyYW5k
czxOb2RlSW5kZXgsIE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOworICAgIAorICAg
IE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxBYnN0
cmFjdFZhbHVlPiB2YWx1ZXNBdFRhaWw7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZH
CisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jhc2ljQmxvY2tf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkocmV2aXNpb24gOTcwMzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHBy
aXZhdGU6CiAgICAgLy8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJl
IHRoZSBvcGVyYW5kIGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUluZGV4IGdldExvY2Fs
KHVuc2lnbmVkIG9wZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0g
bV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlOworICAgICAgICBO
b2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2Nh
bChvcGVyYW5kKTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE0NCwxNSArMTQ0LDE1
IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJ
bmZvKHZhcmlhYmxlQWNjZXNzRGF0YSkpOwogICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5k
KFBoaVN0YWNrRW50cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwogICAgICAgICBu
b2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRh
KSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRd
LnZhbHVlID0gbm9kZUluZGV4OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmxvY2FsKG9wZXJhbmQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAgICAgICAgbV9jdXJy
ZW50QmxvY2stPm1fbG9jYWxzQXRIZWFkW29wZXJhbmRdLnNldEZpcnN0VGltZShub2RlSW5kZXgp
OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RU
aW1lKG9wZXJhbmQsIG5vZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUlu
ZGV4OwogICAgIH0KICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRl
eCB2YWx1ZSkKICAgICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtv
cGVyYW5kXS52YWx1ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFj
Y2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJp
YWJsZXNBdFRhaWwubG9jYWwob3BlcmFuZCkgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8o
bmV3VmFyaWFibGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8v
IFVzZWQgaW4gaW1wbGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBp
cyBhbiBhcmd1bWVudC4KQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsg
UmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1l
bnQgPCBtX251bUFyZ3VtZW50cyk7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1f
Y3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWU7CisgICAgICAg
IE5vZGVJbmRleCBub2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFy
Z3VtZW50KGFyZ3VtZW50KTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewog
ICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE3MCw3ICsx
NzAsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUg
U2V0QXJndW1lbnQuCiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0
aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBub2Rl
SW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0Rh
dGEoKSksIG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJn
dW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5v
ZGVJbmRleDsKICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC0xODYsOSArMTg2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9k
ZUluZGV4IHBoaSA9IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7
CiAgICAgICAgIG1fYXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJl
bnRCbG9jaywgcGhpLCBhcmd1bWVudCkpOwogICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBo
KEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgbV9j
dXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRl
eDsKKyAgICAgICAgbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1
bWVudCkgPSBub2RlSW5kZXg7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9h
cmd1bWVudHNBdEhlYWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAg
ICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFy
Z3VtZW50LCBub2RlSW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsK
ICAgICB9CkBAIC0xOTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJn
dW1lbnQgPSBvcGVyYW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9u
dW1Bcmd1bWVudHMpOwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFp
bFthcmd1bWVudF0udmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFi
bGVBY2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+
dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWws
IE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQog
CiAgICAgLy8gR2V0IGFuIG9wZXJhbmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBj
b252ZXJzaW9uIG9uIGl0LgpAQCAtNzgzLDggKzc4Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5v
ZGVJbmRleCBzZXRBcmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJz
IC0gUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOwogICAgICAgICAgICAgbV9n
cmFwaC5tX2FyZ3VtZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNl
dEFyZ3VtZW50KTsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFp
bFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudEJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQs
IHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRh
aWwuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAg
fQogICAgIH0KIApAQCAtMTY4OSwxNiArMTY4OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
cm9jZXNzUGhpU3RhY2soKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JC
bG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAg
ICAgICAgVmFyaWFibGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFj
aykgPyBwcmVkZWNlc3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFt2YXJOb10gOiBwcmVkZWNl
c3NvckJsb2NrLT5tX2xvY2Fsc0F0VGFpbFt2YXJOb107CisgICAgICAgICAgICBOb2RlSW5kZXgm
IHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2Nr
LT52YXJpYWJsZXNBdFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFy
aWFibGVzQXRUYWlsLmxvY2FsKHZhck5vKTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVl
SW5QcmVkZWNlc3NvciA9IHZhci52YWx1ZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUlu
UHJlZGVjZXNzb3IgPSB2YXI7CiAgICAgICAgICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09
IE5vTm9kZSkgewogICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3Jh
cGgoUGhpLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVu
dFBoaVN0YWNrID8gdmFyTm8gLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplIDogdmFyTm8pKSk7Ci0gICAgICAgICAgICAgICAg
dmFyLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIHZh
ciA9IHZhbHVlSW5QcmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09
IEFyZ3VtZW50UGhpU3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2st
Pm1fYXJndW1lbnRzQXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29y
KTsKKyAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFk
LnNldEFyZ3VtZW50Rmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9s
b2NhbHNBdEhlYWRbdmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAg
ICAgICAgICAgICAgICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9j
YWxGaXJzdFRpbWUodmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAg
cGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblBy
ZWRlY2Vzc29yLCB2YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVl
SW5QcmVkZWNlc3Nvcl0ub3AgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB3
YW50IHRvIGVuc3VyZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwg
YmV0d2VlbiB0aGUKQEAgLTE3NTgsMTEgKzE3NTgsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
c2V0dXBQcmVkZWNlc3NvcnMoKQogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+
ZW5kIC0gMV07CiAgICAgICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CiAKLSAgICAgICAg
aWYgKG5vZGUuaXNKdW1wKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpLm1fcHJlZGVjZXNzb3JzLmFwcGVuZChp
bmRleCk7Ci0gICAgICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAg
bV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgp
KS5tX3ByZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5ibG9j
a0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRl
Y2Vzc29ycy5hcHBlbmQoaW5kZXgpOworICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkgeworICAg
ICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Cisg
ICAgICAgICAgICBtX2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3By
ZWRlY2Vzc29ycy5hcHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaXNCcmFu
Y2goKSkgeworICAgICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFy
c2luZygpKSk7CisgICAgICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBo
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXRE
dXJpbmdQYXJzaW5nKCkpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtl
bkJsb2NrSW5kZXgoKV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAg
ICBtX2dyYXBoLm1fYmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vz
c29ycy5hcHBlbmQoaW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxMSAr
MTg4LDExIEBAIHZvaWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAg
ICAgaGFzUHJpbnRlZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8
IG5vZGUuaXNKdW1wKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/
ICIsICIgOiAiIiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKSk7CisgICAgICAgIHByaW50ZigiJXNUOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAi
IDogIiIsIG5vZGUudGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1
ZTsKICAgICB9CiAgICAgaWYgIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgcHJpbnRmKCIl
c0Y6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKSk7CisgICAgICAgIHByaW50ZigiJXNG
OiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkp
OwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgKHZvaWQpaGFzUHJpbnRl
ZDsKQEAgLTIzOSw4ICsyMzksMTUgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUlu
ZGV4LCBDbwogdm9pZCBHcmFwaDo6ZHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBm
b3IgKHNpemVfdCBiID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7Ci0gICAgICAgIHBy
aW50ZigiQmxvY2sgIyV1IChiYyMldSk6ICAlc1xuIiwgKGludCliLCBtX2Jsb2Nrc1tiXS0+Ynl0
ZWNvZGVCZWdpbiwgbV9ibG9ja3NbYl0tPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDog
IiIpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gbV9ibG9ja3NbYl0tPmJlZ2luOyBpIDwgbV9i
bG9ja3NbYl0tPmVuZDsgKytpKQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tz
W2JdLmdldCgpOworICAgICAgICBwcmludGYoIkJsb2NrICMldSAoYmMjJXUpOiAgJXNcbiIsIChp
bnQpYiwgYmxvY2stPmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0
YXJnZXQpIiA6ICIiKTsKKyAgICAgICAgcHJpbnRmKCIgIHZhcnM6ICIpOworICAgICAgICBpZiAo
YmxvY2stPmNmYUhhc1Zpc2l0ZWQpCisgICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZh
bHVlc0F0SGVhZCwgc3Rkb3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCI8
ZW1wdHk+Iik7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IGJsb2NrLT5iZWdpbjsgaSA8IGJsb2NrLT5lbmQ7ICsraSkKICAgICAgICAgICAgIGR1bXAoaSwg
Y29kZUJsb2NrKTsKICAgICB9CiAgICAgcHJpbnRmKCJQaGkgTm9kZXM6XG4iKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNp
bmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUg
IlByZWRpY3Rpb25UcmFja2VyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCkBAIC00Mywy
OSArNDQsNiBAQCBjbGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCi0vLyBoZWxw
ZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1l
bnRzLgotaW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJu
IG9wZXJhbmQgPCAwOyB9Ci0KLXR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKLQotLy8gRm9y
IGV2ZXJ5IGxvY2FsIHZhcmlhYmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9m
IHRoZSB2YWx1ZS4KLS8vIFdlIHRyYWNrIHRoZSBnZXQgc28gdGhhdCB0aGVzZSBtYXkgYmUgc2hh
cmVkLCBhbmQgd2UgdHJhY2sgdGhlIHNldCB0bwotLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFs
dWUsIGFuZCB0byByZWZlcmVuY2UgdGhlIGZpbmFsIGRlZmluaXRpb24uCi1zdHJ1Y3QgVmFyaWFi
bGVSZWNvcmQgewotICAgIFZhcmlhYmxlUmVjb3JkKCkKLSAgICAgICAgOiB2YWx1ZShOb05vZGUp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkIHNldEZpcnN0VGltZShOb2RlSW5kZXggbm9k
ZUluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVlID09IE5vTm9kZSk7Ci0gICAgICAg
IHZhbHVlID0gbm9kZUluZGV4OwotICAgIH0KLQotICAgIE5vZGVJbmRleCB2YWx1ZTsKLX07Ci0K
IHN0cnVjdCBNZXRob2RDaGVja0RhdGEgewogICAgIC8vIEl0IGlzIHNhZmUgdG8gcmVmZXIgdG8g
dGhlc2UgZGlyZWN0bHkgYmVjYXVzZSB0aGV5IGFyZSBzaGFkb3dlZCBieQogICAgIC8vIHRoZSBv
bGQgSklUJ3MgQ29kZUJsb2NrJ3MgTWV0aG9kQ2FsbExpbmtJbmZvLgpAQCAtMTExLDQwICs4OSw2
IEBAIHN0cnVjdCBSZXNvbHZlR2xvYmFsRGF0YSB7CiAgICAgdW5zaWduZWQgcmVzb2x2ZUluZm9J
bmRleDsKIH07CiAKLXR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxp
c3Q7Ci0KLXN0cnVjdCBCYXNpY0Jsb2NrIHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW4sIE5vZGVJbmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25l
ZCBudW1Mb2NhbHMpCi0gICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQotICAg
ICAgICAsIGJlZ2luKGJlZ2luKQotICAgICAgICAsIGVuZChOb05vZGUpCi0gICAgICAgICwgaXNP
U1JUYXJnZXQoZmFsc2UpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdEhlYWQobnVtQXJndW1lbnRz
KQotICAgICAgICAsIG1fbG9jYWxzQXRIZWFkKG51bUxvY2FscykKLSAgICAgICAgLCBtX2FyZ3Vt
ZW50c0F0VGFpbChudW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9sb2NhbHNBdFRhaWwobnVtTG9j
YWxzKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIEJsb2NrSW5kZXggZ2V0Qnl0
ZWNvZGVCZWdpbihPd25QdHI8QmFzaWNCbG9jaz4qIGJsb2NrKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICgqYmxvY2spLT5ieXRlY29kZUJlZ2luOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGJ5dGVj
b2RlQmVnaW47Ci0gICAgTm9kZUluZGV4IGJlZ2luOwotICAgIE5vZGVJbmRleCBlbmQ7Ci0gICAg
Ym9vbCBpc09TUlRhcmdldDsKLQotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsK
LSAgICAKLSAgICBWZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOwot
ICAgIFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOwotICAgIAotICAg
IFZlY3RvcjxWYXJpYWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7Ci0gICAgVmVjdG9y
PFZhcmlhYmxlUmVjb3JkLCAxNj4gbV9sb2NhbHNBdFRhaWw7Ci19OwotCiAvLyAKIC8vID09PSBH
cmFwaCA9PT0KIC8vCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVH
ZW5lcmF0b3IzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yMzJfNjQuY3BwCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE5Myw4ICsxMTkzLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25T
cGVjdWxhdGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBo
b2xlQnJhbmNoTnVsbChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRl
eCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJ
bmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZv
ckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGlm
ICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBA
IC0xMjU0LDggKzEyNTQsOCBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZl
Q29tCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2go
Tm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCwgWl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9u
KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJs
b2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5v
ZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJh
bmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJh
bmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRD
b25kaXRpb24gY2FsbFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBA
IC0xMzk2LDggKzEzOTYsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZl
Tm9uCiB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RF
cShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsK
ICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0lu
ZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJh
bmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5v
dFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5v
ZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9u
IHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0
LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlv
biBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdKSVRDb2RlR2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTcwMzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExMzEsOCArMTEzMSw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6
bm9uU3BlY3VsYXRpdmVOb24KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQ
ZWVwaG9sZUJyYW5jaE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2Rl
SW5kZXgsIGJvb2wgaW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hO
b2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0g
ICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9j
a0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0lu
ZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAg
ICBpZiAodGFrZW4gPT0gKG1fYmxvY2sgKyAxKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0
OwpAQCAtMTE5Miw4ICsxMTkyLDggQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZUNvbQogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJh
bmNoKE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFpfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5j
dGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAg
ICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVP
ZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXgg
bm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9
IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBKSVRDb21waWxlcjo6UmVz
dWx0Q29uZGl0aW9uIGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsK
IApAQCAtMTMyMSw4ICsxMzIxLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxh
dGl2ZU5vbgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3Ry
aWN0RXEoTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQp
CiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxv
Y2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0
KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9k
ZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFu
Y2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFu
Y2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVj
dGlvbiB3aWxsIGJyYW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMg
bmV4dCwgc3dpdGNoIHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25k
aXRpb24gc28gd2UgY2FuIGZhbGwgdGhyb3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NzAzMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDI5LDYgKzE0MjksMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQog
CisgICAgQmFzaWNCbG9jayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0Lmdy
YXBoKCkubV9ibG9ja3NbbV9ibG9ja10uZ2V0KCk7CisgICAgfQorCiAjaWZuZGVmIE5ERUJVRwog
ICAgIHZvaWQgZHVtcChjb25zdCBjaGFyKiBsYWJlbCA9IDApOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NzAzMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDAyLDIzICs0MDIsMTkgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NSX0VO
VFJZKQogICAgICAgICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVuZERG
R09TUkVudHJ5RGF0YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVu
KG1fc3RhcnRPZkNvZGUsIGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIEFjdGlvbmFibGVQ
cmVkaWN0aW9ucyBhY3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0
SGVhZC5zaXplKCksIGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKLQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5z
aXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxv
Y2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4
ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0QXJn
dW1lbnQoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25v
ZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICB9
CisgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay52YWx1ZXNBdEhl
YWQ7CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9j
ay5tX2xvY2Fsc0F0SGVhZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5v
ZGVJbmRleCA9IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAg
ICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJl
ZGljdGlvbnMuc2V0VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVk
VHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KSkpOworICAgICAgICAvLyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29s
LCBhIGRlYWQgdmFyaWFibGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCisgICAgICAgIC8vIHZhbHVl
IG9mIChOb25lLCBbXSkuIEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhl
cmUuIFNvIHdlIHJlYWxseQorICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCisgICAgICAgIGZv
ciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0
SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAo
YmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID09IE5vTm9kZSkK
KyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVu
dCkubWFrZVRvcCgpOworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsg
bG9jYWwgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xv
Y2FsKSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwo
bG9jYWwpID09IE5vTm9kZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVl
cy5sb2NhbChsb2NhbCkubWFrZVRvcCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBh
Y3Rpb25hYmxlUHJlZGljdGlvbnMucGFjaygpOwotICAgICAgICAKLSAgICAgICAgZW50cnktPm1f
cHJlZGljdGlvbnMgPSBhY3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVT
RURfUEFSQU0oYmFzaWNCbG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOCBAQAogI2lmbmRlZiBERkdO
b2RlX2gKICNkZWZpbmUgREZHTm9kZV9oCiAKLSNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIK
ICNpbmNsdWRlIDx3dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBs
b2dnaW5nIGluZm9ybWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBk
YXRhZmxvdyBncmFwaHMuCiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC02
Nyw2ICs2NSw4IEBACiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2su
aCIKKyNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIgogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgi
CiAjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCkBAIC03NCwxNSArNzQsMTYgQEAKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0
ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhp
cyB0eXBlLWNoZWNrZWQgYXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9y
cy4KLWVudW0gVmlydHVhbFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07
Ci1DT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwg
VmlydHVhbFJlZ2lzdGVyX2lzXzMyYml0KTsKLQogLy8gVHlwZSBmb3IgYSByZWZlcmVuY2UgdG8g
YW5vdGhlciBub2RlIGluIHRoZSBncmFwaC4KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owog
c3RhdGljIGNvbnN0IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAordHlwZWRlZiB1aW50
MzJfdCBCbG9ja0luZGV4OworCitzdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKKyAgICBzdGF0aWMg
Tm9kZUluZGV4IGRlZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQorfTsKKwogLy8gSW5m
b3JtYXRpb24gdXNlZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxl
ci9zb3VyY2UgaW5mb3JtYXRpb24sCiAvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4KIC8vIChQcmVz
ZW50bHkgaW1wbGVtZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCkBAIC0xMTAsNTEgKzExMSw2
IEBAIHByaXZhdGU6CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAotY2xhc3Mg
VmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4g
ewotcHVibGljOgotICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgICAgIDogbV9sb2NhbChz
dGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWlu
KCkpKQotICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAgfQot
ICAgIAotICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAg
ICAgIDogbV9sb2NhbChsb2NhbCkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUp
Ci0gICAgewotICAgIH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0
dXJuIG1fbG9jYWw7Ci0gICAgfQotICAgIAotICAgIGludCBvcGVyYW5kKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwotICAgIH0KLSAgICAKLSAgICBi
b29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7Ci0g
ICAgfQotICAgIAotICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCi0gICAgewotICAgICAg
ICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAg
ICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3
ZSdyZSB1bmlmaWVkIHdpdGgKLSAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQg
c2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0Ci0gICAgLy8gcHV0dGluZyB0aGVt
IGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UK
LSAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50
LgotCi0gICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgUHJlZGljdGVkVHlwZSBtX3By
ZWRpY3Rpb247Ci19OwotCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0
cnVjdHVyZSogcHJldmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7
CkBAIC01NjQsNiArNTIwLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhKCkKICAgICB7CisgICAgICAgIEFTU0VSVChoYXNW
YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZh
cmlhYmxlQWNjZXNzRGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwogICAgIH0KICAgICAKQEAgLTc1
NSwxMyArNzEyLDM3IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG9wICYgTm9kZUlz
VGVybWluYWw7CiAgICAgfQogCi0gICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldCgpCisg
ICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwogICAgICAgICByZXR1cm4gbV9v
cEluZm87CiAgICAgfQogCi0gICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNldCgpCisg
ICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8yOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHNldFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4IGJsb2Nr
SW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7Cisg
ICAgICAgIG1fb3BJbmZvID0gYmxvY2tJbmRleDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRO
b3RUYWtlbkJsb2NrSW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzQnJhbmNoKCkpOworICAgICAgICBtX29wSW5mbzIgPSBibG9ja0luZGV4OworICAg
IH0KKyAgICAKKyAgICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCgpCisgICAgeworICAgICAg
ICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5m
bzsKKyAgICB9CisgICAgCisgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgoKQogICAg
IHsKICAgICAgICAgQVNTRVJUKGlzQnJhbmNoKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8y
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlz
aW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDM0ICs3NywzOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnko
RXhlY1N0YXRlKiBleGVjLCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNv
LCB0aGUgd2lzZXN0IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAg
IE9TUiBhdCB0aGlzIHRpbWUuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGVu
dHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAg
QWN0aW9uYWJsZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFy
Z3VtZW50KGkpOwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0
aW9uKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGkgPj0gZXhlYy0+YXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSkgeworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0g
MDsgYXJndW1lbnQgPCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygp
OyArK2FyZ3VtZW50KSB7CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAg
ICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90
IHBhc3NlZCwgZXhwZWN0ZWQgJXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5n
KHByZWRpY3Rpb24pKTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVz
ZSBhcmd1bWVudCAlbHUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICIsIGFyZ3VtZW50KTsKKyAg
ICAgICAgICAgIGVudHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1w
KHN0ZG91dCk7CisgICAgICAgICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZU9iZXlz
UHJlZGljdGlvbihnbG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb24p
KSB7CisgICAgICAgIEpTVmFsdWUgdmFsdWU7CisgICAgICAgIGlmICghYXJndW1lbnQpCisgICAg
ICAgICAgICB2YWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdmFsdWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOworICAgICAgICAK
KyAgICAgICAgaWYgKCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCku
dmFsaWRhdGUodmFsdWUpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAg
ICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhw
ZWN0ZWQgJXMuXG4iLCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgYWN0
aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBwcmlu
dGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJWx1IGlzICVzLCBleHBlY3RlZCAi
LCBhcmd1bWVudCwgdmFsdWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9l
eHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAgICAg
ICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
IH0KICAgICB9CiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3By
ZWRpY3Rpb25zLnZhcmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJs
ZVByZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkp
OwotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVk
aWN0aW9uKGdsb2JhbERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGlj
dGlvbikpIHsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhw
ZWN0ZWRWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAoIWVu
dHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3Rl
cnMoKVtsb2NhbF0uanNWYWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0g
ICAgICAgICAgICBwcmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMg
JXMsIGV4cGVjdGVkICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRl
c2NyaXB0aW9uKCksIGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOwor
ICAgICAgICAgICAgcHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICVsdSBp
cyAlcywgZXhwZWN0ZWQgIiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVl
KCkuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5s
b2NhbChsb2NhbCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNl
bmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw4IEBACiAjaWZuZGVmIERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCi0j
aW5jbHVkZSAiQWN0aW9uYWJsZVByZWRpY3Rpb24uaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZh
bHVlLmgiCisjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTM5LDcgKzQwLDcgQEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAg
ICB1bnNpZ25lZCBtX2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9m
ZnNldDsKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKKyAgICBPcGVy
YW5kczxBYnN0cmFjdFZhbHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogfTsKIAogaW5saW5lIHVuc2ln
bmVkIGdldE9TUkVudHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURh
dGEpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIERGR09wZXJhbmRzX2gKKyNkZWZpbmUgREZHT3BlcmFuZHNf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKwor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
eworCisvLyBoZWxwZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVz
IGZyb20gYXJndW1lbnRzLgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJh
bmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAwOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBPcGVyYW5kVmFsdWVUcmFpdHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgT3Bl
cmFuZFZhbHVlVHJhaXRzIHsKKyAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBU
KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJh
bmRWYWx1ZVRyYWl0czxUPiA+CitjbGFzcyBPcGVyYW5kcyB7CitwdWJsaWM6CisgICAgT3BlcmFu
ZHMoKSB7IH0KKyAgICAKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRz
LCBzaXplX3QgbnVtTG9jYWxzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpLCBudW1Bcmd1bWVudHMpOworICAgICAgICBtX2xvY2Fscy5maWxs
KFRyYWl0czo6ZGVmYXVsdFZhbHVlKCksIG51bUxvY2Fscyk7CisgICAgfQorICAgIAorICAgIHNp
emVfdCBudW1iZXJPZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUo
KTsgfQorICAgIHNpemVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxz
LnNpemUoKTsgfQorICAgIAorICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1f
YXJndW1lbnRzW2lkeF07IH0KKyAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25z
dCB7IHJldHVybiBtX2FyZ3VtZW50c1tpZHhdOyB9CisgICAgCisgICAgVCYgbG9jYWwoc2l6ZV90
IGlkeCkgeyByZXR1cm4gbV9sb2NhbHNbaWR4XTsgfQorICAgIGNvbnN0IFQmIGxvY2FsKHNpemVf
dCBpZHgpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KKyAgICAKKyAgICB2b2lkIHNl
dExvY2FsKHNpemVfdCBpZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGlk
eCA+PSBtX2xvY2Fscy5zaXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9s
b2NhbHMuc2l6ZSgpOworICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOworICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25z
dCBUJiB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhdID09IFRy
YWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBhcmd1bWVudChpZHgpID0gdmFsdWU7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgc2V0TG9jYWxGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3Qg
VCYgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaWR4ID49IG1fbG9jYWxzLnNpemUoKSB8
fCBtX2xvY2Fsc1tpZHhdID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBzZXRM
b2NhbChpZHgsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmFuZChpbnQgb3BlcmFu
ZCkKKyAgICB7CisgICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAg
ICAgICAgICAgaW50IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJl
Z2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50c1thcmd1bWVudF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBt
X2xvY2Fsc1tvcGVyYW5kXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgb3BlcmFuZChpbnQg
b3BlcmFuZCkgY29uc3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxP
cGVyYW5kcyo+KHRoaXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIAorICAgIHZvaWQgc2V0
T3BlcmFuZChpbnQgb3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAo
b3BlcmFuZElzQXJndW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9
IG9wZXJhbmQgKyBtX2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhl
YWRlclNpemU7CisgICAgICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSB2YWx1ZTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0TG9jYWwo
b3BlcmFuZCwgdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisg
ICAgICAgICAgICBtX2FyZ3VtZW50c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBWZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFQsIDE2
PiBtX2xvY2FsczsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGR1bXBPcGVyYW5k
cyhPcGVyYW5kczxUPiYgb3BlcmFuZHMsIEZJTEUqIG91dCkKK3sKKyAgICBmb3IgKHNpemVfdCBh
cmd1bWVudCA9IDA7IGFyZ3VtZW50IDwgb3BlcmFuZHMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKyth
cmd1bWVudCkgeworICAgICAgICBpZiAoYXJndW1lbnQpCisgICAgICAgICAgICBmcHJpbnRmKG91
dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAob3V0KTsK
KyAgICB9CisgICAgZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9
IDA7IGxvY2FsIDwgb3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAg
ICBpZiAobG9jYWwpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgb3Bl
cmFuZHMubG9jYWwobG9jYWwpLmR1bXAob3V0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZH
T3BlcmFuZHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFn
YXRvci5jcHAJKHJldmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcm9wYWdhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCiAjaW5jbHVkZSA8d3Rm
L0ZpeGVkQXJyYXkuaD4KQEAgLTU1LDQ1ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXhw
b2ludCgpCiAgICAgewogI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkK
LSAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOworICAgICAgICBtX2dyYXBoLmR1bXAobV9j
b2RlQmxvY2spOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZF
UkJPU0UpCi0gICAgICAgIG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIGRvIHsKLSAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBV
cCBoZXJlIHdlIHN0YXJ0IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0
aGF0IHRvIGJlCi0gICAgICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCi0gICAgICAgICAgICBw
cm9wYWdhdGVBcml0aE5vZGVGbGFnc0JhY2t3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hh
bmdlZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0Zv
cndhcmQoKTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCi0jaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0gMDsK
LSNlbmRpZgotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9w
dGltYWwgZm9yIGJvdGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAgICAvLyBE
RlMtc29ydGVkIGNvZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQo
KTsKLSAgICAgICAgICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2Vz
IHRoZSBsaWtlbGlob29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAgICAgICAgICAg
Ly8gY2F1c2Ugc2xvd25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJs
ZSBiYWNrd2FyZCBmbG93LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBj
YXNlczogKDEpIGl0IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAgICAgICAgICAg
IC8vIGZvdW5kIGEgc291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2Fy
ZCBmbG93LgotICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9w
YWdhdGVQcmVkaWN0aW9uc0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7
Ci0gICAgICAgIAorICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpOworICAgICAgICBw
cm9wYWdhdGVQcmVkaWN0aW9ucygpOwogICAgICAgICBmaXh1cCgpOwogICAgICAgICAKICNpZiBF
TkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTAsNiArNzcsMTMgQEAg
cHVibGljOgogCiAgICAgICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOwogCisjaWYgRU5B
QkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBo
IGFmdGVyIHZpcnR1YWwgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBo
LmR1bXAobV9jb2RlQmxvY2spOworI2VuZGlmCisKKyAgICAgICAgZ2xvYmFsQ0ZBKCk7CisKICNp
ZiBFTkFCTEUoREZHX0RFQlVHX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIg
cHJvcGFnYXRpb246XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKQEAg
LTI3NCw2ICsyNDgsMjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9k
ZUZsYWdzKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBw
cm9wYWdhdGVBcml0aE5vZGVGbGFncygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAg
ZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFVwIGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3
ZSBzdXNwZWN0IHRoYXQgdG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAg
ICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAg
IGlmICghbV9jaGFuZ2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRo
Tm9kZUZsYWdzRm9yd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0K
KyAgICAKICAgICBib29sIHNldFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgp
KTsKQEAgLTYwOCw3ICs2MDEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBFTkFCTEUo
REZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiJXMgIiwgcHJl
ZGljdGlvblRvU3RyaW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOwor
ICAgICAgICBwcmludGYoIiVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFttX2NvbXBp
bGVJbmRleF0ucHJlZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1fY2hh
bmdlZCB8PSBjaGFuZ2VkOwpAQCAtNjMyLDYgKzYyNSwyOSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgcHJvcGFnYXRlTm9kZVByZWRpY3Rpb25zKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAg
ICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9ucygpCisgICAgeworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7
CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1v
cHRpbWFsIGZvciBib3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8g
REZTLXNvcnRlZCBjb2RlLgorICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJk
KCk7CisgICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNl
cyB0aGUgbGlrZWxpaG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAg
IC8vIGNhdXNlIHNsb3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1i
bGUgYmFja3dhcmQgZmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28g
Y2FzZXM6ICgxKSBpdCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAg
ICAvLyBmb3VuZCBhIHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dh
cmQgZmxvdy4KKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJv
cGFnYXRlUHJlZGljdGlvbnNCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQp
OworICAgIH0KKyAgICAKICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAg
ICAgewogICAgICAgICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIp
IHsKQEAgLTE0NDUsNiArMTQ2MSw4MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jb2RlQmxv
Y2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogICAgIH0KICAgICAK
KyAgICB2b2lkIHBlcmZvcm1CbG9ja0NGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSwgQmxvY2tJbmRl
eCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBo
Lm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91
bGRSZXZpc2l0KQorICAgICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJP
UEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICBCbG9jayAjJXUgKGJjIyV1KTpc
biIsIGJsb2NrSW5kZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAgICBz
dGF0ZS5iZWdpbkJhc2ljQmxvY2soYmxvY2spOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFH
QVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAgICBoZWFkIHZhcnM6ICIpOworICAg
ICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKKyAgICAgICAg
cHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgICAgIGZvciAoTm9kZUluZGV4IG5vZGVJbmRleCA9
IGJsb2NrLT5iZWdpbjsgbm9kZUluZGV4IDwgYmxvY2stPmVuZDsgKytub2RlSW5kZXgpIHsKKyAg
ICAgICAgICAgIGlmICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9W
RVJCT1NFKQorICAgICAgICAgICAgcHJpbnRmKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5h
bWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHN0YXRl
LmR1bXAoc3Rkb3V0KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAg
ICAgICAgaWYgKCFzdGF0ZS5leGVjdXRlKG5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0Up
CisgICAgICAgIHByaW50ZigiICAgICAgdGFpbCByZWdzOiAiKTsKKyAgICAgICAgc3RhdGUuZHVt
cChzdGRvdXQpOworICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9jaGFu
Z2VkIHw9IHN0YXRlLmVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3Nv
cnMpOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAg
cHJpbnRmKCIgICAgICB0YWlsIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2st
PnZhbHVlc0F0VGFpbCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisg
ICAgfQorICAgIAorICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoQWJzdHJhY3RTdGF0ZSYgc3Rh
dGUpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAg
ICAgICAgcHJpbnRmKCJDRkEgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICAK
KyAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxv
Y2tzLnNpemUoKTsgKytibG9jaykKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwg
YmxvY2spOworICAgIH0KKyAgICAKKyAgICB2b2lkIGdsb2JhbENGQSgpCisgICAgeworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7
CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13
b3JrbGlzdC1iYXNlZCBmb3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCisg
ICAgICAgIC8vIG9mIGJsb2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2gg
aXMgbmVhcmx5IHRvcG9sb2dpY2FsKSwgYW5kCisgICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3Jr
bGlzdCB3ZSBqdXN0IHdhbGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRS
ZXZpc2l0CisgICAgICAgIC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxh
bmNlIHRoZSBlZmZpY2llbmN5IHByb3BlcnRpZXMgb2YgYm90aAorICAgICAgICAvLyB3b3JrbGlz
dC1iYXNlZCBhbmQgZm9yd2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29y
a2xpc3QtYmFzZWQKKyAgICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYg
aXQncyBtZWFuaW5nbGVzcyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0CisgICAgICAgIC8v
IHRoZSBoZWFkIG9mIHRoZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4g
dmlzaXRlZCkuIExpa2UgYSBmb3J3YXJkCisgICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJv
YWNoLCBpdCBoYXMgYSBoaWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jawor
ICAgICAgICAvLyBhZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5
IGxvb3BzIHdpbGwgY2F1c2UgdGhpcyBhbmFseXNpcyB0bworICAgICAgICAvLyByZXZpc2l0IGJs
b2NrcywgYW5kIHRoZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9v
cCBkZXB0aC4KKyAgICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9n
cmFwaCk7CisgICAgICAgIAorICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fY29kZUJsb2Nr
LCBtX2dyYXBoKTsKKyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdl
ZCA9IGZhbHNlOworICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoc3RhdGUpOworICAgICAg
ICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsK
ICAgICBKU0dsb2JhbERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
Nyw3ICszNDcsNyBAQCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAg
ICAgcmV0dXJuIG5vdE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9i
amVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0ciwgUHJlZGljdGlv
bkNoZWNrZXIgcHJlZGljdGlvbkNoZWNrKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhp
cywgbm9kZS5jaGlsZDIoKSk7CkBAIC0zNTksOCArMzU5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0
VGFnLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5n
cHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwor
ICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hl
Y2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7
CiAgICAgbV9qaXQubW92ZShJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CkBAIC0zODAsOSAr
MzgyLDkgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKIAogICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dChhdChub2RlLmNoaWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxl
T2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0
cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzRmluYWxPYmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAgICAgZWxz
ZSBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5v
ZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxp
dHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rp
b24pOwogICAgIGVsc2UgaWYgKCFhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSAmJiAhYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAg
ICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3Bl
cmF0aW9uKTsKICAgICBlbHNlIGlmICgoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkgfHwgYXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpICYm
ICFOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2Rl
LmNoaWxkMigpKSkpIHsKQEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlVmFsdWVBZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJl
c3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgs
IHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxv
Z2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCogdnB0ciwgYm9vbCBuZWVkU3BlY3Vs
YXRpb25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgp
OwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CkBAIC00NTEsMTQgKzQ1MywxNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgbV9qaXQubW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRhZy5ncHIoKSk7CiAg
ICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIG5vdENlbGwu
bGluaygmbV9qaXQpOwogIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTnVsbCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkp
OwogCiAgICAgaXNOdWxsLmxpbmsoJm1faml0KTsKIApAQCAtNDc0LDExICs0NzgsMTEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIC8vIEZJWE1FOiBOZWVk
IHRvIGFkZCBmYXN0IHBhdGhzIGZvciBrbm93biBib29sZWFucy4KIAogICAgIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAgICAg
ICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90
aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAg
ICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhl
ckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewpAQCAtNTQ0LDIwICs1NDgsMjIgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogI2VuZGlmCiB9CiAKLXZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCBub2Rl
SW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXgg
bm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2
cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0gdmFsdWUudGFn
R1BSKCk7CiAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9h
ZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAg
ICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGlu
aygmbV9qaXQpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGlzTnVsbCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpOdWxsVGFnKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6VW5kZWZpbmVkVGFnKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSkp
OwogCiAgICAgaXNOdWxsLmxpbmsoJm1faml0KTsKIApAQCAtNTY5LDE1ICs1NzUsMTUgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0QnJhbmNoKE5vZGUmIG5vZGUpCiB7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwor
ICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBub2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gRklY
TUU6IEFkZCBmYXN0IGNhc2VzIGZvciBrbm93biBCb29sZWFuIQogCiAgICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAg
IGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwg
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAgIGVtaXRPYmpl
Y3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgIWlzRmluYWxPYmplY3RPck90aGVyUHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNl
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewot
ICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90
VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpOworICAgICAgICBlbWl0T2Jq
ZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIsICFpc0FycmF5T3JPdGhlclByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9k
ZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpIHsKICAgICAgICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgYm9v
bCBpbnZlcnQgPSBmYWxzZTsKQEAgLTY0Myw2ICs2NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICBjYXNlIEdldExvY2FsOiB7CiAgICAgICAgIFBy
ZWRpY3RlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRp
Y3Rpb24oKTsKKyAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBibG9jaygpLT52YWx1ZXNB
dEhlYWQub3BlcmFuZChub2RlLmxvY2FsKCkpOwogCiAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8g
cHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBpbGUu
CiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7CkBAIC02ODMsNyArNjkw
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
bV9ncHJzLnJldGFpbihyZXN1bHQuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckpT
KTsKICAgICAgICAgbV9ncHJzLnJldGFpbih0YWcuZ3ByKCksIHZpcnR1YWxSZWdpc3RlciwgU3Bp
bGxPcmRlckpTKTsKIAotICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdCA9IGlzQm9vbGVhblByZWRp
Y3Rpb24ocHJlZGljdGlvbikgPyBEYXRhRm9ybWF0SlNCb29sZWFuIDogRGF0YUZvcm1hdEpTOwor
ICAgICAgICBEYXRhRm9ybWF0IGZvcm1hdDsKKyAgICAgICAgaWYgKGlzQ2VsbFByZWRpY3Rpb24o
dmFsdWUubV90eXBlKSkKKyAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0NlbGw7Cisg
ICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKKyAgICAg
ICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKKwogICAgICAgICBtX2dlbmVyYXRpb25JbmZv
W3ZpcnR1YWxSZWdpc3Rlcl0uaW5pdEpTVmFsdWUobV9jb21waWxlSW5kZXgsIG5vZGUucmVmQ291
bnQoKSwgdGFnLmdwcigpLCByZXN1bHQuZ3ByKCksIGZvcm1hdCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KQEAgLTcxMiw3ICs3MjYsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVk
VHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9k
ZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwor
ICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQ
UiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSB7IC8vIEZJWE1FOiBBZGQg
Qm9vbGVhblByZWRpY3Rpb24gaGFuZGxpbmcKQEAgLTEzMTUsNyArMTMzMCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0
IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4g
bV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRp
Y3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0g
ICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlz
QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQog
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsK
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKQEAgLTEzNjgsNyArMTM4Myw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAv
LyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRh
aW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3
ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0
aGUgY2hlY2suCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAg
ICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgp
KS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cikpKTsKIAogICAgICAgICBiYXNlLnVzZSgpOwpAQCAtMTQ1NSw3ICsxNDcwLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAg
ICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlVGFnR1BSLCBub2RlLmNoaWxkMigpLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7
CiAKLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlm
ICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAg
LTE1MDEsNyArMTUxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBH
UFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAot
ICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFp
c0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTU0
OCw3ICsxNTYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgIH0KIAogICAgIGNhc2UgREZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0
ZWNvZGVPZmZzZXQoKSk7CisgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxv
Y2tJbmRleCgpOwogICAgICAgICBpZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAg
ICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwpAQCAtMTU1OSw4ICsxNTc0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxk
MSgpKSB8fCBhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3Jh
cGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0
KCkpOwotICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxv
Y2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsK
KyAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwor
ICAgICAgICAgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25k
aXRpb24gY29uZGl0aW9uID0gTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAK
QEAgLTE3NzEsNyArMTc4Niw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5w
cmVkaWN0aW9uKCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFs
dWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGls
ZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlz
T2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
KyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21w
aWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODEzLDkgKzE4MjksMTAg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBO
ZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZl
IHJlYXNvbiB0byBiZWxpZXZlCiAgICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRo
ZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAgICAgICAv
LyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKLSAgICAg
ICAgZWxzZSB7CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVG
aW5hbE9iamVjdCgpKSB7CisgICAgICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOworICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIp
OwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6
OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmpl
Y3RUeXBlKSkpOwogICAgICAgICB9CkBAIC0xOTUxLDcgKzE5NjgsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFz
ZS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAg
ICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBp
ZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKQEAg
LTE5NzAsNyArMTk4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3du
U3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAKICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5n
OjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKQEAgLTE5ODcsNiArMjAwNCwxMSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBDaGVja1N0cnVjdHVyZTogeworICAgICAgICBpZiAobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fc3RydWN0dXJlLmlzU3Vic2V0T2Yobm9kZS5zdHJ1Y3R1cmVTZXQoKSkpIHsKKyAg
ICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAKICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0
dXJlU2V0KCkuc2l6ZSgpKTsKQEAgLTIxMTMsNyArMjEzNSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAg
IAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3Ry
dWN0dXJlKSkpOworICAgICAgICBpZiAoIW1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3N0cnVjdHVyZS5kb2VzTm90Q29udGFpbkFueU90aGVyVGhhbihtZXRob2RDaGVja0RhdGEuc3Ry
dWN0dXJlKSkKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENo
ZWNrRGF0YS5zdHJ1Y3R1cmUpKSk7CiAgICAgICAgIGlmIChtZXRob2RDaGVja0RhdGEucHJvdG90
eXBlICE9IG1faml0LmNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3QoKS0+bWV0aG9kQ2FsbER1bW15
KCkpIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIo
bWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZS0+c3RydWN0dXJlQWRkcmVzcygpKSwgc2NyYXRjaEdQ
Uik7CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21w
aWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIpLCBKSVRDb21w
aWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEucHJvdG90eXBlU3RydWN0dXJlKSkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1MCw3ICs0NTAsNyBA
QCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5v
dE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIgcHJl
ZGljdGlvbkNoZWNrKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CkBAIC00NjAsOCArNDYwLDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RFcXVhbGkKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwotICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAg
IGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgb3AxR1BSLCBvcDJHUFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVUcnVlKSwgcmVz
dWx0R1BSKTsKQEAgLTUwMSw5ICs1MDMsOSBAQCBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJl
KE5vZGUmIG5vZGUsCiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICB9IGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUu
Y2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVh
bGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAg
ICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5h
bE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQcmVkaWN0aW9uKTsKICAgICBlbHNlIGlmIChub2Rl
Lm9wID09IENvbXBhcmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxp
dHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBp
bGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBp
c0FycmF5UHJlZGljdGlvbik7CiAgICAgZWxzZQogICAgICAgICBub25TcGVjdWxhdGl2ZU5vblBl
ZXBob2xlQ29tcGFyZShub2RlLCBjb25kaXRpb24sIG9wZXJhdGlvbik7CiAgICAgCkBAIC01Mjks
NyArNTMxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVZhbHVlQWRkKE5vZAogICAg
IGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKLXZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXgg
bm9kZUluZGV4LCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQgKnZwdHIsIGJvb2wg
bmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywg
bm9kZUluZGV4KTsKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwpAQCAtNTM3LDcgKzUz
OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25l
ID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtNTQ1LDcgKzU0OCw4IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BS
LCByZXN1bHRHUFIpOwogICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51
bGwpKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRH
UFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KFZhbHVlTnVsbCkpKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZt
X2ppdCk7CkBAIC01NjYsMTEgKzU3MCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
TG9naWNhbE5vdChOCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKSB7Ci0gICAgICAgIGNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29tcGlsZU9iamVjdE9yT3RoZXJM
b2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChh
dChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9yT3RoZXIoKSkgewotICAgICAg
ICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9n
aWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAh
aXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CkBAIC02MzAsMTkgKzYzNCwyMSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAganNWYWx1ZVJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4LCBEYXRhRm9ybWF0SlNCb29sZWFuLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0
T3JPdGhlckJyYW5jaChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9j
a0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKQordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwg
QmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVj
aykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKLSAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKKyAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
cHRyKSkpOwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBu
b3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdmFsdWVHUFIpOwotICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFs
dWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9j
YXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayAr
IDEpKQogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CiAgICAgCkBA
IC02NTQsOCArNjYwLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBu
bwogICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIEdQ
UlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwogICAgIAotICAgIEJsb2NrSW5kZXggdGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0
ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCku
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgp
KTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gbm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBC
bG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAg
ICBpZiAoaXNLbm93bkJvb2xlYW4obm9kZS5jaGlsZDEoKSkpIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bzsKQEAgLTY3Myw5ICs2NzksOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5v
ZGUmIG5vCiAgICAgICAgIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
fSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdE9y
T3RoZXIoKSkgewotICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgp
LCB0YWtlbiwgbm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIp
OworICAgICAgICBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChub2RlLmNoaWxkMSgpLCB0YWtlbiwg
bm90VGFrZW4sIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFs
T2JqZWN0T3JPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
QXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5j
aGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4s
IG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3Ro
ZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAg
ICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKSB7
CiAgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkp
IHsKICAgICAgICAgICAgIGJvb2wgaW52ZXJ0ID0gZmFsc2U7CkBAIC03MDgsOSArNzE0LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICBpZiAocHJl
ZGljdEJvb2xlYW4pIHsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1Zh
bHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAgICAgICAg
YWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkp
KSksIHRha2VuKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKHByZWRpY3RCb29s
ZWFuKSB7CisKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuanVtcCgpKTsKICAg
ICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9IGVsc2UgewpAQCAtNzQ4LDE1ICs3NTIs
MTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgY2Fz
ZSBHZXRMb2NhbDogewogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIEFic3RyYWN0VmFsdWUm
IHZhbHVlID0gYmxvY2soKS0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKTsKIAog
ICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4g
ZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgotICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVk
aWN0Tm9uZSkgeworICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1
ZS5pc0NsZWFyKCkpIHsKICAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9uKHBy
ZWRpY3Rpb24pKSB7CisgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUp
KSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9k
ZS5sb2NhbCgpKSwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICAgICAgLy8gTGlrZSBpbnRlZ2Vy
UmVzdWx0LCBidXQgZG9uJ3QgdXNlQ2hpbGRyZW4gLSBvdXIgY2hpbGRyZW4gYXJlIHBoaSBub2Rl
cywKQEAgLTc3NSw5ICs3ODAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUm
IG5vZGUpCiAgICAgICAgIG1fZ3Bycy5yZXRhaW4ocmVzdWx0LmdwcigpLCB2aXJ0dWFsUmVnaXN0
ZXIsIFNwaWxsT3JkZXJKUyk7CiAKICAgICAgICAgRGF0YUZvcm1hdCBmb3JtYXQ7Ci0gICAgICAg
IGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2VsbFBy
ZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAgICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRK
U0NlbGw7Ci0gICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikp
CisgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24odmFsdWUubV90eXBlKSkKICAg
ICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKU0Jvb2xlYW47CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGZvcm1hdCA9IERhdGFGb3JtYXRKUzsKQEAgLTgyMCw3ICs4MjUsOCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIH0gZWxzZSBpZiAo
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJS
ZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9k
ZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAt
MTQyMyw3ICsxNDI5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJv
cGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAg
ICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXks
IHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5j
aGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKIApAQCAtMTQ3Myw3ICsxNDc5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwg
YW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rv
ckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJl
IHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAgICAgaWYgKCFpc0tub3du
QXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNl
KCk7CkBAIC0xNTU4LDcgKzE1NjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVH
UFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdl
R1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAotICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2Rl
LmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTYwMSw3ICsxNjA3LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0
b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxl
bmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAgICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hp
bGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgp
KSwgc3RvcmFnZUdQUik7CkBAIC0xNjQ0LDcgKzE2NTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKLSAg
ICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVj
b2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgIGlmICh0YWtlbiAhPSAo
bV9ibG9jayArIDEpKQogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4p
OwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CkBAIC0xNjU1LDggKzE2NjEsOCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChp
c1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkpIHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNw
ZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQg
b3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChu
b2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRh
a2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RU
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5v
ZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
bm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybzsKICAgICAgICAgICAgIApAQCAtMTgyOSw5ICsxODM1LDExIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyB0aGlzVmFs
dWVHUFIgPSB0aGlzVmFsdWUuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1faml0Lm1vdmUodGhp
c1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIGlmICghaXNP
dGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsK
KyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRj
aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAg
ICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5jb2RlQmxv
Y2soKS0+Z2xvYmFsT2JqZWN0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIGNlbGxSZXN1
bHQoc2NyYXRjaEdQUiwgbV9jb21waWxlSW5kZXgpOwpAQCAtMTg0MSw3ICsxODQ5LDggQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBpZiAoaXNPYmpl
Y3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSkpIHsKICAgICAgICAg
ICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWUuZ3By
KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3Ry
aW5nVlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6
OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTE4ODEsOSArMTg5MCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHBy
b3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUKICAgICAg
ICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxhdGUgb24gdGhhdCBk
aXJlY3RseS4gT3RoZXJ3aXNlIHdlCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUt
YmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3QoKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwotICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKKyAgICAgICAg
ICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzbG93UGF0aC5h
cHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CiAgICAgICAgIH0KQEAg
LTIwMTIsNyArMjAyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3du
QXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwpAQCAtMjAzMSw3ICsyMDQxLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQ
UiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisg
ICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1
bHRHUFIpOwpAQCAtMjA0Niw2ICsyMDU2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ2hlY2tTdHJ1
Y3R1cmU6IHsKKyAgICAgICAgaWYgKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3N0
cnVjdHVyZS5pc1N1YnNldE9mKG5vZGUuc3RydWN0dXJlU2V0KCkpKSB7CisgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNp
emUoKSk7CkBAIC0yMTY1LDcgKzIxODAsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKICAgICAg
ICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwg
SklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsK
KyAgICAgICAgaWYgKCFtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUu
ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4obWV0aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpCisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRob2RDaGVja0RhdGEuc3Ry
dWN0dXJlKSkpOwogICAgICAgICBpZiAobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZSAhPSBtX2pp
dC5jb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0KCktPm1ldGhvZENhbGxEdW1teSgpKSB7CiAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNr
RGF0YS5wcm90b3R5cGUtPnN0cnVjdHVyZUFkZHJlc3MoKSksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobWV0aG9kQ2hlY2tEYXRhLnByb3RvdHlwZVN0cnVjdHVyZSkpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZp
c2lvbiA5NzAzMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOCArMTI1LDggQEAgdm9pZCBPU1JFeGl0Ojpk
dW1wKEZJTEUqIG91dCkgY29uc3QKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZURvdWJsZUJyYW5jaChOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBKSVRD
b21waWxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hO
b2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVj
b2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZz
ZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4
KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0lu
ZGV4KCk7CiAgICAgCiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CkBAIC0xMzcsMTEgKzEzNywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
UGVlcEhvbGVEb3ViCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRha2VuKTsK
IH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHko
Tm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0cikKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUs
IE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIsIFByZWRpY3Rpb25DaGVja2Vy
IHByZWRpY3Rpb25DaGVjaykKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9k
ZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4
Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAg
IEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJ
bmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxl
cjo6RXF1YWw7CiAgICAgCkBAIC0xNTgsOCArMTU4LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVQZWVwSG9sZU9iamUKICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAg
IEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCi0gICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwot
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayht
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwor
ICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5t
X3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgYWRkQnJhbmNoKG1f
aml0LmJyYW5jaFB0cihjb25kaXRpb24sIG9wMUdQUiwgb3AyR1BSKSwgdGFrZW4pOwogICAgIGlm
IChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQpAQCAtMTY5LDggKzE3MSw4IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamUKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQZWVwSG9sZUludGVnZXJCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5jaE5v
ZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQogewog
ICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5k
ZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFu
Y2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9
IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90
VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9k
ZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9k
ZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIC8vIFRoZSBicmFuY2ggaW5zdHJ1Y3Rpb24g
d2lsbCBicmFuY2ggdG8gdGhlIHRha2VuIGJsb2NrLgogICAgIC8vIElmIHRha2VuIGlzIG5leHQs
IHN3aXRjaCB0YWtlbiB3aXRoIG5vdFRha2VuICYgaW52ZXJ0IHRoZSBicmFuY2ggY29uZGl0aW9u
IHNvIHdlIGNhbiBmYWxsIHRocm91Z2guCkBAIC0yMTksMTEgKzIyMSwxMSBAQCBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVCcmFuCiAgICAgICAgICAgICB1c2Uobm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkgewotICAgICAgICAgICAg
Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJhbmNoTm9kZUluZGV4LCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgICAgIGNvbXBpbGVQ
ZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5jaE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAg
ICAgICAgICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQy
KCkpOwogICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNo
b3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkp
IHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5j
aE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgICAg
ICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJyYXlQcmVkaWN0aW9uKTsKICAgICAg
ICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMigp
KTsKICAgICAgICAgfSBlbHNlCkBAIC0yNTYsMTggKzI1OCwyMSBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKEJhc2ljQmxvY2smCiAgICAgbV9qaXQuYnJlYWtwb2ludCgpOwogI2VuZGlm
CiAKLSAgICBBU1NFUlQobV9hcmd1bWVudHMuc2l6ZSgpID09IGJsb2NrLm1fYXJndW1lbnRzQXRI
ZWFkLnNpemUoKSk7CisgICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9jay52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2FyZ3VtZW50cy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUlu
ZGV4ID0gYmxvY2subV9hcmd1bWVudHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRl
eCBub2RlSW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoaSk7CiAgICAgICAg
IGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV9hcmd1bWVudHNbaV0gPSBW
YWx1ZVNvdXJjZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgbV9hcmd1bWVudHNbaV0gPSBWYWx1ZVNvdXJjZTo6Zm9yUHJlZGljdGlvbihhdChub2RlSW5k
ZXgpLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwogICAgIH0KICAgICAKLSAg
ICBBU1NFUlQobV92YXJpYWJsZXMuc2l6ZSgpID09IGJsb2NrLm1fbG9jYWxzQXRIZWFkLnNpemUo
KSk7CisgICAgbV9zdGF0ZS5yZXNldCgpOworICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKCZi
bG9jayk7CisgICAgCisgICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay52YXJp
YWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX3ZhcmlhYmxlcy5zaXplKCk7ICsraSkgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4
ID0gYmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBub2Rl
SW5kZXggPSBibG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwoaSk7CiAgICAgICAgIGlmIChub2Rl
SW5kZXggPT0gTm9Ob2RlKQogICAgICAgICAgICAgbV92YXJpYWJsZXNbaV0gPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluUmVnaXN0ZXJGaWxlKTsKICAgICAgICAgZWxzZQpAQCAtMzM3LDYgKzM0Miw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoQmFzaWNCbG9jayYKICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJcbiIpOwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICAvLyBNYWtlIHN1cmUg
dGhhdCB0aGUgYWJzdHJhY3Qgc3RhdGUgaXMgcmVtYXRlcmlhbGl6ZWQgZm9yIHRoZSBuZXh0IG5v
ZGUuCisgICAgICAgIG1fc3RhdGUuZXhlY3V0ZShtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIAog
ICAgICAgICBpZiAobm9kZS5zaG91bGRHZW5lcmF0ZSgpKQogICAgICAgICAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgIH0KQEAgLTUzNyw3ICs1NDUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlR2V0Q2hhckNvZGVBCiAgICAgR1BSUmVnIHN0cmluZ1JlZyA9IHN0cmluZy5ncHIo
KTsKICAgICBHUFJSZWcgaW5kZXhSZWcgPSBpbmRleC5ncHIoKTsKICAgICAKLSAgICBpZiAoIWlz
S25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgCiAgICAgLy8gdW5z
aWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFu
ZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpAQCAtNTY2LDcgKzU3NCw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgYmFzZVJlZyA9IGJh
c2UuZ3ByKCk7CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKLSAg
ICBpZiAoIWlzS25vd25TdHJpbmcobm9kZS5jaGlsZDEoKSkpCisgICAgaWYgKCFpc1N0cmluZ1By
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogCiAgICAgLy8g
dW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2Vz
IGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gOTcwMzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSA8ZGZn
L0RGR0Fic3RyYWN0U3RhdGUuaD4KICNpbmNsdWRlIDxkZmcvREZHSklUQ29kZUdlbmVyYXRvci5o
PgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CkBAIC00MTcsNDMgKzQxOCwxNiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gaW5mby5pc0pTSW50ZWdlcigpOwogICAgIH0KICAg
ICAKLSAgICBib29sIGlzS25vd25BcnJheShOb2RlSW5kZXggb3AxKQotICAgIHsKLSAgICAgICAg
Tm9kZSYgbm9kZSA9IGF0KG9wMSk7Ci0gICAgICAgIHN3aXRjaCAobm9kZS5vcCkgewotICAgICAg
ICBjYXNlIEdldExvY2FsOgotICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXlQcmVkaWN0aW9uKG5v
ZGUudmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgY2FzZSBOZXdBcnJheToKLSAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzS25v
d25TdHJpbmcoTm9kZUluZGV4IG9wMSkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoYXQob3AxKS5v
cCkgewotICAgICAgICBjYXNlIFN0ckNhdDoKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICAgICAgCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCiAgICAgYm9vbCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlv
biwgWl9ERkdPcGVyYXRpb25fRUpKKTsKICAgICBib29sIGNvbXBpbGVQZWVwSG9sZUJyYW5jaChO
b2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVDb25kaXRpb24sIFpfREZHT3BlcmF0aW9uX0VKSik7CiAgICAgdm9pZCBjb21waWxl
UGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBK
SVRDb21waWxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiAgICAgdm9pZCBjb21waWxlUGVlcEhv
bGVEb3VibGVCcmFuY2goTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBp
bGVyOjpEb3VibGVDb25kaXRpb24pOwotICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1
YWxpdHkoTm9kZSYsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZvaWQqIHZwdHIpOwotICAg
IHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lk
IGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4LCB2b2lkKiB2cHRyLCBQcmVkaWN0aW9uQ2hlY2tlcik7CisgICAgdm9pZCBjb21waWxl
T2JqZWN0RXF1YWxpdHkoTm9kZSYsIHZvaWQqIHZwdHIsIFByZWRpY3Rpb25DaGVja2VyKTsKICAg
ICB2b2lkIGNvbXBpbGVWYWx1ZUFkZChOb2RlJik7Ci0gICAgdm9pZCBjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IHZhbHVlLCB2b2lkKiB2cHRyKTsKKyAgICB2b2lkIGNv
bXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChOb2RlSW5kZXggdmFsdWUsIHZvaWQqIHZwdHIs
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3Qo
Tm9kZSYpOwotICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9kZUluZGV4IHZhbHVl
LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRha2VuLCB2b2lkICp2cHRyKTsKKyAg
ICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRl
eCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwgdm9pZCAqdnB0ciwgYm9vbCBuZWVkU3BlY3Vs
YXRpb25DaGVjayk7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUmKTsKICAgICAKICAgICB2b2lk
IGNvbXBpbGVHZXRDaGFyQ29kZUF0KE5vZGUmKTsKQEAgLTU3NSw2ICs1NDksOCBAQCBwcml2YXRl
OgogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwogICAgIHVpbnQzMl90IG1fYnl0ZWNvZGVJbmRl
eEZvck9TUjsKICAgICAKKyAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CisgICAgCiAgICAgVmFs
dWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihjb25zdCBWYWx1ZVNvdXJjZSYpOwog
CiAgICAgVmFsdWVSZWNvdmVyeSBjb21wdXRlVmFsdWVSZWNvdmVyeUZvcihpbnQgb3BlcmFuZCkK
QEAgLTgwNyw2ICs3ODMsNyBAQCBpbmxpbmUgU3BlY3VsYXRpdmVKSVQ6OlNwZWN1bGF0aXZlSklU
KEpJCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQuZ3JhcGgoKS5tX2xvY2FsVmFycykKICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKICAgICAsIG1f
Ynl0ZWNvZGVJbmRleEZvck9TUihzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCkp
CisgICAgLCBtX3N0YXRlKG1faml0LmNvZGVCbG9jaygpLCBtX2ppdC5ncmFwaCgpKQogewogfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cnVjdHVyZVNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RydWN0dXJlU2V0LmgJKHJl
dmlzaW9uIDk3MDMwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsMTIgQEAKICNpZm5kZWYgREZHU3RydWN0
dXJlU2V0X2gKICNkZWZpbmUgREZHU3RydWN0dXJlU2V0X2gKIAorI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJQcmVkaWN0ZWRUeXBl
LmgiCisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMzQsNiArNDAsOCBAQCBjbGFzcyBTdHJ1Y3R1cmU7CiAKIG5hbWVzcGFj
ZSBERkcgewogCitjbGFzcyBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOworCiBjbGFzcyBTdHJ1Y3R1
cmVTZXQgewogcHVibGljOgogICAgIFN0cnVjdHVyZVNldCgpIHsgfQpAQCAtNDMsNiArNTEsMTEg
QEAgcHVibGljOgogICAgICAgICBtX3N0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CiAgICAg
fQogICAgIAorICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmVzLmNs
ZWFyKCk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkKFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCFjb250YWlucyhzdHJ1Y3R1cmUpKTsKQEAgLTEwNCwxMCAr
MTE3LDUwIEBAIHB1YmxpYzoKICAgICAKICAgICBTdHJ1Y3R1cmUqIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBtX3N0cnVjdHVyZXMubGFzdCgpOyB9CiAKKyAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3Rp
b25Gcm9tU3RydWN0dXJlcygpIGNvbnN0CisgICAgeworICAgICAgICBQcmVkaWN0ZWRUeXBlIHJl
c3VsdCA9IFByZWRpY3ROb25lOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtZXJnZVByZWRpY3Rp
b24ocmVzdWx0LCBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZShtX3N0cnVjdHVyZXNbaV0pKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fc3RydWN0dXJlcy5zaXplKCkgIT0gb3RoZXIubV9zdHJ1Y3R1cmVzLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW90
aGVyLmNvbnRhaW5zKG1fc3RydWN0dXJlc1tpXSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgZHVtcChGSUxFKiBvdXQpCisgICAgeworICAg
ICAgICBmcHJpbnRmKG91dCwgIlsiKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3N0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChpKQorICAgICAgICAg
ICAgICAgIGZwcmludGYob3V0LCAiLCAiKTsKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiJXAi
LCBtX3N0cnVjdHVyZXNbaV0pOworICAgICAgICB9CisgICAgICAgIGZwcmludGYob3V0LCAiXSIp
OworICAgIH0KKyNlbmRpZgorICAgIAogcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RydWN0
dXJlQWJzdHJhY3RWYWx1ZTsKKyAgICAKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgMj4gbV9zdHJ1
Y3R1cmVzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCisjZW5kaWYgLy8gRU5B
QkxFKERGR19KSVQpCisKICNlbmRpZiAvLyBERkdTdHJ1Y3R1cmVTZXRfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9o
CisjZGVmaW5lIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSA8d3RmL1VuaW9uRmluZC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFR5cGUgZm9yIGEgdmly
dHVhbCByZWdpc3RlciBudW1iZXIgKHNwaWxsIGxvY2F0aW9uKS4KKy8vIFVzaW5nIGFuIGVudW0g
dG8gbWFrZSB0aGlzIHR5cGUtY2hlY2tlZCBhdCBjb21waWxlIHRpbWUsIHRvIGF2ZXJ0IHByb2dy
YW1tZXIgZXJyb3JzLgorZW51bSBWaXJ0dWFsUmVnaXN0ZXIgeyBJbnZhbGlkVmlydHVhbFJlZ2lz
dGVyID0gLTEgfTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihWaXJ0dWFsUmVnaXN0ZXIpID09IHNp
emVvZihpbnQpLCBWaXJ0dWFsUmVnaXN0ZXJfaXNfMzJiaXQpOworCitjbGFzcyBWYXJpYWJsZUFj
Y2Vzc0RhdGE6IHB1YmxpYyBVbmlvbkZpbmQ8VmFyaWFibGVBY2Nlc3NEYXRhPiB7CitwdWJsaWM6
CisgICAgVmFyaWFibGVBY2Nlc3NEYXRhKCkKKyAgICAgICAgOiBtX2xvY2FsKHN0YXRpY19jYXN0
PFZpcnR1YWxSZWdpc3Rlcj4oc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSkpCisgICAg
ICAgICwgbV9wcmVkaWN0aW9uKFByZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
VmFyaWFibGVBY2Nlc3NEYXRhKFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKKyAgICAgICAgOiBtX2xv
Y2FsKGxvY2FsKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFZpcnR1YWxSZWdpc3RlciBsb2NhbCgpCisgICAgeworICAgICAgICBB
U1NFUlQobV9sb2NhbCA9PSBmaW5kKCktPm1fbG9jYWwpOworICAgICAgICByZXR1cm4gbV9sb2Nh
bDsKKyAgICB9CisgICAgCisgICAgaW50IG9wZXJhbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4obG9jYWwoKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgcHJlZGlj
dChQcmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgeworICAgICAgICByZXR1cm4gbWVyZ2VQ
cmVkaWN0aW9uKGZpbmQoKS0+bV9wcmVkaWN0aW9uLCBwcmVkaWN0aW9uKTsKKyAgICB9CisgICAg
CisgICAgUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKCkKKyAgICB7CisgICAgICAgIHJldHVybiBm
aW5kKCktPm1fcHJlZGljdGlvbjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIFRoaXMg
aXMgc2xpZ2h0bHkgc3BhY2UtaW5lZmZpY2llbnQsIHNpbmNlIGFueXRoaW5nIHdlJ3JlIHVuaWZp
ZWQgd2l0aAorICAgIC8vIHdpbGwgaGF2ZSB0aGUgc2FtZSBvcGVyYW5kIGFuZCBzaG91bGQgaGF2
ZSB0aGUgc2FtZSBwcmVkaWN0aW9uLiBCdXQKKyAgICAvLyBwdXR0aW5nIHRoZW0gaGVyZSBzaW1w
bGlmaWVzIHRoZSBjb2RlLCBhbmQgd2UgZG9uJ3QgZXhwZWN0IERGRyBzcGFjZQorICAgIC8vIHVz
YWdlIGZvciB2YXJpYWJsZSBhY2Nlc3Mgbm9kZXMgZG8gYmUgc2lnbmlmaWNhbnQuCisKKyAgICBW
aXJ0dWFsUmVnaXN0ZXIgbV9sb2NhbDsKKyAgICBQcmVkaWN0ZWRUeXBlIG1fcHJlZGljdGlvbjsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdf
SklUKQorCisjZW5kaWYgLy8gREZHVmFyaWFibGVBY2Nlc3NEYXRhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110430</attachid>
            <date>2011-10-10 16:21:55 -0700</date>
            <delta_ts>2011-10-11 16:45:43 -0700</delta_ts>
            <desc>the patch - merged up to ToT</desc>
            <filename>cfa_patch_13.diff</filename>
            <type>text/plain</type>
            <size>169975</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTcxMDIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTg5IEBA
CisyMDExLTEwLTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIGRvZXMgbm90IGhhdmUgZmxvdy1zZW5zaXRpdmUgaW50cmFwcm9jZWR1cmFsIGNvbnRyb2wg
ZmxvdyBhbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9Njk2OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnRlZCBhIGNvbnRyb2wgZmxvdyBhbmFseXNpcyAoQ0ZBKS4gSXQgY3VycmVu
dGx5IHByb3BhZ2F0ZXMgdHlwZQorICAgICAgICBwcm9vZnMgb25seS4gRm9yIGV4YW1wbGUsIGlm
IGFsbCBwcmVkZWNlc3NvcnMgdG8gYSBiYXNpYyBibG9jayBoYXZlCisgICAgICAgIGNoZWNrcyB0
aGF0IHZhcmlhYmxlIFggaXMgYSBKU0ZpbmFsT2JqZWN0IHdpdGggc3RydWN0dXJlIDB4YWJjZGVm
LCB0aGVuCisgICAgICAgIHRoaXMgYmFzaWMgYmxvY2sgd2lsbCBub3cga25vdyB0aGlzIGZhY3Qg
YW5kIHdpbGwga25vdyB0aGF0IGl0IGRvZXMgbm90CisgICAgICAgIGhhdmUgdG8gZW1pdCBlaXRo
ZXIgSlNGaW5hbE9iamVjdCBjaGVja3Mgb3IgYW55IHN0cnVjdHVyZSBjaGVja3Mgc2luY2UKKyAg
ICAgICAgdGhlIHN0cnVjdHVyZSBpcyBwcmVjaXNlbHkga25vdy4gVGhlIENGQSB0YWtlcyBoZWFw
IHNpZGUtZWZmZWN0cyBpbnRvCisgICAgICAgIGFjY291bnQgKHRob3VnaCBzb21ld2hhdCBjb25z
ZXJ2YXRpdmVseSksIHNvIHRoYXQgaWYgdGhlIG9iamVjdCBwb2ludGVkCisgICAgICAgIHRvIGJ5
IHZhcmlhYmxlIFggY291bGQgaGF2ZSBwb3NzaWJseSB1bmRlcmdvbmUgYSBzdHJ1Y3R1cmUgdHJh
bnNpdGlvbgorICAgICAgICB0aGVuIHRoaXMgaXMgcmVmbGVjdGVkOiB0aGUgYW5hbHlzaXMgbWF5
IHNpbXBseSBzYXkgdGhhdCBYJ3Mgc3RydWN0dXJlCisgICAgICAgIGlzIHVua25vd24uCisgICAg
ICAgIAorICAgICAgICBUaGlzIGFsc28gcHJvcGFnYXRlcyBhIHdlYWx0aCBvZiBvdGhlciB0eXBl
IGluZm9ybWF0aW9uIHdoaWNoIGlzCisgICAgICAgIGN1cnJlbnRseSBub3QgYmVpbmcgdXNlZC4g
Rm9yIGV4YW1wbGUsIHdlIG5vdyBrbm93IHdoZW4gYSB2YXJpYWJsZSBjYW4KKyAgICAgICAgb25s
eSBob2xkIGRvdWJsZXMuIEV2ZW4gaWYgYSB2YXJpYWJsZSBtYXkgaG9sZCBvdGhlciB0eXBlcyBh
dCBkaWZmZXJlbnQKKyAgICAgICAgcG9pbnRzIGluIGl0cyBsaXZlIHJhbmdlLCB3ZSBjYW4gc3Rp
bGwgcHJvdmUgZXhhY3RseSB3aGVuIGl0IHdpbGwgb25seQorICAgICAgICBiZSBkb3VibGUuCisg
ICAgICAgIAorICAgICAgICBUaGVyZSdzIGEgYnVuY2ggb2Ygc3R1ZmYgdGhhdCB0aGUgQ0ZBIGNv
dWxkIGRvIHRoYXQgaXQgc3RpbGwgZG9lcyBub3QKKyAgICAgICAgZG8sIGxpa2UgcHJlY2lzZSBo
YW5kbGluZyBvZiBQdXRTdHJ1Y3R1cmUgKGkuZS4gc3RydWN0dXJlIHRyYW5zaXRpb25zKSwKKyAg
ICAgICAgcHJlY2lzZSBoYW5kbGluZyBvZiBDaGVja0Z1bmN0aW9uIGFuZCBDaGVja01ldGhvZCwg
ZXRjLiBTbyB0aGlzIGlzCisgICAgICAgIHZlcnkgbXVjaCBpbnRlbmRlZCB0byBiZSBhIHN0YXJ0
aW5nIHBvaW50IHJhdGhlciB0aGFuIGFuIGVuZCB1bnRvCisgICAgICAgIGl0c2VsZi4KKyAgICAg
ICAgCisgICAgICAgIFRoaXMgaXMgYSAyJSB3aW4gb24gVjggKG1vc3RseSBkdWUgdG8gYSAxNiUg
d2luIG9uIHJpY2hhcmRzKSBhbmQgYSAxJSB3aW4KKyAgICAgICAgb24gS3Jha2VuIChtb3N0bHkg
ZHVlIHRvIGEgNiUgd2luIG9uIGltYWdpbmctZGVzYXR1cmF0ZSkuIE5ldXRyYWwgb24KKyAgICAg
ICAgU3VuU3BpZGVyLgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6cHJlZGlj
dGlvblRvU3RyaW5nKToKKyAgICAgICAgKiBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmg6CisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZH
OjpBYnN0cmFjdFN0YXRlOjpBYnN0cmFjdFN0YXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0
cmFjdFN0YXRlOjp+QWJzdHJhY3RTdGF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RT
dGF0ZTo6YmVnaW5CYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjplbmRCYXNp
Y0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpyZXNldCk6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RTdGF0ZTo6Y2xvYmJlclN0cnVjdHVyZXMpOgorICAgICAgICAoSlNDOjpERkc6
OkFic3RyYWN0U3RhdGU6Om1lcmdlU3RhdGVBdFRhaWwpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6Om1lcmdlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpt
ZXJnZVRvU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6bWVy
Z2VWYXJpYWJsZUJldHdlZW5CbG9ja3MpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3Rh
dGU6OmR1bXApOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmZvck5vZGUpOgorICAgICAgICAoSlNDOjpE
Rkc6OkFic3RyYWN0U3RhdGU6OmlzVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFZh
bHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OlN0cnVjdHVyZUFic3RyYWN0VmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFi
c3RyYWN0VmFsdWU6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlOjptYWtlVG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZh
bHVlOjp0b3ApOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OmFk
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YWRkQWxsKToK
KyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpjb250YWlucyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6aXNTdWJzZXRPZik6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZG9lc05vdENvbnRhaW5B
bnlPdGhlclRoYW4pOgorICAgICAgICAoSlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6
OmlzU3VwZXJzZXRPZik6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1
ZTo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjpp
c0NsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlOjppc1Rv
cCk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6YXQpOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Om9wZXJhdG9yW10pOgorICAgICAgICAo
SlNDOjpERkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6Omxhc3QpOgorICAgICAgICAoSlNDOjpE
Rkc6OlN0cnVjdHVyZUFic3RyYWN0VmFsdWU6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3RydWN0dXJlQWJzdHJhY3RWYWx1ZTo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6QWJzdHJhY3RWYWx1ZSk6CisgICAgICAgIChKU0M6
OkRGRzo6QWJzdHJhY3RWYWx1ZTo6Y2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0
VmFsdWU6OmlzQ2xlYXIpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1ha2VU
b3ApOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6OmNsb2JiZXJTdHJ1Y3R1cmVz
KToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjppc1RvcCk6CisgICAgICAgIChK
U0M6OkRGRzo6QWJzdHJhY3RWYWx1ZTo6dG9wKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dFZhbHVlOjpzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om9wZXJhdG9y
PT0pOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0VmFsdWU6Om1lcmdlKToKKyAgICAgICAg
KEpTQzo6REZHOjpBYnN0cmFjdFZhbHVlOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0VmFsdWU6OnZhbGlkYXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFZhbHVl
OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6REZHOjpCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpC
YXNpY0Jsb2NrOjpnZXRCeXRlY29kZUJlZ2luKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRMb2NhbCk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnNldExvY2FsKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpzZXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjpwcm9jZXNzUGhpU3RhY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpzZXR1cFByZWRlY2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpHcmFwaDo6ZHVtcCk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6REZHOjpi
bG9jayk6CisgICAgICAgICogZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJy
YW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1
bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0
b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29kZUdlbmVyYXRv
cjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5jaE51bGwpOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OkpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJp
Y3RFcSk6CisgICAgICAgICogZGZnL0RGR0pJVENvbXBpbGVyLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SklUQ29tcGlsZXI6Om5vdGljZU9TUkVudHJ5KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGVJbmRleFRyYWl0czo6ZGVmYXVsdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpOb2RlOjp2YXJpYWJsZUFjY2Vzc0RhdGEpOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OnRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKToKKyAgICAgICAg
KEpTQzo6REZHOjpOb2RlOjpub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6c2V0VGFrZW5CbG9ja0luZGV4KToKKyAgICAgICAgKEpT
Qzo6REZHOjpOb2RlOjpzZXROb3RUYWtlbkJsb2NrSW5kZXgpOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6OnRha2VuQmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6bm90VGFr
ZW5CbG9ja0luZGV4KToKKyAgICAgICAgKiBkZmcvREZHT1NSRW50cnkuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OnByZXBhcmVPU1JFbnRyeSk6CisgICAgICAgICogZGZnL0RGR09TUkVudHJ5Lmg6
CisgICAgICAgICogZGZnL0RGR09wZXJhbmRzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6
Om9wZXJhbmRJc0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kVmFsdWVUcmFp
dHM6OmRlZmF1bHRWYWx1ZSk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6Ok9wZXJhbmRz
KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6bnVtYmVyT2ZBcmd1bWVudHMpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpudW1iZXJPZkxvY2Fscyk6CisgICAgICAgIChKU0M6
OkRGRzo6T3BlcmFuZHM6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6
bG9jYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok9wZXJhbmRzOjpzZXRMb2NhbCk6CisgICAgICAg
IChKU0M6OkRGRzo6T3BlcmFuZHM6OnNldEFyZ3VtZW50Rmlyc3RUaW1lKToKKyAgICAgICAgKEpT
Qzo6REZHOjpPcGVyYW5kczo6c2V0TG9jYWxGaXJzdFRpbWUpOgorICAgICAgICAoSlNDOjpERkc6
Ok9wZXJhbmRzOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6REZHOjpPcGVyYW5kczo6c2V0T3Bl
cmFuZCk6CisgICAgICAgIChKU0M6OkRGRzo6T3BlcmFuZHM6OmNsZWFyKToKKyAgICAgICAgKEpT
Qzo6REZHOjpkdW1wT3BlcmFuZHMpOgorICAgICAgICAqIGRmZy9ERkdQcm9wYWdhdG9yLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpQcm9wYWdhdG9yOjpmaXhwb2ludCk6CisgICAgICAgIChKU0M6
OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlQXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnByb3BhZ2F0ZU5vZGVQcmVkaWN0aW9ucyk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJvcGFnYXRvcjo6cHJvcGFnYXRlUHJlZGljdGlvbnMpOgorICAgICAgICAoSlND
OjpERkc6OlByb3BhZ2F0b3I6OnBlcmZvcm1CbG9ja0NGQSk6CisgICAgICAgIChKU0M6OkRGRzo6
UHJvcGFnYXRvcjo6cGVyZm9ybUZvcndhcmRDRkEpOgorICAgICAgICAoSlNDOjpERkc6OlByb3Bh
Z2F0b3I6Omdsb2JhbENGQSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91Ymxl
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBI
b2xlT2JqZWN0RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpTcGVjdWxhdGl2ZUpJ
VCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21wYXJlKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAo
SlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBhcmUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTdHJ1Y3R1cmVTZXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTdHJ1Y3R1cmVTZXQ6OmNsZWFyKToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVT
ZXQ6OnByZWRpY3Rpb25Gcm9tU3RydWN0dXJlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3RydWN0
dXJlU2V0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpTdHJ1Y3R1cmVTZXQ6OmR1
bXApOgorICAgICAgICAqIGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDogQWRkZWQuCisKIDIw
MTEtMTAtMTAgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAg
ICAgICAgREZHOiBTd2l0Y2ggR2V0QnlJZCAvIFB1dEJ5SWQgdG8gdXNlIGNhbGxPcGVyYXRpb24K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lv
biA5NzEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3
b3JraW5nIGNvcHkpCkBAIC04MSw3ICs4MSw2IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1NINEFzc2VtYmxlci5oIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oIFwKLQlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQWN0aW9uYWJsZVByZWRpY3Rpb24uaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0V2YWxDb2RlQ2FjaGUuaCBcCkBAIC0xMDUsNiArMTA0LDEwIEBAIGphdmFzY3JpcHRjb3JlX3Nv
dXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTGFiZWxTY29w
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvUmVnaXN0ZXJJRC5oIFwK
KwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwIFwKKwlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZhbHVlLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29l
ci9kZmcvREZHQmFzaWNCbG9jay5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5j
cHAgXApAQCAtMTIyLDYgKzEyNSw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRz
LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkVudHJ5LmNwcCBcCkBAIC0xMzUsNiArMTM5LDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1Y3R1cmVTZXQuaCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmNwcCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQWxsb2NhdGlvblNwYWNlLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL0NhcmRTZXQuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9q
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkocmV2aXNpb24gOTcxMDIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMTQzOCwxMCArMTQz
OCw2IEBACiAJCQlOYW1lPSJieXRlY29kZSIKIAkJCT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQ
YXRoPSIuLlwuLlxieXRlY29kZVxBY3Rpb25hYmxlUHJlZGljdGlvbi5oIgotCQkJCT4KLQkJCTwv
RmlsZT4KLQkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxieXRlY29kZVxDb2RlQmxv
Y2suY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTE1ODUsNiArMTU4MSwxMCBAQAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXC4uXGRmZ1xERkdJbnRy
aW5zaWMuaCIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAg
ICAgICAgICAgICAgPC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlwuLlxkZmdcREZHT1NS
RW50cnkuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAg
ICAgICAgICAgICAgPC9GaWxlPgogICAgICAgICAgICAgICAgIDwvRmlsdGVyPgogCQk8RmlsdGVy
CiAJCQlOYW1lPSJ5YXJyIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDEzIEBACiAJ
CTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4
NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYxNkQ3MjYxNDJDMzlDMDAwQ0Y3ODRBIC8q
IEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE2RDcyNDE0MkMzOUEyMDBDRjc4NEEgLyogQml0VmVjdG9yLmNwcCAqLzsgfTsKIAkJ
MEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0Ix
QkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdD
IC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGNjIwMTc1MTQzRkNEMzcwMDY4Qjc3QyAvKiBERkdPcGVyYW5kcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MjAxNzExNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR09wZXJhbmRzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzYxNDNGQ0QzQjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxv
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIw
MTcwMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdD
IC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGNjIwMTZGMTQzRkNEMkYwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2
MjAxNzgxNDNGQ0Q0NDAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjIwMTZFMTQzRkNEMkYwMDY4Qjc3
QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY2MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0
U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2MjAxNkQxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwICovOyB9Owog
CQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjYzNkQ5RjE0MkQyN0QyMDBC
MkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggKi87IH07Ci0JCTBGNjM2REEyMTQyRDI3RjAwMEIy
RTY2QSAvKiBBY3Rpb25hYmxlUHJlZGljdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZBIC8qIEFjdGlvbmFi
bGVQcmVkaWN0aW9uLmggKi87IH07CiAJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1w
bGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi87
IH07CiAJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkw
MDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
Rjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdz
ID0ge0NPTVBJTEVSX0ZMQUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKQEAgLTgw
OSw4ICs4MTQsMTMgQEAKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZENzI0MTQyQzM5QTIwMENGNzg0QSAv
KiBCaXRWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0
VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNDJEQTUxM0YzQjFC
QjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjYyMDE2RDE0M0ZDRDJGMDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdBYnN0cmFjdFN0
YXRlLmNwcDsgcGF0aCA9IGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNkUxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3Rh
dGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RTdGF0ZS5o
OyBwYXRoID0gZGZnL0RGR0Fic3RyYWN0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2MjAxNkYxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQWJzdHJhY3RWYWx1ZS5oOyBwYXRoID0g
ZGZnL0RGR0Fic3RyYWN0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2
MjAxNzAxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQmFzaWNCbG9jay5oOyBwYXRoID0gZGZnL0RGR0Jhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2MjAxNzExNDNGQ0QyRjAwNjhC
NzdDIC8qIERGR09wZXJhbmRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERG
R09wZXJhbmRzLmg7IHBhdGggPSBkZmcvREZHT3BlcmFuZHMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuaDsgcGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY2MzZEOUYxNDJEMjdEMjAwQjJFNjZBIC8qIFBhY2tlZEludFZl
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWNrZWRJbnRWZWN0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEY2MzZEQTExNDJEMjdFRDAwQjJFNjZB
IC8qIEFjdGlvbmFibGVQcmVkaWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEFjdGlvbmFibGVQcmVkaWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3Vu
dGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMjYxM0Y3NTM5OTAw
MDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIyODMsNiAr
MjI5MywxMiBAQAogCQk4NkVDOURCMzEzMjhERjQ0MDAyQjJBRDcgLyogZGZnICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjYyMDE2RDE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgKi8sCisJCQkJMEY2MjAxNkUxNDNGQ0QyRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuaCAqLywKKwkJCQkwRjYyMDE2RjE0M0ZDRDJGMDA2
OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oICovLAorCQkJCTBGNjIwMTcwMTQzRkNEMkYwMDY4
Qjc3QyAvKiBERkdCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEY2MjAxNzExNDNGQ0QyRjAwNjhCNzdD
IC8qIERGR09wZXJhbmRzLmggKi8sCisJCQkJMEY2MjAxNzIxNDNGQ0QyRjAwNjhCNzdDIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5oICovLAogCQkJCTBGRkY0QkIyMTQzOTU1RTYwMDY1NUJDMCAv
KiBERkdTdHJ1Y3R1cmVTZXQuaCAqLywKIAkJCQk4NkVDOURCNDEzMjhERjgyMDAyQjJBRDcgLyog
REZHQnl0ZUNvZGVQYXJzZXIuY3BwICovLAogCQkJCTg2RUM5REI1MTMyOERGODIwMDJCMkFENyAv
KiBERkdCeXRlQ29kZVBhcnNlci5oICovLApAQCAtMjM4NCw3ICsyNDAwLDYgQEAKIAkJOTY5QTA3
OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkwRjYzNkRBMTE0MkQyN0VEMDBCMkU2NkEgLyogQWN0aW9u
YWJsZVByZWRpY3Rpb24uaCAqLywKIAkJCQkwRkQ4MkU4RTE0MjA3QTUxMDAxNzlDOTQgLyogVmFs
dWVQcm9maWxlLmNwcCAqLywKIAkJCQkwRkQ4MkU4NDE0MUYzRkRBMDAxNzlDOTQgLyogUHJlZGlj
dGVkVHlwZS5jcHAgKi8sCiAJCQkJMEZEODJFNEYxNDFEQUVBMTAwMTc5Qzk0IC8qIFByZWRpY3Rl
ZFR5cGUuaCAqLywKQEAgLTI4NzAsMTMgKzI4ODUsMTcgQEAKIAkJCQlBNzA0NTZCMDE0MjdGQjkx
MDAzN0RBNjggLyogQWxsb2NhdGlvblNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5
MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjYzNkRBMDE0MkQyN0Q3MDBCMkU2NkEgLyogUGFja2VkSW50VmVjdG9yLmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRjYzNkRBMjE0MkQyN0YwMDBCMkU2NkEgLyogQWN0aW9uYWJsZVByZWRpY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NTIxRTEzMTQyOTE2OUEwMDNDOEQwQyAvKiBDYXJk
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ1MkFBRTE0MzAzNUEwMDAyNkRDOUYgLyogVW5p
b25GaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg4MEYxRTE0MzI4QkI5MDBCMDhENDIgLyog
REZHSklUQ29tcGlsZXJJbmxpbmVNZXRob2RzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhF
RDE0MzZBQjI3MDAxOTZDNDggLyogSGV1cmlzdGljcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
RjRCQjQxNDM5NTVFOTAwNjU1QkMwIC8qIERGR1N0cnVjdHVyZVNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwNEY1MDUxNDNDRTFDMjAwQjI5NUY1IC8qIEpTR2xvYmFsVGhpcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNz
RGF0YS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzUxNDNGQ0QzNzAwNjhCNzdDIC8qIERG
R09wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjYyMDE3NjE0M0ZDRDNCMDA2OEI3N0Mg
LyogREZHQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2MjAxNzcxNDNGQ0QzRjAw
NjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNjIwMTc4
MTQzRkNENDQwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTM0MDgsNiArMzQyNyw3IEBACiAJCQkJODY4ODBGNDQxNDM1MzFBODAwQjA4RDQyIC8qIERGR0pJ
VENvZGVHZW5lcmF0b3I2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIx
MDBCMDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkUyMjhFRTE0MzZBQjJDMDAxOTZDNDggLyogSGV1cmlzdGljcy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjYyMDE3OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25h
YmxlUHJlZGljdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCShyZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9BY3Rpb25hYmxlUHJlZGljdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDE2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgQWN0aW9uYWJsZVByZWRpY3Rpb25faAotI2RlZmluZSBBY3Rp
b25hYmxlUHJlZGljdGlvbl9oCi0KLSNpbmNsdWRlICJKU0FycmF5LmgiCi0jaW5jbHVkZSAiSlNW
YWx1ZS5oIgotI2luY2x1ZGUgIlByZWRpY3RlZFR5cGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFja2Vk
SW50VmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBKU0MgewotCi0vLyBBbiBhY3Rpb25hYmxlIHByZWRp
Y3Rpb24gaXMgb25lIHRoYXQgaXMgZW5mb3JjZWQgb24gc3RvcmVzIHRvIGxvY2FsIHZhcmlhYmxl
cwotLy8gYW5kIGFyZ3VtZW50cywgYW5kIHdoZW4gcGFzc2luZyBhcmd1bWVudHMgdG8gZnVuY3Rp
b25zLiBUaGVzZSBtdXN0IGJlIHJlY29yZGVkCi0vLyBpbiBDb2RlQmxvY2suCi0KLWVudW0gQWN0
aW9uYWJsZVByZWRpY3Rpb24gewotICAgIE5vQWN0aW9uYWJsZVByZWRpY3Rpb24sCi0gICAgRW5m
b3JjZUludDMyUHJlZGljdGlvbiwKLSAgICBFbmZvcmNlQXJyYXlQcmVkaWN0aW9uLAotICAgIEVu
Zm9yY2VCb29sZWFuUHJlZGljdGlvbgotfTsKLQotaW5saW5lIEFjdGlvbmFibGVQcmVkaWN0aW9u
IGFjdGlvbmFibGVQcmVkaWN0aW9uRnJvbVByZWRpY3RlZFR5cGUoUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uKQotewotICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAgICAg
ICAgcmV0dXJuIEVuZm9yY2VJbnQzMlByZWRpY3Rpb247Ci0gICAgCi0gICAgaWYgKGlzQXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3Rpb24pKQotICAgICAgICByZXR1cm4gRW5mb3JjZUFycmF5UHJlZGlj
dGlvbjsKLSAgICAKLSAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKLSAg
ICAgICAgcmV0dXJuIEVuZm9yY2VCb29sZWFuUHJlZGljdGlvbjsKLSAgICAKLSAgICByZXR1cm4g
Tm9BY3Rpb25hYmxlUHJlZGljdGlvbjsKLX0KLQotaW5saW5lIGJvb2wgdmFsdWVPYmV5c1ByZWRp
Y3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBKU1ZhbHVlIHZhbHVlLCBBY3Rpb25hYmxl
UHJlZGljdGlvbiBwcmVkaWN0aW9uKQotewotICAgIHN3aXRjaCAocHJlZGljdGlvbikgewotICAg
IGNhc2UgRW5mb3JjZUludDMyUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzSW50
MzIoKTsKLQotICAgIGNhc2UgRW5mb3JjZUFycmF5UHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJu
IGlzSlNBcnJheShnbG9iYWxEYXRhLCB2YWx1ZSk7Ci0KLSAgICBjYXNlIEVuZm9yY2VCb29sZWFu
UHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuIHZhbHVlLmlzQm9vbGVhbigpOwotICAgICAgICAK
LSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQ
cmVkaWN0aW9uKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotfQotCi1pbmxpbmUgY29u
c3QgY2hhciogYWN0aW9uYWJsZVByZWRpY3Rpb25Ub1N0cmluZyhBY3Rpb25hYmxlUHJlZGljdGlv
biBwcmVkaWN0aW9uKQotewotICAgIHN3aXRjaCAocHJlZGljdGlvbikgewotICAgIGNhc2UgRW5m
b3JjZUludDMyUHJlZGljdGlvbjoKLSAgICAgICAgcmV0dXJuICJFbmZvcmNlSW50MzIiOwotICAg
ICAgICAKLSAgICBjYXNlIEVuZm9yY2VBcnJheVByZWRpY3Rpb246Ci0gICAgICAgIHJldHVybiAi
RW5mb3JjZUFycmF5IjsKLSAgICAgICAgCi0gICAgY2FzZSBFbmZvcmNlQm9vbGVhblByZWRpY3Rp
b246Ci0gICAgICAgIHJldHVybiAiRW5mb3JjZUJvb2xlYW4iOwotICAgICAgICAKLSAgICBkZWZh
dWx0OgotICAgICAgICBBU1NFUlQocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9u
KTsKLSAgICAgICAgcmV0dXJuICJOb0FjdGlvbmFibGVQcmVkaWN0aW9uIjsKLSAgICB9Ci19Ci0K
LXR5cGVkZWYgUGFja2VkSW50VmVjdG9yPEFjdGlvbmFibGVQcmVkaWN0aW9uLCAyPiBBY3Rpb25h
YmxlUHJlZGljdGlvblZlY3RvcjsKLQotY2xhc3MgQWN0aW9uYWJsZVByZWRpY3Rpb25zIHsKLXB1
YmxpYzoKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbnMoKSB7IH0KLQotICAgIEFjdGlvbmFibGVQ
cmVkaWN0aW9ucyh1bnNpZ25lZCBudW1Bcmd1bWVudHMsIHVuc2lnbmVkIG51bVZhcmlhYmxlcykK
LSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLmVuc3VyZVNpemUobnVtQXJndW1lbnRzKTsKLSAg
ICAgICAgbV92YXJpYWJsZXMuZW5zdXJlU2l6ZShudW1WYXJpYWJsZXMpOwotICAgICAgICBtX2Fy
Z3VtZW50cy5jbGVhckFsbCgpOwotICAgICAgICBtX3ZhcmlhYmxlcy5jbGVhckFsbCgpOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldEFyZ3VtZW50KHVuc2lnbmVkIGFyZ3VtZW50LCBBY3Rpb25h
YmxlUHJlZGljdGlvbiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIG1fYXJndW1lbnRzLnNldChhcmd1
bWVudCwgdmFsdWUpOwotICAgIH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvbiBhcmd1
bWVudCh1bnNpZ25lZCBhcmd1bWVudCkKLSAgICB7Ci0gICAgICAgIGlmIChhcmd1bWVudCA+PSBt
X2FyZ3VtZW50cy5zaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gTm9BY3Rpb25hYmxlUHJlZGlj
dGlvbjsKLSAgICAgICAgcmV0dXJuIG1fYXJndW1lbnRzLmdldChhcmd1bWVudCk7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgc2V0VmFyaWFibGUodW5zaWduZWQgdmFyaWFibGUsIEFjdGlvbmFibGVQ
cmVkaWN0aW9uIHZhbHVlKQotICAgIHsKLSAgICAgICAgbV92YXJpYWJsZXMuc2V0KHZhcmlhYmxl
LCB2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIEFjdGlvbmFibGVQcmVkaWN0aW9uIHZhcmlhYmxl
KHVuc2lnbmVkIHZhcmlhYmxlKQotICAgIHsKLSAgICAgICAgaWYgKHZhcmlhYmxlID49IG1fdmFy
aWFibGVzLnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBOb0FjdGlvbmFibGVQcmVkaWN0aW9u
OwotICAgICAgICByZXR1cm4gbV92YXJpYWJsZXMuZ2V0KHZhcmlhYmxlKTsKLSAgICB9Ci0gICAg
Ci0gICAgdW5zaWduZWQgYXJndW1lbnRVcHBlckJvdW5kKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1
bWVudHMuc2l6ZSgpOyB9Ci0gICAgdW5zaWduZWQgdmFyaWFibGVVcHBlckJvdW5kKCkgY29uc3Qg
eyByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOyB9Ci0gICAgCi0gICAgdm9pZCBwYWNrKCkKLSAg
ICB7Ci0gICAgICAgIHBhY2tWZWN0b3IobV9hcmd1bWVudHMpOwotICAgICAgICBwYWNrVmVjdG9y
KG1fdmFyaWFibGVzKTsKLSAgICB9Ci0gICAgCi1wcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHBh
Y2tWZWN0b3IoQWN0aW9uYWJsZVByZWRpY3Rpb25WZWN0b3ImIHZlY3RvcikKLSAgICB7Ci0gICAg
ICAgIHVuc2lnbmVkIGxhc3RTZXRJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB2ZWN0b3Iuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh2ZWN0b3IuZ2V0
KGkpICE9IE5vQWN0aW9uYWJsZVByZWRpY3Rpb24pCi0gICAgICAgICAgICAgICAgbGFzdFNldElu
ZGV4ID0gaTsKLSAgICAgICAgfQotICAgICAgICB2ZWN0b3IucmVzaXplKGxhc3RTZXRJbmRleCAr
IDEpOwotICAgIH0KLSAgICAKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX2FyZ3Vt
ZW50czsKLSAgICBBY3Rpb25hYmxlUHJlZGljdGlvblZlY3RvciBtX3ZhcmlhYmxlczsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gQWN0aW9uYWJsZVByZWRpY3Rpb25faApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QcmVkaWN0ZWRUeXBl
LmNwcAkocmV2aXNpb24gOTcxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
UHJlZGljdGVkVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDMyICs0NCw1NSBAQCBjb25z
dCBjaGFyKiBwcmVkaWN0aW9uVG9TdHJpbmcoUHJlZGljdGVkCiAgICAgc3RhdGljIGNoYXIgZGVz
Y3JpcHRpb25bc2l6ZV07CiAgICAgQm91bmRzQ2hlY2tlZFBvaW50ZXI8Y2hhcj4gcHRyKGRlc2Ny
aXB0aW9uLCBzaXplKTsKICAgICAKKyAgICBib29sIGlzVG9wID0gdHJ1ZTsKKyAgICAKICAgICBp
ZiAodmFsdWUgJiBQcmVkaWN0Q2VsbE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0KCJPdGhlcmNl
bGwiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYgKHZh
bHVlICYgUHJlZGljdE9iamVjdE90aGVyKQogICAgICAgICBwdHIuc3RyY2F0KCJPdGhlcm9iaiIp
OworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUg
JiBQcmVkaWN0RmluYWxPYmplY3QpCiAgICAgICAgIHB0ci5zdHJjYXQoIkZpbmFsIik7CisgICAg
ZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEFy
cmF5KQogICAgICAgICBwdHIuc3RyY2F0KCJBcnJheSIpOworICAgIGVsc2UKKyAgICAgICAgaXNU
b3AgPSBmYWxzZTsKICAgICAKICAgICBpZiAodmFsdWUgJiBQcmVkaWN0U3RyaW5nKQogICAgICAg
ICBwdHIuc3RyY2F0KCJTdHJpbmciKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7
CiAgICAgCiAgICAgaWYgKHZhbHVlICYgUHJlZGljdEludDMyKQogICAgICAgICBwdHIuc3RyY2F0
KCJJbnQiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0gZmFsc2U7CiAgICAgCiAgICAgaWYg
KHZhbHVlICYgUHJlZGljdERvdWJsZSkKICAgICAgICAgcHRyLnN0cmNhdCgiRG91YmxlIik7Cisg
ICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFBy
ZWRpY3RCb29sZWFuKQogICAgICAgICBwdHIuc3RyY2F0KCJCb29sIik7CisgICAgZWxzZQorICAg
ICAgICBpc1RvcCA9IGZhbHNlOwogICAgIAogICAgIGlmICh2YWx1ZSAmIFByZWRpY3RPdGhlcikK
ICAgICAgICAgcHRyLnN0cmNhdCgiT3RoZXIiKTsKKyAgICBlbHNlCisgICAgICAgIGlzVG9wID0g
ZmFsc2U7CisgICAgCisgICAgaWYgKGlzVG9wKQorICAgICAgICByZXR1cm4gIlRvcCI7CiAgICAg
CiAgICAgKnB0cisrID0gMDsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9QcmVkaWN0ZWRUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ByZWRpY3RlZFR5cGUuaAkocmV2aXNpb24gOTcxMDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHJlZGljdGVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSw2ICs1MSw4IEBAIHN0YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RCb29sZWEKIHN0
YXRpYyBjb25zdCBQcmVkaWN0ZWRUeXBlIFByZWRpY3RPdGhlciAgICAgICAgID0gMHg0MDAwOyAv
LyBJdCdzIGRlZmluaXRlbHkgbm9uZSBvZiB0aGUgYWJvdmUuCiBzdGF0aWMgY29uc3QgUHJlZGlj
dGVkVHlwZSBQcmVkaWN0VG9wICAgICAgICAgICA9IDB4N2ZmZjsgLy8gSXQgY2FuIGJlIGFueSBv
ZiB0aGUgYWJvdmUuCiAKK3R5cGVkZWYgYm9vbCAoKlByZWRpY3Rpb25DaGVja2VyKShQcmVkaWN0
ZWRUeXBlKTsKKwogaW5saW5lIGJvb2wgaXNDZWxsUHJlZGljdGlvbihQcmVkaWN0ZWRUeXBlIHZh
bHVlKQogewogICAgIHJldHVybiAhISh2YWx1ZSAmIFByZWRpY3RDZWxsKSAmJiAhKHZhbHVlICYg
flByZWRpY3RDZWxsKTsKQEAgLTExNSw2ICsxMTcsMTAgQEAgaW5saW5lIGJvb2wgaXNPdGhlclBy
ZWRpY3Rpb24oUHJlZGljdGVkVAogY29uc3QgY2hhciogcHJlZGljdGlvblRvU3RyaW5nKFByZWRp
Y3RlZFR5cGUgdmFsdWUpOwogI2VuZGlmCiAKKy8vIE1lcmdlIHR3byBwcmVkaWN0aW9ucy4gTm90
ZSB0aGF0IGN1cnJlbnRseSB0aGlzIGp1c3QgZG9lcyBsZWZ0IHwgcmlnaHQuIEl0IG1heQorLy8g
c2VlbSB0ZW1wdGluZyB0byBkbyBzbyBkaXJlY3RseSwgYnV0IHlvdSB3b3VsZCBiZSBkb2luZyBz
byBhdCB5b3VyIG93biBwZXJpbCwKKy8vIHNpbmNlIHRoZSBtZXJnaW5nIHByb3RvY29sIFByZWRp
Y3RlZFR5cGUgbWF5IGNoYW5nZSBhdCBhbnkgdGltZSAoYW5kIGhhcyBhbHJlYWR5CisvLyBjaGFu
Z2VkIHNldmVyYWwgdGltZXMgaW4gaXRzIGhpc3RvcnkpLgogaW5saW5lIFByZWRpY3RlZFR5cGUg
bWVyZ2VQcmVkaWN0aW9ucyhQcmVkaWN0ZWRUeXBlIGxlZnQsIFByZWRpY3RlZFR5cGUgcmlnaHQp
CiB7CiAgICAgcmV0dXJuIGxlZnQgfCByaWdodDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNzc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkRGR0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisj
ZGVmaW5lIENGQV9QUk9GSUxJTkcgMAorCisjaWYgQ0ZBX1BST0ZJTElORworI2RlZmluZSBQUk9G
SUxFKGZsYWcpIFNhbXBsaW5nRmxhZ3M6OlNjb3BlZEZsYWcgc2NvcGVkRmxhZyhmbGFnKQorI2Vs
c2UKKyNkZWZpbmUgUFJPRklMRShmbGFnKSBkbyB7IH0gd2hpbGUgKGZhbHNlKQorI2VuZGlmCisK
Ky8vIFByb2ZpbGluZyBmbGFncworI2RlZmluZSBGTEFHX0ZPUl9CTE9DS19JTklUSUFMSVpBVElP
TiAgMTcKKyNkZWZpbmUgRkxBR19GT1JfQkxPQ0tfRU5EICAgICAgICAgICAgIDE4CisjZGVmaW5l
IEZMQUdfRk9SX0VYRUNVVElPTiAgICAgICAgICAgICAxOQorI2RlZmluZSBGTEFHX0ZPUl9NRVJH
RV9UT19TVUNDRVNTT1JTICAgMjAKKyNkZWZpbmUgRkxBR19GT1JfU1RSVUNUVVJFX0NMT0JCRVJJ
TkcgIDIxCisKK0Fic3RyYWN0U3RhdGU6OkFic3RyYWN0U3RhdGUoQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIEdyYXBoJiBncmFwaCkKKyAgICA6IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAsIG1f
Z3JhcGgoZ3JhcGgpCisgICAgLCBtX3ZhcmlhYmxlcyhjb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVy
cywgZ3JhcGgubV9sb2NhbFZhcnMpCisgICAgLCBtX2Jsb2NrKDApCit7CisgICAgc2l6ZV90IG1h
eEJsb2NrU2l6ZSA9IDA7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsraSkgeworICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLm1fYmxv
Y2tzW2ldLmdldCgpOworICAgICAgICBpZiAoYmxvY2stPmVuZCAtIGJsb2NrLT5iZWdpbiA+IG1h
eEJsb2NrU2l6ZSkKKyAgICAgICAgICAgIG1heEJsb2NrU2l6ZSA9IGJsb2NrLT5lbmQgLSBibG9j
ay0+YmVnaW47CisgICAgfQorICAgIG1fbm9kZXMucmVzaXplKG1heEJsb2NrU2l6ZSk7Cit9CisK
K0Fic3RyYWN0U3RhdGU6On5BYnN0cmFjdFN0YXRlKCkgeyB9CisKK3ZvaWQgQWJzdHJhY3RTdGF0
ZTo6YmVnaW5CYXNpY0Jsb2NrKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCit7CisgICAgUFJPRklM
RShGTEFHX0ZPUl9CTE9DS19JTklUSUFMSVpBVElPTik7CisgICAgCisgICAgQVNTRVJUKCFtX2Js
b2NrKTsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJhc2ljQmxvY2stPmVuZCAt
IGJhc2ljQmxvY2stPmJlZ2luOyArK2kpCisgICAgICAgIG1fbm9kZXNbaV0uY2xlYXIoKTsKKyAg
ICBtX3ZhcmlhYmxlcyA9IGJhc2ljQmxvY2stPnZhbHVlc0F0SGVhZDsKKyAgICBtX2hhdmVTdHJ1
Y3R1cmVzID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLmFyZ3Vt
ZW50KGkpLm1fc3RydWN0dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkpIHsKKyAgICAgICAgICAg
IG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5udW1iZXJPZkxv
Y2FscygpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGVzLmxvY2FsKGkpLm1fc3RydWN0
dXJlLmlzTmVpdGhlckNsZWFyTm9yVG9wKCkpIHsKKyAgICAgICAgICAgIG1faGF2ZVN0cnVjdHVy
ZXMgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgYmFzaWNCbG9jay0+Y2ZhU2hvdWxkUmV2aXNpdCA9IGZhbHNlOworICAgIGJhc2ljQmxvY2st
PmNmYUhhc1Zpc2l0ZWQgPSB0cnVlOworICAgIG1fYmxvY2sgPSBiYXNpY0Jsb2NrOworICAgIG1f
aXNWYWxpZCA9IHRydWU7Cit9CisKK3ZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFw
aCYgZ3JhcGgpCit7CisgICAgUFJPRklMRShGTEFHX0ZPUl9CTE9DS19JTklUSUFMSVpBVElPTik7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IGdyYXBoLm1fYmxvY2tzWzBdLmdldCgpOworICAgIHJv
b3QtPmNmYVNob3VsZFJldmlzaXQgPSB0cnVlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cm9vdC0+dmFsdWVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBQ
cmVkaWN0ZWRUeXBlIHByZWRpY3Rpb24gPSBncmFwaFtyb290LT52YXJpYWJsZXNBdEhlYWQuYXJn
dW1lbnQoaSldLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIGlm
IChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgICAgIHJvb3QtPnZhbHVl
c0F0SGVhZC5hcmd1bWVudChpKS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAo
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RBcnJheSk7CisgICAgICAgIGVsc2UgaWYgKGlz
Qm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuc2V0KFByZWRpY3RCb29sZWFuKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLm1ha2VUb3AoKTsKKyAgICB9
Cit9CisKK2Jvb2wgQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUgbWVyZ2VN
b2RlKQoreworICAgIFBST0ZJTEUoRkxBR19GT1JfQkxPQ0tfRU5EKTsKKyAgICBBU1NFUlQobV9i
bG9jayk7CisgICAgCisgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2NrOyAvLyBTYXZlIHRo
ZSBibG9jayBmb3Igc3VjY2Vzc29yIG1lcmdpbmcuCisgICAgCisgICAgaWYgKCFtX2lzVmFsaWQp
IHsKKyAgICAgICAgcmVzZXQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobWVyZ2VNb2RlICE9IERv
bnRNZXJnZSB8fCAhQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGFyZ3Vt
ZW50ID0gMDsgYXJndW1lbnQgPCBibG9jay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mQXJndW1l
bnRzKCk7ICsrYXJndW1lbnQpCisgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlU3RhdGVBdFRh
aWwoYmxvY2stPnZhbHVlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCksIG1fdmFyaWFibGVzLmFy
Z3VtZW50KGFyZ3VtZW50KSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVu
dCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgbG9jYWwgPSAwOyBsb2NhbCA8IGJs
b2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VTdGF0ZUF0VGFpbChibG9jay0+dmFsdWVzQXRUYWlsLmxvY2Fs
KGxvY2FsKSwgbV92YXJpYWJsZXMubG9jYWwobG9jYWwpLCBibG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKGxvY2FsKSk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChtZXJnZU1vZGUgIT0gRG9u
dE1lcmdlIHx8ICFjaGFuZ2VkKTsKKyAgICAKKyAgICByZXNldCgpOworICAgIAorICAgIGlmICht
ZXJnZU1vZGUgIT0gTWVyZ2VUb1N1Y2Nlc3NvcnMpCisgICAgICAgIHJldHVybiBjaGFuZ2VkOwor
ICAgIAorICAgIHJldHVybiBtZXJnZVRvU3VjY2Vzc29ycyhtX2dyYXBoLCBibG9jayk7Cit9CisK
K3ZvaWQgQWJzdHJhY3RTdGF0ZTo6cmVzZXQoKQoreworICAgIG1fYmxvY2sgPSAwOworICAgIG1f
aXNWYWxpZCA9IGZhbHNlOworfQorCitib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUoTm9kZUlu
ZGV4IG5vZGVJbmRleCkKK3sKKyAgICBQUk9GSUxFKEZMQUdfRk9SX0VYRUNVVElPTik7CisgICAg
QVNTRVJUKG1fYmxvY2spOworICAgIEFTU0VSVChtX2lzVmFsaWQpOworICAgICAgICAKKyAgICBO
b2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICAKKyAgICBpZiAoIW5vZGUu
c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIHN3
aXRjaCAobm9kZS5vcCkgeworICAgIGNhc2UgSlNDb25zdGFudDogeworICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gbV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChtX2NvZGVCbG9jaywgbm9kZUluZGV4
KTsKKyAgICAgICAgaWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9oYXZlU3RydWN0
dXJlcyA9IHRydWU7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQodmFsdWUpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldExvY2FsOiB7Cisg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KSA9IG1fdmFyaWFibGVzLm9wZXJhbmQobm9kZS5sb2Nh
bCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFNldExvY2Fs
OiB7CisgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IG5vZGUudmFyaWFibGVB
Y2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQ
cmVkaWN0QXJyYXkpOworICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRp
Y3RlZFR5cGUpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJl
ZGljdEJvb2xlYW4pOworICAgICAgICAKKyAgICAgICAgbV92YXJpYWJsZXMub3BlcmFuZChub2Rl
LmxvY2FsKCkpID0gZm9yTm9kZShub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAgICAgCisgICAgY2FzZSBTZXRBcmd1bWVudDoKKyAgICAgICAgLy8gQXNzZXJ0
IHRoYXQgdGhlIHN0YXRlIG9mIGFyZ3VtZW50cyBoYXMgYmVlbiBzZXQuCisgICAgICAgIEFTU0VS
VCghbV9ibG9jay0+dmFsdWVzQXRIZWFkLm9wZXJhbmQobm9kZS5sb2NhbCgpKS5pc0NsZWFyKCkp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQml0QW5kOgorICAgIGNh
c2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgY2Fz
ZSBCaXRMU2hpZnQ6CisgICAgY2FzZSBCaXRVUlNoaWZ0OgorICAgICAgICBmb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgorICAgICAgICBpZiAoIW5vZGUuY2FuU3BlY3VsYXRlSW50ZWdlcigpKQor
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIp
OworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb0ludDMyOgor
ICAgICAgICBpZiAoIW1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50
ZWdlcigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGlj
dEludDMyKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOwor
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVUb051bWJlcjoKKyAg
ICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50ZWdl
cigpKSB7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0
TnVtYmVyKTsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJs
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFZhbHVlVG9Eb3VibGU6CisgICAgICAgIGZvck5vZGUobm9kZS5j
aGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRl
eCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
IGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25v
ZGUuY2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAg
ICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVy
KG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0sIG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0pKSB7CisgICAg
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAg
ICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOwor
ICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChub2RlLm9wID09IFZhbHVl
QWRkKTsKKyAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgZm9y
Tm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nIHwgUHJlZGljdEludDMyIHwgUHJlZGlj
dE51bWJlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2Ug
QXJpdGhTdWI6CisgICAgY2FzZSBBcml0aE11bDoKKyAgICBjYXNlIEFyaXRoRGl2OgorICAgIGNh
c2UgQXJpdGhNaW46CisgICAgY2FzZSBBcml0aE1heDogeworICAgICAgICBpZiAoTm9kZTo6c2hv
dWxkU3BlY3VsYXRlSW50ZWdlcihtX2dyYXBoW25vZGUuY2hpbGQxKCldLCBtX2dyYXBoW25vZGUu
Y2hpbGQyKCldKSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAg
ICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMigpKS5maWx0ZXIoUHJlZGlj
dE51bWJlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhNb2Q6
IHsKKyAgICAgICAgaWYgKG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV0uc2hvdWxkTm90U3BlY3VsYXRl
SW50ZWdlcigpIHx8IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0uc2hvdWxkTm90U3BlY3VsYXRlSW50
ZWdlcigpIHx8ICFub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE51bWJlcik7CisgICAgICAgICAgICBm
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgICAg
IGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdERvdWJsZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0
SW50MzIpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhBYnM6Cisg
ICAgICAgIGlmIChtX2dyYXBoW25vZGUuY2hpbGQxKCldLnNob3VsZFNwZWN1bGF0ZUludGVnZXIo
KSAmJiBub2RlLmNhblNwZWN1bGF0ZUludGVnZXIoKSkgeworICAgICAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdEludDMyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIp
OworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3REb3VibGUpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJpdGhTcXJ0OgorICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0TnVtYmVyKTsKKyAgICAgICAgZm9yTm9k
ZShub2RlSW5kZXgpLnNldChQcmVkaWN0RG91YmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKKyAgICAgICAgTm9kZSYgY2hpbGQgPSBtX2dy
YXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihjaGls
ZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisgICAgICAgICAgICBmb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhlcigpKQorICAgICAgICAg
ICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0IHwgUHJl
ZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlQXJyYXlP
ck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVk
aWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRT
cGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZp
bHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGlsZC5zaG91bGRTcGVjdWxh
dGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFBy
ZWRpY3ROdW1iZXIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RCb29s
ZWFuKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBDb21w
YXJlTGVzczoKKyAgICBjYXNlIENvbXBhcmVMZXNzRXE6CisgICAgY2FzZSBDb21wYXJlR3JlYXRl
cjoKKyAgICBjYXNlIENvbXBhcmVHcmVhdGVyRXE6CisgICAgY2FzZSBDb21wYXJlRXE6IHsKKyAg
ICAgICAgTm9kZSYgbGVmdCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIE5vZGUm
IHJpZ2h0ID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXTsKKyAgICAgICAgUHJlZGljdGVkVHlwZSBm
aWx0ZXI7CisgICAgICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVJbnRlZ2VyKGxlZnQsIHJp
Z2h0KSkKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RJbnQzMjsKKyAgICAgICAgZWxzZSBp
ZiAoTm9kZTo6c2hvdWxkU3BlY3VsYXRlTnVtYmVyKGxlZnQsIHJpZ2h0KSkKKyAgICAgICAgICAg
IGZpbHRlciA9IFByZWRpY3ROdW1iZXI7CisgICAgICAgIGVsc2UgaWYgKG5vZGUub3AgPT0gQ29t
cGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KGxlZnQsIHJpZ2h0KSkK
KyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RGaW5hbE9iamVjdDsKKyAgICAgICAgZWxzZSBp
ZiAobm9kZS5vcCA9PSBDb21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlQXJyYXkobGVm
dCwgcmlnaHQpKQorICAgICAgICAgICAgZmlsdGVyID0gUHJlZGljdEFycmF5OworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIGZpbHRlciA9IFByZWRpY3RUb3A7CisgICAgICAgICAgICBjbG9i
YmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9k
ZS5jaGlsZDEoKSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIo
KSkuZmlsdGVyKGZpbHRlcik7CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGlj
dEJvb2xlYW4pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNl
IENvbXBhcmVTdHJpY3RFcToKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
Qm9vbGVhbik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFN0cmluZ0NoYXJD
b2RlQXQ6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RTdHJp
bmcpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0SW50MzIp
OworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RJbnQzMik7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIFN0cmluZ0NoYXJBdDoKKyAgICAgICAgZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5zZXQoUHJlZGljdFN0cmluZyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgY2FzZSBHZXRCeVZhbDogeworICAgICAgICBQcmVkaWN0ZWRUeXBlIGluZGV4UHJlZGlj
dGlvbiA9IG1fZ3JhcGhbbm9kZS5jaGlsZDIoKV0ucHJlZGljdGlvbigpOworICAgICAgICBpZiAo
IShpbmRleFByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYmIGluZGV4UHJlZGljdGlvbikgewor
ICAgICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMobm9kZUluZGV4KTsKKyAgICAgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBpZiAobV9ncmFwaFtub2RlLmNoaWxkMSgpXS5wcmVkaWN0aW9uKCkgPT0gUHJl
ZGljdFN0cmluZykgeworICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIo
UHJlZGljdFN0cmluZyk7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRl
cihQcmVkaWN0SW50MzIpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVk
aWN0U3RyaW5nKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5v
ZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDIoKSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGZvck5vZGUobm9k
ZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAor
ICAgIGNhc2UgUHV0QnlWYWw6CisgICAgY2FzZSBQdXRCeVZhbEFsaWFzOiB7CisgICAgICAgIFBy
ZWRpY3RlZFR5cGUgaW5kZXhQcmVkaWN0aW9uID0gbV9ncmFwaFtub2RlLmNoaWxkMigpXS5wcmVk
aWN0aW9uKCk7CisgICAgICAgIGlmICghKGluZGV4UHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikg
JiYgaW5kZXhQcmVkaWN0aW9uKSB7CisgICAgICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2Rl
SW5kZXgpOworICAgICAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLm1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSku
ZmlsdGVyKFByZWRpY3RBcnJheSk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSkuZmls
dGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQXJyYXlQdXNoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRl
cihQcmVkaWN0QXJyYXkpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RO
dW1iZXIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQXJyYXlQb3A6
CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RBcnJheSk7Cisg
ICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgCisgICAgY2FzZSBKdW1wOgorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgIGNhc2UgQnJhbmNoOiB7CisgICAgICAgIC8vIFRoZXJlIGlzIHByb2JhYmx5IHByb2ZpdCB0
byBiZSBmb3VuZCBpbiBkb2luZyBzcGFyc2UgY29uZGl0aW9uYWwgY29uc3RhbnQKKyAgICAgICAg
Ly8gcHJvcGFnYXRpb24sIGFuZCB0byB0YWtlIGl0IG9uZSBzdGVwIGZ1cnRoZXIsIHdoZXJlIGEg
dmFyaWFibGUncyB2YWx1ZQorICAgICAgICAvLyBpcyBzcGVjaWFsaXplZCBvbiBlYWNoIGRpcmVj
dGlvbiBvZiBhIGJyYW5jaC4gRm9yIG5vdywgd2UgZG9uJ3QgZG8gdGhpcy4KKyAgICAgICAgTm9k
ZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBpZiAoaXNCb29sZWFu
UHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpIHx8ICFjaGlsZC5wcmVkaWN0aW9uKCkpCisg
ICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Qm9vbGVhbik7
CisgICAgICAgIGVsc2UgaWYgKGNoaWxkLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhl
cigpKQorICAgICAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdEZp
bmFsT2JqZWN0IHwgUHJlZGljdE90aGVyKTsKKyAgICAgICAgZWxzZSBpZiAoY2hpbGQuc2hvdWxk
U3BlY3VsYXRlQXJyYXlPck90aGVyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0QXJyYXkgfCBQcmVkaWN0T3RoZXIpOworICAgICAgICBlbHNlIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCisgICAgICAgICAgICBmb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0SW50MzIpOworICAgICAgICBlbHNlIGlmIChjaGls
ZC5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGls
ZDEoKSkuZmlsdGVyKFByZWRpY3ROdW1iZXIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgICAgICAKKyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRocm93OgorICAgIGNhc2UgVGhy
b3dSZWZlcmVuY2VFcnJvcjoKKyAgICAgICAgbV9pc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBUb1ByaW1pdGl2ZTogeworICAgICAgICBOb2Rl
JiBjaGlsZCA9IG1fZ3JhcGhbbm9kZS5jaGlsZDEoKV07CisgICAgICAgIGlmIChjaGlsZC5zaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKKyAgICAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEo
KSkuZmlsdGVyKFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCku
c2V0KFByZWRpY3RJbnQzMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIHNvdXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOworICAg
ICAgICAgICAgCisgICAgICAgIFByZWRpY3RlZFR5cGUgdHlwZSA9IHNvdXJjZS5tX3R5cGU7Cisg
ICAgICAgIGlmICh0eXBlICYgfihQcmVkaWN0TnVtYmVyIHwgUHJlZGljdFN0cmluZyB8IFByZWRp
Y3RCb29sZWFuKSkgeworICAgICAgICAgICAgdHlwZSAmPSAoUHJlZGljdE51bWJlciB8IFByZWRp
Y3RTdHJpbmcgfCBQcmVkaWN0Qm9vbGVhbik7CisgICAgICAgICAgICB0eXBlIHw9IFByZWRpY3RT
dHJpbmc7CisgICAgICAgIH0KKyAgICAgICAgZGVzdGluYXRpb24uc2V0KHR5cGUpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFN0ckNhdDoKKyAgICAgICAg
Zm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0U3RyaW5nKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKKyAgICBjYXNlIE5ld0FycmF5OgorICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpLT5hcnJheVN0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBOZXdSZWdleHA6CisgICAg
ICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5y
ZWdFeHBTdHJ1Y3R1cmUoKSk7CisgICAgICAgIG1faGF2ZVN0cnVjdHVyZXMgPSB0cnVlOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ29udmVydFRoaXM6IHsKKyAgICAg
ICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0cmFj
dFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAgIAor
ICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKHNvdXJjZS5tX3R5cGUpKSB7CisgICAgICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBzaW1wbGUgY2FzZS4gV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhl
IHNvdXJjZSBpcyBhbgorICAgICAgICAgICAgLy8gb2JqZWN0LCBzbyB0aGVyZSdzIG5vdGhpbmcg
dG8gZG8uIEkgZG9uJ3QgdGhpbmsgdGhpcyBjYXNlIHdpbGwKKyAgICAgICAgICAgIC8vIGJlIGhp
dCwgYnV0IHRoZW4gYWdhaW4sIHlvdSBuZXZlciBrbm93LgorICAgICAgICAgICAgZGVzdGluYXRp
b24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGlmIChpc090aGVyUHJlZGljdGlvbihjaGlsZC5wcmVkaWN0aW9uKCkpKSB7Cisg
ICAgICAgICAgICBzb3VyY2UuZmlsdGVyKFByZWRpY3RPdGhlcik7CisgICAgICAgICAgICBkZXN0
aW5hdGlvbi5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGNoaWxkLnBy
ZWRpY3Rpb24oKSkpIHsKKyAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdE9iamVjdE1h
c2spOworICAgICAgICAgICAgZGVzdGluYXRpb24gPSBzb3VyY2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlc3RpbmF0aW9uID0gc291cmNl
OworICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShQcmVkaWN0T2JqZWN0T3RoZXIpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAg
ICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOworICAgICAgICBBYnN0
cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsKKyAgICAgICAgICAg
IAorICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKKyAgICAg
ICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZXN0aW5hdGlvbi5zZXQoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5lbXB0eU9i
amVjdFN0cnVjdHVyZSgpKTsKKyAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGZv
ck5vZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAKKyAgICBjYXNlIEdldFNjb3BlQ2hhaW46CisgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5zZXQoUHJlZGljdENlbGxPdGhlcik7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCisgICAgY2FzZSBHZXRTY29wZWRWYXI6CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4
KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBQdXRT
Y29wZWRWYXI6CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRCeUlkOgorICAgIGNhc2UgR2V0TWV0
aG9kOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7
CisgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKG5vZGVJbmRleCk7CisgICAgICAgIGZvck5vZGUo
bm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
Y2FzZSBHZXRBcnJheUxlbmd0aDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0
ZXIoUHJlZGljdEFycmF5KTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0
SW50MzIpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0U3RyaW5n
TGVuZ3RoOgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLmZpbHRlcihQcmVkaWN0U3Ry
aW5nKTsKKyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLnNldChQcmVkaWN0SW50MzIpOworICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYmUgYWJsZSB0byBwcm9wYWdhdGUgdGhlIHN0cnVjdHVy
ZSBzZXRzIG9mIGNvbnN0YW50cyAoaS5lLiBwcm90b3R5cGVzKS4KKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIobm9kZS5zdHJ1Y3R1cmVTZXQoKSk7CisgICAgICAgIG1faGF2
ZVN0cnVjdHVyZXMgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgUHV0U3RydWN0dXJlOgorICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOwor
ICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpLnNldChub2RlLnN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7
CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRQcm9wZXJ0eVN0b3Jh
Z2U6CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsK
KyAgICAgICAgZm9yTm9kZShub2RlSW5kZXgpLmNsZWFyKCk7IC8vIFRoZSByZXN1bHQgaXMgbm90
IGEgSlMgdmFsdWUuCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBHZXRC
eU9mZnNldDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENl
bGwpOworICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgIGZvck5vZGUo
bm9kZS5jaGlsZDEoKSkuZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAKKyAgICBjYXNlIENoZWNrTWV0aG9kOgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hv
dWxkIGJlIGFibGUgdG8gcHJvcGFnYXRlIHRoZSBzdHJ1Y3R1cmUgc2V0cyBvZiBjb25zdGFudHMg
KGkuZS4gcHJvdG90eXBlcykuCisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuZmlsdGVy
KG1fZ3JhcGgubV9tZXRob2RDaGVja0RhdGFbbm9kZS5tZXRob2RDaGVja0RhdGFJbmRleCgpXS5z
dHJ1Y3R1cmUpOworICAgICAgICBtX2hhdmVTdHJ1Y3R1cmVzID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgIAorICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKKyAgICAgICAgZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdE9iamVjdE90aGVyKTsKKyAgICAgICAgLy8gRklY
TUU6IFNob3VsZCBiZSBhYmxlIHRvIHByb3BhZ2F0ZSB0aGUgZmFjdCB0aGF0IHdlIGtub3cgd2hh
dCB0aGUgZnVuY3Rpb24gaXMuCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2Fz
ZSBQdXRCeUlkOgorICAgIGNhc2UgUHV0QnlJZERpcmVjdDoKKyAgICAgICAgZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICBjbG9iYmVyU3RydWN0dXJl
cyhub2RlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgR2V0
R2xvYmFsVmFyOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkubWFrZVRvcCgpOworICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgIGNhc2UgQ2hlY2tIYXNJbnN0YW5jZToKKyAgICAgICAg
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENlbGwpOworICAgICAgICAvLyBT
YWRseSwgd2UgZG9uJ3QgcHJvcGFnYXRlIHRoZSBmYWN0IHRoYXQgd2UndmUgZG9uZSBDaGVja0hh
c0luc3RhbmNlCisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBJbnN0YW5j
ZU9mOgorICAgICAgICAvLyBBZ2Fpbiwgc2FkbHksIHdlIGRvbid0IHByb3BhZ2F0ZSB0aGUgZmFj
dCB0aGF0IHdlJ3ZlIGRvbmUgSW5zdGFuY2VPZgorICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7CisgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDIoKSku
ZmlsdGVyKFByZWRpY3RDZWxsKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBj
YXNlIFBoaToKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIEJyZWFrcG9p
bnQ6CisgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgY2FzZSBDYWxsOgorICAgIGNh
c2UgQ29uc3RydWN0OgorICAgIGNhc2UgUmVzb2x2ZToKKyAgICBjYXNlIFJlc29sdmVCYXNlOgor
ICAgIGNhc2UgUmVzb2x2ZUJhc2VTdHJpY3RQdXQ6CisgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgor
ICAgICAgICBjbG9iYmVyU3RydWN0dXJlcyhub2RlSW5kZXgpOworICAgICAgICBmb3JOb2RlKG5v
ZGVJbmRleCkubWFrZVRvcCgpOworICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgIGNh
c2UgRm9yY2VPU1JFeGl0OgorICAgICAgICBtX2lzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFBoYW50b206CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICAKKyAgICByZXR1cm4gbV9pc1ZhbGlkOworfQorCitpbmxpbmUgdm9pZCBBYnN0cmFj
dFN0YXRlOjpjbG9iYmVyU3RydWN0dXJlcyhOb2RlSW5kZXggbm9kZUluZGV4KQoreworICAgIFBS
T0ZJTEUoRkxBR19GT1JfU1RSVUNUVVJFX0NMT0JCRVJJTkcpOworICAgIGlmICghbV9oYXZlU3Ry
dWN0dXJlcykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSBub2RlSW5kZXgg
LSBtX2Jsb2NrLT5iZWdpbiArIDE7IGktLSA+IDA7KQorICAgICAgICBtX25vZGVzW2ldLmNsb2Ji
ZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3ZhcmlhYmxlcy5u
dW1iZXJPZkFyZ3VtZW50cygpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVzLmFyZ3VtZW50KGkp
LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Zhcmlh
Ymxlcy5udW1iZXJPZkxvY2FscygpOyArK2kpCisgICAgICAgIG1fdmFyaWFibGVzLmxvY2FsKGkp
LmNsb2JiZXJTdHJ1Y3R1cmVzKCk7CisgICAgbV9oYXZlU3RydWN0dXJlcyA9IGZhbHNlOworfQor
CitpbmxpbmUgYm9vbCBBYnN0cmFjdFN0YXRlOjptZXJnZVN0YXRlQXRUYWlsKEFic3RyYWN0VmFs
dWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBpblZhcmlhYmxlLCBOb2RlSW5kZXggbm9k
ZUluZGV4KQoreworICAgIGlmIChub2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgIEFic3RyYWN0VmFsdWUqIHNvdXJjZTsKKyAgICAgICAgCisg
ICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKKyAgICBpZiAoIW5vZGUucmVmQ291
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAobm9kZS5vcCkg
eworICAgIGNhc2UgUGhpOgorICAgIGNhc2UgU2V0QXJndW1lbnQ6CisgICAgICAgIC8vIFRoZSBi
bG9jayB0cmFuc2ZlcnMgdGhlIHZhbHVlIGZyb20gaGVhZCB0byB0YWlsLgorICAgICAgICBzb3Vy
Y2UgPSAmaW5WYXJpYWJsZTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNl
IEdldExvY2FsOgorICAgICAgICAvLyBUaGUgYmxvY2sgcmVmaW5lcyB0aGUgdmFsdWUgd2l0aCBh
ZGRpdGlvbmFsIHNwZWN1bGF0aW9ucy4KKyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZUlu
ZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICBjYXNlIFNldExvY2FsOgor
ICAgICAgICAvLyBUaGUgYmxvY2sgc2V0cyB0aGUgdmFyaWFibGUsIGFuZCBwb3RlbnRpYWxseSBy
ZWZpbmVzIGl0LCBib3RoCisgICAgICAgIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgc2V0dGluZyBpdC4K
KyAgICAgICAgc291cmNlID0gJmZvck5vZGUobm9kZS5jaGlsZDEoKSk7CisgICAgICAgIGJyZWFr
OworICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgc291cmNlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlm
IChkZXN0aW5hdGlvbiA9PSAqc291cmNlKSB7CisgICAgICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlv
biBkaWQgbm90IGNoYW5nZSB0aGUgb3V0cHV0IHZhbHVlIG9mIHRoZSB2YXJpYWJsZSwgZm9yIHRo
aXMKKyAgICAgICAgLy8gYmFzaWMgYmxvY2ssIG9uIHRoaXMgaXRlcmF0aW9uLgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEFic3RyYWN0IGV4ZWN1dGlvbiByZWFj
aGVkIGEgbmV3IGNvbmNsdXNpb24gYWJvdXQgdGhlIHNwZWN1bGF0aW9ucyByZWFjaGVkIGFib3V0
CisgICAgLy8gdGhpcyB2YXJpYWJsZSBhZnRlciBleGVjdXRpb24gb2YgdGhpcyBiYXNpYyBibG9j
ay4gVXBkYXRlIHRoZSBzdGF0ZSwgYW5kIHJldHVybgorICAgIC8vIHRydWUgdG8gaW5kaWNhdGUg
dGhhdCB0aGUgZml4cG9pbnQgbXVzdCBnbyBvbiEKKyAgICBkZXN0aW5hdGlvbiA9ICpzb3VyY2U7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdl
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEFTU0VSVChmcm9tLT52
YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mQXJndW1lbnRzKCkpOworICAgIEFTU0VSVChmcm9tLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZMb2NhbHMoKSA9PSB0by0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkp
OworICAgIAorICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIGZvciAoc2l6ZV90
IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQgPCBmcm9tLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZB
cmd1bWVudHMoKTsgKythcmd1bWVudCkKKyAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVZhcmlhYmxl
QmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGFyZ3VtZW50KSwgZnJvbS0+
dmFsdWVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5hcmd1
bWVudChhcmd1bWVudCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkp
OworICAgIAorICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBmcm9tLT52YXJpYWJs
ZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkKKyAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2Nrcyh0by0+dmFsdWVzQXRIZWFkLmxvY2FsKGxvY2FsKSwg
ZnJvbS0+dmFsdWVzQXRUYWlsLmxvY2FsKGxvY2FsKSwgdG8tPnZhcmlhYmxlc0F0SGVhZC5sb2Nh
bChsb2NhbCksIGZyb20tPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChsb2NhbCkpOworCisgICAgaWYg
KCF0by0+Y2ZhSGFzVmlzaXRlZCkKKyAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgCisgICAg
dG8tPmNmYVNob3VsZFJldmlzaXQgfD0gY2hhbmdlZDsKKyAgICAKKyAgICByZXR1cm4gY2hhbmdl
ZDsKK30KKworaW5saW5lIGJvb2wgQWJzdHJhY3RTdGF0ZTo6bWVyZ2VUb1N1Y2Nlc3NvcnMoR3Jh
cGgmIGdyYXBoLCBCYXNpY0Jsb2NrKiBiYXNpY0Jsb2NrKQoreworICAgIFBST0ZJTEUoRkxBR19G
T1JfTUVSR0VfVE9fU1VDQ0VTU09SUyk7CisKKyAgICBOb2RlJiB0ZXJtaW5hbCA9IGdyYXBoW2Jh
c2ljQmxvY2stPmVuZCAtIDFdOworICAgIAorICAgIEFTU0VSVCh0ZXJtaW5hbC5pc1Rlcm1pbmFs
KCkpOworICAgIAorICAgIHN3aXRjaCAodGVybWluYWwub3ApIHsKKyAgICBjYXNlIEp1bXA6Cisg
ICAgICAgIHJldHVybiBtZXJnZShiYXNpY0Jsb2NrLCBncmFwaC5tX2Jsb2Nrc1t0ZXJtaW5hbC50
YWtlbkJsb2NrSW5kZXgoKV0uZ2V0KCkpOworICAgICAgICAKKyAgICBjYXNlIEJyYW5jaDoKKyAg
ICAgICAgcmV0dXJuIG1lcmdlKGJhc2ljQmxvY2ssIGdyYXBoLm1fYmxvY2tzW3Rlcm1pbmFsLnRh
a2VuQmxvY2tJbmRleCgpXS5nZXQoKSkKKyAgICAgICAgICAgIHwgbWVyZ2UoYmFzaWNCbG9jaywg
Z3JhcGgubV9ibG9ja3NbdGVybWluYWwubm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKTsKKyAg
ICAgICAgCisgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUaHJvdzoKKyAgICBjYXNlIFRocm93
UmVmZXJlbmNlRXJyb3I6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK2lubGluZSBib29sIEFic3RyYWN0U3RhdGU6Om1lcmdlVmFyaWFibGVC
ZXR3ZWVuQmxvY2tzKEFic3RyYWN0VmFsdWUmIGRlc3RpbmF0aW9uLCBBYnN0cmFjdFZhbHVlJiBz
b3VyY2UsIE5vZGVJbmRleCBkZXN0aW5hdGlvbk5vZGVJbmRleCwgTm9kZUluZGV4IHNvdXJjZU5v
ZGVJbmRleCkKK3sKKyAgICBpZiAoZGVzdGluYXRpb25Ob2RlSW5kZXggPT0gTm9Ob2RlKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgQVNTRVJUX1VOVVNFRChzb3VyY2VOb2RlSW5k
ZXgsIHNvdXJjZU5vZGVJbmRleCAhPSBOb05vZGUpOworICAgIAorICAgIC8vIEZJWE1FOiBXZSBj
b3VsZCBkbyBzb21lIHNwYXJzZSBjb25kaXRpb25hbCBwcm9wYWdhdGlvbiBoZXJlIQorICAgIAor
ICAgIHJldHVybiBkZXN0aW5hdGlvbi5tZXJnZShzb3VyY2UpOworfQorCisjaWZuZGVmIE5ERUJV
Rwordm9pZCBBYnN0cmFjdFN0YXRlOjpkdW1wKEZJTEUqIG91dCkKK3sKKyAgICBib29sIGZpcnN0
ID0gdHJ1ZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbm9kZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fbm9kZXNbaV0uaXNDbGVhcigpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChmaXJzdCkKKyAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGZwcmludGYob3V0LCAiICIpOworICAgICAgICBmcHJpbnRm
KG91dCwgIkAlbHU6IiwgaSArIG1fYmxvY2stPmJlZ2luKTsKKyAgICAgICAgbV9ub2Rlc1tpXS5k
dW1wKG91dCk7CisgICAgfQorfQorI2VuZGlmCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR0Fic3RyYWN0U3RhdGVfaAorI2RlZmluZSBERkdBYnN0cmFjdFN0YXRlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5jbHVkZSAiREZHR3JhcGguaCIKKyNpbmNsdWRl
ICJERkdOb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ29kZUJsb2NrOworCituYW1lc3BhY2UgREZHIHsKKworc3RydWN0IEJhc2ljQmxv
Y2s7CisKKy8vIFRoaXMgaW1wbGVtZW50cyB0aGUgbm90aW9uIG9mIGFuIGFic3RyYWN0IHN0YXRl
IGZvciBmbG93LXNlbnNpdGl2ZSBpbnRyYXByb2NlZHVyYWwKKy8vIGNvbnRyb2wgZmxvdyBhbmFs
eXNpcyAoQ0ZBKSwgd2l0aCBhIGZvY3VzIG9uIHRoZSBlbGltaW5hdGlvbiBvZiByZWR1bmRhbnQg
dHlwZSBjaGVja3MuCisvLyBJdCBhbHNvIGltcGxlbWVudHMgbW9zdCBvZiB0aGUgbWVjaGFuaXNt
cyBvZiBhYnN0cmFjdCBpbnRlcnByZXRhdGlvbiB0aGF0IHN1Y2ggYW4KKy8vIGFuYWx5c2lzIHdv
dWxkIHVzZS4gVGhpcyBjbGFzcyBzaG91bGQgYmUgdXNlZCBpbiB0d28gaWRpb21zOgorLy8KKy8v
IDEpIFBlcmZvcm1pbmcgdGhlIENGQS4gSW4gdGhpcyBjYXNlLCBBYnN0cmFjdFN0YXRlIHNob3Vs
ZCBiZSBydW4gb3ZlciBhbGwgYmFzaWMKKy8vICAgIGJsb2NrcyByZXBlYXRlZGx5IHVudGlsIGNv
bnZlcmdlbmNlIGlzIHJlYWNoZWQuIENvbnZlcmdlbmNlIGlzIGRlZmluZWQgYnkKKy8vICAgIGVu
ZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpIHJldHVybmluZyBm
YWxzZSBmb3IgYWxsIGJsb2Nrcy4KKy8vCisvLyAyKSBSZW1hdGVyaWFsaXppbmcgdGhlIHJlc3Vs
dHMgb2YgYSBwcmV2aW91c2x5IGV4ZWN1dGVkIENGQS4gSW4gdGhpcyBjYXNlLAorLy8gICAgQWJz
dHJhY3RTdGF0ZSBzaG91bGQgYmUgcnVuIG92ZXIgd2hhdGV2ZXIgYmFzaWMgYmxvY2sgeW91J3Jl
IGludGVyZXN0ZWQgaW4gdXAKKy8vICAgIHRvIHRoZSBwb2ludCBvZiB0aGUgbm9kZSBhdCB3aGlj
aCB5b3UnZCBsaWtlIHRvIGludGVycm9nYXRlIHRoZSBrbm93biB0eXBlCisvLyAgICBvZiBhbGwg
b3RoZXIgbm9kZXMuIEF0IHRoaXMgcG9pbnQgaXQncyBzYWZlIHRvIGRpc2NhcmQgdGhlIEFic3Ry
YWN0U3RhdGUgZW50aXJlbHksCisvLyAgICBjYWxsIHJlc2V0KCksIG9yIHRvIHJ1biBpdCB0byB0
aGUgZW5kIG9mIHRoZSBiYXNpYyBibG9jayBhbmQgY2FsbAorLy8gICAgZW5kQmFzaWNCbG9jayhB
YnN0cmFjdFN0YXRlOjpEb250TWVyZ2UpLiBUaGUgbGF0dGVyIG9wdGlvbiBpcyBzYWZlc3QgYmVj
YXVzZQorLy8gICAgaXQgcGVyZm9ybXMgc29tZSB1c2VmdWwgaW50ZWdyaXR5IGNoZWNrcy4KKy8v
CisvLyBBZnRlciB0aGUgQ0ZBIGlzIHJ1biwgdGhlIGludGVyLWJsb2NrIHN0YXRlIGlzIHNhdmVk
IGF0IHRoZSBoZWFkcyBhbmQgdGFpbHMgb2YgYWxsCisvLyBiYXNpYyBibG9ja3MuIFRoaXMgYWxs
b3dzIHRoZSBpbnRyYS1ibG9jayBzdGF0ZSB0byBiZSByZW1hdGVyaWFsaXplZCBieSBqdXN0Cisv
LyBleGVjdXRpbmcgdGhlIENGQSBmb3IgdGhhdCBibG9jay4gSWYgeW91IG5lZWQgdG8ga25vdyBp
bnRlci1ibG9jayBzdGF0ZSBvbmx5LCB0aGVuCisvLyB5b3Ugb25seSBuZWVkIHRvIGV4YW1pbmUg
dGhlIEJhc2ljQmxvY2s6Om1fdmFsdWVzQXRIZWFkIG9yIG1fdmFsdWVzQXRUYWlsIGZpZWxkcy4K
Ky8vCisvLyBSdW5uaW5nIHRoaXMgYW5hbHlzaXMgaW52b2x2ZXMgdGhlIGZvbGxvd2luZywgbW9k
dWxvIHRoZSBpbnRlci1ibG9jayBzdGF0ZQorLy8gbWVyZ2luZyBhbmQgY29udmVyZ2VuY2UgZml4
cG9pbnQ6CisvLworLy8gQWJzdHJhY3RTdGF0ZSBzdGF0ZShjb2RlQmxvY2ssIGdyYXBoKTsKKy8v
IHN0YXRlLmJlZ2luQmFzaWNCbG9jayhiYXNpY0Jsb2NrKTsKKy8vIGJvb2wgZW5kUmVhY2hlZCA9
IHRydWU7CisvLyBmb3IgKE5vZGVJbmRleCBpZHggPSBiYXNpY0Jsb2NrLmJlZ2luOyBpZHggPCBi
YXNpY0Jsb2NrLmVuZDsgKytpZHgpIHsKKy8vICAgICBpZiAoIXN0YXRlLmV4ZWN1dGUoaWR4KSkK
Ky8vICAgICAgICAgYnJlYWs7CisvLyB9CisvLyBib29sIHJlc3VsdCA9IHN0YXRlLmVuZEJhc2lj
QmxvY2soPGVpdGhlciBNZXJnZSBvciBEb250TWVyZ2U+KTsKKworY2xhc3MgQWJzdHJhY3RTdGF0
ZSB7CitwdWJsaWM6CisgICAgZW51bSBNZXJnZU1vZGUgeworICAgICAgICAvLyBEb24ndCBtZXJn
ZSB0aGUgc3RhdGUgaW4gQWJzdHJhY3RTdGF0ZSB3aXRoIGJhc2ljIGJsb2Nrcy4KKyAgICAgICAg
RG9udE1lcmdlLAorICAgICAgICAKKyAgICAgICAgLy8gTWVyZ2UgdGhlIHN0YXRlIGluIEFic3Ry
YWN0U3RhdGUgd2l0aCB0aGUgdGFpbCBvZiB0aGUgYmFzaWMKKyAgICAgICAgLy8gYmxvY2sgYmVp
bmcgYW5hbHl6ZWQuCisgICAgICAgIE1lcmdlVG9UYWlsLAorICAgICAgICAKKyAgICAgICAgLy8g
TWVyZ2UgdGhlIHN0YXRlIGluIEFic3RyYWN0U3RhdGUgd2l0aCB0aGUgdGFpbCBvZiB0aGUgYmFz
aWMKKyAgICAgICAgLy8gYmxvY2ssIGFuZCB3aXRoIHRoZSBoZWFkcyBvZiBzdWNjZXNzb3IgYmxv
Y2tzLgorICAgICAgICBNZXJnZVRvU3VjY2Vzc29ycworICAgIH07CisgICAgCisgICAgQWJzdHJh
Y3RTdGF0ZShDb2RlQmxvY2sqLCBHcmFwaCYpOworICAgIAorICAgIH5BYnN0cmFjdFN0YXRlKCk7
CisgICAgCisgICAgQWJzdHJhY3RWYWx1ZSYgZm9yTm9kZShOb2RlSW5kZXggbm9kZUluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbm9kZXNbbm9kZUluZGV4IC0gbV9ibG9jay0+YmVnaW5d
OworICAgIH0KKyAgICAKKyAgICAvLyBDYWxsIHRoaXMgYmVmb3JlIGJlZ2lubmluZyBDRkEgdG8g
aW5pdGlhbGl6ZSB0aGUgYWJzdHJhY3QgdmFsdWVzIG9mCisgICAgLy8gYXJndW1lbnRzLCBhbmQg
dG8gaW5kaWNhdGUgd2hpY2ggYmxvY2tzIHNob3VsZCBiZSBsaXN0ZWQgZm9yIENGQQorICAgIC8v
IGV4ZWN1dGlvbi4KKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplKEdyYXBoJik7CisKKyAgICAv
LyBTdGFydCBhYnN0cmFjdGx5IGV4ZWN1dGluZyB0aGUgZ2l2ZW4gYmFzaWMgYmxvY2suIEluaXRp
YWxpemVzIHRoZQorICAgIC8vIG5vdGlvbiBvZiBhYnN0cmFjdCBzdGF0ZSB0byB3aGF0IHdlIGJl
bGlldmUgaXQgdG8gYmUgYXQgdGhlIGhlYWQKKyAgICAvLyBvZiB0aGUgYmFzaWMgYmxvY2ssIGFj
Y29yZGluZyB0byB0aGUgYmFzaWMgYmxvY2sncyBkYXRhIHN0cnVjdHVyZXMuCisgICAgLy8gVGhp
cyBtZXRob2QgYWxzbyBzZXRzIGNmYVNob3VsZFJldmlzaXQgdG8gZmFsc2UuCisgICAgdm9pZCBi
ZWdpbkJhc2ljQmxvY2soQmFzaWNCbG9jayopOworICAgIAorICAgIC8vIEZpbmlzaCBhYnN0cmFj
dGx5IGV4ZWN1dGluZyBhIGJhc2ljIGJsb2NrLiBJZiBNZXJnZVRvVGFpbCBvcgorICAgIC8vIE1l
cmdlVG9TdWNjZXNzb3JzIGlzIHBhc3NlZCwgdGhlbiB0aGlzIG1lcmdlcyBldmVyeXRoaW5nIHdl
IGhhdmUKKyAgICAvLyBsZWFybmVkIGFib3V0IGhvdyB0aGUgc3RhdGUgY2hhbmdlcyBkdXJpbmcg
dGhpcyBibG9jaydzIGV4ZWN1dGlvbiBpbnRvCisgICAgLy8gdGhlIGJsb2NrJ3MgZGF0YSBzdHJ1
Y3R1cmVzLiBUaGVyZSBhcmUgdGhyZWUgcmV0dXJuIG1vZGVzLCBkZXBlbmRpbmcKKyAgICAvLyBv
biB0aGUgdmFsdWUgb2YgbWVyZ2VNb2RlOgorICAgIC8vCisgICAgLy8gRG9udE1lcmdlOgorICAg
IC8vICAgIEFsd2F5cyByZXR1cm5zIGZhbHNlLgorICAgIC8vCisgICAgLy8gTWVyZ2VUb1RhaWw6
CisgICAgLy8gICAgUmV0dXJucyB0cnVlIGlmIHRoZSBzdGF0ZSBvZiB0aGUgYmxvY2sgYXQgdGhl
IHRhaWwgd2FzIGNoYW5nZWQuCisgICAgLy8gICAgVGhpcyBtZWFucyB0aGF0IHlvdSBtdXN0IGNh
bGwgbWVyZ2VUb1N1Y2Nlc3NvcnMoKSwgYW5kIGlmIHRoYXQKKyAgICAvLyAgICByZXR1cm5zIHRy
dWUsIHRoZW4geW91IG11c3QgcmV2aXNpdCAoYXQgbGVhc3QpIHRoZSBzdWNjZXNzb3IKKyAgICAv
LyAgICBibG9ja3MuIEZhbHNlIHdpbGwgYWx3YXlzIGJlIHJldHVybmVkIGlmIHRoZSBibG9jayBp
cyB0ZXJtaW5hbAorICAgIC8vICAgIChpLmUuIGVuZHMgaW4gVGhyb3cgb3IgUmV0dXJuLCBvciBo
YXMgYSBGb3JjZU9TUkV4aXQgaW5zaWRlIGl0KS4KKyAgICAvLworICAgIC8vIE1lcmdlVG9TdWNj
ZXNzb3JzOgorICAgIC8vICAgIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RhdGUgb2YgdGhlIGJsb2Nr
IGF0IHRoZSB0YWlsIHdhcyBjaGFuZ2VkLAorICAgIC8vICAgIGFuZCwgaWYgdGhlIHN0YXRlIGF0
IHRoZSBoZWFkcyBvZiBzdWNjZXNzb3JzIHdhcyBjaGFuZ2VkLgorICAgIC8vICAgIEEgdHJ1ZSBy
ZXR1cm4gbWVhbnMgdGhhdCB5b3UgbXVzdCByZXZpc2l0IChhdCBsZWFzdCkgdGhlIHN1Y2Nlc3Nv
cgorICAgIC8vICAgIGJsb2Nrcy4gVGhpcyBhbHNvIHNldHMgY2ZhU2hvdWxkUmV2aXNpdCB0byB0
cnVlIGZvciBiYXNpYyBibG9ja3MKKyAgICAvLyAgICB0aGF0IG11c3QgYmUgdmlzaXRlZCBuZXh0
LgorICAgIGJvb2wgZW5kQmFzaWNCbG9jayhNZXJnZU1vZGUpOworICAgIAorICAgIC8vIFJlc2V0
IHRoZSBBYnN0cmFjdFN0YXRlLiBUaGlzIHRocm93cyBhd2F5IGFueSByZXN1bHRzLCBhbmQgYXQg
dGhpcyBwb2ludAorICAgIC8vIHlvdSBjYW4gc2FmZWx5IGNhbGwgYmVnaW5CYXNpY0Jsb2NrKCkg
b24gYW55IGJhc2ljIGJsb2NrLgorICAgIHZvaWQgcmVzZXQoKTsKKyAgICAKKyAgICAvLyBBYnN0
cmFjdGx5IGV4ZWN1dGVzIHRoZSBnaXZlbiBub2RlLiBUaGUgbmV3IGFic3RyYWN0IHN0YXRlIGlz
IHN0b3JlZCBpbnRvIGFuCisgICAgLy8gYWJzdHJhY3QgcmVnaXN0ZXIgZmlsZSBzdG9yZWQgaW4g
KnRoaXMuIExvYWRzIG9mIGxvY2FsIHZhcmlhYmxlcyAodGhhdCBzcGFuCisgICAgLy8gYmFzaWMg
YmxvY2tzKSBpbnRlcnJvZ2F0ZSB0aGUgYmFzaWMgYmxvY2sncyBub3Rpb24gb2YgdGhlIHN0YXRl
IGF0IHRoZSBoZWFkLgorICAgIC8vIFN0b3JlcyB0byBsb2NhbCB2YXJpYWJsZXMgYXJlIGhhbmRs
ZWQgaW4gZW5kQmFzaWNCbG9jaygpLiBUaGlzIHJldHVybnMgdHJ1ZQorICAgIC8vIGlmIGV4ZWN1
dGlvbiBzaG91bGQgY29udGludWUgcGFzdCB0aGlzIG5vZGUuIE5vdGFibHksIGl0IHdpbGwgcmV0
dXJuIHRydWUKKyAgICAvLyBmb3IgYmxvY2sgdGVybWluYWxzLCBzbyBsb25nIGFzIHRob3NlIHRl
cm1pbmFscyBhcmUgbm90IFJldHVybiBvciB2YXJpYW50cworICAgIC8vIG9mIFRocm93LgorICAg
IGJvb2wgZXhlY3V0ZShOb2RlSW5kZXgpOworICAgIAorICAgIC8vIElzIHRoZSBleGVjdXRpb24g
c3RhdGUgc3RpbGwgdmFsaWQ/IFRoaXMgd2lsbCBiZSBmYWxzZSBpZiBleGVjdXRlKCkgaGFzCisg
ICAgLy8gcmV0dXJuZWQgZmFsc2UgcHJldmlvdXNseS4KKyAgICBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBtX2lzVmFsaWQ7IH0KKyAgICAKKyAgICAvLyBNZXJnZSB0aGUgYWJzdHJhY3Qg
c3RhdGUgc3RvcmVkIGF0IHRoZSBmaXJzdCBibG9jaydzIHRhaWwgaW50byB0aGUgc2Vjb25kCisg
ICAgLy8gYmxvY2sncyBoZWFkLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNlY29uZCBibG9jaydzIHN0
YXRlIGNoYW5nZWQuIElmIHNvLAorICAgIC8vIHRoYXQgYmxvY2sgbXVzdCBiZSBhYnN0cmFjdGx5
IGludGVycHJldGVkIGFnYWluLiBUaGlzIGFsc28gc2V0cworICAgIC8vIHRvLT5jZmFTaG91bGRS
ZXZpc2l0IHRvIHRydWUsIGlmIGl0IHJldHVybnMgdHJ1ZSwgb3IgaWYgdG8gaGFzIG5vdCBiZWVu
CisgICAgLy8gdmlzaXRlZCB5ZXQuCisgICAgc3RhdGljIGJvb2wgbWVyZ2UoQmFzaWNCbG9jayog
ZnJvbSwgQmFzaWNCbG9jayogdG8pOworICAgIAorICAgIC8vIE1lcmdlIHRoZSBhYnN0cmFjdCBz
dGF0ZSBzdG9yZWQgYXQgdGhlIGJsb2NrJ3MgdGFpbCBpbnRvIGFsbCBvZiBpdHMKKyAgICAvLyBz
dWNjZXNzb3JzLiBSZXR1cm5zIHRydWUgaWYgYW55IG9mIHRoZSBzdWNjZXNzb3JzJyBzdGF0ZXMg
Y2hhbmdlZC4gTm90ZQorICAgIC8vIHRoYXQgdGhpcyBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBp
biBlbmRCYXNpY0Jsb2NrKCkgaWYgTWVyZ2VNb2RlIGlzCisgICAgLy8gTWVyZ2VUb1N1Y2Nlc3Nv
cnMuCisgICAgc3RhdGljIGJvb2wgbWVyZ2VUb1N1Y2Nlc3NvcnMoR3JhcGgmLCBCYXNpY0Jsb2Nr
Kik7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBkdW1wKEZJTEUqIG91dCk7CisjZW5kaWYK
KyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9iYmVyU3RydWN0dXJlcyhOb2RlSW5kZXgpOwor
ICAgIAorICAgIGJvb2wgbWVyZ2VTdGF0ZUF0VGFpbChBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlv
biwgQWJzdHJhY3RWYWx1ZSYgaW5WYXJpYWJsZSwgTm9kZUluZGV4KTsKKyAgICAKKyAgICBzdGF0
aWMgYm9vbCBtZXJnZVZhcmlhYmxlQmV0d2VlbkJsb2NrcyhBYnN0cmFjdFZhbHVlJiBkZXN0aW5h
dGlvbiwgQWJzdHJhY3RWYWx1ZSYgc291cmNlLCBOb2RlSW5kZXggZGVzdGluYXRpb25Ob2RlSW5k
ZXgsIE5vZGVJbmRleCBzb3VyY2VOb2RlSW5kZXgpOworICAgIAorICAgIENvZGVCbG9jayogbV9j
b2RlQmxvY2s7CisgICAgR3JhcGgmIG1fZ3JhcGg7CisgICAgCisgICAgVmVjdG9yPEFic3RyYWN0
VmFsdWUsIDMyPiBtX25vZGVzOworICAgIE9wZXJhbmRzPEFic3RyYWN0VmFsdWU+IG1fdmFyaWFi
bGVzOworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgYm9vbCBtX2hhdmVTdHJ1Y3R1cmVz
OworICAgIAorICAgIGJvb2wgbV9pc1ZhbGlkOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdBYnN0cmFj
dFN0YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0VmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdBYnN0cmFjdFZh
bHVlX2gKKyNkZWZpbmUgREZHQWJzdHJhY3RWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiREZHU3RydWN0dXJlU2V0
LmgiCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiUHJlZGljdGVkVHlwZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFN0cnVjdHVyZUFic3RyYWN0
VmFsdWUgeworcHVibGljOgorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoKQorICAgICAgICA6
IG1fc3RydWN0dXJlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICBTdHJ1Y3R1cmVBYnN0cmFj
dFZhbHVlKFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgICAgICA6IG1fc3RydWN0dXJlKHN0cnVj
dHVyZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUoY29u
c3QgU3RydWN0dXJlU2V0JiBzZXQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNldC5zaXplKCkp
IHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
bV9zdHJ1Y3R1cmUgPSBzZXRbMF07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUgPSByZWludGVycHJldF9j
YXN0PFN0cnVjdHVyZSo+KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZSA9IDA7
CisgICAgfQorICAgIAorICAgIHZvaWQgbWFrZVRvcCgpCisgICAgeworICAgICAgICBtX3N0cnVj
dHVyZSA9IHRvcFZhbHVlKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlIHRvcCgpCisgICAgeworICAgICAgICBTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlIHZh
bHVlOworICAgICAgICB2YWx1ZS5tYWtlVG9wKCk7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBhZGQoU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCisgICAgeworICAg
ICAgICBBU1NFUlQoIWNvbnRhaW5zKHN0cnVjdHVyZSkgJiYgIWlzVG9wKCkpOworICAgICAgICBp
ZiAobV9zdHJ1Y3R1cmUpCisgICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlID0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29s
IGFkZEFsbChjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKGlz
VG9wKCkgfHwgIW90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKG90aGVyLnNpemUoKSA+IDEpIHsKKyAgICAgICAgICAgIG1ha2VUb3AoKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICghbV9zdHJ1Y3R1cmUp
IHsKKyAgICAgICAgICAgIG1fc3RydWN0dXJlID0gb3RoZXJbMF07CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUgPT0gb3RoZXJbMF0p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1ha2VUb3AoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgYWRkQWxsKGNvbnN0IFN0cnVjdHVy
ZUFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKCFvdGhlci5tX3N0cnVj
dHVyZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlci5pc1RvcCgpKSB7Cisg
ICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAobV9zdHJ1Y3R1cmUpIHsKKyAgICAgICAgICAgIGlmIChtX3N0cnVjdHVy
ZSA9PSBvdGhlci5tX3N0cnVjdHVyZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBtYWtlVG9wKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBjb250YWlucyhTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBzdHJ1Y3R1cmUpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBib29sIGlzU3Vic2V0T2YoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJl
dHVybiBvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIGJvb2wg
ZG9lc05vdENvbnRhaW5BbnlPdGhlclRoYW4oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoaXNUb3AoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKCFtX3N0cnVjdHVyZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzU3VwZXJzZXRPZihjb25zdCBTdHJ1Y3R1cmVTZXQmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYg
KCFvdGhlci5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKG90
aGVyLnNpemUoKSA+IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVy
biBtX3N0cnVjdHVyZSA9PSBvdGhlclswXTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1N1YnNl
dE9mKGNvbnN0IFN0cnVjdHVyZUFic3RyYWN0VmFsdWUmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICht
X3N0cnVjdHVyZSkgeworICAgICAgICAgICAgaWYgKG90aGVyLm1fc3RydWN0dXJlKQorICAgICAg
ICAgICAgICAgIHJldHVybiBtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVyZTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1N1cGVyc2V0T2YoY29uc3QgU3RydWN0dXJlQWJzdHJhY3RW
YWx1ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gb3RoZXIuaXNTdWJzZXRP
ZigqdGhpcyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIW1fc3RydWN0dXJlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAob3RoZXIuc2l6ZSgpKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAg
ICAgbV9zdHJ1Y3R1cmUgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBtX3N0cnVjdHVyZSA9
IG90aGVyWzBdOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3RoZXIuY29udGFpbnMobV9zdHJ1
Y3R1cmUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgbV9zdHJ1Y3R1
cmUgPSAwOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmIChpc1RvcCgpKSB7CisgICAgICAg
ICAgICBtX3N0cnVjdHVyZSA9IG90aGVyLm1fc3RydWN0dXJlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmIChtX3N0cnVjdHVyZSA9PSBvdGhlci5tX3N0cnVjdHVy
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKG90aGVyLmlzVG9wKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIG1fc3RydWN0dXJlID0gMDsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlwZSBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICgh
KG90aGVyICYgUHJlZGljdENlbGwpKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNDbGVhck9yVG9w
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCEocHJlZGljdGlvbkZyb21T
dHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpICYgb3RoZXIpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUg
PSAwOworICAgIH0KKyAgICAKKyAgICBib29sIGlzQ2xlYXIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX3N0cnVjdHVyZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlID09IHRvcFZhbHVlKCk7IH0KKyAgICAKKyAgICBib29s
IGlzQ2xlYXJPclRvcCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0dXJlIDw9IHRvcFZhbHVlKCk7
IH0KKyAgICBib29sIGlzTmVpdGhlckNsZWFyTm9yVG9wKCkgY29uc3QgeyByZXR1cm4gIWlzQ2xl
YXJPclRvcCgpOyB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFpc1RvcCgpKTsKKyAgICAgICAgcmV0dXJuICEhbV9zdHJ1Y3R1cmU7CisgICAg
fQorICAgIAorICAgIFN0cnVjdHVyZSogYXQoc2l6ZV90IGkpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoIWlzVG9wKCkpOworICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1cmUpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKGksICFpKTsKKyAgICAgICAgcmV0dXJuIG1fc3RydWN0dXJlOworICAg
IH0KKyAgICAKKyAgICBTdHJ1Y3R1cmUqIG9wZXJhdG9yW10oc2l6ZV90IGkpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gYXQoaSk7CisgICAgfQorICAgIAorICAgIFN0cnVjdHVyZSogbGFz
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoMCk7CisgICAgfQorICAgIAorICAg
IFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmVzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChpc1RvcCgpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3RDZWxsOworICAg
ICAgICBpZiAoaXNDbGVhcigpKQorICAgICAgICAgICAgcmV0dXJuIFByZWRpY3ROb25lOworICAg
ICAgICByZXR1cm4gcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1Y3R1cmUpOworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZSYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUgPT0gb3RoZXIu
bV9zdHJ1Y3R1cmU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAo
RklMRSogb3V0KQorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpIHsKKyAgICAgICAgICAgIGZw
cmludGYob3V0LCAiVE9QIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGZwcmludGYob3V0LCAiWyIpOworICAgICAgICBpZiAobV9zdHJ1Y3R1cmUp
CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmUpOworICAgICAgICBm
cHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiB0b3BWYWx1ZSgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U3RydWN0dXJl
Kj4oMSk7IH0KKyAgICAKKyAgICAvLyBUaGlzIGNhbiBvbmx5IHJlbWVtYmVyIG9uZSBzdHJ1Y3R1
cmUgYXQgYSB0aW1lLgorICAgIFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7Cit9OworCitzdHJ1Y3Qg
QWJzdHJhY3RWYWx1ZSB7CisgICAgQWJzdHJhY3RWYWx1ZSgpCisgICAgICAgIDogbV90eXBlKFBy
ZWRpY3ROb25lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgewor
ICAgICAgICBtX3R5cGUgPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIo
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0NsZWFyKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3R5cGUgPT0gUHJlZGljdE5vbmUgJiYgbV9zdHJ1Y3R1cmUuaXNDbGVhcigpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIG1ha2VUb3AoKQorICAgIHsKKyAgICAgICAgbV90eXBlID0gUHJlZGlj
dFRvcDsKKyAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNsb2JiZXJTdHJ1Y3R1cmVzKCkKKyAgICB7CisgICAgICAgIGlmIChtX3R5cGUgJiBQcmVk
aWN0Q2VsbCkgeworICAgICAgICAgICAgbV9zdHJ1Y3R1cmUubWFrZVRvcCgpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQobV9zdHJ1Y3R1
cmUuaXNDbGVhcigpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1RvcCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV90eXBlID09IFByZWRpY3RUb3AgJiYgbV9zdHJ1Y3R1cmUuaXNU
b3AoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEFic3RyYWN0VmFsdWUgdG9wKCkKKyAgICB7
CisgICAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubWFrZVRvcCgp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHNldChKU1Zh
bHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9zdHJ1Y3R1cmUuY2xlYXIoKTsKKyAgICAgICAg
aWYgKHZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgbV9zdHJ1Y3R1cmUuYWRkKHZhbHVlLmFz
Q2VsbCgpLT5zdHJ1Y3R1cmUoKSk7CisgICAgICAgIAorICAgICAgICBtX3R5cGUgPSBwcmVkaWN0
aW9uRnJvbVZhbHVlKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXQoU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCisgICAgeworICAgICAgICBtX3N0cnVjdHVyZS5jbGVhcigpOworICAgICAg
ICBtX3N0cnVjdHVyZS5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIG1fdHlwZSA9
IHByZWRpY3Rpb25Gcm9tU3RydWN0dXJlKHN0cnVjdHVyZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0KFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIGlmICh0eXBlICYgUHJl
ZGljdENlbGwpCisgICAgICAgICAgICBtX3N0cnVjdHVyZS5tYWtlVG9wKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fc3RydWN0dXJlLmNsZWFyKCk7CisgICAgICAgIG1fdHlwZSA9IHR5
cGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBYnN0cmFjdFZhbHVl
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3R5cGUgPT0gb3RoZXIubV90
eXBlICYmIG1fc3RydWN0dXJlID09IG90aGVyLm1fc3RydWN0dXJlOworICAgIH0KKyAgICAKKyAg
ICBib29sIG1lcmdlKGNvbnN0IEFic3RyYWN0VmFsdWUmIG90aGVyKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1lcmdlUHJlZGljdGlvbihtX3R5cGUsIG90aGVyLm1fdHlwZSkgfCBtX3N0cnVjdHVy
ZS5hZGRBbGwob3RoZXIubV9zdHJ1Y3R1cmUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG1lcmdl
KFByZWRpY3RlZFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIG1lcmdlUHJlZGljdGlvbihtX3R5
cGUsIHR5cGUpOworICAgICAgICAKKyAgICAgICAgaWYgKHR5cGUgJiBQcmVkaWN0Q2VsbCkKKyAg
ICAgICAgICAgIG1fc3RydWN0dXJlLm1ha2VUb3AoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBm
aWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikKKyAgICB7CisgICAgICAgIG1fdHlwZSAm
PSBvdGhlci5wcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKTsKKyAgICAgICAgbV9zdHJ1Y3R1cmUu
ZmlsdGVyKG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaWx0ZXIoUHJlZGljdGVkVHlw
ZSB0eXBlKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gUHJlZGljdFRvcCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgbV90eXBlICY9IHR5cGU7CisgICAgICAgIG1fc3RydWN0dXJl
LmZpbHRlcih0eXBlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCB2YWxpZGF0ZShKU1ZhbHVlIHZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzVG9wKCkpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtZXJnZVByZWRpY3Rpb25zKG1fdHlwZSwg
cHJlZGljdGlvbkZyb21WYWx1ZSh2YWx1ZSkpICE9IG1fdHlwZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX3N0cnVjdHVyZS5pc1RvcCgpKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgICAgICBpZiAodmFsdWUuaXNDZWxs
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3R5cGUgJiBQcmVkaWN0Q2VsbCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9zdHJ1Y3R1cmUuY29udGFpbnModmFsdWUuYXNDZWxsKCktPnN0cnVjdHVy
ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSogb3V0KQorICAgIHsKKyAg
ICAgICAgZnByaW50ZihvdXQsICIoJXMsICIsIHByZWRpY3Rpb25Ub1N0cmluZyhtX3R5cGUpKTsK
KyAgICAgICAgbV9zdHJ1Y3R1cmUuZHVtcChvdXQpOworICAgICAgICBmcHJpbnRmKG91dCwgIiki
KTsKKyAgICB9CisjZW5kaWYKKworICAgIFN0cnVjdHVyZUFic3RyYWN0VmFsdWUgbV9zdHJ1Y3R1
cmU7CisgICAgUHJlZGljdGVkVHlwZSBtX3R5cGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Fic3Ry
YWN0VmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNp
Y0Jsb2NrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdCYXNpY0Jsb2NrX2gKKyNk
ZWZpbmUgREZHQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkRGR0Fic3RyYWN0VmFsdWUuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiREZH
T3BlcmFuZHMuaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3R5cGVkZWYgVmVjdG9y
IDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisKK3N0cnVjdCBCYXNpY0Jsb2NrIHsK
KyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5vZGVJbmRleCBiZWdpbiwg
dW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMpCisgICAgICAgIDogYnl0
ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQorICAgICAgICAsIGJlZ2luKGJlZ2luKQorICAgICAg
ICAsIGVuZChOb05vZGUpCisgICAgICAgICwgaXNPU1JUYXJnZXQoZmFsc2UpCisgICAgICAgICwg
Y2ZhSGFzVmlzaXRlZChmYWxzZSkKKyAgICAgICAgLCBjZmFTaG91bGRSZXZpc2l0KGZhbHNlKQor
ICAgICAgICAsIHZhcmlhYmxlc0F0SGVhZChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICAg
ICAgLCB2YXJpYWJsZXNBdFRhaWwobnVtQXJndW1lbnRzLCBudW1Mb2NhbHMpCisgICAgICAgICwg
dmFsdWVzQXRIZWFkKG51bUFyZ3VtZW50cywgbnVtTG9jYWxzKQorICAgICAgICAsIHZhbHVlc0F0
VGFpbChudW1Bcmd1bWVudHMsIG51bUxvY2FscykKKyAgICB7CisgICAgfQorCisgICAgc3RhdGlj
IGlubGluZSBCbG9ja0luZGV4IGdldEJ5dGVjb2RlQmVnaW4oT3duUHRyPEJhc2ljQmxvY2s+KiBi
bG9jaykKKyAgICB7CisgICAgICAgIHJldHVybiAoKmJsb2NrKS0+Ynl0ZWNvZGVCZWdpbjsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBieXRlY29kZUJlZ2luOworICAgIE5vZGVJbmRleCBiZWdpbjsK
KyAgICBOb2RlSW5kZXggZW5kOworICAgIGJvb2wgaXNPU1JUYXJnZXQ7CisgICAgYm9vbCBjZmFI
YXNWaXNpdGVkOworICAgIGJvb2wgY2ZhU2hvdWxkUmV2aXNpdDsKKyAgICAKKyAgICBQcmVkZWNl
c3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgCisgICAgT3BlcmFuZHM8Tm9kZUluZGV4LCBO
b2RlSW5kZXhUcmFpdHM+IHZhcmlhYmxlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxOb2RlSW5kZXgs
IE5vZGVJbmRleFRyYWl0cz4gdmFyaWFibGVzQXRUYWlsOworICAgIAorICAgIE9wZXJhbmRzPEFi
c3RyYWN0VmFsdWU+IHZhbHVlc0F0SGVhZDsKKyAgICBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPiB2
YWx1ZXNBdFRhaWw7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0Jhc2ljQmxvY2tfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2
aXNpb24gOTcxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIHByaXZhdGU6CiAgICAg
Ly8gVXNlZCBpbiBpbXBsZW1lbnRpbmcgZ2V0L3NldCwgYWJvdmUsIHdoZXJlIHRoZSBvcGVyYW5k
IGlzIGEgbG9jYWwgdmFyaWFibGUuCiAgICAgTm9kZUluZGV4IGdldExvY2FsKHVuc2lnbmVkIG9w
ZXJhbmQpCiAgICAgewotICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gbV9jdXJyZW50Qmxv
Y2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlOworICAgICAgICBOb2RlSW5kZXggbm9k
ZUluZGV4ID0gbV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5sb2NhbChvcGVyYW5kKTsK
IAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAgTm9kZSYg
bm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE0NCwxNSArMTQ0LDE1IEBAIHByaXZhdGU6
CiAgICAgICAgIE5vZGVJbmRleCBwaGkgPSBhZGRUb0dyYXBoKFBoaSwgT3BJbmZvKHZhcmlhYmxl
QWNjZXNzRGF0YSkpOwogICAgICAgICBtX2xvY2FsUGhpU3RhY2suYXBwZW5kKFBoaVN0YWNrRW50
cnkobV9jdXJyZW50QmxvY2ssIHBoaSwgb3BlcmFuZCkpOwogICAgICAgICBub2RlSW5kZXggPSBh
ZGRUb0dyYXBoKEdldExvY2FsLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAg
ICAgICAgbV9jdXJyZW50QmxvY2stPm1fbG9jYWxzQXRUYWlsW29wZXJhbmRdLnZhbHVlID0gbm9k
ZUluZGV4OworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmxvY2FsKG9w
ZXJhbmQpID0gbm9kZUluZGV4OwogICAgICAgICAKLSAgICAgICAgbV9jdXJyZW50QmxvY2stPm1f
bG9jYWxzQXRIZWFkW29wZXJhbmRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICBt
X2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldExvY2FsRmlyc3RUaW1lKG9wZXJhbmQs
IG5vZGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgIH0K
ICAgICB2b2lkIHNldExvY2FsKHVuc2lnbmVkIG9wZXJhbmQsIE5vZGVJbmRleCB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2xvY2Fsc0F0VGFpbFtvcGVyYW5kXS52YWx1
ZSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vzc0RhdGEob3Bl
cmFuZCkpLCB2YWx1ZSk7CisgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bG9jYWwob3BlcmFuZCkgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVB
Y2Nlc3NEYXRhKG9wZXJhbmQpKSwgdmFsdWUpOwogICAgIH0KIAogICAgIC8vIFVzZWQgaW4gaW1w
bGVtZW50aW5nIGdldC9zZXQsIGFib3ZlLCB3aGVyZSB0aGUgb3BlcmFuZCBpcyBhbiBhcmd1bWVu
dC4KQEAgLTE2MSw3ICsxNjEsNyBAQCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCBhcmd1bWVu
dCA9IG9wZXJhbmQgKyBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzICsgUmVnaXN0ZXJGaWxl
OjpDYWxsRnJhbWVIZWFkZXJTaXplOwogICAgICAgICBBU1NFUlQoYXJndW1lbnQgPCBtX251bUFy
Z3VtZW50cyk7CiAKLSAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IG1fY3VycmVudEJsb2Nr
LT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0udmFsdWU7CisgICAgICAgIE5vZGVJbmRleCBu
b2RlSW5kZXggPSBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3Vt
ZW50KTsKIAogICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkgewogICAgICAgICAgICAg
Tm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUluZGV4XTsKQEAgLTE3MCw3ICsxNzAsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIC8vIHRoZSBHZXRMb2NhbCB0byB0aGUgU2V0QXJndW1lbnQu
CiAgICAgICAgICAgICAgICAgQVNTRVJUKG5vZGUubG9jYWwoKSA9PSBzdGF0aWNfY2FzdDxWaXJ0
dWFsUmVnaXN0ZXI+KG9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBub2RlSW5kZXggPSBhZGRU
b0dyYXBoKEdldExvY2FsLCBPcEluZm8obm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSksIG5vZGVJ
bmRleCk7Ci0gICAgICAgICAgICAgICAgbV9jdXJyZW50QmxvY2stPm1fYXJndW1lbnRzQXRUYWls
W2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAgICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRUYWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IG5vZGVJbmRleDsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCkBAIC0xODYsOSArMTg2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgTm9kZUluZGV4IHBoaSA9
IGFkZFRvR3JhcGgoUGhpLCBPcEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSk7CiAgICAgICAgIG1f
YXJndW1lbnRQaGlTdGFjay5hcHBlbmQoUGhpU3RhY2tFbnRyeShtX2N1cnJlbnRCbG9jaywgcGhp
LCBhcmd1bWVudCkpOwogICAgICAgICBub2RlSW5kZXggPSBhZGRUb0dyYXBoKEdldExvY2FsLCBP
cEluZm8odmFyaWFibGVBY2Nlc3NEYXRhKSwgcGhpKTsKLSAgICAgICAgbV9jdXJyZW50QmxvY2st
Pm1fYXJndW1lbnRzQXRUYWlsW2FyZ3VtZW50XS52YWx1ZSA9IG5vZGVJbmRleDsKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5hcmd1bWVudChhcmd1bWVudCkgPSBub2Rl
SW5kZXg7CiAgICAgICAgIAotICAgICAgICBtX2N1cnJlbnRCbG9jay0+bV9hcmd1bWVudHNBdEhl
YWRbYXJndW1lbnRdLnNldEZpcnN0VGltZShub2RlSW5kZXgpOworICAgICAgICBtX2N1cnJlbnRC
bG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50Rmlyc3RUaW1lKGFyZ3VtZW50LCBub2Rl
SW5kZXgpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICB9CkBAIC0x
OTcsNyArMTk3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdW5zaWduZWQgYXJndW1lbnQgPSBvcGVy
YW5kICsgbV9jb2RlQmxvY2stPm1fbnVtUGFyYW1ldGVycyArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZy
YW1lSGVhZGVyU2l6ZTsKICAgICAgICAgQVNTRVJUKGFyZ3VtZW50IDwgbV9udW1Bcmd1bWVudHMp
OwogCi0gICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0u
dmFsdWUgPSBhZGRUb0dyYXBoKFNldExvY2FsLCBPcEluZm8obmV3VmFyaWFibGVBY2Nlc3NEYXRh
KG9wZXJhbmQpKSwgdmFsdWUpOworICAgICAgICBtX2N1cnJlbnRCbG9jay0+dmFyaWFibGVzQXRU
YWlsLmFyZ3VtZW50KGFyZ3VtZW50KSA9IGFkZFRvR3JhcGgoU2V0TG9jYWwsIE9wSW5mbyhuZXdW
YXJpYWJsZUFjY2Vzc0RhdGEob3BlcmFuZCkpLCB2YWx1ZSk7CiAgICAgfQogCiAgICAgLy8gR2V0
IGFuIG9wZXJhbmQsIGFuZCBwZXJmb3JtIGEgVG9JbnQzMi9Ub051bWJlciBjb252ZXJzaW9uIG9u
IGl0LgpAQCAtNzgzLDggKzc4Myw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDA7IGFyZ3VtZW50IDwg
bV9udW1Bcmd1bWVudHM7ICsrYXJndW1lbnQpIHsKICAgICAgICAgICAgIE5vZGVJbmRleCBzZXRB
cmd1bWVudCA9IGFkZFRvR3JhcGgoU2V0QXJndW1lbnQsIE9wSW5mbyhuZXdWYXJpYWJsZUFjY2Vz
c0RhdGEoYXJndW1lbnQgLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJG
aWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplKSkpOwogICAgICAgICAgICAgbV9ncmFwaC5tX2FyZ3Vt
ZW50c1thcmd1bWVudF0gPSBzZXRBcmd1bWVudDsKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2Nr
LT5tX2FyZ3VtZW50c0F0SGVhZFthcmd1bWVudF0uc2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsK
LSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFthcmd1bWVudF0u
c2V0Rmlyc3RUaW1lKHNldEFyZ3VtZW50KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdEhlYWQuc2V0QXJndW1lbnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50
KTsKKyAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT52YXJpYWJsZXNBdFRhaWwuc2V0QXJndW1l
bnRGaXJzdFRpbWUoYXJndW1lbnQsIHNldEFyZ3VtZW50KTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtMTY4OSwxNiArMTY4OSwxNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwcm9jZXNzUGhpU3Rh
Y2soKQogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7
ICsraSkgewogICAgICAgICAgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3JCbG9jayA9IG1fZ3Jh
cGgubV9ibG9ja3NbcHJlZGVjZXNzb3JzW2ldXS5nZXQoKTsKIAotICAgICAgICAgICAgVmFyaWFi
bGVSZWNvcmQmIHZhciA9IChzdGFja1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNl
c3NvckJsb2NrLT5tX2FyZ3VtZW50c0F0VGFpbFt2YXJOb10gOiBwcmVkZWNlc3NvckJsb2NrLT5t
X2xvY2Fsc0F0VGFpbFt2YXJOb107CisgICAgICAgICAgICBOb2RlSW5kZXgmIHZhciA9IChzdGFj
a1R5cGUgPT0gQXJndW1lbnRQaGlTdGFjaykgPyBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNB
dFRhaWwuYXJndW1lbnQodmFyTm8pIDogcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRUYWls
LmxvY2FsKHZhck5vKTsKIAotICAgICAgICAgICAgTm9kZUluZGV4IHZhbHVlSW5QcmVkZWNlc3Nv
ciA9IHZhci52YWx1ZTsKKyAgICAgICAgICAgIE5vZGVJbmRleCB2YWx1ZUluUHJlZGVjZXNzb3Ig
PSB2YXI7CiAgICAgICAgICAgICBpZiAodmFsdWVJblByZWRlY2Vzc29yID09IE5vTm9kZSkgewog
ICAgICAgICAgICAgICAgIHZhbHVlSW5QcmVkZWNlc3NvciA9IGFkZFRvR3JhcGgoUGhpLCBPcElu
Zm8obmV3VmFyaWFibGVBY2Nlc3NEYXRhKHN0YWNrVHlwZSA9PSBBcmd1bWVudFBoaVN0YWNrID8g
dmFyTm8gLSBtX2NvZGVCbG9jay0+bV9udW1QYXJhbWV0ZXJzIC0gUmVnaXN0ZXJGaWxlOjpDYWxs
RnJhbWVIZWFkZXJTaXplIDogdmFyTm8pKSk7Ci0gICAgICAgICAgICAgICAgdmFyLnNldEZpcnN0
VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIHZhciA9IHZhbHVlSW5Q
cmVkZWNlc3NvcjsKICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUeXBlID09IEFyZ3VtZW50UGhp
U3RhY2spCi0gICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yQmxvY2stPm1fYXJndW1lbnRz
QXRIZWFkW3Zhck5vXS5zZXRGaXJzdFRpbWUodmFsdWVJblByZWRlY2Vzc29yKTsKKyAgICAgICAg
ICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+dmFyaWFibGVzQXRIZWFkLnNldEFyZ3VtZW50
Rmlyc3RUaW1lKHZhck5vLCB2YWx1ZUluUHJlZGVjZXNzb3IpOwogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3JCbG9jay0+bV9sb2NhbHNBdEhlYWRb
dmFyTm9dLnNldEZpcnN0VGltZSh2YWx1ZUluUHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAg
ICAgICBwcmVkZWNlc3NvckJsb2NrLT52YXJpYWJsZXNBdEhlYWQuc2V0TG9jYWxGaXJzdFRpbWUo
dmFyTm8sIHZhbHVlSW5QcmVkZWNlc3Nvcik7CiAgICAgICAgICAgICAgICAgcGhpU3RhY2suYXBw
ZW5kKFBoaVN0YWNrRW50cnkocHJlZGVjZXNzb3JCbG9jaywgdmFsdWVJblByZWRlY2Vzc29yLCB2
YXJObykpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2dyYXBoW3ZhbHVlSW5QcmVkZWNlc3Nv
cl0ub3AgPT0gR2V0TG9jYWwpIHsKICAgICAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGVuc3Vy
ZSB0aGF0IHRoZSBWYXJpYWJsZUFjY2Vzc0RhdGFzIGFyZSBpZGVudGljYWwgYmV0d2VlbiB0aGUK
QEAgLTE3NTgsMTEgKzE3NTgsMTQgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0dXBQcmVkZWNl
c3NvcnMoKQogICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtibG9jay0+ZW5kIC0gMV07CiAg
ICAgICAgIEFTU0VSVChub2RlLmlzVGVybWluYWwoKSk7CiAKLSAgICAgICAgaWYgKG5vZGUuaXNK
dW1wKCkpCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpLm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7Ci0gICAg
ICAgIGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgewotICAgICAgICAgICAgbV9ncmFwaC5ibG9j
a0ZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRlY2Vz
c29ycy5hcHBlbmQoaW5kZXgpOwotICAgICAgICAgICAgbV9ncmFwaC5ibG9ja0ZvckJ5dGVjb2Rl
T2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKS5tX3ByZWRlY2Vzc29ycy5hcHBl
bmQoaW5kZXgpOworICAgICAgICBpZiAobm9kZS5pc0p1bXAoKSkgeworICAgICAgICAgICAgbm9k
ZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQo
bm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7CisgICAgICAgICAgICBt
X2dyYXBoLm1fYmxvY2tzW25vZGUudGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5h
cHBlbmQoaW5kZXgpOworICAgICAgICB9IGVsc2UgaWYgKG5vZGUuaXNCcmFuY2goKSkgeworICAg
ICAgICAgICAgbm9kZS5zZXRUYWtlbkJsb2NrSW5kZXgobV9ncmFwaC5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0RHVyaW5nUGFyc2luZygpKSk7Cisg
ICAgICAgICAgICBub2RlLnNldE5vdFRha2VuQmxvY2tJbmRleChtX2dyYXBoLmJsb2NrSW5kZXhG
b3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5n
KCkpKTsKKyAgICAgICAgICAgIG1fZ3JhcGgubV9ibG9ja3Nbbm9kZS50YWtlbkJsb2NrSW5kZXgo
KV0tPm1fcHJlZGVjZXNzb3JzLmFwcGVuZChpbmRleCk7CisgICAgICAgICAgICBtX2dyYXBoLm1f
YmxvY2tzW25vZGUubm90VGFrZW5CbG9ja0luZGV4KCldLT5tX3ByZWRlY2Vzc29ycy5hcHBlbmQo
aW5kZXgpOwogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4OCwxMSArMTg4LDExIEBAIHZv
aWQgR3JhcGg6OmR1bXAoTm9kZUluZGV4IG5vZGVJbmRleCwgQ28KICAgICAgICAgaGFzUHJpbnRl
ZCA9IHRydWU7CiAgICAgfQogICAgIGlmICAobm9kZS5pc0JyYW5jaCgpIHx8IG5vZGUuaXNKdW1w
KCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc1Q6IyV1IiwgaGFzUHJpbnRlZCA/ICIsICIgOiAiIiwg
YmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKSk7
CisgICAgICAgIHByaW50ZigiJXNUOiMldSIsIGhhc1ByaW50ZWQgPyAiLCAiIDogIiIsIG5vZGUu
dGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBoYXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAg
ICAgaWYgIChub2RlLmlzQnJhbmNoKCkpIHsKLSAgICAgICAgcHJpbnRmKCIlc0Y6IyV1IiwgaGFz
UHJpbnRlZCA/ICIsICIgOiAiIiwgYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUubm90
VGFrZW5CeXRlY29kZU9mZnNldCgpKSk7CisgICAgICAgIHByaW50ZigiJXNGOiMldSIsIGhhc1By
aW50ZWQgPyAiLCAiIDogIiIsIG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCkpOwogICAgICAgICBo
YXNQcmludGVkID0gdHJ1ZTsKICAgICB9CiAgICAgKHZvaWQpaGFzUHJpbnRlZDsKQEAgLTIzOSw4
ICsyMzksMTUgQEAgdm9pZCBHcmFwaDo6ZHVtcChOb2RlSW5kZXggbm9kZUluZGV4LCBDbwogdm9p
ZCBHcmFwaDo6ZHVtcChDb2RlQmxvY2sqIGNvZGVCbG9jaykKIHsKICAgICBmb3IgKHNpemVfdCBi
ID0gMDsgYiA8IG1fYmxvY2tzLnNpemUoKTsgKytiKSB7Ci0gICAgICAgIHByaW50ZigiQmxvY2sg
IyV1IChiYyMldSk6ICAlc1xuIiwgKGludCliLCBtX2Jsb2Nrc1tiXS0+Ynl0ZWNvZGVCZWdpbiwg
bV9ibG9ja3NbYl0tPmlzT1NSVGFyZ2V0ID8gIiAoT1NSIHRhcmdldCkiIDogIiIpOwotICAgICAg
ICBmb3IgKHNpemVfdCBpID0gbV9ibG9ja3NbYl0tPmJlZ2luOyBpIDwgbV9ibG9ja3NbYl0tPmVu
ZDsgKytpKQorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzW2JdLmdldCgpOwor
ICAgICAgICBwcmludGYoIkJsb2NrICMldSAoYmMjJXUpOiAgJXNcbiIsIChpbnQpYiwgYmxvY2st
PmJ5dGVjb2RlQmVnaW4sIGJsb2NrLT5pc09TUlRhcmdldCA/ICIgKE9TUiB0YXJnZXQpIiA6ICIi
KTsKKyAgICAgICAgcHJpbnRmKCIgIHZhcnM6ICIpOworICAgICAgICBpZiAoYmxvY2stPmNmYUhh
c1Zpc2l0ZWQpCisgICAgICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwg
c3Rkb3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCI8ZW1wdHk+Iik7Cisg
ICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGJsb2NrLT5iZWdp
bjsgaSA8IGJsb2NrLT5lbmQ7ICsraSkKICAgICAgICAgICAgIGR1bXAoaSwgY29kZUJsb2NrKTsK
ICAgICB9CiAgICAgcHJpbnRmKCJQaGkgTm9kZXM6XG4iKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYg
RU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJERkdC
YXNpY0Jsb2NrLmgiCiAjaW5jbHVkZSAiREZHTm9kZS5oIgogI2luY2x1ZGUgIlByZWRpY3Rpb25U
cmFja2VyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJGaWxlLmgiCkBAIC00MywyOSArNDQsNiBAQCBj
bGFzcyBFeGVjU3RhdGU7CiAKIG5hbWVzcGFjZSBERkcgewogCi0vLyBoZWxwZXIgZnVuY3Rpb24g
dG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1lbnRzLgotaW5saW5l
IGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJuIG9wZXJhbmQgPCAw
OyB9Ci0KLXR5cGVkZWYgdWludDMyX3QgQmxvY2tJbmRleDsKLQotLy8gRm9yIGV2ZXJ5IGxvY2Fs
IHZhcmlhYmxlIHdlIHRyYWNrIGFueSBleGlzdGluZyBnZXQgb3Igc2V0IG9mIHRoZSB2YWx1ZS4K
LS8vIFdlIHRyYWNrIHRoZSBnZXQgc28gdGhhdCB0aGVzZSBtYXkgYmUgc2hhcmVkLCBhbmQgd2Ug
dHJhY2sgdGhlIHNldCB0bwotLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUsIGFuZCB0byBy
ZWZlcmVuY2UgdGhlIGZpbmFsIGRlZmluaXRpb24uCi1zdHJ1Y3QgVmFyaWFibGVSZWNvcmQgewot
ICAgIFZhcmlhYmxlUmVjb3JkKCkKLSAgICAgICAgOiB2YWx1ZShOb05vZGUpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICB2b2lkIHNldEZpcnN0VGltZShOb2RlSW5kZXggbm9kZUluZGV4KQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHZhbHVlID09IE5vTm9kZSk7Ci0gICAgICAgIHZhbHVlID0gbm9k
ZUluZGV4OwotICAgIH0KLQotICAgIE5vZGVJbmRleCB2YWx1ZTsKLX07Ci0KIHN0cnVjdCBNZXRo
b2RDaGVja0RhdGEgewogICAgIC8vIEl0IGlzIHNhZmUgdG8gcmVmZXIgdG8gdGhlc2UgZGlyZWN0
bHkgYmVjYXVzZSB0aGV5IGFyZSBzaGFkb3dlZCBieQogICAgIC8vIHRoZSBvbGQgSklUJ3MgQ29k
ZUJsb2NrJ3MgTWV0aG9kQ2FsbExpbmtJbmZvLgpAQCAtMTExLDQwICs4OSw2IEBAIHN0cnVjdCBS
ZXNvbHZlR2xvYmFsRGF0YSB7CiAgICAgdW5zaWduZWQgcmVzb2x2ZUluZm9JbmRleDsKIH07CiAK
LXR5cGVkZWYgVmVjdG9yIDxCbG9ja0luZGV4LCAyPiBQcmVkZWNlc3Nvckxpc3Q7Ci0KLXN0cnVj
dCBCYXNpY0Jsb2NrIHsKLSAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW4sIE5v
ZGVJbmRleCBiZWdpbiwgdW5zaWduZWQgbnVtQXJndW1lbnRzLCB1bnNpZ25lZCBudW1Mb2NhbHMp
Ci0gICAgICAgIDogYnl0ZWNvZGVCZWdpbihieXRlY29kZUJlZ2luKQotICAgICAgICAsIGJlZ2lu
KGJlZ2luKQotICAgICAgICAsIGVuZChOb05vZGUpCi0gICAgICAgICwgaXNPU1JUYXJnZXQoZmFs
c2UpCi0gICAgICAgICwgbV9hcmd1bWVudHNBdEhlYWQobnVtQXJndW1lbnRzKQotICAgICAgICAs
IG1fbG9jYWxzQXRIZWFkKG51bUxvY2FscykKLSAgICAgICAgLCBtX2FyZ3VtZW50c0F0VGFpbChu
dW1Bcmd1bWVudHMpCi0gICAgICAgICwgbV9sb2NhbHNBdFRhaWwobnVtTG9jYWxzKQotICAgIHsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgaW5saW5lIEJsb2NrSW5kZXggZ2V0Qnl0ZWNvZGVCZWdpbihP
d25QdHI8QmFzaWNCbG9jaz4qIGJsb2NrKQotICAgIHsKLSAgICAgICAgcmV0dXJuICgqYmxvY2sp
LT5ieXRlY29kZUJlZ2luOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGJ5dGVjb2RlQmVnaW47Ci0g
ICAgTm9kZUluZGV4IGJlZ2luOwotICAgIE5vZGVJbmRleCBlbmQ7Ci0gICAgYm9vbCBpc09TUlRh
cmdldDsKLQotICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKLSAgICAKLSAgICBW
ZWN0b3I8VmFyaWFibGVSZWNvcmQsIDg+IG1fYXJndW1lbnRzQXRIZWFkOwotICAgIFZlY3RvcjxW
YXJpYWJsZVJlY29yZCwgMTY+IG1fbG9jYWxzQXRIZWFkOwotICAgIAotICAgIFZlY3RvcjxWYXJp
YWJsZVJlY29yZCwgOD4gbV9hcmd1bWVudHNBdFRhaWw7Ci0gICAgVmVjdG9yPFZhcmlhYmxlUmVj
b3JkLCAxNj4gbV9sb2NhbHNBdFRhaWw7Ci19OwotCiAvLyAKIC8vID09PSBHcmFwaCA9PT0KIC8v
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3IzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yMzJfNjQuY3BwCShyZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTE2OSw4ICsxMTY5LDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5v
bgogdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoTnVs
bChOb2RlSW5kZXggb3BlcmFuZCwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZl
cnQpCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAg
QmxvY2tJbmRleCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zm
c2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5v
dFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNo
Tm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBi
cmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBi
cmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIGlmICh0YWtlbiA9PSAo
bV9ibG9jayArIDEpKSB7CiAgICAgICAgIGludmVydCA9ICFpbnZlcnQ7CkBAIC0xMjMyLDggKzEy
MzIsOCBAQCBib29sIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlQ29tCiB2b2lkIEpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVCcmFuY2goTm9kZSYgbm9kZSwg
Tm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgQl9ERkdPcGVyYXRpb25fRUpKIGhlbHBlckZ1bmN0aW9uKQogewogICAgIE5v
ZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwotICAgIEJsb2NrSW5kZXggdGFr
ZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2Rl
LnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0
LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUubm90VGFrZW5C
eXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0gYnJhbmNoTm9kZS50YWtl
bkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gYnJhbmNoTm9kZS5ub3RU
YWtlbkJsb2NrSW5kZXgoKTsKIAogICAgIEpJVENvbXBpbGVyOjpSZXN1bHRDb25kaXRpb24gY2Fs
bFJlc3VsdENvbmRpdGlvbiA9IEpJVENvbXBpbGVyOjpOb25aZXJvOwogCkBAIC0xMzc0LDggKzEz
NzQsOCBAQCB2b2lkIEpJVENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlTm9uCiB2b2lkIEpJ
VENvZGVHZW5lcmF0b3I6Om5vblNwZWN1bGF0aXZlUGVlcGhvbGVTdHJpY3RFcShOb2RlJiBub2Rl
LCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCBib29sIGludmVydCkKIHsKICAgICBOb2RlJiBi
cmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0g
bV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtl
bkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFw
aCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNv
ZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5C
bG9ja0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJhbmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNo
IHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFr
ZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUgYnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4g
ZmFsbCB0aHJvdWdoLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb2Rl
R2VuZXJhdG9yNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvcjY0LmNwcAkocmV2aXNpb24gOTcxMDIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvZGVHZW5lcmF0b3I2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMTMsOCArMTExMyw4IEBAIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRp
dmVOb24KIHZvaWQgSklUQ29kZUdlbmVyYXRvcjo6bm9uU3BlY3VsYXRpdmVQZWVwaG9sZUJyYW5j
aE51bGwoTm9kZUluZGV4IG9wZXJhbmQsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIGJvb2wg
aW52ZXJ0KQogewogICAgIE5vZGUmIGJyYW5jaE5vZGUgPSBhdChicmFuY2hOb2RlSW5kZXgpOwot
ICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29k
ZU9mZnNldChicmFuY2hOb2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Ci0gICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJy
YW5jaE5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICBCbG9ja0luZGV4IHRha2Vu
ID0gYnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2Vu
ID0gYnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKICAgICAKICAgICBpZiAodGFrZW4g
PT0gKG1fYmxvY2sgKyAxKSkgewogICAgICAgICBpbnZlcnQgPSAhaW52ZXJ0OwpAQCAtMTE3NCw4
ICsxMTc0LDggQEAgYm9vbCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZUNvbQogdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlQnJhbmNoKE5vZGUmIG5v
ZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmQsIEJfREZHT3BlcmF0aW9uX0VKSiBoZWxwZXJGdW5jdGlvbikKIHsKICAg
ICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKLSAgICBCbG9ja0luZGV4
IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNo
Tm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBt
X2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChicmFuY2hOb2RlLm5vdFRh
a2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IGJyYW5jaE5vZGUu
dGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IGJyYW5jaE5vZGUu
bm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICBKSVRDb21waWxlcjo6UmVzdWx0Q29uZGl0aW9u
IGNhbGxSZXN1bHRDb25kaXRpb24gPSBKSVRDb21waWxlcjo6Tm9uWmVybzsKIApAQCAtMTMwMyw4
ICsxMzAzLDggQEAgdm9pZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZU5vbgogdm9p
ZCBKSVRDb2RlR2VuZXJhdG9yOjpub25TcGVjdWxhdGl2ZVBlZXBob2xlU3RyaWN0RXEoTm9kZSYg
bm9kZSwgTm9kZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgYm9vbCBpbnZlcnQpCiB7CiAgICAgTm9k
ZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtl
biA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUu
dGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5
dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2Vu
QmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRh
a2VuQmxvY2tJbmRleCgpOwogCiAgICAgLy8gVGhlIGJyYW5jaCBpbnN0cnVjdGlvbiB3aWxsIGJy
YW5jaCB0byB0aGUgdGFrZW4gYmxvY2suCiAgICAgLy8gSWYgdGFrZW4gaXMgbmV4dCwgc3dpdGNo
IHRha2VuIHdpdGggbm90VGFrZW4gJiBpbnZlcnQgdGhlIGJyYW5jaCBjb25kaXRpb24gc28gd2Ug
Y2FuIGZhbGwgdGhyb3VnaC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29kZUdlbmVyYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUx
LDYgKzE0NTEsMTEgQEAgcHJvdGVjdGVkOgogICAgICAgICB9CiAgICAgfQogCisgICAgQmFzaWNC
bG9jayogYmxvY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faml0LmdyYXBoKCkubV9ibG9j
a3NbbV9ibG9ja10uZ2V0KCk7CisgICAgfQorCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVt
cChjb25zdCBjaGFyKiBsYWJlbCA9IDApOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCShyZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDA0
LDIzICs0MDQsMTkgQEAgcHVibGljOgogI2lmIEVOQUJMRShERkdfT1NSX0VOVFJZKQogICAgICAg
ICBPU1JFbnRyeURhdGEqIGVudHJ5ID0gY29kZUJsb2NrKCktPmFwcGVuZERGR09TUkVudHJ5RGF0
YShiYXNpY0Jsb2NrLmJ5dGVjb2RlQmVnaW4sIGRpZmZlcmVuY2VCZXR3ZWVuKG1fc3RhcnRPZkNv
ZGUsIGxhYmVsKCkpKTsKICAgICAgICAgCi0gICAgICAgIEFjdGlvbmFibGVQcmVkaWN0aW9ucyBh
Y3Rpb25hYmxlUHJlZGljdGlvbnMoYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCks
IGJhc2ljQmxvY2subV9sb2NhbHNBdEhlYWQuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJhc2ljQmxvY2subV9hcmd1bWVu
dHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUluZGV4ICE9IE5vTm9kZSkK
LSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0QXJndW1lbnQoaSwgYWN0
aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBoW25vZGVJbmRleF0udmFy
aWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOwotICAgICAgICB9CisgICAgICAgIGVu
dHJ5LT5tX2V4cGVjdGVkVmFsdWVzID0gYmFzaWNCbG9jay52YWx1ZXNBdEhlYWQ7CiAgICAgICAg
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmFzaWNCbG9jay5tX2xvY2Fsc0F0
SGVhZC5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGJh
c2ljQmxvY2subV9sb2NhbHNBdEhlYWRbaV0udmFsdWU7Ci0gICAgICAgICAgICBpZiAobm9kZUlu
ZGV4ICE9IE5vTm9kZSkKLSAgICAgICAgICAgICAgICBhY3Rpb25hYmxlUHJlZGljdGlvbnMuc2V0
VmFyaWFibGUoaSwgYWN0aW9uYWJsZVByZWRpY3Rpb25Gcm9tUHJlZGljdGVkVHlwZShtX2dyYXBo
W25vZGVJbmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKSkpOworICAgICAg
ICAvLyBGaXggdGhlIGV4cGVjdGVkIHZhbHVlczogaW4gb3VyIHByb3RvY29sLCBhIGRlYWQgdmFy
aWFibGUgd2lsbCBoYXZlIGFuIGV4cGVjdGVkCisgICAgICAgIC8vIHZhbHVlIG9mIChOb25lLCBb
XSkuIEJ1dCB0aGUgb2xkIEpJVCBtYXkgc3Rhc2ggc29tZSB2YWx1ZXMgdGhlcmUuIFNvIHdlIHJl
YWxseQorICAgICAgICAvLyBuZWVkIChUb3AsIFRPUCkuCisgICAgICAgIGZvciAoc2l6ZV90IGFy
Z3VtZW50ID0gMDsgYXJndW1lbnQgPCBiYXNpY0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJP
ZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYmFzaWNCbG9jay52
YXJpYWJsZXNBdEhlYWQuYXJndW1lbnQoYXJndW1lbnQpID09IE5vTm9kZSkKKyAgICAgICAgICAg
ICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkubWFrZVRvcCgp
OworICAgICAgICB9CisgICAgICAgIGZvciAoc2l6ZV90IGxvY2FsID0gMDsgbG9jYWwgPCBiYXNp
Y0Jsb2NrLnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpOyArK2xvY2FsKSB7CisgICAg
ICAgICAgICBpZiAoYmFzaWNCbG9jay52YXJpYWJsZXNBdEhlYWQubG9jYWwobG9jYWwpID09IE5v
Tm9kZSkKKyAgICAgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2Nh
bCkubWFrZVRvcCgpOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBhY3Rpb25hYmxlUHJl
ZGljdGlvbnMucGFjaygpOwotICAgICAgICAKLSAgICAgICAgZW50cnktPm1fcHJlZGljdGlvbnMg
PSBhY3Rpb25hYmxlUHJlZGljdGlvbnM7CiAjZWxzZQogICAgICAgICBVTlVTRURfUEFSQU0oYmFz
aWNCbG9jayk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxMCArMjYsOCBAQAogI2lmbmRlZiBERkdOb2RlX2gKICNkZWZp
bmUgREZHTm9kZV9oCiAKLSNpbmNsdWRlICJERkdTdHJ1Y3R1cmVTZXQuaCIKICNpbmNsdWRlIDx3
dGYvQm91bmRzQ2hlY2tlZFBvaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KLSNp
bmNsdWRlIDx3dGYvVW5pb25GaW5kLmg+CiAKIC8vIEVtaXQgdmFyaW91cyBsb2dnaW5nIGluZm9y
bWF0aW9uIGZvciBkZWJ1Z2dpbmcsIGluY2x1ZGluZyBkdW1waW5nIHRoZSBkYXRhZmxvdyBncmFw
aHMuCiAjZGVmaW5lIEVOQUJMRV9ERkdfREVCVUdfVkVSQk9TRSAwCkBAIC02Nyw2ICs2NSw4IEBA
CiAjaWYgRU5BQkxFKERGR19KSVQpCiAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRl
ICJERkdPcGVyYW5kcy5oIgorI2luY2x1ZGUgIkRGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIgogI2lu
Y2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJQcmVkaWN0ZWRUeXBlLmgiCiAjaW5jbHVkZSAi
VmFsdWVQcm9maWxlLmgiCkBAIC03NCwxNSArNzQsMTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgewogCi0vLyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChz
cGlsbCBsb2NhdGlvbikuCi0vLyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNr
ZWQgYXQgY29tcGlsZSB0aW1lLCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KLWVudW0gVmly
dHVhbFJlZ2lzdGVyIHsgSW52YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07Ci1DT01QSUxFX0FT
U0VSVChzaXplb2YoVmlydHVhbFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lz
dGVyX2lzXzMyYml0KTsKLQogLy8gVHlwZSBmb3IgYSByZWZlcmVuY2UgdG8gYW5vdGhlciBub2Rl
IGluIHRoZSBncmFwaC4KIHR5cGVkZWYgdWludDMyX3QgTm9kZUluZGV4Owogc3RhdGljIGNvbnN0
IE5vZGVJbmRleCBOb05vZGUgPSBVSU5UX01BWDsKIAordHlwZWRlZiB1aW50MzJfdCBCbG9ja0lu
ZGV4OworCitzdHJ1Y3QgTm9kZUluZGV4VHJhaXRzIHsKKyAgICBzdGF0aWMgTm9kZUluZGV4IGRl
ZmF1bHRWYWx1ZSgpIHsgcmV0dXJuIE5vTm9kZTsgfQorfTsKKwogLy8gSW5mb3JtYXRpb24gdXNl
ZCB0byBtYXAgYmFjayBmcm9tIGFuIGV4Y2VwdGlvbiB0byBhbnkgaGFuZGxlci9zb3VyY2UgaW5m
b3JtYXRpb24sCiAvLyBhbmQgdG8gaW1wbGVtZW50IE9TUi4KIC8vIChQcmVzZW50bHkgaW1wbGVt
ZW50ZWQgYXMgYSBieXRlY29kZSBpbmRleCkuCkBAIC0xMTAsNTEgKzExMSw2IEBAIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV9ieXRlY29kZUluZGV4OwogfTsKIAotY2xhc3MgVmFyaWFibGVBY2Nl
c3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNzRGF0YT4gewotcHVibGljOgot
ICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCi0gICAgICAgIDogbV9sb2NhbChzdGF0aWNfY2FzdDxW
aXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpKQotICAgICAg
ICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIFZh
cmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwpCi0gICAgICAgIDogbV9sb2Nh
bChsb2NhbCkKLSAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGljdE5vbmUpCi0gICAgewotICAg
IH0KLSAgICAKLSAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKLSAgICAgICAgcmV0dXJuIG1fbG9jYWw7
Ci0gICAgfQotICAgIAotICAgIGludCBvcGVyYW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOwotICAgIH0KLSAgICAKLSAgICBib29sIHByZWRpY3Qo
UHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1lcmdlUHJl
ZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlvbik7Ci0gICAgfQotICAgIAot
ICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCi0gICAgewotICAgICAgICByZXR1cm4gZmlu
ZCgpLT5tX3ByZWRpY3Rpb247Ci0gICAgfQotICAgIAotcHJpdmF0ZToKLSAgICAvLyBUaGlzIGlz
IHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0aGluZyB3ZSdyZSB1bmlmaWVk
IHdpdGgKLSAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFuZCBhbmQgc2hvdWxkIGhhdmUg
dGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0Ci0gICAgLy8gcHV0dGluZyB0aGVtIGhlcmUgc2ltcGxp
ZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcgc3BhY2UKLSAgICAvLyB1c2Fn
ZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25pZmljYW50LgotCi0gICAgVmly
dHVhbFJlZ2lzdGVyIG1fbG9jYWw7Ci0gICAgUHJlZGljdGVkVHlwZSBtX3ByZWRpY3Rpb247Ci19
OwotCiBzdHJ1Y3QgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEgewogICAgIFN0cnVjdHVyZSogcHJl
dmlvdXNTdHJ1Y3R1cmU7CiAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmU7CkBAIC01NjQsNiAr
NTIwLDcgQEAgc3RydWN0IE5vZGUgewogICAgIAogICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGVBY2Nlc3NEYXRhKCkKICAgICB7CisgICAgICAgIEFTU0VSVChoYXNWYXJpYWJsZUFjY2Vz
c0RhdGEoKSk7CiAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxlQWNjZXNz
RGF0YSo+KG1fb3BJbmZvKS0+ZmluZCgpOwogICAgIH0KICAgICAKQEAgLTc1NSwxMyArNzEyLDM3
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgcmV0dXJuIG9wICYgTm9kZUlzVGVybWluYWw7CiAg
ICAgfQogCi0gICAgdW5zaWduZWQgdGFrZW5CeXRlY29kZU9mZnNldCgpCisgICAgdW5zaWduZWQg
dGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsKICAgICAgICAgQVNTRVJU
KGlzQnJhbmNoKCkgfHwgaXNKdW1wKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm87CiAgICAg
fQogCi0gICAgdW5zaWduZWQgbm90VGFrZW5CeXRlY29kZU9mZnNldCgpCisgICAgdW5zaWduZWQg
bm90VGFrZW5CeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzQnJhbmNoKCkpOworICAgICAgICByZXR1cm4gbV9vcEluZm8yOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNldFRha2VuQmxvY2tJbmRleChCbG9ja0luZGV4IGJsb2NrSW5kZXgpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNCcmFuY2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIG1fb3BJ
bmZvID0gYmxvY2tJbmRleDsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXROb3RUYWtlbkJsb2Nr
SW5kZXgoQmxvY2tJbmRleCBibG9ja0luZGV4KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQnJh
bmNoKCkpOworICAgICAgICBtX29wSW5mbzIgPSBibG9ja0luZGV4OworICAgIH0KKyAgICAKKyAg
ICBCbG9ja0luZGV4IHRha2VuQmxvY2tJbmRleCgpCisgICAgeworICAgICAgICBBU1NFUlQoaXNC
cmFuY2goKSB8fCBpc0p1bXAoKSk7CisgICAgICAgIHJldHVybiBtX29wSW5mbzsKKyAgICB9Cisg
ICAgCisgICAgQmxvY2tJbmRleCBub3RUYWtlbkJsb2NrSW5kZXgoKQogICAgIHsKICAgICAgICAg
QVNTRVJUKGlzQnJhbmNoKCkpOwogICAgICAgICByZXR1cm4gbV9vcEluZm8yOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHJldmlzaW9uIDk3MTAyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFbnRyeS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc3LDM0ICs3NywzOCBAQCB2b2lkKiBwcmVwYXJlT1NSRW50cnkoRXhlY1N0YXRlKiBl
eGVjLCBDCiAgICAgLy8gICAgaW50byBhIGxlc3MtbGlrZWx5IHBhdGguIFNvLCB0aGUgd2lzZXN0
IGNvdXJzZSBvZiBhY3Rpb24gaXMgdG8gc2ltcGx5IG5vdAogICAgIC8vICAgIE9TUiBhdCB0aGlz
IHRpbWUuCiAgICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGVudHJ5LT5tX3ByZWRp
Y3Rpb25zLmFyZ3VtZW50VXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVBy
ZWRpY3Rpb24gcHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLmFyZ3VtZW50KGkpOwot
ICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKGkgPj0gZXhlYy0+YXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMoKSkgeworICAgIGZvciAoc2l6ZV90IGFyZ3VtZW50ID0gMDsgYXJndW1lbnQg
PCBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5udW1iZXJPZkFyZ3VtZW50cygpOyArK2FyZ3VtZW50
KSB7CisgICAgICAgIGlmIChhcmd1bWVudCA+PSBleGVjLT5hcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcygpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50
ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSB3YXMgbm90IHBhc3NlZCwgZXhw
ZWN0ZWQgJXMuXG4iLCBpLCBhY3Rpb25hYmxlUHJlZGljdGlvblRvU3RyaW5nKHByZWRpY3Rpb24p
KTsKKyAgICAgICAgICAgIHByaW50ZigiICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAl
bHUgd2FzIG5vdCBwYXNzZWQsIGV4cGVjdGVkICIsIGFyZ3VtZW50KTsKKyAgICAgICAgICAgIGVu
dHJ5LT5tX2V4cGVjdGVkVmFsdWVzLmFyZ3VtZW50KGFyZ3VtZW50KS5kdW1wKHN0ZG91dCk7Cisg
ICAgICAgICAgICBwcmludGYoIi5cbiIpOwogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKCF2YWx1ZU9iZXlzUHJlZGljdGlvbihn
bG9iYWxEYXRhLCBleGVjLT5hcmd1bWVudChpIC0gMSksIHByZWRpY3Rpb24pKSB7CisgICAgICAg
IEpTVmFsdWUgdmFsdWU7CisgICAgICAgIGlmICghYXJndW1lbnQpCisgICAgICAgICAgICB2YWx1
ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFs
dWUgPSBleGVjLT5hcmd1bWVudChhcmd1bWVudCAtIDEpOworICAgICAgICAKKyAgICAgICAgaWYg
KCFlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5hcmd1bWVudChhcmd1bWVudCkudmFsaWRhdGUodmFs
dWUpKSB7CiAjaWYgRU5BQkxFKEpJVF9WRVJCT1NFX09TUikKLSAgICAgICAgICAgIHByaW50Zigi
ICAgIE9TUiBmYWlsZWQgYmVjYXVzZSBhcmd1bWVudCAldSBpcyAlcywgZXhwZWN0ZWQgJXMuXG4i
LCBpLCBleGVjLT5hcmd1bWVudChpIC0gMSkuZGVzY3JpcHRpb24oKSwgYWN0aW9uYWJsZVByZWRp
Y3Rpb25Ub1N0cmluZyhwcmVkaWN0aW9uKSk7CisgICAgICAgICAgICBwcmludGYoIiAgICBPU1Ig
ZmFpbGVkIGJlY2F1c2UgYXJndW1lbnQgJWx1IGlzICVzLCBleHBlY3RlZCAiLCBhcmd1bWVudCwg
dmFsdWUuZGVzY3JpcHRpb24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVl
cy5hcmd1bWVudChhcmd1bWVudCkuZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIu
XG4iKTsKICNlbmRpZgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZh
cmlhYmxlVXBwZXJCb3VuZCgpOyArK2kpIHsKLSAgICAgICAgQWN0aW9uYWJsZVByZWRpY3Rpb24g
cHJlZGljdGlvbiA9IGVudHJ5LT5tX3ByZWRpY3Rpb25zLnZhcmlhYmxlKGkpOwotICAgICAgICBp
ZiAocHJlZGljdGlvbiA9PSBOb0FjdGlvbmFibGVQcmVkaWN0aW9uKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIXZhbHVlT2JleXNQcmVkaWN0aW9uKGdsb2Jh
bERhdGEsIGV4ZWMtPnJlZ2lzdGVycygpW2ldLmpzVmFsdWUoKSwgcHJlZGljdGlvbikpIHsKKyAg
ICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwgZW50cnktPm1fZXhwZWN0ZWRWYWx1ZXMu
bnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAoIWVudHJ5LT5tX2V4cGVj
dGVkVmFsdWVzLmxvY2FsKGxvY2FsKS52YWxpZGF0ZShleGVjLT5yZWdpc3RlcnMoKVtsb2NhbF0u
anNWYWx1ZSgpKSkgewogI2lmIEVOQUJMRShKSVRfVkVSQk9TRV9PU1IpCi0gICAgICAgICAgICBw
cmludGYoIiAgICBPU1IgZmFpbGVkIGJlY2F1c2UgdmFyaWFibGUgJXUgaXMgJXMsIGV4cGVjdGVk
ICVzLlxuIiwgaSwgZXhlYy0+cmVnaXN0ZXJzKClbaV0uanNWYWx1ZSgpLmRlc2NyaXB0aW9uKCks
IGFjdGlvbmFibGVQcmVkaWN0aW9uVG9TdHJpbmcocHJlZGljdGlvbikpOworICAgICAgICAgICAg
cHJpbnRmKCIgICAgT1NSIGZhaWxlZCBiZWNhdXNlIHZhcmlhYmxlICVsdSBpcyAlcywgZXhwZWN0
ZWQgIiwgbG9jYWwsIGV4ZWMtPnJlZ2lzdGVycygpW2xvY2FsXS5qc1ZhbHVlKCkuZGVzY3JpcHRp
b24oKSk7CisgICAgICAgICAgICBlbnRyeS0+bV9leHBlY3RlZFZhbHVlcy5sb2NhbChsb2NhbCku
ZHVtcChzdGRvdXQpOworICAgICAgICAgICAgcHJpbnRmKCIuXG4iKTsKICNlbmRpZgogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRW50cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkVudHJ5LmgJKHJldmlzaW9uIDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFbnRyeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw4IEBACiAjaWZu
ZGVmIERGR09TUkVudHJ5X2gKICNkZWZpbmUgREZHT1NSRW50cnlfaAogCi0jaW5jbHVkZSAiQWN0
aW9uYWJsZVByZWRpY3Rpb24uaCIKKyNpbmNsdWRlICJERkdBYnN0cmFjdFZhbHVlLmgiCisjaW5j
bHVkZSAiREZHT3BlcmFuZHMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTM5LDcgKzQwLDcg
QEAgbmFtZXNwYWNlIERGRyB7CiBzdHJ1Y3QgT1NSRW50cnlEYXRhIHsKICAgICB1bnNpZ25lZCBt
X2J5dGVjb2RlSW5kZXg7CiAgICAgdW5zaWduZWQgbV9tYWNoaW5lQ29kZU9mZnNldDsKLSAgICBB
Y3Rpb25hYmxlUHJlZGljdGlvbnMgbV9wcmVkaWN0aW9uczsKKyAgICBPcGVyYW5kczxBYnN0cmFj
dFZhbHVlPiBtX2V4cGVjdGVkVmFsdWVzOwogfTsKIAogaW5saW5lIHVuc2lnbmVkIGdldE9TUkVu
dHJ5RGF0YUJ5dGVjb2RlSW5kZXgoT1NSRW50cnlEYXRhKiBvc3JFbnRyeURhdGEpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYW5kcy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR09wZXJhbmRzX2gKKyNkZWZpbmUgREZHT3BlcmFuZHNfaAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBoZWxw
ZXIgZnVuY3Rpb24gdG8gZGlzdGluZ3Vpc2ggdmFycyAmIHRlbXBvcmFyaWVzIGZyb20gYXJndW1l
bnRzLgoraW5saW5lIGJvb2wgb3BlcmFuZElzQXJndW1lbnQoaW50IG9wZXJhbmQpIHsgcmV0dXJu
IG9wZXJhbmQgPCAwOyB9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBPcGVyYW5kVmFs
dWVUcmFpdHM7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgT3BlcmFuZFZhbHVlVHJh
aXRzIHsKKyAgICBzdGF0aWMgVCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiBUKCk7IH0KK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cyA9IE9wZXJhbmRWYWx1ZVRyYWl0
czxUPiA+CitjbGFzcyBPcGVyYW5kcyB7CitwdWJsaWM6CisgICAgT3BlcmFuZHMoKSB7IH0KKyAg
ICAKKyAgICBleHBsaWNpdCBPcGVyYW5kcyhzaXplX3QgbnVtQXJndW1lbnRzLCBzaXplX3QgbnVt
TG9jYWxzKQorICAgIHsKKyAgICAgICAgbV9hcmd1bWVudHMuZmlsbChUcmFpdHM6OmRlZmF1bHRW
YWx1ZSgpLCBudW1Bcmd1bWVudHMpOworICAgICAgICBtX2xvY2Fscy5maWxsKFRyYWl0czo6ZGVm
YXVsdFZhbHVlKCksIG51bUxvY2Fscyk7CisgICAgfQorICAgIAorICAgIHNpemVfdCBudW1iZXJP
ZkFyZ3VtZW50cygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKTsgfQorICAgIHNp
emVfdCBudW1iZXJPZkxvY2FscygpIGNvbnN0IHsgcmV0dXJuIG1fbG9jYWxzLnNpemUoKTsgfQor
ICAgIAorICAgIFQmIGFyZ3VtZW50KHNpemVfdCBpZHgpIHsgcmV0dXJuIG1fYXJndW1lbnRzW2lk
eF07IH0KKyAgICBjb25zdCBUJiBhcmd1bWVudChzaXplX3QgaWR4KSBjb25zdCB7IHJldHVybiBt
X2FyZ3VtZW50c1tpZHhdOyB9CisgICAgCisgICAgVCYgbG9jYWwoc2l6ZV90IGlkeCkgeyByZXR1
cm4gbV9sb2NhbHNbaWR4XTsgfQorICAgIGNvbnN0IFQmIGxvY2FsKHNpemVfdCBpZHgpIGNvbnN0
IHsgcmV0dXJuIG1fbG9jYWxzW2lkeF07IH0KKyAgICAKKyAgICB2b2lkIHNldExvY2FsKHNpemVf
dCBpZHgsIGNvbnN0IFQmIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGlkeCA+PSBtX2xvY2Fs
cy5zaXplKCkpIHsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9sb2NhbHMuc2l6ZSgp
OworICAgICAgICAgICAgbV9sb2NhbHMucmVzaXplKGlkeCArIDEpOworICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCBtX2xvY2Fscy5zaXplKCk7ICsraSkKKyAgICAgICAg
ICAgICAgICBtX2xvY2Fsc1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1fbG9jYWxzW2lkeF0gPSB2YWx1ZTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBzZXRBcmd1bWVudEZpcnN0VGltZShzaXplX3QgaWR4LCBjb25zdCBUJiB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2FyZ3VtZW50c1tpZHhdID09IFRyYWl0czo6ZGVmYXVs
dFZhbHVlKCkpOworICAgICAgICBhcmd1bWVudChpZHgpID0gdmFsdWU7CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0TG9jYWxGaXJzdFRpbWUoc2l6ZV90IGlkeCwgY29uc3QgVCYgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoaWR4ID49IG1fbG9jYWxzLnNpemUoKSB8fCBtX2xvY2Fsc1tp
ZHhdID09IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCkpOworICAgICAgICBzZXRMb2NhbChpZHgsIHZh
bHVlKTsKKyAgICB9CisgICAgCisgICAgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkKKyAgICB7Cisg
ICAgICAgIGlmIChvcGVyYW5kSXNBcmd1bWVudChvcGVyYW5kKSkgeworICAgICAgICAgICAgaW50
IGFyZ3VtZW50ID0gb3BlcmFuZCArIG1fYXJndW1lbnRzLnNpemUoKSArIFJlZ2lzdGVyRmlsZTo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZTsKKyAgICAgICAgICAgIHJldHVybiBtX2FyZ3VtZW50c1thcmd1
bWVudF07CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybiBtX2xvY2Fsc1tvcGVy
YW5kXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVCYgb3BlcmFuZChpbnQgb3BlcmFuZCkgY29u
c3QgeyByZXR1cm4gY29uc3RfY2FzdDxjb25zdCBUJj4oY29uc3RfY2FzdDxPcGVyYW5kcyo+KHRo
aXMpLT5vcGVyYW5kKG9wZXJhbmQpKTsgfQorICAgIAorICAgIHZvaWQgc2V0T3BlcmFuZChpbnQg
b3BlcmFuZCwgY29uc3QgVCYgdmFsdWUpCisgICAgeworICAgICAgICBpZiAob3BlcmFuZElzQXJn
dW1lbnQob3BlcmFuZCkpIHsKKyAgICAgICAgICAgIGludCBhcmd1bWVudCA9IG9wZXJhbmQgKyBt
X2FyZ3VtZW50cy5zaXplKCkgKyBSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemU7Cisg
ICAgICAgICAgICBtX2FyZ3VtZW50c1thcmd1bWVudF0gPSB2YWx1ZTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0TG9jYWwob3BlcmFuZCwgdmFs
dWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBt
X2FyZ3VtZW50c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9sb2NhbHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2xvY2Fs
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBWZWN0b3I8VCwgOD4gbV9hcmd1bWVudHM7CisgICAgVmVjdG9yPFQsIDE2PiBtX2xvY2FsczsK
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Cit2b2lkIGR1bXBPcGVyYW5kcyhPcGVyYW5kczxU
PiYgb3BlcmFuZHMsIEZJTEUqIG91dCkKK3sKKyAgICBmb3IgKHNpemVfdCBhcmd1bWVudCA9IDA7
IGFyZ3VtZW50IDwgb3BlcmFuZHMubnVtYmVyT2ZBcmd1bWVudHMoKTsgKythcmd1bWVudCkgewor
ICAgICAgICBpZiAoYXJndW1lbnQpCisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAg
ICAgICAgb3BlcmFuZHMuYXJndW1lbnQoYXJndW1lbnQpLmR1bXAob3V0KTsKKyAgICB9CisgICAg
ZnByaW50ZihvdXQsICIgOiAiKTsKKyAgICBmb3IgKHNpemVfdCBsb2NhbCA9IDA7IGxvY2FsIDwg
b3BlcmFuZHMubnVtYmVyT2ZMb2NhbHMoKTsgKytsb2NhbCkgeworICAgICAgICBpZiAobG9jYWwp
CisgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiAiKTsKKyAgICAgICAgb3BlcmFuZHMubG9jYWwo
bG9jYWwpLmR1bXAob3V0KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT3BlcmFuZHNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Byb3BhZ2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJvcGFnYXRvci5jcHAJKHJl
dmlzaW9uIDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcm9wYWdhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKERGR19K
SVQpCiAKKyNpbmNsdWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlICJERkdTY29yZUJvYXJkLmgiCiAjaW5jbHVkZSA8d3RmL0ZpeGVkQXJyYXku
aD4KQEAgLTU1LDQ1ICs1NiwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXhwb2ludCgpCiAgICAg
ewogI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKLSAgICBtX2dyYXBo
LmR1bXAobV9jb2RlQmxvY2spOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2RlQmxvY2spOwog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAg
ICAgIG1fY291bnQgPSAwOwotI2VuZGlmCi0gICAgICAgIGRvIHsKLSAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBVcCBoZXJlIHdlIHN0
YXJ0IHdpdGggYSBiYWNrd2FyZCBwYXNzIGJlY2F1c2Ugd2Ugc3VzcGVjdCB0aGF0IHRvIGJlCi0g
ICAgICAgICAgICAvLyBtb3JlIHByb2ZpdGFibGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVBcml0
aE5vZGVGbGFnc0JhY2t3YXJkKCk7Ci0gICAgICAgICAgICBpZiAoIW1fY2hhbmdlZCkKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFnc0ZvcndhcmQoKTsKLSAg
ICAgICAgfSB3aGlsZSAobV9jaGFuZ2VkKTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKERGR19ERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQotICAgICAgICBtX2NvdW50ID0gMDsKLSNlbmRpZgotICAg
ICAgICBkbyB7Ci0gICAgICAgICAgICBtX2NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gRm9yd2FyZCBwcm9wYWdhdGlvbiBpcyBuZWFyLW9wdGltYWwgZm9yIGJv
dGggdG9wb2xvZ2ljYWxseS1zb3J0ZWQgYW5kCi0gICAgICAgICAgICAvLyBERlMtc29ydGVkIGNv
ZGUuCi0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0aW9uc0ZvcndhcmQoKTsKLSAgICAgICAg
ICAgIGlmICghbV9jaGFuZ2VkKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Ci0gICAgICAgICAgICAvLyBCYWNrd2FyZCBwcm9wYWdhdGlvbiByZWR1Y2VzIHRoZSBsaWtlbGlo
b29kIHRoYXQgcGF0aG9sb2dpY2FsIGNvZGUgd2lsbAotICAgICAgICAgICAgLy8gY2F1c2Ugc2xv
d25lc3MuIExvb3BzIChlc3BlY2lhbGx5IG5lc3RlZCBvbmVzKSByZXNlbWJsZSBiYWNrd2FyZCBm
bG93LgotICAgICAgICAgICAgLy8gVGhpcyBwYXNzIGNhcHR1cmVzIHR3byBjYXNlczogKDEpIGl0
IGRldGVjdHMgaWYgdGhlIGZvcndhcmQgZml4cG9pbnQKLSAgICAgICAgICAgIC8vIGZvdW5kIGEg
c291bmQgc29sdXRpb24gYW5kICgyKSBzaG9ydC1jaXJjdWl0cyBiYWNrd2FyZCBmbG93LgotICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcm9wYWdhdGVQcmVkaWN0
aW9uc0JhY2t3YXJkKCk7Ci0gICAgICAgIH0gd2hpbGUgKG1fY2hhbmdlZCk7Ci0gICAgICAgIAor
ICAgICAgICBwcm9wYWdhdGVBcml0aE5vZGVGbGFncygpOworICAgICAgICBwcm9wYWdhdGVQcmVk
aWN0aW9ucygpOwogICAgICAgICBmaXh1cCgpOwogICAgICAgICAKICNpZiBFTkFCTEUoREZHX0RF
QlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC0xMTAsNiArNzcsMTMgQEAgcHVibGljOgogCiAg
ICAgICAgIGFsbG9jYXRlVmlydHVhbFJlZ2lzdGVycygpOwogCisjaWYgRU5BQkxFKERGR19ERUJV
R19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAgICAgICBwcmludGYoIkdyYXBoIGFmdGVyIHZpcnR1
YWwgcmVnaXN0ZXIgYWxsb2NhdGlvbjpcbiIpOworICAgICAgICBtX2dyYXBoLmR1bXAobV9jb2Rl
QmxvY2spOworI2VuZGlmCisKKyAgICAgICAgZ2xvYmFsQ0ZBKCk7CisKICNpZiBFTkFCTEUoREZH
X0RFQlVHX1ZFUkJPU0UpCiAgICAgICAgIHByaW50ZigiR3JhcGggYWZ0ZXIgcHJvcGFnYXRpb246
XG4iKTsKICAgICAgICAgbV9ncmFwaC5kdW1wKG1fY29kZUJsb2NrKTsKQEAgLTI3NCw2ICsyNDgs
MjUgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzKG1fZ3Jh
cGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBwcm9wYWdhdGVBcml0
aE5vZGVGbGFncygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAgICAgICAgZG8geworICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFVw
IGhlcmUgd2Ugc3RhcnQgd2l0aCBhIGJhY2t3YXJkIHBhc3MgYmVjYXVzZSB3ZSBzdXNwZWN0IHRo
YXQgdG8gYmUKKyAgICAgICAgICAgIC8vIG1vcmUgcHJvZml0YWJsZS4KKyAgICAgICAgICAgIHBy
b3BhZ2F0ZUFyaXRoTm9kZUZsYWdzQmFja3dhcmQoKTsKKyAgICAgICAgICAgIGlmICghbV9jaGFu
Z2VkKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2NoYW5nZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIHByb3BhZ2F0ZUFyaXRoTm9kZUZsYWdzRm9y
d2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBi
b29sIHNldFByZWRpY3Rpb24oUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKICAgICAg
ICAgQVNTRVJUKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLmhhc1Jlc3VsdCgpKTsKQEAgLTYwOCw3
ICs2MDEsNyBAQCBwcml2YXRlOgogICAgICAgICB9CiAKICNpZiBFTkFCTEUoREZHX0RFQlVHX1BS
T1BBR0FUSU9OX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiJXMgIiwgcHJlZGljdGlvblRvU3Ry
aW5nKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSkpOworICAgICAgICBwcmlu
dGYoIiVzXG4iLCBwcmVkaWN0aW9uVG9TdHJpbmcobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJl
ZGljdGlvbigpKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIG1fY2hhbmdlZCB8PSBjaGFu
Z2VkOwpAQCAtNjMyLDYgKzYyNSwyOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcHJvcGFnYXRl
Tm9kZVByZWRpY3Rpb25zKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBwcm9wYWdhdGVQcmVkaWN0aW9ucygpCisgICAgeworI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAg
ICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZvcndhcmQgcHJvcGFnYXRpb24gaXMgbmVhci1vcHRpbWFsIGZvciBi
b3RoIHRvcG9sb2dpY2FsbHktc29ydGVkIGFuZAorICAgICAgICAgICAgLy8gREZTLXNvcnRlZCBj
b2RlLgorICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGljdGlvbnNGb3J3YXJkKCk7CisgICAgICAg
ICAgICBpZiAoIW1fY2hhbmdlZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gQmFja3dhcmQgcHJvcGFnYXRpb24gcmVkdWNlcyB0aGUgbGlrZWxp
aG9vZCB0aGF0IHBhdGhvbG9naWNhbCBjb2RlIHdpbGwKKyAgICAgICAgICAgIC8vIGNhdXNlIHNs
b3duZXNzLiBMb29wcyAoZXNwZWNpYWxseSBuZXN0ZWQgb25lcykgcmVzZW1ibGUgYmFja3dhcmQg
Zmxvdy4KKyAgICAgICAgICAgIC8vIFRoaXMgcGFzcyBjYXB0dXJlcyB0d28gY2FzZXM6ICgxKSBp
dCBkZXRlY3RzIGlmIHRoZSBmb3J3YXJkIGZpeHBvaW50CisgICAgICAgICAgICAvLyBmb3VuZCBh
IHNvdW5kIHNvbHV0aW9uIGFuZCAoMikgc2hvcnQtY2lyY3VpdHMgYmFja3dhcmQgZmxvdy4KKyAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJvcGFnYXRlUHJlZGlj
dGlvbnNCYWNrd2FyZCgpOworICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOworICAgIH0KKyAg
ICAKICAgICB2b2lkIHRvRG91YmxlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogICAgICAg
ICBpZiAobV9ncmFwaFtub2RlSW5kZXhdLm9wID09IFZhbHVlVG9OdW1iZXIpIHsKQEAgLTE0NDUs
NiArMTQ2MSw4MSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9jb2RlQmxvY2stPm1fbnVtQ2Fs
bGVlUmVnaXN0ZXJzID0gY2FsbGVlUmVnaXN0ZXJzOwogICAgIH0KICAgICAKKyAgICB2b2lkIHBl
cmZvcm1CbG9ja0NGQShBYnN0cmFjdFN0YXRlJiBzdGF0ZSwgQmxvY2tJbmRleCBibG9ja0luZGV4
KQorICAgIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Js
b2NrSW5kZXhdLmdldCgpOworICAgICAgICBpZiAoIWJsb2NrLT5jZmFTaG91bGRSZXZpc2l0KQor
ICAgICAgICAgICAgcmV0dXJuOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVS
Qk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICBCbG9jayAjJXUgKGJjIyV1KTpcbiIsIGJsb2NrSW5k
ZXgsIGJsb2NrLT5ieXRlY29kZUJlZ2luKTsKKyNlbmRpZgorICAgICAgICBzdGF0ZS5iZWdpbkJh
c2ljQmxvY2soYmxvY2spOworI2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9T
RSkKKyAgICAgICAgcHJpbnRmKCIgICAgICBoZWFkIHZhcnM6ICIpOworICAgICAgICBkdW1wT3Bl
cmFuZHMoYmxvY2stPnZhbHVlc0F0SGVhZCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIp
OworI2VuZGlmCisgICAgICAgIGZvciAoTm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLT5iZWdp
bjsgbm9kZUluZGV4IDwgYmxvY2stPmVuZDsgKytub2RlSW5kZXgpIHsKKyAgICAgICAgICAgIGlm
ICghbV9ncmFwaFtub2RlSW5kZXhdLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisjaWYgRU5BQkxFKERGR19ERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQorICAg
ICAgICAgICAgcHJpbnRmKCIgICAgICAlcyBAJXU6ICIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4KTsKKyAgICAgICAgICAgIHN0YXRlLmR1bXAoc3Rkb3V0
KTsKKyAgICAgICAgICAgIHByaW50ZigiXG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKCFz
dGF0ZS5leGVjdXRlKG5vZGVJbmRleCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyNpZiBFTkFCTEUoREZHX0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCisgICAgICAgIHBy
aW50ZigiICAgICAgdGFpbCByZWdzOiAiKTsKKyAgICAgICAgc3RhdGUuZHVtcChzdGRvdXQpOwor
ICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgbV9jaGFuZ2VkIHw9IHN0YXRl
LmVuZEJhc2ljQmxvY2soQWJzdHJhY3RTdGF0ZTo6TWVyZ2VUb1N1Y2Nlc3NvcnMpOworI2lmIEVO
QUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRmKCIgICAg
ICB0YWlsIHZhcnM6ICIpOworICAgICAgICBkdW1wT3BlcmFuZHMoYmxvY2stPnZhbHVlc0F0VGFp
bCwgc3Rkb3V0KTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworI2VuZGlmCisgICAgfQorICAgIAor
ICAgIHZvaWQgcGVyZm9ybUZvcndhcmRDRkEoQWJzdHJhY3RTdGF0ZSYgc3RhdGUpCisgICAgewor
I2lmIEVOQUJMRShERkdfREVCVUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgcHJpbnRm
KCJDRkEgWyV1XVxuIiwgKyttX2NvdW50KTsKKyNlbmRpZgorICAgICAgICAKKyAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrID0gMDsgYmxvY2sgPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsg
KytibG9jaykKKyAgICAgICAgICAgIHBlcmZvcm1CbG9ja0NGQShzdGF0ZSwgYmxvY2spOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGdsb2JhbENGQSgpCisgICAgeworI2lmIEVOQUJMRShERkdfREVC
VUdfUFJPUEFHQVRJT05fVkVSQk9TRSkKKyAgICAgICAgbV9jb3VudCA9IDA7CisjZW5kaWYKKyAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIHBzZXVkby13b3JrbGlzdC1iYXNl
ZCBmb3J3YXJkIENGQSwgZXhjZXB0IHRoYXQgdGhlIHZpc2l0IG9yZGVyCisgICAgICAgIC8vIG9m
IGJsb2NrcyBpcyB0aGUgYnl0ZWNvZGUgcHJvZ3JhbSBvcmRlciAod2hpY2ggaXMgbmVhcmx5IHRv
cG9sb2dpY2FsKSwgYW5kCisgICAgICAgIC8vIGluc3RlYWQgb2YgYSB3b3JrbGlzdCB3ZSBqdXN0
IHdhbGsgYWxsIGJhc2ljIGJsb2NrcyBjaGVja2luZyBpZiBjZmFTaG91bGRSZXZpc2l0CisgICAg
ICAgIC8vIGlzIHNldCB0byB0cnVlLiBUaGlzIGlzIGxpa2VseSB0byBiYWxhbmNlIHRoZSBlZmZp
Y2llbmN5IHByb3BlcnRpZXMgb2YgYm90aAorICAgICAgICAvLyB3b3JrbGlzdC1iYXNlZCBhbmQg
Zm9yd2FyZCBmaXhwb2ludC1iYXNlZCBhcHByb2FjaGVzLiBMaWtlIGEgd29ya2xpc3QtYmFzZWQK
KyAgICAgICAgLy8gYXBwcm9hY2gsIGl0IHdvbid0IHZpc2l0IGNvZGUgaWYgaXQncyBtZWFuaW5n
bGVzcyB0byBkbyBzbyAobm90aGluZyBjaGFuZ2VkIGF0CisgICAgICAgIC8vIHRoZSBoZWFkIG9m
IHRoZSBibG9jayBvciB0aGUgcHJlZGVjZXNzb3JzIGhhdmUgbm90IGJlZW4gdmlzaXRlZCkuIExp
a2UgYSBmb3J3YXJkCisgICAgICAgIC8vIGZpeHBvaW50LWJhc2VkIGFwcHJvYWNoLCBpdCBoYXMg
YSBoaWdoIHByb2JhYmlsaXR5IG9mIG9ubHkgdmlzaXRpbmcgYSBibG9jaworICAgICAgICAvLyBh
ZnRlciBhbGwgcHJlZGVjZXNzb3JzIGhhdmUgYmVlbiB2aXNpdGVkLiBPbmx5IGxvb3BzIHdpbGwg
Y2F1c2UgdGhpcyBhbmFseXNpcyB0bworICAgICAgICAvLyByZXZpc2l0IGJsb2NrcywgYW5kIHRo
ZSBhbW91bnQgb2YgcmV2aXNpdGluZyBpcyBwcm9wb3J0aW9uYWwgdG8gbG9vcCBkZXB0aC4KKyAg
ICAgICAgCisgICAgICAgIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUobV9ncmFwaCk7CisgICAg
ICAgIAorICAgICAgICBBYnN0cmFjdFN0YXRlIHN0YXRlKG1fY29kZUJsb2NrLCBtX2dyYXBoKTsK
KyAgICAgICAgCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOwor
ICAgICAgICAgICAgcGVyZm9ybUZvcndhcmRDRkEoc3RhdGUpOworICAgICAgICB9IHdoaWxlICht
X2NoYW5nZWQpOworICAgIH0KKyAgICAKICAgICBHcmFwaCYgbV9ncmFwaDsKICAgICBKU0dsb2Jh
bERhdGEmIG1fZ2xvYmFsRGF0YTsKICAgICBDb2RlQmxvY2sqIG1fY29kZUJsb2NrOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0Nyw3ICszNDcsNyBA
QCBKSVRDb21waWxlcjo6SnVtcCBTcGVjdWxhdGl2ZUpJVDo6Y29udmVyCiAgICAgcmV0dXJuIG5v
dE51bWJlcjsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaXR5
KE5vZGUmIG5vZGUsIHZvaWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0RXF1YWxpdHkoTm9kZSYgbm9kZSwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIgcHJl
ZGljdGlvbkNoZWNrKQogewogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2Rl
LmNoaWxkMSgpKTsKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGls
ZDIoKSk7CkBAIC0zNTksOCArMzU5LDEwIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVP
YmplY3RFcXVhbGkKICAgICBHUFJSZWcgcmVzdWx0VGFnR1BSID0gcmVzdWx0VGFnLmdwcigpOwog
ICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsKICAgICAK
LSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmICghcHJl
ZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsK
ICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIG9wMkdQUik7CiAgICAgbV9qaXQu
bW92ZShJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CkBAIC0zODAsOSArMzgyLDkgQEAgYm9v
bCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLAogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIGlmIChOb2RlOjpzaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdChhdChub2RlLmNo
aWxkMSgpKSwgYXQobm9kZS5jaGlsZDIoKSkpKQotICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxp
dHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAgICAg
IGNvbXBpbGVPYmplY3RFcXVhbGl0eShub2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyLCBpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbik7CiAgICAgZWxzZSBpZiAoTm9kZTo6
c2hvdWxkU3BlY3VsYXRlQXJyYXkoYXQobm9kZS5jaGlsZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkp
KSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgaXNBcnJheVByZWRpY3Rpb24pOwogICAgIGVs
c2UgaWYgKCFhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSAmJiAhYXQo
bm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCiAgICAgICAgIG5vblNwZWN1
bGF0aXZlTm9uUGVlcGhvbGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAg
ICBlbHNlIGlmICgoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkgfHwg
YXQobm9kZS5jaGlsZDIoKSkuc2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpICYmICFOb2RlOjpzaG91
bGRTcGVjdWxhdGVJbnRlZ2VyKGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkp
IHsKQEAgLTQzOCw3ICs0NDAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVB
ZGQoTm9kCiAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcuZ3ByKCksIHJlc3VsdFBheWxvYWQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2RlSW5kZXgsIHZvaWQqIHZwdHIp
Cit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9k
ZUluZGV4IG5vZGVJbmRleCwgdm9pZCogdnB0ciwgYm9vbCBuZWVkU3BlY3VsYXRpb25DaGVjaykK
IHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlSW5kZXgpOwogICAgIEdQUlRl
bXBvcmFyeSByZXN1bHRUYWcodGhpcyk7CkBAIC00NTEsMTYgKzQ1MywxOSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlc3VsdFRhZy5ncHIoKSk7CiAgICAgCiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSk7
Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25D
aGVjaykKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUo
VHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQp
OwogIAogICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRlZmluZWRUYWcgfCAxKSA9PSBK
U1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVBTFNfTnVsbFRhZyk7Ci0gICAg
bV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgbV9qaXQub3Iz
MihUcnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwotICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRQYXlsb2Fk
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICBpZiAobmVlZFNwZWN1
bGF0aW9uQ2hlY2spIHsKKyAgICAgICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgcmVzdWx0UGF5
bG9hZEdQUik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCByZXN1bHRQYXls
b2FkR1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpOdWxsVGFnKSkpOworICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVz
dWx0UGF5bG9hZEdQUik7CiAgICAgCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7CkBAIC00NzMsMTEg
KzQ3OCwxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAgICAg
Ly8gRklYTUU6IE5lZWQgdG8gYWRkIGZhc3QgcGF0aHMgZm9yIGtub3duIGJvb2xlYW5zLgogCiAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0T3JPdGhl
cigpKSB7Ci0gICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxk
MSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgY29t
cGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIsICFpc0ZpbmFsT2JqZWN0T3JPdGhlclByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVBcnJheU9y
T3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5j
aGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGNvbXBp
bGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNoaWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyLCAhaXNBcnJheU9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CkBAIC01NDMs
NyArNTQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogI2Vu
ZGlmCiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKE5v
ZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4s
IHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyYW5j
aChOb2RlSW5kZXggbm9kZUluZGV4LCBCbG9ja0luZGV4IHRha2VuLCBCbG9ja0luZGV4IG5vdFRh
a2VuLCB2b2lkICp2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKQogewogICAgIEpTVmFs
dWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGVJbmRleCk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0
Y2godGhpcywgdmFsdWUpOwpAQCAtNTUyLDE1ICs1NTcsMTggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5n
cHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
UGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAg
aWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIp
KSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENl
bGwubGluaygmbV9qaXQpOwogICAgIAogICAgIENPTVBJTEVfQVNTRVJUKChKU1ZhbHVlOjpVbmRl
ZmluZWRUYWcgfCAxKSA9PSBKU1ZhbHVlOjpOdWxsVGFnLCBVbmRlZmluZWRUYWdfT1JfMV9FUVVB
TFNfTnVsbFRhZyk7Ci0gICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQUik7Ci0g
ICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICBpZiAobmVlZFNwZWN1
bGF0aW9uQ2hlY2spIHsKKyAgICAgICAgbV9qaXQubW92ZSh2YWx1ZVRhZ0dQUiwgc2NyYXRjaEdQ
Uik7CisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoR1BSKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOworICAg
IH0KIAogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CkBAIC01NzAsMTUgKzU3OCwxNSBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2goTm9kZSYgbm9kZSkKIHsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQu
Z3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zm
c2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5k
ZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAg
QmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRl
eCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICAvLyBGSVhNRTog
QWRkIGZhc3QgY2FzZXMgZm9yIGtub3duIEJvb2xlYW4hCiAKICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgZW1p
dE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2pp
dC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9y
T3RoZXJCcmFuY2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAg
ICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtl
biwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RP
ck90aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewogICAgICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBib29sIGlu
dmVydCA9IGZhbHNlOwpAQCAtNjQ0LDYgKzY1Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlv
bigpOworICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZhbHVlc0F0SGVh
ZC5vcGVyYW5kKG5vZGUubG9jYWwoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVk
aWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAg
ICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKQEAgLTY4NCw3ICs2OTMsMTQg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2dw
cnMucmV0YWluKHJlc3VsdC5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwog
ICAgICAgICBtX2dwcnMucmV0YWluKHRhZy5ncHIoKSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9y
ZGVySlMpOwogCi0gICAgICAgIERhdGFGb3JtYXQgZm9ybWF0ID0gaXNCb29sZWFuUHJlZGljdGlv
bihwcmVkaWN0aW9uKSA/IERhdGFGb3JtYXRKU0Jvb2xlYW4gOiBEYXRhRm9ybWF0SlM7CisgICAg
ICAgIERhdGFGb3JtYXQgZm9ybWF0OworICAgICAgICBpZiAoaXNDZWxsUHJlZGljdGlvbih2YWx1
ZS5tX3R5cGUpKQorICAgICAgICAgICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQ2VsbDsKKyAgICAg
ICAgZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbih2YWx1ZS5tX3R5cGUpKQorICAgICAgICAg
ICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTQm9vbGVhbjsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgZm9ybWF0ID0gRGF0YUZvcm1hdEpTOworCiAgICAgICAgIG1fZ2VuZXJhdGlvbkluZm9bdmly
dHVhbFJlZ2lzdGVyXS5pbml0SlNWYWx1ZShtX2NvbXBpbGVJbmRleCwgbm9kZS5yZWZDb3VudCgp
LCB0YWcuZ3ByKCksIHJlc3VsdC5ncHIoKSwgZm9ybWF0KTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpAQCAtNzEzLDcgKzcyOSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAg
ICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
Y2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBK
SVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIHsgLy8gRklYTUU6IEFkZCBCb29s
ZWFuUHJlZGljdGlvbiBoYW5kbGluZwpAQCAtMTMxNiw3ICsxMzMzLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3Zl
Y3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVk
IHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KLSAgICAg
ICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIApAQCAtMTM2OSw3ICsxMzg2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIENo
ZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVk
IHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhh
dmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBj
aGVjay4KLSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAg
IGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CkBAIC0xNDUxLDcgKzE0NjgsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAogICAgICAgICB3
cml0ZUJhcnJpZXIoYmFzZUdQUiwgdmFsdWVUYWdHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFy
cmllckZvclByb3BlcnR5QWNjZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAot
ICAgICAgICBpZiAoIWlzS25vd25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFp
c0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTQ5
Nyw3ICsxNTE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgc3RvcmFnZUdQUiA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CkBAIC0xNTQ0LDcg
KzE1NjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogCiAgICAgY2FzZSBERkc6Okp1bXA6IHsKLSAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG1f
aml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KG5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKKyAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0lu
ZGV4KCk7CiAgICAgICAgIGlmICh0YWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBp
bGVJbmRleCk7CkBAIC0xNTU1LDggKzE1NzIsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGlmIChpc1N0cmljdEludDMyKG5vZGUuY2hpbGQxKCkp
IHx8IGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludGVnZXIoKSkgewogICAgICAg
ICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgb3AodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgp
LmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7
Ci0gICAgICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0lu
ZGV4Rm9yQnl0ZWNvZGVPZmZzZXQobm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAg
ICAgICAgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAg
ICAgICAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlv
biBjb25kaXRpb24gPSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzsKICAgICAgICAgICAgIApAQCAt
MTc2OCw3ICsxNzg1LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBpZiAoaXNPYmplY3RQcmVkaWN0aW9uKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRp
Y3Rpb24oKSkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHRoaXNWYWx1ZSh0
aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6
QWRkcmVzcyh0aGlzVmFsdWUuZ3ByKCkpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIGlmICghaXNPYmpl
Y3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGls
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIGNlbGxSZXN1bHQodGhpc1ZhbHVlLmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4MTAsOSArMTgyOCwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIE5lZWQg
dG8gdmVyaWZ5IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVh
c29uIHRvIGJlbGlldmUKICAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3
ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCiAgICAgICAgIC8vIGRv
IHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9kZS5j
aGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwotICAgICAgICBl
bHNlIHsKKyAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFs
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpKSk7CiAgICAgICAgIH0KQEAgLTE5NDgsNyArMTk2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdw
cigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAK
LSAgICAgICAgaWYgKCFpc0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICgh
aXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
CiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkp
OwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwpAQCAtMTk2
Nyw3ICsxOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25vd25TdHJp
bmcobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9m
ZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwpAQCAtMTk4NCw2ICsyMDAzLDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIENo
ZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKSkgeworICAgICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkpOwpAQCAtMjExMCw3ICsyMTM0LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7
CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAgICAgICAgCi0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1
cmUpKSk7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fc3Ry
dWN0dXJlLmRvZXNOb3RDb250YWluQW55T3RoZXJUaGFuKG1ldGhvZENoZWNrRGF0YS5zdHJ1Y3R1
cmUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0aG9kQ2hlY2tE
YXRhLnN0cnVjdHVyZSkpKTsKICAgICAgICAgaWYgKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGUg
IT0gbV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5tZXRob2RDYWxsRHVtbXkoKSkg
ewogICAgICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtZXRo
b2RDaGVja0RhdGEucHJvdG90eXBlLT5zdHJ1Y3R1cmVBZGRyZXNzKCkpLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiksIEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1cmUpKSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHJldmlzaW9uIDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUwLDcgKzQ1MCw3IEBAIEpJ
VENvbXBpbGVyOjpKdW1wIFNwZWN1bGF0aXZlSklUOjpjb252ZXIKICAgICByZXR1cm4gbm90TnVt
YmVyOwogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0RXF1YWxpdHkoTm9k
ZSYgbm9kZSwgdm9pZCogdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RF
cXVhbGl0eShOb2RlJiBub2RlLCB2b2lkKiB2cHRyLCBQcmVkaWN0aW9uQ2hlY2tlciBwcmVkaWN0
aW9uQ2hlY2spCiB7CiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hp
bGQxKCkpOwogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigp
KTsKQEAgLTQ2MCw4ICs0NjAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dEVxdWFsaQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Ci0gICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih2cHRyKSkpOworICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYg
KCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkp
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBv
cDFHUFIsIG9wMkdQUik7CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRH
UFIpOwpAQCAtNTAxLDkgKzUwMyw5IEBAIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBhcmUoTm9k
ZSYgbm9kZSwKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PSBD
b21wYXJlRXEgJiYgTm9kZTo6c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoYXQobm9kZS5jaGls
ZDEoKSksIGF0KG5vZGUuY2hpbGQyKCkpKSkKLSAgICAgICAgY29tcGlsZU9iamVjdEVxdWFsaXR5
KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpOworICAgICAgICBj
b21waWxlT2JqZWN0RXF1YWxpdHkobm9kZSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2Jq
ZWN0VlB0ciwgaXNGaW5hbE9iamVjdFByZWRpY3Rpb24pOwogICAgIGVsc2UgaWYgKG5vZGUub3Ag
PT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNwZWN1bGF0ZUFycmF5KGF0KG5vZGUuY2hpbGQx
KCkpLCBhdChub2RlLmNoaWxkMigpKSkpCi0gICAgICAgIGNvbXBpbGVPYmplY3RFcXVhbGl0eShu
b2RlLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKTsKKyAgICAgICAgY29tcGlsZU9i
amVjdEVxdWFsaXR5KG5vZGUsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIsIGlzQXJy
YXlQcmVkaWN0aW9uKTsKICAgICBlbHNlCiAgICAgICAgIG5vblNwZWN1bGF0aXZlTm9uUGVlcGhv
bGVDb21wYXJlKG5vZGUsIGNvbmRpdGlvbiwgb3BlcmF0aW9uKTsKICAgICAKQEAgLTUyOSw3ICs1
MzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVBZGQoTm9kCiAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKIH0KIAotdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCBub2Rl
SW5kZXgsIHZvaWQgKnZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JP
dGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IG5vZGVJbmRleCwgdm9pZCAqdnB0ciwgYm9vbCBuZWVk
U3BlY3VsYXRpb25DaGVjaykKIHsKICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2Rl
SW5kZXgpOwogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CkBAIC01MzcsMTUgKzUzOSwx
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgc3BlY3VsYXRpb25DaGVj
ayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIp
KSk7CisgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1faml0KTsKICAgICAKLSAg
ICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgIG1faml0LmFuZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwot
ICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVj
aykgeworICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgICAgICBt
X2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgcmVzdWx0R1BSKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgfQog
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1
ZSkpLCByZXN1bHRHUFIpOwogICAgIAogICAgIGRvbmUubGluaygmbV9qaXQpOwpAQCAtNTY2LDEx
ICs1NzEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVj
dWxhdGVGaW5hbE9iamVjdE9yT3RoZXIoKSkgewotICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhl
ckxvZ2ljYWxOb3Qobm9kZS5jaGlsZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2Jq
ZWN0VlB0cik7CisgICAgICAgIGNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdChub2RlLmNo
aWxkMSgpLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyLCAhaXNGaW5hbE9i
amVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlQXJyYXlPck90aGVyKCkpIHsKLSAgICAgICAgY29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KG5vZGUuY2hpbGQxKCksIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJh
eVZQdHIpOworICAgICAgICBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3Qobm9kZS5jaGls
ZDEoKSwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0ciwgIWlzQXJyYXlPck90aGVyUHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludGVnZXIoKSkgewpAQCAtNjMwLDE5ICs2MzUsMjIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBp
bGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbiwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5
KTsKIH0KIAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goTm9k
ZUluZGV4IG5vZGVJbmRleCwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwg
dm9pZCAqdnB0cikKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNo
KE5vZGVJbmRleCBub2RlSW5kZXgsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFr
ZW4sIHZvaWQgKnZwdHIsIGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spCiB7CiAgICAgSlNWYWx1
ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZUluZGV4KTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2
YWx1ZS5ncHIoKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3Rlcik7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKG5l
ZWRTcGVjdWxhdGlvbkNoZWNrKQorICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZh
bHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBhZGRC
cmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2pp
dCk7CiAgICAgCi0gICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
flRhZ0JpdFVuZGVmaW5lZCksIHZhbHVlR1BSKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkp
OworICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgeworICAgICAgICBtX2ppdC5hbmRQdHIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgdmFsdWVHUFIp
OworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgIH0KICAgICBpZiAobm90VGFr
ZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90
VGFrZW4pOwogICAgIApAQCAtNjU0LDggKzY2Miw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRCcmFuY2goTm9kZSYgbm8KICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKICAgICAKLSAgICBC
bG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZz
ZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2NrSW5kZXggbm90VGFrZW4g
PSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLm5vdFRha2Vu
Qnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0YWtlbiA9IG5vZGUudGFrZW5CbG9j
a0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0lu
ZGV4KCk7CiAgICAgCiAgICAgaWYgKGlzS25vd25Cb29sZWFuKG5vZGUuY2hpbGQxKCkpKSB7CiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0gTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm87CkBAIC02NzMsOSArNjgxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmluYWxPYmplY3RPck90aGVyKCkpIHsKLSAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFu
Y2gobm9kZS5jaGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpz
RmluYWxPYmplY3RWUHRyKTsKKyAgICAgICAgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gobm9kZS5j
aGlsZDEoKSwgdGFrZW4sIG5vdFRha2VuLCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmpl
Y3RWUHRyLCAhaXNGaW5hbE9iamVjdE9yT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUFycmF5T3JPdGhlcigpKSB7Ci0gICAgICAgIGVtaXRPYmplY3RPck90
aGVyQnJhbmNoKG5vZGUuY2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cik7CisgICAgICAgIGVtaXRPYmplY3RPck90aGVyQnJhbmNoKG5vZGUu
Y2hpbGQxKCksIHRha2VuLCBub3RUYWtlbiwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
ciwgIWlzQXJyYXlPck90aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVj
dWxhdGVOdW1iZXIoKSkgewogICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlSW50ZWdlcigpKSB7CiAgICAgICAgICAgICBib29sIGludmVydCA9IGZhbHNlOwpAQCAt
NzA4LDkgKzcxNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFuY2goTm9kZSYgbm8K
ICAgICAgICAgaWYgKHByZWRpY3RCb29sZWFuKSB7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1i
bGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2Vu
KTsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUo
anNCb29sZWFuKHRydWUpKSkpLCB0YWtlbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChwcmVkaWN0Qm9vbGVhbikgeworCiAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1f
aml0Lmp1bXAoKSk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgfSBlbHNlIHsK
QEAgLTc0OCwxNSArNzU0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKIAogICAgIGNhc2UgR2V0TG9jYWw6IHsKICAgICAgICAgUHJlZGljdGVkVHlwZSBwcmVk
aWN0aW9uID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IGJsb2NrKCktPnZhbHVlc0F0SGVhZC5vcGVyYW5kKG5v
ZGUubG9jYWwoKSk7CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0
aGlzIGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KLSAgICAgICAgaWYgKHBy
ZWRpY3Rpb24gPT0gUHJlZGljdE5vbmUpIHsKKyAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gUHJl
ZGljdE5vbmUgfHwgdmFsdWUuaXNDbGVhcigpKSB7CiAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbigpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIGlmIChpc0lu
dDMyUHJlZGljdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rp
b24odmFsdWUubV90eXBlKSkgewogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKG5vZGUubG9jYWwoKSksIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAgICAg
IC8vIExpa2UgaW50ZWdlclJlc3VsdCwgYnV0IGRvbid0IHVzZUNoaWxkcmVuIC0gb3VyIGNoaWxk
cmVuIGFyZSBwaGkgbm9kZXMsCkBAIC03NzUsOSArNzgyLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBtX2dwcnMucmV0YWluKHJlc3VsdC5ncHIo
KSwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVySlMpOwogCiAgICAgICAgIERhdGFGb3JtYXQg
Zm9ybWF0OwotICAgICAgICBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGlvbikpCisgICAg
ICAgIGlmIChpc0NlbGxQcmVkaWN0aW9uKHZhbHVlLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3Jt
YXQgPSBEYXRhRm9ybWF0SlNDZWxsOwotICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHZh
bHVlLm1fdHlwZSkpCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlNCb29sZWFuOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSBEYXRhRm9ybWF0SlM7CkBAIC04MjAs
NyArODI3LDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICB9IGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSBjZWxsLmdwcigpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIGlm
ICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGlj
dGVkVHlwZSkpIHsKQEAgLTE0MjMsNyArMTQzMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJy
YXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92
ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0
byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAgICAgIGlmICghaXNL
bm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVj
dG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKQEAgLTE0NzMsNyArMTQ4MSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBDaGVjayB0aGF0IGJh
c2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92
ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3Rl
ZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCi0gICAg
ICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKIAog
ICAgICAgICBiYXNlLnVzZSgpOwpAQCAtMTU1Niw3ICsxNTY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CiAKLSAgICAgICAgaWYgKCFp
c0tub3duQXJyYXkobm9kZS5jaGlsZDEoKSkpCisgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCiAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0Fy
cmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKQEAgLTE1OTksNyArMTYwNyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVn
IHN0b3JhZ2VHUFIgPSBzdG9yYWdlLmdwcigpOwogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0
aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIWlzS25v
d25BcnJheShub2RlLmNoaWxkMSgpKSkKKyAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6
OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwpAQCAtMTY0Miw3ICsxNjUwLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KIAogICAgIGNhc2Ug
REZHOjpKdW1wOiB7Ci0gICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJs
b2NrSW5kZXhGb3JCeXRlY29kZU9mZnNldChub2RlLnRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7Cisg
ICAgICAgIEJsb2NrSW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOwogICAgICAg
ICBpZiAodGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2pp
dC5qdW1wKCksIHRha2VuKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwpAQCAt
MTY1Myw4ICsxNjYxLDggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBpZiAoaXNTdHJpY3RJbnQzMihub2RlLmNoaWxkMSgpKSB8fCBhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpIHsKICAgICAgICAgICAgIFNwZWN1bGF0
ZUludGVnZXJPcGVyYW5kIG9wKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9y
Qnl0ZWNvZGVPZmZzZXQobm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgICAgICAgICAg
QmxvY2tJbmRleCBub3RUYWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2Rl
T2Zmc2V0KG5vZGUubm90VGFrZW5CeXRlY29kZU9mZnNldCgpKTsKKyAgICAgICAgICAgIEJsb2Nr
SW5kZXggdGFrZW4gPSBub2RlLnRha2VuQmxvY2tJbmRleCgpOworICAgICAgICAgICAgQmxvY2tJ
bmRleCBub3RUYWtlbiA9IG5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uID0g
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm87CiAgICAgICAgICAgICAKQEAgLTE4MjcsOSArMTgzNSwx
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBHUFJSZWcgdGhpc1ZhbHVlR1BSID0gdGhpc1ZhbHVlLmdwcigpOwogICAgICAgICAgICAgR1BS
UmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBtX2pp
dC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwg
c2NyYXRjaEdQUik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAg
ICAgICAgICBpZiAoIWlzT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIs
IHNjcmF0Y2hHUFIpOworICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpKSwgc2NyYXRjaEdQUik7CiAgICAg
ICAgICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTE4Mzks
NyArMTg0OSw4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgaWYgKGlzT2JqZWN0UHJlZGljdGlvbihhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9u
KCkpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCB0aGlzVmFsdWUodGhpcywg
bm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJl
c3ModGhpc1ZhbHVlLmdwcigpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKKyAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1
YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZS5ncHIoKSksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBjZWxsUmVzdWx0KHRoaXNWYWx1ZS5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xODc5LDkgKzE4OTAsMTAgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBOZWVkIHRvIHZl
cmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJlYXNvbiB0
byBiZWxpZXZlCiAgICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4gd2Ugc3Bl
Y3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQogICAgICAgICAvLyBkbyB0aGUg
c2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQx
KCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKLSAgICAgICAgZWxzZSB7
CisgICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVj
dCgpKSB7CisgICAgICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOworICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhw
cm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAg
ICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZv
VHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkp
OwogICAgICAgICB9CkBAIC0yMDEwLDcgKzIwMjIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCi0gICAg
ICAgIGlmICghaXNLbm93bkFycmF5KG5vZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQogICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKQEAgLTIwMjksNyAr
MjA0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOwogICAgICAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFpc0tub3duU3RyaW5nKG5v
ZGUuY2hpbGQxKCkpKQorICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQu
bG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRP
Zkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKQEAgLTIwNDQsNiArMjA1NiwxMSBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICBjYXNlIENoZWNrU3RydWN0dXJlOiB7CisgICAgICAgIGlmIChtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV9zdHJ1Y3R1cmUuaXNTdWJzZXRPZihub2RlLnN0cnVjdHVyZVNldCgpKSkg
eworICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJh
c2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIAogICAgICAgICBBU1NFUlQobm9kZS5z
dHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwpAQCAtMjE2Myw3ICsyMTgwLDggQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIoKTsKICAg
ICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJVENvbXBp
bGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0
YS5zdHJ1Y3R1cmUpKSk7CisgICAgICAgIGlmICghbV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fc3RydWN0dXJlLmRvZXNOb3RDb250YWluQW55T3RoZXJUaGFuKG1ldGhvZENoZWNrRGF0
YS5zdHJ1Y3R1cmUpKQorICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5icmFuY2hQ
dHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobWV0
aG9kQ2hlY2tEYXRhLnN0cnVjdHVyZSkpKTsKICAgICAgICAgaWYgKG1ldGhvZENoZWNrRGF0YS5w
cm90b3R5cGUgIT0gbV9qaXQuY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdCgpLT5tZXRob2RDYWxs
RHVtbXkoKSkgewogICAgICAgICAgICAgbV9qaXQubW92ZShKSVRDb21waWxlcjo6VHJ1c3RlZElt
bVB0cihtZXRob2RDaGVja0RhdGEucHJvdG90eXBlLT5zdHJ1Y3R1cmVBZGRyZXNzKCkpLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiksIEpJ
VENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1ldGhvZENoZWNrRGF0YS5wcm90b3R5cGVTdHJ1Y3R1
cmUpKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gOTcxMDIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDggKzEyNSw4IEBA
IHZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVEb3VibGVCcmFuY2goTm9kZSYgbm9kZSwgTm9kZUluZGV4IGJyYW5j
aE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCiB7CiAg
ICAgTm9kZSYgYnJhbmNoTm9kZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRl
eCB0YWtlbiA9IG1faml0LmdyYXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5j
aE5vZGUudGFrZW5CeXRlY29kZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
bV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RU
YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2Rl
LnRha2VuQmxvY2tJbmRleCgpOworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2Rl
Lm5vdFRha2VuQmxvY2tJbmRleCgpOwogICAgIAogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgb3Ay
KHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpAQCAtMTM3LDExICsxMzcsMTEgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlRG91YgogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVt
cCgpLCBub3RUYWtlbik7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9s
ZU9iamVjdEVxdWFsaXR5KE5vZGUmIG5vZGUsIE5vZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIHZv
aWQqIHZwdHIpCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVh
bGl0eShOb2RlJiBub2RlLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2b2lkKiB2cHRyLCBQ
cmVkaWN0aW9uQ2hlY2tlciBwcmVkaWN0aW9uQ2hlY2spCiB7CiAgICAgTm9kZSYgYnJhbmNoTm9k
ZSA9IGF0KGJyYW5jaE5vZGVJbmRleCk7Ci0gICAgQmxvY2tJbmRleCB0YWtlbiA9IG1faml0Lmdy
YXBoKCkuYmxvY2tJbmRleEZvckJ5dGVjb2RlT2Zmc2V0KGJyYW5jaE5vZGUudGFrZW5CeXRlY29k
ZU9mZnNldCgpKTsKLSAgICBCbG9ja0luZGV4IG5vdFRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9j
a0luZGV4Rm9yQnl0ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS5ub3RUYWtlbkJ5dGVjb2RlT2Zmc2V0
KCkpOworICAgIEJsb2NrSW5kZXggdGFrZW4gPSBicmFuY2hOb2RlLnRha2VuQmxvY2tJbmRleCgp
OworICAgIEJsb2NrSW5kZXggbm90VGFrZW4gPSBicmFuY2hOb2RlLm5vdFRha2VuQmxvY2tJbmRl
eCgpOwogCiAgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9u
ID0gTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOwogICAgIApAQCAtMTU4LDggKzE1OCwxMCBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIAotICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIodnB0cikpKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgaWYgKCFwcmVkaWN0aW9u
Q2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2sobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIodnB0cikpKTsKKyAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDIoKSkubV90eXBlKSkKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAog
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiks
IHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKQEAgLTE2OSw4ICsx
NzEsOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVJbnRlZ2VyQnJhbmNoKE5vZGUmIG5vZGUsIE5v
ZGVJbmRleCBicmFuY2hOb2RlSW5kZXgsIEpJVENvbXBpbGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmRpdGlvbikKIHsKICAgICBOb2RlJiBicmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4
KTsKLSAgICBCbG9ja0luZGV4IHRha2VuID0gbV9qaXQuZ3JhcGgoKS5ibG9ja0luZGV4Rm9yQnl0
ZWNvZGVPZmZzZXQoYnJhbmNoTm9kZS50YWtlbkJ5dGVjb2RlT2Zmc2V0KCkpOwotICAgIEJsb2Nr
SW5kZXggbm90VGFrZW4gPSBtX2ppdC5ncmFwaCgpLmJsb2NrSW5kZXhGb3JCeXRlY29kZU9mZnNl
dChicmFuY2hOb2RlLm5vdFRha2VuQnl0ZWNvZGVPZmZzZXQoKSk7CisgICAgQmxvY2tJbmRleCB0
YWtlbiA9IGJyYW5jaE5vZGUudGFrZW5CbG9ja0luZGV4KCk7CisgICAgQmxvY2tJbmRleCBub3RU
YWtlbiA9IGJyYW5jaE5vZGUubm90VGFrZW5CbG9ja0luZGV4KCk7CiAKICAgICAvLyBUaGUgYnJh
bmNoIGluc3RydWN0aW9uIHdpbGwgYnJhbmNoIHRvIHRoZSB0YWtlbiBibG9jay4KICAgICAvLyBJ
ZiB0YWtlbiBpcyBuZXh0LCBzd2l0Y2ggdGFrZW4gd2l0aCBub3RUYWtlbiAmIGludmVydCB0aGUg
YnJhbmNoIGNvbmRpdGlvbiBzbyB3ZSBjYW4gZmFsbCB0aHJvdWdoLgpAQCAtMjE5LDExICsyMjEs
MTEgQEAgYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlQnJhbgogICAgICAgICAg
ICAgdXNlKG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgdXNlKG5vZGUuY2hpbGQyKCkpOwog
ICAgICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT0gQ29tcGFyZUVxICYmIE5vZGU6OnNob3VsZFNw
ZWN1bGF0ZUZpbmFsT2JqZWN0KGF0KG5vZGUuY2hpbGQxKCkpLCBhdChub2RlLmNoaWxkMigpKSkp
IHsKLSAgICAgICAgICAgIGNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KG5vZGUsIGJyYW5j
aE5vZGVJbmRleCwgbV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cik7CisgICAg
ICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShub2RlLCBicmFuY2hOb2RlSW5k
ZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIsIGlzRmluYWxPYmplY3RQ
cmVkaWN0aW9uKTsKICAgICAgICAgICAgIHVzZShub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
IHVzZShub2RlLmNoaWxkMigpKTsKICAgICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09IENvbXBh
cmVFcSAmJiBOb2RlOjpzaG91bGRTcGVjdWxhdGVBcnJheShhdChub2RlLmNoaWxkMSgpKSwgYXQo
bm9kZS5jaGlsZDIoKSkpKSB7Ci0gICAgICAgICAgICBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVh
bGl0eShub2RlLCBicmFuY2hOb2RlSW5kZXgsIG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpOworICAgICAgICAgICAgY29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkobm9kZSwgYnJh
bmNoTm9kZUluZGV4LCBtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyLCBpc0FycmF5UHJl
ZGljdGlvbik7CiAgICAgICAgICAgICB1c2Uobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICB1
c2Uobm9kZS5jaGlsZDIoKSk7CiAgICAgICAgIH0gZWxzZQpAQCAtMjU2LDE4ICsyNTgsMjEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShCYXNpY0Jsb2NrJgogICAgIG1faml0LmJyZWFr
cG9pbnQoKTsKICNlbmRpZgogCi0gICAgQVNTRVJUKG1fYXJndW1lbnRzLnNpemUoKSA9PSBibG9j
ay5tX2FyZ3VtZW50c0F0SGVhZC5zaXplKCkpOworICAgIEFTU0VSVChtX2FyZ3VtZW50cy5zaXpl
KCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkpOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Tm9kZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fYXJndW1lbnRzQXRIZWFkW2ldLnZhbHVlOwor
ICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmFyZ3Vt
ZW50KGkpOwogICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgIG1f
YXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIG1fYXJndW1lbnRzW2ldID0gVmFsdWVTb3VyY2U6OmZvclByZWRp
Y3Rpb24oYXQobm9kZUluZGV4KS52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpKTsK
ICAgICB9CiAgICAgCi0gICAgQVNTRVJUKG1fdmFyaWFibGVzLnNpemUoKSA9PSBibG9jay5tX2xv
Y2Fsc0F0SGVhZC5zaXplKCkpOworICAgIG1fc3RhdGUucmVzZXQoKTsKKyAgICBtX3N0YXRlLmJl
Z2luQmFzaWNCbG9jaygmYmxvY2spOworICAgIAorICAgIEFTU0VSVChtX3ZhcmlhYmxlcy5zaXpl
KCkgPT0gYmxvY2sudmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV92YXJpYWJsZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgTm9k
ZUluZGV4IG5vZGVJbmRleCA9IGJsb2NrLm1fbG9jYWxzQXRIZWFkW2ldLnZhbHVlOworICAgICAg
ICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYmxvY2sudmFyaWFibGVzQXRIZWFkLmxvY2FsKGkpOwog
ICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkKICAgICAgICAgICAgIG1fdmFyaWFibGVz
W2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJblJlZ2lzdGVyRmlsZSk7CiAgICAgICAgIGVsc2UKQEAg
LTMzNyw2ICszNDIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKEJhc2ljQmxvY2sm
CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICNlbmRpZgogICAgICAgICAKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGFic3RyYWN0IHN0YXRlIGlzIHJlbWF0ZXJpYWxpemVk
IGZvciB0aGUgbmV4dCBub2RlLgorICAgICAgICBtX3N0YXRlLmV4ZWN1dGUobV9jb21waWxlSW5k
ZXgpOworICAgICAgICAKICAgICAgICAgaWYgKG5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKICAgICAg
ICAgICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICB9CkBAIC01MzcsNyArNTQ1LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQQogICAgIEdQUlJlZyBzdHJpbmdS
ZWcgPSBzdHJpbmcuZ3ByKCk7CiAgICAgR1BSUmVnIGluZGV4UmVnID0gaW5kZXguZ3ByKCk7CiAg
ICAgCi0gICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAgIGlmICghaXNT
dHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQog
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ1JlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwog
ICAgIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVn
YXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKQEAgLTU2Niw3ICs1
NzQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgR1BS
UmVnIGJhc2VSZWcgPSBiYXNlLmdwcigpOwogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3Bl
cnR5LmdwcigpOwogCi0gICAgaWYgKCFpc0tub3duU3RyaW5nKG5vZGUuY2hpbGQxKCkpKQorICAg
IGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQogICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0
cikpKTsKIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQg
bmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDk3MTAyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAorI2luY2x1ZGUgPGRmZy9ERkdBYnN0cmFjdFN0YXRlLmg+CiAjaW5jbHVkZSA8ZGZnL0RGR0pJ
VENvZGVHZW5lcmF0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewpAQCAt
NDE3LDQzICs0MTgsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIGluZm8uaXNKU0ludGVn
ZXIoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBpc0tub3duQXJyYXkoTm9kZUluZGV4IG9wMSkK
LSAgICB7Ci0gICAgICAgIE5vZGUmIG5vZGUgPSBhdChvcDEpOwotICAgICAgICBzd2l0Y2ggKG5v
ZGUub3ApIHsKLSAgICAgICAgY2FzZSBHZXRMb2NhbDoKLSAgICAgICAgICAgIHJldHVybiBpc0Fy
cmF5UHJlZGljdGlvbihub2RlLnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgTmV3QXJyYXk6Ci0gICAgICAgIGNhc2UgTmV3QXJy
YXlCdWZmZXI6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAg
ICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0tub3duU3RyaW5nKE5vZGVJbmRleCBvcDEpCi0gICAgewotICAgICAgICBz
d2l0Y2ggKGF0KG9wMSkub3ApIHsKLSAgICAgICAgY2FzZSBTdHJDYXQ6Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIAotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotICAgIAogICAgIGJvb2wgY29tcGFyZShO
b2RlJiwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24sIE1hY3JvQXNzZW1ibGVy
OjpEb3VibGVDb25kaXRpb24sIEJfREZHT3BlcmF0aW9uX0VKSik7CiAgICAgYm9vbCBjb21waWxl
UGVlcEhvbGVCcmFuY2goTm9kZSYsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uLCBCX0RGR09wZXJhdGlvbl9FSkopOwog
ICAgIHZvaWQgY29tcGlsZVBlZXBIb2xlSW50ZWdlckJyYW5jaChOb2RlJiwgTm9kZUluZGV4IGJy
YW5jaE5vZGVJbmRleCwgSklUQ29tcGlsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogICAgIHZv
aWQgY29tcGlsZVBlZXBIb2xlRG91YmxlQnJhbmNoKE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9k
ZUluZGV4LCBKSVRDb21waWxlcjo6RG91YmxlQ29uZGl0aW9uKTsKLSAgICB2b2lkIGNvbXBpbGVQ
ZWVwSG9sZU9iamVjdEVxdWFsaXR5KE5vZGUmLCBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4LCB2
b2lkKiB2cHRyKTsKLSAgICB2b2lkIGNvbXBpbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgdm9pZCog
dnB0cik7CisgICAgdm9pZCBjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eShOb2RlJiwgTm9k
ZUluZGV4IGJyYW5jaE5vZGVJbmRleCwgdm9pZCogdnB0ciwgUHJlZGljdGlvbkNoZWNrZXIpOwor
ICAgIHZvaWQgY29tcGlsZU9iamVjdEVxdWFsaXR5KE5vZGUmLCB2b2lkKiB2cHRyLCBQcmVkaWN0
aW9uQ2hlY2tlcik7CiAgICAgdm9pZCBjb21waWxlVmFsdWVBZGQoTm9kZSYpOwotICAgIHZvaWQg
Y29tcGlsZU9iamVjdE9yT3RoZXJMb2dpY2FsTm90KE5vZGVJbmRleCB2YWx1ZSwgdm9pZCogdnB0
cik7CisgICAgdm9pZCBjb21waWxlT2JqZWN0T3JPdGhlckxvZ2ljYWxOb3QoTm9kZUluZGV4IHZh
bHVlLCB2b2lkKiB2cHRyLCBib29sIG5lZWRTcGVjdWxhdGlvbkNoZWNrKTsKICAgICB2b2lkIGNv
bXBpbGVMb2dpY2FsTm90KE5vZGUmKTsKLSAgICB2b2lkIGVtaXRPYmplY3RPck90aGVyQnJhbmNo
KE5vZGVJbmRleCB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbiwg
dm9pZCAqdnB0cik7CisgICAgdm9pZCBlbWl0T2JqZWN0T3JPdGhlckJyYW5jaChOb2RlSW5kZXgg
dmFsdWUsIEJsb2NrSW5kZXggdGFrZW4sIEJsb2NrSW5kZXggbm90VGFrZW4sIHZvaWQgKnZwdHIs
IGJvb2wgbmVlZFNwZWN1bGF0aW9uQ2hlY2spOwogICAgIHZvaWQgZW1pdEJyYW5jaChOb2RlJik7
CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0Q2hhckNvZGVBdChOb2RlJik7CkBAIC01NzUsNiAr
NTQ5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICB1aW50MzJf
dCBtX2J5dGVjb2RlSW5kZXhGb3JPU1I7CiAgICAgCisgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRl
OworICAgIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlGb3IoY29uc3Qg
VmFsdWVTb3VyY2UmKTsKIAogICAgIFZhbHVlUmVjb3ZlcnkgY29tcHV0ZVZhbHVlUmVjb3ZlcnlG
b3IoaW50IG9wZXJhbmQpCkBAIC04MDcsNiArNzgzLDcgQEAgaW5saW5lIFNwZWN1bGF0aXZlSklU
OjpTcGVjdWxhdGl2ZUpJVChKSQogICAgICwgbV92YXJpYWJsZXMoaml0LmdyYXBoKCkubV9sb2Nh
bFZhcnMpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWF4KCkpCiAgICAgLCBtX2J5dGVjb2RlSW5kZXhGb3JPU1Ioc3RkOjpudW1lcmljX2xpbWl0czx1
aW50MzJfdD46Om1heCgpKQorICAgICwgbV9zdGF0ZShtX2ppdC5jb2RlQmxvY2soKSwgbV9qaXQu
Z3JhcGgoKSkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJ1
Y3R1cmVTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0
cnVjdHVyZVNldC5oCShyZXZpc2lvbiA5NzEwMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3RydWN0dXJlU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDEyIEBACiAj
aWZuZGVmIERGR1N0cnVjdHVyZVNldF9oCiAjZGVmaW5lIERGR1N0cnVjdHVyZVNldF9oCiAKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVk
ZSAiUHJlZGljdGVkVHlwZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTM0LDYgKzQwLDggQEAgY2xhc3MgU3RydWN0
dXJlOwogCiBuYW1lc3BhY2UgREZHIHsKIAorY2xhc3MgU3RydWN0dXJlQWJzdHJhY3RWYWx1ZTsK
KwogY2xhc3MgU3RydWN0dXJlU2V0IHsKIHB1YmxpYzoKICAgICBTdHJ1Y3R1cmVTZXQoKSB7IH0K
QEAgLTQzLDYgKzUxLDExIEBAIHB1YmxpYzoKICAgICAgICAgbV9zdHJ1Y3R1cmVzLmFwcGVuZChz
dHJ1Y3R1cmUpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAg
IG1fc3RydWN0dXJlcy5jbGVhcigpOworICAgIH0KKyAgICAKICAgICB2b2lkIGFkZChTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghY29udGFpbnMoc3RydWN0dXJl
KSk7CkBAIC0xMDQsMTAgKzExNyw1MCBAQCBwdWJsaWM6CiAgICAgCiAgICAgU3RydWN0dXJlKiBs
YXN0KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVzLmxhc3QoKTsgfQogCisgICAgUHJlZGlj
dGVkVHlwZSBwcmVkaWN0aW9uRnJvbVN0cnVjdHVyZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAg
UHJlZGljdGVkVHlwZSByZXN1bHQgPSBQcmVkaWN0Tm9uZTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKQorICAgICAgICAg
ICAgbWVyZ2VQcmVkaWN0aW9uKHJlc3VsdCwgcHJlZGljdGlvbkZyb21TdHJ1Y3R1cmUobV9zdHJ1
Y3R1cmVzW2ldKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RydWN0dXJlU2V0JiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX3N0cnVjdHVyZXMuc2l6ZSgpICE9IG90aGVyLm1fc3RydWN0
dXJlcy5zaXplKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc3RydWN0dXJlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucyhtX3N0cnVjdHVyZXNbaV0pKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGR1bXAoRklMRSog
b3V0KQorICAgIHsKKyAgICAgICAgZnByaW50ZihvdXQsICJbIik7CisgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9zdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoaSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKG91dCwgIiwgIik7CisgICAgICAgICAgICBm
cHJpbnRmKG91dCwgIiVwIiwgbV9zdHJ1Y3R1cmVzW2ldKTsKKyAgICAgICAgfQorICAgICAgICBm
cHJpbnRmKG91dCwgIl0iKTsKKyAgICB9CisjZW5kaWYKKyAgICAKIHByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFN0cnVjdHVyZUFic3RyYWN0VmFsdWU7CisgICAgCiAgICAgVmVjdG9yPFN0cnVj
dHVyZSosIDI+IG1fc3RydWN0dXJlczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
IAorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAjZW5kaWYgLy8gREZHU3RydWN0dXJlU2V0
X2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVBY2Nlc3NEYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyaWFibGVBY2Nlc3NEYXRhLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFfaAorI2RlZmluZSBERkdWYXJpYWJsZUFjY2Vzc0RhdGFfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9VbmlvbkZpbmQuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisv
LyBUeXBlIGZvciBhIHZpcnR1YWwgcmVnaXN0ZXIgbnVtYmVyIChzcGlsbCBsb2NhdGlvbikuCisv
LyBVc2luZyBhbiBlbnVtIHRvIG1ha2UgdGhpcyB0eXBlLWNoZWNrZWQgYXQgY29tcGlsZSB0aW1l
LCB0byBhdmVydCBwcm9ncmFtbWVyIGVycm9ycy4KK2VudW0gVmlydHVhbFJlZ2lzdGVyIHsgSW52
YWxpZFZpcnR1YWxSZWdpc3RlciA9IC0xIH07CitDT01QSUxFX0FTU0VSVChzaXplb2YoVmlydHVh
bFJlZ2lzdGVyKSA9PSBzaXplb2YoaW50KSwgVmlydHVhbFJlZ2lzdGVyX2lzXzMyYml0KTsKKwor
Y2xhc3MgVmFyaWFibGVBY2Nlc3NEYXRhOiBwdWJsaWMgVW5pb25GaW5kPFZhcmlhYmxlQWNjZXNz
RGF0YT4geworcHVibGljOgorICAgIFZhcmlhYmxlQWNjZXNzRGF0YSgpCisgICAgICAgIDogbV9s
b2NhbChzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWluKCkpKQorICAgICAgICAsIG1fcHJlZGljdGlvbihQcmVkaWN0Tm9uZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFZhcmlhYmxlQWNjZXNzRGF0YShWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwp
CisgICAgICAgIDogbV9sb2NhbChsb2NhbCkKKyAgICAgICAgLCBtX3ByZWRpY3Rpb24oUHJlZGlj
dE5vbmUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWaXJ0dWFsUmVnaXN0ZXIgbG9jYWwoKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG1fbG9jYWwgPT0gZmluZCgpLT5tX2xvY2FsKTsKKyAgICAg
ICAgcmV0dXJuIG1fbG9jYWw7CisgICAgfQorICAgIAorICAgIGludCBvcGVyYW5kKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGxvY2FsKCkpOworICAgIH0KKyAgICAK
KyAgICBib29sIHByZWRpY3QoUHJlZGljdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1lcmdlUHJlZGljdGlvbihmaW5kKCktPm1fcHJlZGljdGlvbiwgcHJlZGljdGlv
bik7CisgICAgfQorICAgIAorICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGlvbigpCisgICAgewor
ICAgICAgICByZXR1cm4gZmluZCgpLT5tX3ByZWRpY3Rpb247CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICAvLyBUaGlzIGlzIHNsaWdodGx5IHNwYWNlLWluZWZmaWNpZW50LCBzaW5jZSBhbnl0
aGluZyB3ZSdyZSB1bmlmaWVkIHdpdGgKKyAgICAvLyB3aWxsIGhhdmUgdGhlIHNhbWUgb3BlcmFu
ZCBhbmQgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcHJlZGljdGlvbi4gQnV0CisgICAgLy8gcHV0dGlu
ZyB0aGVtIGhlcmUgc2ltcGxpZmllcyB0aGUgY29kZSwgYW5kIHdlIGRvbid0IGV4cGVjdCBERkcg
c3BhY2UKKyAgICAvLyB1c2FnZSBmb3IgdmFyaWFibGUgYWNjZXNzIG5vZGVzIGRvIGJlIHNpZ25p
ZmljYW50LgorCisgICAgVmlydHVhbFJlZ2lzdGVyIG1fbG9jYWw7CisgICAgUHJlZGljdGVkVHlw
ZSBtX3ByZWRpY3Rpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR1ZhcmlhYmxlQWNjZXNzRGF0YV9o
Cg==
</data>
<flag name="review"
          id="107940"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>