<?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>66363</bug_id>
          
          <creation_ts>2011-08-16 23:40:29 -0700</creation_ts>
          <short_desc>The executable allocator makes it difficult to free individual chunks of executable memory</short_desc>
          <delta_ts>2012-02-24 01:13:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>abecsi</cc>
    
    <cc>barraclough</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>simophin</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yong.li.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>452146</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-16 23:40:29 -0700</bug_when>
    <thetext>Executable memory is allocated in pools.  Multiple separate allocations, with separate life-times, may be allocated in one pool.  The pool will stay alive as long as any of the allocations within it are alive.  This may lead to wasted memory, and precludes certain kinds of stub reallocation - for example if we allowed heap access stubs to be invalidated and allocated new ones, then doing so repeatedly may cause us to ultimately run out of memory.

The executable memory allocator should allow for individual chunks to be freed and reused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452148</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-16 23:40:43 -0700</bug_when>
    <thetext>*** Bug 66203 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452152</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-16 23:48:28 -0700</bug_when>
    <thetext>Current performance impact of a best-fit allocator:


Benchmark report for SunSpider, V8, and Kraken.

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

Collected 45 samples per benchmark/VM, with 15 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            BestFitExecAlloc                                
SunSpider:
   3d-cube                                7.5848+-0.0895    ?     7.6980+-0.0913       ? might be 1.0149x slower
   3d-morph                               7.4992+-0.0902          7.4299+-0.0678       
   3d-raytrace                            7.5167+-0.0967    ?     7.6565+-0.0865       ? might be 1.0186x slower
   access-binary-trees                    2.1908+-0.0406          2.1906+-0.0265       
   access-fannkuch                       11.5275+-0.1206         11.4809+-0.1055       
   access-nbody                           4.2683+-0.0597          4.2403+-0.0361       
   access-nsieve                          2.4786+-0.0511          2.4438+-0.0305         might be 1.0142x faster
   bitops-3bit-bits-in-byte               1.6919+-0.0255    !     1.7734+-0.0259       ! definitely 1.0481x slower
   bitops-bits-in-byte                    4.1634+-0.0680    ^     4.0591+-0.0289       ^ definitely 1.0257x faster
   bitops-bitwise-and                     3.5814+-0.0290    ^     3.4740+-0.0246       ^ definitely 1.0309x faster
   bitops-nsieve-bits                     5.3693+-0.0350          5.3506+-0.0326       
   controlflow-recursive                  2.0457+-0.0223    ^     1.9956+-0.0266       ^ definitely 1.0251x faster
   crypto-aes                             6.5512+-0.0948          6.4834+-0.0812         might be 1.0105x faster
   crypto-md5                             2.7238+-0.0306          2.7201+-0.0311       
   crypto-sha1                            2.1835+-0.0309    !     2.2627+-0.0397       ! definitely 1.0363x slower
   date-format-tofte                      9.7838+-0.1275    ?     9.9886+-0.1203       ? might be 1.0209x slower
   date-format-xparb                      8.5392+-0.1422    ?     8.7528+-0.1075       ? might be 1.0250x slower
   math-cordic                            6.2146+-0.0660          6.1621+-0.0641       
   math-partial-sums                      7.5369+-0.0822          7.5212+-0.0997       
   math-spectral-norm                     2.4702+-0.0358    ?     2.4720+-0.0232       ?
   regexp-dna                            10.2566+-0.0865    !    10.7704+-0.0813       ! definitely 1.0501x slower
   string-base64                          6.0445+-0.1184          5.9681+-0.0809         might be 1.0128x faster
   string-fasta                           7.2674+-0.0775    ?     7.2963+-0.0770       ?
   string-tagcloud                       13.3241+-0.1118         13.3222+-0.1283       
   string-unpack-code                    18.3815+-0.1928    ?    18.5709+-0.1796       ? might be 1.0103x slower
   string-validate-input                  6.9840+-0.1006    ?     6.9874+-0.1120       ?

   &lt;arithmetic&gt;                           6.4684+-0.0138    !     6.5027+-0.0165       ! definitely 1.0053x slower
   &lt;geometric&gt;                            5.3575+-0.0113    ?     5.3737+-0.0134       ?
   &lt;harmonic&gt;                             4.3735+-0.0149    ?     4.3878+-0.0149       ?

                                            TipOfTree            BestFitExecAlloc                                
V8:
   crypto                                87.9887+-0.2026    ^    87.4986+-0.2128       ^ definitely 1.0056x faster
   deltablue                            261.7402+-0.7046    !   264.2305+-0.9393       ! definitely 1.0095x slower
   earley-boyer                          99.9972+-0.2294         99.6741+-0.1972       
   raytrace                              76.4790+-0.3443    ^    75.8491+-0.1981       ^ definitely 1.0083x faster
   regexp                               107.5038+-0.2056    ^   105.7876+-0.1971       ^ definitely 1.0162x faster
   richards                             248.0936+-0.3812    ^   238.6467+-0.3379       ^ definitely 1.0396x faster
   splay                                108.0297+-0.3112        107.4892+-0.3354       

   &lt;arithmetic&gt;                         141.4046+-0.1320    ^   139.8823+-0.1787       ^ definitely 1.0109x faster
   &lt;geometric&gt;                          126.1123+-0.1141    ^   124.9021+-0.1382       ^ definitely 1.0097x faster
   &lt;harmonic&gt;                           115.0262+-0.1278    ^   114.0441+-0.1267       ^ definitely 1.0086x faster

                                            TipOfTree            BestFitExecAlloc                                
Kraken:
   ai-astar                            1081.4993+-3.1740    ?  1083.8513+-3.7182       ?
   audio-beat-detection                 453.1965+-1.4023    ^   447.1013+-0.6723       ^ definitely 1.0136x faster
   audio-dft                            411.1923+-3.7095    ?   412.7745+-2.2890       ?
   audio-fft                            356.4072+-1.5136        354.6045+-0.9395       
   audio-oscillator                     378.4706+-0.4562    !   380.7842+-1.1168       ! definitely 1.0061x slower
   imaging-darkroom                     590.5360+-2.1499    ^   565.1859+-1.3840       ^ definitely 1.0449x faster
   imaging-desaturate                   586.5267+-1.2839    ?   586.9413+-1.2455       ?
   imaging-gaussian-blur               1711.9912+-5.0103    ^  1697.7598+-1.8843       ^ definitely 1.0084x faster
   json-parse-financial                  48.0579+-0.1204    ^    47.4060+-0.1959       ^ definitely 1.0138x faster
   json-stringify-tinderbox              62.0471+-0.3300    ^    60.8928+-0.1510       ^ definitely 1.0190x faster
   stanford-crypto-aes                  140.7944+-0.2706    !   141.8431+-0.4629       ! definitely 1.0074x slower
   stanford-crypto-ccm                  110.3081+-0.5687        110.2512+-0.3872       
   stanford-crypto-pbkdf2               367.4630+-1.4301        365.7738+-2.9701       
   stanford-crypto-sha256-iterative     138.3388+-0.4035    ?   138.6526+-0.2152       ?

   &lt;arithmetic&gt;                         459.7735+-0.5107    ^   456.7016+-0.4367       ^ definitely 1.0067x faster
   &lt;geometric&gt;                          295.0588+-0.3691    ^   293.2588+-0.3174       ^ definitely 1.0061x faster
   &lt;harmonic&gt;                           179.3775+-0.3080    ^   177.9309+-0.2398       ^ definitely 1.0081x faster

                                            TipOfTree            BestFitExecAlloc                                
All benchmarks:
   &lt;arithmetic&gt;                         161.5923+-0.1607    ^   160.4695+-0.1357       ^ definitely 1.0070x faster
   &lt;geometric&gt;                           28.3039+-0.0368         28.2591+-0.0404       
   &lt;harmonic&gt;                             7.7255+-0.0258    ?     7.7486+-0.0256       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452730</commentid>
    <comment_count>3</comment_count>
      <attachid>104283</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-17 16:49:19 -0700</bug_when>
    <thetext>Created attachment 104283
work in progress

Works on x86_64, not on anything else, yet.  Putting it up in case someone wants to look at it before it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452731</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 16:51:21 -0700</bug_when>
    <thetext>Attachment 104283 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

Last 3072 characters of output:
15:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/wtf/MetaAllocator.cpp:418:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/wtf/MetaAllocator.cpp:421:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/wtf/MetaAllocator.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:161:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:164:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:166:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:171:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:180:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:182:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:184:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:185:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:235:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:232:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:240:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:353:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:353:  Extra space after ( in if  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:374:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:374:  Extra space after ( in if  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:415:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:412:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:423:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/MetaAllocatorHandle.h:42:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 75 in 40 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>452743</commentid>
    <comment_count>5</comment_count>
      <attachid>104283</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-17 17:06:29 -0700</bug_when>
    <thetext>Comment on attachment 104283
work in progress

Attachment 104283 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9420234</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452756</commentid>
    <comment_count>6</comment_count>
      <attachid>104283</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-17 17:26:03 -0700</bug_when>
    <thetext>Comment on attachment 104283
work in progress

Attachment 104283 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9422267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452798</commentid>
    <comment_count>7</comment_count>
      <attachid>104283</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-08-17 18:44:38 -0700</bug_when>
    <thetext>Comment on attachment 104283
work in progress

Attachment 104283 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9423235</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452804</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-17 18:56:50 -0700</bug_when>
    <thetext>This is the performance when right-allocation is enabled.  This produces sub-optimal code layout as it&apos;s possible for two things allocated consecutively to lie on opposite sides of the heap.  But, it minimizes the number of pages in use.  It&apos;s not clear if this is a win, or not.


Benchmark report for SunSpider, V8, and Kraken.

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

Collected 45 samples per benchmark/VM, with 15 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            BestFitExecAlloc                                
SunSpider:
   3d-cube                                7.5292+-0.0860    ?     7.6575+-0.0832       ? might be 1.0171x slower
   3d-morph                               7.4882+-0.0696          7.4571+-0.0709       
   3d-raytrace                            7.6368+-0.0993          7.5628+-0.0799       
   access-binary-trees                    2.2285+-0.0342          2.1824+-0.0182         might be 1.0211x faster
   access-fannkuch                       11.4710+-0.1021         11.3988+-0.0922       
   access-nbody                           4.1968+-0.0381    ?     4.2456+-0.0731       ? might be 1.0116x slower
   access-nsieve                          2.4720+-0.0354          2.4574+-0.0371       
   bitops-3bit-bits-in-byte               1.7080+-0.0368    ?     1.7586+-0.0251       ? might be 1.0296x slower
   bitops-bits-in-byte                    4.1622+-0.0615    !     4.4769+-0.0770       ! definitely 1.0756x slower
   bitops-bitwise-and                     3.6113+-0.0459          3.5752+-0.0413         might be 1.0101x faster
   bitops-nsieve-bits                     5.4251+-0.0643    ?     5.4367+-0.0533       ?
   controlflow-recursive                  2.0054+-0.0202          1.9957+-0.0266       
   crypto-aes                             6.5658+-0.0766          6.5456+-0.0811       
   crypto-md5                             2.7402+-0.0324          2.7273+-0.0247       
   crypto-sha1                            2.1952+-0.0228    ?     2.2520+-0.0423       ? might be 1.0259x slower
   date-format-tofte                      9.9693+-0.1228    ?    10.1310+-0.1342       ? might be 1.0162x slower
   date-format-xparb                      8.5465+-0.1080    ?     8.6580+-0.1145       ? might be 1.0130x slower
   math-cordic                            6.2492+-0.0529    ?     6.2668+-0.0624       ?
   math-partial-sums                      7.5516+-0.0834    ?     7.5654+-0.0807       ?
   math-spectral-norm                     2.5182+-0.0329          2.4926+-0.0309         might be 1.0103x faster
   regexp-dna                            10.2535+-0.0721    !    10.8177+-0.0894       ! definitely 1.0550x slower
   string-base64                          6.0013+-0.0908    ?     6.0495+-0.0992       ?
   string-fasta                           7.3581+-0.0810          7.3069+-0.0761       
   string-tagcloud                       13.3322+-0.1478    ?    13.4441+-0.1326       ?
   string-unpack-code                    18.3448+-0.1520    ?    18.6119+-0.1853       ? might be 1.0146x slower
   string-validate-input                  7.0115+-0.1431    ?     7.0499+-0.1044       ?

   &lt;arithmetic&gt;                           6.4835+-0.0143    !     6.5432+-0.0165       ! definitely 1.0092x slower
   &lt;geometric&gt;                            5.3735+-0.0131    !     5.4140+-0.0135       ! definitely 1.0075x slower
   &lt;harmonic&gt;                             4.3890+-0.0166    ?     4.4165+-0.0144       ?

                                            TipOfTree            BestFitExecAlloc                                
V8:
   crypto                                88.3855+-0.2304         88.0580+-0.3105       
   deltablue                            262.9253+-1.2663    ?   263.8095+-0.6202       ?
   earley-boyer                         100.0719+-0.2928    ?   100.3218+-0.2207       ?
   raytrace                              75.9575+-0.2486         75.4541+-0.3980       
   regexp                               108.7350+-0.5273    ^   107.2281+-0.4855       ^ definitely 1.0141x faster
   richards                             251.9579+-1.0113    ^   241.2311+-1.2318       ^ definitely 1.0445x faster
   splay                                108.6511+-0.3619        107.9194+-0.4180       

   &lt;arithmetic&gt;                         142.3834+-0.2936    ^   140.5746+-0.2242       ^ definitely 1.0129x faster
   &lt;geometric&gt;                          126.7503+-0.2138    ^   125.5102+-0.1853       ^ definitely 1.0099x faster
   &lt;harmonic&gt;                           115.4135+-0.1802    ^   114.5392+-0.1817       ^ definitely 1.0076x faster

                                            TipOfTree            BestFitExecAlloc                                
Kraken:
   ai-astar                            1083.0171+-3.6911       1081.3665+-3.2078       
   audio-beat-detection                 457.3596+-1.1298    ^   454.2206+-1.4376       ^ definitely 1.0069x faster
   audio-dft                            413.2815+-2.8334    ?   416.3008+-2.3072       ?
   audio-fft                            357.1645+-1.2802        356.8773+-1.0993       
   audio-oscillator                     378.9674+-1.0617    !   381.9522+-1.1016       ! definitely 1.0079x slower
   imaging-darkroom                     575.5395+-2.2349    !   609.5229+-3.0018       ! definitely 1.0590x slower
   imaging-desaturate                   592.2349+-2.9636    ?   593.5229+-1.6949       ?
   imaging-gaussian-blur               1716.1634+-3.0601       1710.2664+-4.5857       
   json-parse-financial                  48.2717+-0.1376    ?    48.3075+-0.1697       ?
   json-stringify-tinderbox              61.8694+-0.1754         61.5657+-0.2802       
   stanford-crypto-aes                  141.7960+-0.3397    !   142.6480+-0.3741       ! definitely 1.0060x slower
   stanford-crypto-ccm                  110.2550+-0.2987    ?   110.4126+-0.2987       ?
   stanford-crypto-pbkdf2               364.9750+-1.1447    ?   370.8834+-5.3735       ? might be 1.0162x slower
   stanford-crypto-sha256-iterative     137.8285+-0.3687    !   138.7276+-0.2695       ! definitely 1.0065x slower

   &lt;arithmetic&gt;                         459.9088+-0.5808    !   462.6125+-0.6659       ! definitely 1.0059x slower
   &lt;geometric&gt;                          295.1312+-0.3490    !   296.9687+-0.4547       ! definitely 1.0062x slower
   &lt;harmonic&gt;                           179.5327+-0.2189    ?   179.9774+-0.2983       ?

                                            TipOfTree            BestFitExecAlloc                                
All benchmarks:
   &lt;arithmetic&gt;                         161.7868+-0.1712    !   162.3557+-0.2025       ! definitely 1.0035x slower
   &lt;geometric&gt;                           28.3740+-0.0410    !    28.5031+-0.0414       ! definitely 1.0046x slower
   &lt;harmonic&gt;                             7.7524+-0.0288    ?     7.7995+-0.0248       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453423</commentid>
    <comment_count>9</comment_count>
      <attachid>104411</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-18 15:34:53 -0700</bug_when>
    <thetext>Created attachment 104411
work in progress - 32-bit works

32-bit support added.  But, this is still only tested on x86.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453426</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 15:37:42 -0700</bug_when>
    <thetext>Attachment 104411 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

Last 3072 characters of output:
space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/wtf/MetaAllocator.cpp:422:  Should have a space between // and comment  [whitespace/comments] [4]
Source/JavaScriptCore/wtf/MetaAllocator.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:38:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:45:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:161:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:164:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:166:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:171:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:180:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:182:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:184:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:185:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:235:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:232:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:240:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:353:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:353:  Extra space after ( in if  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:374:  Missing space before ( in if(  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:374:  Extra space after ( in if  [whitespace/parens] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:415:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:412:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:423:  More than one command on the same line in if  [whitespace/parens] [4]
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:43:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/wtf/MetaAllocatorHandle.h:42:  The parameter name &quot;allocator&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 76 in 42 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>453452</commentid>
    <comment_count>11</comment_count>
      <attachid>104411</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-18 15:57:48 -0700</bug_when>
    <thetext>Comment on attachment 104411
work in progress - 32-bit works

Attachment 104411 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9422952</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453458</commentid>
    <comment_count>12</comment_count>
      <attachid>104411</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-18 16:02:03 -0700</bug_when>
    <thetext>Comment on attachment 104411
work in progress - 32-bit works

Attachment 104411 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9422954</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453499</commentid>
    <comment_count>13</comment_count>
      <attachid>104411</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-08-18 17:05:04 -0700</bug_when>
    <thetext>Comment on attachment 104411
work in progress - 32-bit works

Attachment 104411 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9420874</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457773</commentid>
    <comment_count>14</comment_count>
      <attachid>105406</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-26 14:17:20 -0700</bug_when>
    <thetext>Created attachment 105406
work in progress - fix style, fix more platforms</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457782</commentid>
    <comment_count>15</comment_count>
      <attachid>105409</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-26 14:34:38 -0700</bug_when>
    <thetext>Created attachment 105409
work in progress - fix conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457788</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 14:38:58 -0700</bug_when>
    <thetext>Attachment 105409 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/assembler/AssemblerBuffer.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/runtime/InitializeThreading.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/JavaScriptCore/jit/JITOpcodes.cpp:45:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:224:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:277:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:1037:  The parameter name &quot;globalData&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/wtf/MetaAllocator.cpp:282:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/MetaAllocator.cpp:300:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/JavaScriptCore/wtf/RedBlackTree.h:159:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:230:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/wtf/RedBlackTree.h:410:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:43:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 12 in 45 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>457793</commentid>
    <comment_count>17</comment_count>
      <attachid>105411</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-26 14:45:06 -0700</bug_when>
    <thetext>Created attachment 105411
work in progress - fix more style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457797</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-26 14:48:19 -0700</bug_when>
    <thetext>Attachment 105411 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/jit/JITOpcodes.cpp:45:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:224:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:277:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:43:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 4 in 45 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>457822</commentid>
    <comment_count>19</comment_count>
      <attachid>105411</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-26 15:47:58 -0700</bug_when>
    <thetext>Comment on attachment 105411
work in progress - fix more style

Attachment 105411 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9548176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459174</commentid>
    <comment_count>20</comment_count>
      <attachid>105689</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-30 14:01:17 -0700</bug_when>
    <thetext>Created attachment 105689
the patch - fix style, conflicts, architectures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459176</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-30 14:04:48 -0700</bug_when>
    <thetext>Attachment 105689 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/jit/JITOpcodes.cpp:45:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:224:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JIT.h:277:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/JavaScriptCore/jit/JITOpcodes32_64.cpp:43:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 4 in 45 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>459257</commentid>
    <comment_count>22</comment_count>
      <attachid>105689</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-30 15:18:48 -0700</bug_when>
    <thetext>Comment on attachment 105689
the patch - fix style, conflicts, architectures

Attachment 105689 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9572343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>459401</commentid>
    <comment_count>23</comment_count>
      <attachid>105731</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-08-30 20:14:32 -0700</bug_when>
    <thetext>Created attachment 105731
the patch - fix more style, build systems</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460862</commentid>
    <comment_count>24</comment_count>
      <attachid>106049</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 15:45:34 -0700</bug_when>
    <thetext>Created attachment 106049
the patch - changed unit tests to use TestWebKitAPI

I&apos;m going to let this patch simmer a little and see what the bots think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460870</commentid>
    <comment_count>25</comment_count>
      <attachid>106052</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 15:57:29 -0700</bug_when>
    <thetext>Created attachment 106052
the patch - fix conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460888</commentid>
    <comment_count>26</comment_count>
      <attachid>106052</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 16:12:19 -0700</bug_when>
    <thetext>Comment on attachment 106052
the patch - fix conflicts

After loads of testing I&apos;m happy with it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460895</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 16:21:21 -0700</bug_when>
    <thetext>Latest performance numbers, showing that this patch is neutral.



Benchmark report for SunSpider, V8, and Kraken.

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc
&quot;BestFitExecAlloc&quot; at /Volumes/Data/pizlo/tertiary/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            BestFitExecAlloc                                
SunSpider:
   3d-cube                                8.2424+-0.0356    ?     8.2941+-0.0292       ?
   3d-morph                               8.0659+-0.0200    ?     8.1376+-0.0851       ?
   3d-raytrace                            8.2381+-0.0170    !     8.3670+-0.0850       ! definitely 1.0156x slower
   access-binary-trees                    2.5637+-0.0336          2.5208+-0.0239         might be 1.0170x faster
   access-fannkuch                       13.0486+-0.0447    ^    12.8329+-0.0476       ^ definitely 1.0168x faster
   access-nbody                           4.9305+-0.0213    ?     4.9464+-0.0288       ?
   access-nsieve                          3.0600+-0.0291          3.0566+-0.0310       
   bitops-3bit-bits-in-byte               1.8516+-0.0208    !     1.9005+-0.0249       ! definitely 1.0264x slower
   bitops-bits-in-byte                    5.6331+-0.1287          5.5657+-0.0209         might be 1.0121x faster
   bitops-bitwise-and                     4.1417+-0.0459    ?     4.2102+-0.0932       ? might be 1.0165x slower
   bitops-nsieve-bits                     5.7831+-0.0797          5.6827+-0.0560         might be 1.0177x faster
   controlflow-recursive                  2.2998+-0.0423    ?     2.3287+-0.0635       ? might be 1.0126x slower
   crypto-aes                             6.8640+-0.0406    !     6.9435+-0.0383       ! definitely 1.0116x slower
   crypto-md5                             3.0236+-0.0392          2.9972+-0.0279       
   crypto-sha1                            2.4511+-0.0419    ?     2.4783+-0.0371       ? might be 1.0111x slower
   date-format-tofte                     10.8777+-0.1200    ?    10.9595+-0.0560       ?
   date-format-xparb                      9.3314+-0.0875          9.2892+-0.2093       
   math-cordic                            7.1180+-0.0443    ?     7.1882+-0.0626       ?
   math-partial-sums                     10.6896+-0.0236    ^    10.5578+-0.0480       ^ definitely 1.0125x faster
   math-spectral-norm                     2.7393+-0.0370    ?     2.7547+-0.0309       ?
   regexp-dna                            12.1022+-0.1466    !    12.6055+-0.1419       ! definitely 1.0416x slower
   string-base64                          6.6552+-0.1049    ^     6.4306+-0.0807       ^ definitely 1.0349x faster
   string-fasta                           8.3584+-0.0981          8.3379+-0.0566       
   string-tagcloud                       15.2124+-0.1241    ?    15.2881+-0.1190       ?
   string-unpack-code                    20.9977+-0.4226         20.8723+-0.1439       
   string-validate-input                  7.7509+-0.3805          7.6757+-0.2624       

   &lt;arithmetic&gt;                           7.3858+-0.0369    ?     7.3931+-0.0399       ?
   &lt;geometric&gt;                            6.1182+-0.0358    ?     6.1274+-0.0361       ?
   &lt;harmonic&gt;                             4.9912+-0.0384    ?     5.0069+-0.0341       ?

                                            TipOfTree            BestFitExecAlloc                                
V8:
   crypto                               102.7296+-0.3022    ?   102.8295+-0.2332       ?
   deltablue                            299.1563+-2.1058    ^   294.9475+-1.9623       ^ definitely 1.0143x faster
   earley-boyer                         123.0179+-0.3984    ^   121.4325+-0.2348       ^ definitely 1.0131x faster
   raytrace                              87.8618+-0.6554         87.6322+-0.6501       
   regexp                               131.3901+-0.4280    ?   131.9819+-0.5217       ?
   richards                             302.6796+-1.2872    !   310.3467+-2.1751       ! definitely 1.0253x slower
   splay                                157.2502+-1.0175    ^   154.8518+-0.7540       ^ definitely 1.0155x faster

   &lt;arithmetic&gt;                         172.0122+-0.3585        172.0032+-0.5608       
   &lt;geometric&gt;                          154.2418+-0.2833        153.9200+-0.4047       
   &lt;harmonic&gt;                           140.3817+-0.3030        139.9424+-0.3581       

                                            TipOfTree            BestFitExecAlloc                                
Kraken:
   ai-astar                            1668.8221+-17.0049      1651.4330+-20.5277        might be 1.0105x faster
   audio-beat-detection                 538.9581+-2.3437        538.4865+-3.2596       
   audio-dft                            455.6704+-3.1692        451.1725+-6.3277       
   audio-fft                            421.9677+-0.9317    !   426.7121+-3.5961       ! definitely 1.0112x slower
   audio-oscillator                     403.8282+-0.8881    !   422.7420+-0.1340       ! definitely 1.0468x slower
   imaging-darkroom                     604.5569+-12.1375       589.1278+-14.8914        might be 1.0262x faster
   imaging-desaturate                   635.8830+-17.4519   ^   617.3209+-0.1102       ^ definitely 1.0301x faster
   imaging-gaussian-blur               1851.7010+-3.3110    ^  1846.8209+-0.9521       ^ definitely 1.0026x faster
   json-parse-financial                  63.0252+-0.2325    ^    62.2055+-0.5269       ^ definitely 1.0132x faster
   json-stringify-tinderbox              75.9097+-0.5982         75.8490+-0.5308       
   stanford-crypto-aes                  165.4873+-0.7138    ?   166.3387+-0.5963       ?
   stanford-crypto-ccm                  130.3306+-0.5653    ?   130.5545+-0.9624       ?
   stanford-crypto-pbkdf2               373.1143+-1.2297        370.9983+-1.2860       
   stanford-crypto-sha256-iterative     144.4053+-0.1609        144.2738+-0.4925       

   &lt;arithmetic&gt;                         538.1186+-1.8350        535.2883+-1.8512       
   &lt;geometric&gt;                          340.0088+-0.9394        339.1368+-0.7567       
   &lt;harmonic&gt;                           213.3180+-0.5265        212.7214+-0.4355       

                                            TipOfTree            BestFitExecAlloc                                
All benchmarks:
   &lt;arithmetic&gt;                         189.9952+-0.5480        189.1549+-0.5801       
   &lt;geometric&gt;                           32.7426+-0.1266         32.7344+-0.1028       
   &lt;harmonic&gt;                             8.8268+-0.0667    ?     8.8534+-0.0590       ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460919</commentid>
    <comment_count>28</comment_count>
      <attachid>106063</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 16:45:00 -0700</bug_when>
    <thetext>Created attachment 106063
the patch - fix minor export file glitch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460924</commentid>
    <comment_count>29</comment_count>
      <attachid>106064</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 16:50:00 -0700</bug_when>
    <thetext>Created attachment 106064
the patch - remove stray debug printf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460994</commentid>
    <comment_count>30</comment_count>
      <attachid>106079</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-01 18:35:00 -0700</bug_when>
    <thetext>Created attachment 106079
the patch - added forgotten files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461539</commentid>
    <comment_count>31</comment_count>
      <attachid>106079</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-02 14:48:38 -0700</bug_when>
    <thetext>Comment on attachment 106079
the patch - added forgotten files

Okay, this patch basically looks okay, but I&apos;m unsure the licensing is okay -- you&apos;re basing some of this code from another source that has already got a license: http://www.mit.edu/~emin/source_code/red_black_tree/LICENSE, so i don&apos;t believe you can just plant our our license at the top.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461542</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-02 14:50:12 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (From update of attachment 106079 [details])
&gt; Okay, this patch basically looks okay, but I&apos;m unsure the licensing is okay -- you&apos;re basing some of this code from another source that has already got a license: http://www.mit.edu/~emin/source_code/red_black_tree/LICENSE, so i don&apos;t believe you can just plant our our license at the top.

Geoff thought the license was sufficiently compatible that what I did was OK.  But what do you recommend?  Not use that code, or plant a different statement at the top of the file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461545</commentid>
    <comment_count>33</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2011-09-02 14:52:01 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (In reply to comment #31)
&gt; &gt; (From update of attachment 106079 [details] [details])
&gt; &gt; Okay, this patch basically looks okay, but I&apos;m unsure the licensing is okay -- you&apos;re basing some of this code from another source that has already got a license: http://www.mit.edu/~emin/source_code/red_black_tree/LICENSE, so i don&apos;t believe you can just plant our our license at the top.
&gt; 
&gt; Geoff thought the license was sufficiently compatible that what I did was OK.  But what do you recommend?  Not use that code, or plant a different statement at the top of the file?

In that case it should still have the specific license they provide rather than our usual license header</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464639</commentid>
    <comment_count>34</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-08 21:42:18 -0700</bug_when>
    <thetext>(In reply to comment #33)
&gt; (In reply to comment #32)
&gt; &gt; (In reply to comment #31)
&gt; &gt; &gt; (From update of attachment 106079 [details] [details] [details])
&gt; &gt; &gt; Okay, this patch basically looks okay, but I&apos;m unsure the licensing is okay -- you&apos;re basing some of this code from another source that has already got a license: http://www.mit.edu/~emin/source_code/red_black_tree/LICENSE, so i don&apos;t believe you can just plant our our license at the top.
&gt; &gt; 
&gt; &gt; Geoff thought the license was sufficiently compatible that what I did was OK.  But what do you recommend?  Not use that code, or plant a different statement at the top of the file?
&gt; 
&gt; In that case it should still have the specific license they provide rather than our usual license header

I&apos;ve decided that this RedBlackTree is not good enough to warrant pulling in another license.

I&apos;m going to convert PODRedBlackTree from WebCore to do what I want.  Sadly, as far as I can tell, it would be too complex to roll a template class that provides both the functionality of PODRedBlackTree and the functionality of my RedBlackTree, since PODRedBlackTree has a lot of stuff that I don&apos;t want, like virtual methods that it calls from various places.  But the PODRedBlackTree does provide an awesome starting point, so I&apos;ll base my RedBlackTree on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464661</commentid>
    <comment_count>35</comment_count>
      <attachid>106842</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-08 23:06:12 -0700</bug_when>
    <thetext>Created attachment 106842
the patch - replaced the red black tree with one based on PODRedBlackTree

This replaces the RedBlackTree with one based on PODRedBlackTree.

It shares no code with the one from MIT that the previous patch had, so the license issues should be entirely side-stepped.

I could not use PODRedBlackTree directly because that tree does things that I do not want, and lacks features that I need:

- PODRedBlackTree removes nodes by copying one node over another one.  MetaAllocator needs to be able to hold references to nodes in the tree, and expects that these pointers remain valid until MetaAllocator deletes those nodes itself.  Hence, I needed to change the PODRedBlackTree&apos;s removal method to move y into z&apos;s position rather than copying the contents of y into z.

- PODRedBlackTree calls virtual methods all over the place to support features that WebCore needs.  I don&apos;t need these features, and I don&apos;t want virtual calls.  The MetaAllocator is designed to be decently fast, and so it avoids virtual calls inside the hot paths.

- PODRedBlackTree has additional features to support partial ordering.  I don&apos;t need these features at all.

- PODRedBlackTree allocates nodes internally and presents an API that does not expose nodes.  MetaAllocator wants to be able to allocate nodes itself, and is carefully written to not allocate (or free) any nodes in the common case - it simply moves a node from one place to another in the tree.

I thought about combining PODRedBlackTree and my RedBlackTree into a common implementation, with features to specialize as needed.  This would be doable.

Pro: one less tree in the code base.

Con: the code for the tree becomes more complex, because users of PODRedBlackTree and MetaAllocator require significantly different functionality and make different assumptions about the inner workings.

I ultimately decided that the cons of combining the trees into one outweighed the pros.  Mainly, my thinking is that the tree logic itself is unlikely to be ever modified - so having two copies does not increase maintenance burden.  But the interface that the tree presents is likely to be modified - so having two simple implementations of that interface seems better than having one much more complex one that mixes the requirements of WebCore and the JSC JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>464664</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-08 23:10:07 -0700</bug_when>
    <thetext>Attachment 106842 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/JavaScriptGlue/ForwardingHeaders/wtf/MetaAllocatorHandle.h:2:  &quot;JavaScriptCore/MetaAllocatorHandle.h&quot; already included at Source/JavaScriptGlue/ForwardingHeaders/wtf/MetaAllocatorHandle.h:1  [build/include] [4]
Source/WebCore/ForwardingHeaders/wtf/MetaAllocatorHandle.h:2:  &quot;JavaScriptCore/MetaAllocatorHandle.h&quot; already included at Source/WebCore/ForwardingHeaders/wtf/MetaAllocatorHandle.h:1  [build/include] [4]
Total errors found: 2 in 49 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>464665</commentid>
    <comment_count>37</comment_count>
      <attachid>106843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-08 23:13:58 -0700</bug_when>
    <thetext>Created attachment 106843
the patch - fix style

Fixed a style goof arising from a bizarre merge conflict that duplicated the code of some files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465344</commentid>
    <comment_count>38</comment_count>
      <attachid>106843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 16:32:47 -0700</bug_when>
    <thetext>Comment on attachment 106843
the patch - fix style

Performance is unchanged through the multiple rounds of merging and replacing the RB tree.  Ready to land!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465376</commentid>
    <comment_count>39</comment_count>
      <attachid>106843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 22:37:21 -0700</bug_when>
    <thetext>Comment on attachment 106843
the patch - fix style

Commit queue is taking forever.  Landing manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465380</commentid>
    <comment_count>40</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 22:48:57 -0700</bug_when>
    <thetext>Landed in r94920.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465383</commentid>
    <comment_count>41</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-09-10 23:35:58 -0700</bug_when>
    <thetext>It broke Qt ARM and Qt MIPS build. Could you check it, please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465386</commentid>
    <comment_count>42</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-09-10 23:57:48 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; It broke Qt ARM and Qt MIPS build. Could you check it, please?

Yeah, that&apos;s my fault.  Tracking the fix here: https://bugs.webkit.org/show_bug.cgi?id=67903</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465555</commentid>
    <comment_count>43</comment_count>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2011-09-12 04:03:10 -0700</bug_when>
    <thetext>The newly added header wtf/RedBlackTree.h has some dead variables which might be parts of later-to-add features.
Removing them for now is tracked by https://bugs.webkit.org/show_bug.cgi?id=67928</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>539687</commentid>
    <comment_count>44</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-01-20 12:12:46 -0800</bug_when>
    <thetext>This breaks ENALBE(ASSEMBLER_WX_EXCLUSIVE)

Bug 76724 is opened for this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564067</commentid>
    <comment_count>45</comment_count>
    <who name="LFC">simophin</who>
    <bug_when>2012-02-24 01:13:41 -0800</bug_when>
    <thetext>After I patched this, I got crash in JIT code with armv5 based Qt port. Even in the most recent revision (r108450),  the crashed hasn&apos;t been fixed. Does anyone meet this problem?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104283</attachid>
            <date>2011-08-17 16:49:19 -0700</date>
            <delta_ts>2011-08-18 15:34:53 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>execalloc_patch_3.diff</filename>
            <type>text/plain</type>
            <size>183359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTMyNDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjI3IEBA
CisyMDExLTA4LTE2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IhKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6
ZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9m
aWxlKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcDoK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcik6
CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3Ip
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKToKKyAgICAgICAg
KEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSk6CisgICAgICAg
IChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RXhl
Y3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KToKKyAgICAgICAgKEpTQzo6RXhl
Y3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgor
ICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKiBqaXQvSklULmg6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwpOgorICAgICAgICAqIGppdC9KSVRD
b2RlLmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om9wZXJhdG9yICEpOgorICAgICAgICAoSlND
OjpKSVRDb2RlOjphZGRyZXNzRm9yQ2FsbCk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Om9mZnNl
dE9mKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6OkpJ
VENvZGU6OnN0YXJ0KToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c2l6ZSk6CisgICAgICAgIChK
U0M6OkpJVENvZGU6OmdldEV4ZWN1dGFibGVNZW1vcnkpOgorICAgICAgICAoSlNDOjpKSVRDb2Rl
OjpIb3N0RnVuY3Rpb24pOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpKSVRDb2RlKToKKyAgICAg
ICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAg
KiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcmludFZhbHVlKToKKyAgICAgICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChS
ZWRCbGFja1RyZWVUZXN0czo6UmVkQmxhY2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tU
cmVlVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQ
YWlyKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFjdCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6
cmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhh
bk9yRXF1YWwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVt
b3ZlKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAg
IChSZWRCbGFja1RyZWVUZXN0czo6YXNzZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChS
ZWRCbGFja1RyZWVUZXN0czo6dGVzdERyaXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVz
dHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1
blRlc3RzKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAg
ICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE9uZUFsbG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0
czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRl
c3RTaW1wbGVGdWxsQ29hbGVzY2UpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0
RklGT0FsbG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAg
ICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxv
Y2F0b3JUZXN0czo6dGVzdFNocmluayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnNl
dFVwKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVhckRvd24pOgorICAgICAgICAo
TWV0YUFsbG9jYXRvclRlc3RzOjphbGxvY2F0ZSk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVz
dHM6OmZyZWUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpub3RpZnlGcmVlKToKKyAg
ICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6c2FuaXR5Q2hlY2spOgorICAgICAgICAoTWV0YUFs
bG9jYXRvclRlc3RzOjpjb25maXJtKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6Y29u
ZmlybUhpZ2hXYXRlcm1hcmspOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpieXRlc0Fs
bG9jYXRlZCk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVzQ29tbWl0dGVkKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6Ynl0ZVN0YXRlKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6cGFnZVN0YXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3I2NGJpdFJl
Z3Jlc3Npb25UZXN0czo6TWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzKToKKyAgICAg
ICAgKE1ldGFBbGxvY2F0b3I2NGJpdFJlZ3Jlc3Npb25UZXN0czo6cnVuVGVzdHMpOgorICAgICAg
ICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpydW5UcmVlUm9vdENvcnJ1cHRp
b25UZXN0KToKKyAgICAgICAgKG1haW4pOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OkhhbmRsZTo6SGFuZGxlKToK
KyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6SGFuZGxlOjp+SGFuZGxlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvcjo6SGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpNZXRh
QWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6
fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6Cisg
ICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpy
b3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VOb2Rl
KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3RmL01l
dGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVz
QWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZlZCk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9y
bS5oOgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tU
cmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJh
d05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRS
ZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJlZEJsYWNrVHJlZSk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVl
OjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpcnN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpz
dWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnByZWRlY2Vzc29yKToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3QpOgorICAgICAgICAoV1RGOjpSZWRC
bGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjppc0VtcHR5
KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVl
OjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyaWdodFJvdGF0ZSk6
CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0SGVscCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVja0Nv
bnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZHVtcFJlY3Vy
c2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJvb3QpOgorICAgICAgICAoV1RGOjpS
ZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjph
c05vZGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OllhcnJHZW5lcmF0b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6
WWFycjo6WWFyckNvZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDgtMTcgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBKU0MgdmVyYm9zZSBkZWJ1Z2dpbmcgb3V0
cHV0IHNvbWV0aW1lcyBkb2Vzbid0IHdvcmsgYXMgZXhwZWN0ZWQuCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDAw
LDYgKzQwMCwxMiBAQCBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCiBfX1pO
M1dURjEyZGV0YWNoVGhyZWFkRWoKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYx
MnJhbmRvbU51bWJlckV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3Bh
Y2VFUHZtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKK19f
Wk4zV1RGMTNNZXRhQWxsb2NhdG9yOGFsbG9jYXRlRW0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9y
QzJFbQorX19aTjNXVEYxM01ldGFBbGxvY2F0b3JEMUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRv
ckQyRXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEz
U3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJl
c2VydmVDYXBhY2l0eUVqCkBAIC00MzQsNiArNDQwLDcgQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVU
Q09mZnNldEV2CiBfX1pOM1dURjE4Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNX
VEYxOGRhdGVUb0RheXNGcm9tMTk3MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJF
aWIKK19fWk4zV1RGMTlNZXRhQWxsb2NhdG9ySGFuZGxlRDFFdgogX19aTjNXVEYxOWluaXRpYWxp
emVUaHJlYWRpbmdFdgogX19aTjNXVEYyMGVxdWFsSWdub3JpbmdOdWxsaXR5RVBOU18xMFN0cmlu
Z0ltcGxFUzFfCiBfX1pOM1dURjIwZmFzdE1hbGxvY1N0YXRpc3RpY3NFdgpAQCAtNTEzLDYgKzUy
MCw3IEBAIF9fWk4zV1RGOEludGVybmFsMjFmYXN0TWFsbG9jTWF0Y2hGYWlsZWQKIF9fWk4zV1RG
OGZhc3RGcmVlRVB2CiBfX1pOM1dURjhtc1RvWWVhckVkCiBfX1pOM1dURjhudWxsQXRvbUUKK19f
Wk4zV1RGOHBhZ2VTaXplRXYKIF9fWk4zV1RGOHN0YXJBdG9tRQogX19aTjNXVEY4dGV4dEF0b21F
CiBfX1pOM1dURjlCeXRlQXJyYXk2Y3JlYXRlRW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAJCQkJMTQxMjE0QkYwQTQ5MTkwRTAwNDgwMjU1IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8sCiAJCQkJOTMyRjVCRTkwODIyQTFDNzAwNzM2OTc1IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8sCiAJCQkJMTRCRDU5QzcwQTNFOEZBNDAwQkFGNTlDIC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8sCisJCQkJMEY5NjNCMjkxM0Y3NjREMTAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8sCiAJCQkpOwogCQkJbmFtZSA9IEFsbDsKIAkJCXByb2R1Y3ROYW1lID0gQWxsOwpA
QCAtNDksNiArNTAsMTMgQEAKIAkJMEJERkZBRTEwRkM2MTkzMTAwRDY5RUY0IC8qIE93bkZhc3RN
YWxsb2NQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBCREZGQUQxMEZDNjE2RUMwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEJGMjhBMjkxMUEzM0RD
MzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1pdHMu
Y3BwICovOyB9OwogCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI5NDc5
QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07CisJCTBGOTYzQjE4
MTNGNzUzMDQwMDAyRDlCMiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTYwQTRDRjA0QjNCM0U3MDA4
QUU5NTIgLyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwRjk2M0IxOTEzRjc1
MzA0MDAwMkQ5QjIgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEY5NjNCMjUxM0Y3NTMzMzAw
MDJEOUIyIC8qIHVuaXR0ZXN0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk2M0IxMTEzRjc1MkY3MDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCAq
LzsgfTsKKwkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5
OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGlu
Z3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OworCQkw
Rjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDAwMDY3NzEyQTZGNzgz
MDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAw
NjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjkyMTJBNkY5RTEwMDY0RDEy
MyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsgfTsKIAkJMTQwNTY2QzQxMDdFQzI1NTAwNURC
QzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZBRkJBMkQwMDAwMTg2NSAvKiBKU0FQSVZhbHVl
V3JhcHBlci5jcHAgKi87IH07CkBAIC02MTcsNiArNjI1LDIwIEBACiAvKiBFbmQgUEJYQnVpbGRG
aWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29udGFpbmVySXRlbVByb3h5IHNlY3Rpb24g
Ki8KKwkJMEY5NjNCMTQxM0Y3NTMwNDAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRh
bCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXBy
b3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDkzMkY1QjNFMDgyMkExQzcw
MDczNjk3NTsKKwkJCXJlbW90ZUluZm8gPSBKYXZhU2NyaXB0Q29yZTsKKwkJfTsKKwkJMEY5NjNC
MjgxM0Y3NjREMTAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKKwkJCWlz
YSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkw
RkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlwZSA9IDE7
CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGOTYzQjEyMTNGNzUzMDQwMDAyRDlCMjsKKwkJ
CXJlbW90ZUluZm8gPSB1bml0dGVzdHM7CisJCX07CiAJCTE0MTIxMTM1MEE0ODc5NjEwMDQ4MDI1
NSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWluZXJJ
dGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcg
LyogUHJvamVjdCBvYmplY3QgKi87CkBAIC02NzYsNiArNjk4LDI2IEBACiAvKiBFbmQgUEJYQ29u
dGFpbmVySXRlbVByb3h5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQ
aGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjFBMTNGNzUzMDQwMDAyRDlCMiAvKiBDb3B5IFN1cHBv
cnQgU2NyaXB0ICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlkc3RQYXRoID0gIiI7CisJCQlkc3RTdWJm
b2xkZXJTcGVjID0gMTY7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQluYW1lID0gIkNvcHkgU3Vw
cG9ydCBTY3JpcHQiOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CisJCX07CisJCTBGOTYzQjFDMTNGNzUzMDQwMDAyRDlCMiAvKiBJbnN0YWxsIFN1cHBvcnQgU2Ny
aXB0ICovID0geworCQkJaXNhID0gUEJYQ29weUZpbGVzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0
aW9uTWFzayA9IDg7CisJCQlkc3RQYXRoID0gIiQoU1lTVEVNX0xJQlJBUllfRElSKS9GcmFtZXdv
cmtzL0phdmFTY3JpcHRDb3JlLmZyYW1ld29yay9WZXJzaW9ucy9BL1Jlc291cmNlcyI7CisJCQlk
c3RTdWJmb2xkZXJTcGVjID0gMDsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiSW5z
dGFsbCBTdXBwb3J0IFNjcmlwdCI7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMTsKKwkJfTsKIAkJNURCQjE1MTExMzFEMEIxMzAwNTZBRDM2IC8qIENvcHkgU3VwcG9y
dCBTY3JpcHQgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTcyOSw2ICs3NzEsMTIgQEAKIAkJMEJERkZB
RDQwRkM2MTcxMDAwRDY5RUY0IC8qIENyb3NzVGhyZWFkUmVmQ291bnRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZFJlZkNvdW50ZWQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEJGMjhBMjgxMUEzM0RDMzAwNjM4Rjg0IC8qIFNpemVMaW1p
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2l6ZUxpbWl0cy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJG
NSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IERlY2ltYWxOdW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2
M0IxMTEzRjc1MkY3MDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IHVuaXR0ZXN0cy5jcHA7IHBhdGggPSB0ZXN0cy91bml0L3VuaXR0
ZXN0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjIzMTNGNzUzMDQw
MDAyRDlCMiAvKiB1bml0dGVzdHMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGlj
aXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4
ID0gMDsgcGF0aCA9IHVuaXR0ZXN0czsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0
YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRh
QWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkUxM0ZD
NjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvckhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxvY2F0b3IuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9y
UG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gT1NBbGxvY2F0
b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0
QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEz
MjUsNiArMTM3MywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE3MTNG
NzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jr
c0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMg
PSAoCisJCQkJMEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGOTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQxMjExMUUwQTQ4
NzkzQzAwNDgwMjU1IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xMzczLDYg
KzE0MzAsNyBAQAogCQkJCTkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJ
MTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYwQTNF
OEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCisJCQkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIy
IC8qIHVuaXR0ZXN0cyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOwpAQCAtMTQzOCw5ICsxNDk2LDE4IEBACiAJCQl0YWJXaWR0aCA9IDQ7
CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTBGOTYzQjBGMTNGNzUyQjIwMDAyRDlCMiAvKiB1
bml0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2
M0IxMTEzRjc1MkY3MDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCAqLywKKwkJCSk7CisJCQluYW1l
ID0gdW5pdDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTE0MTIxMTAwMEE0
ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCisJCQkJMEY5NjNCMEYxM0Y3NTJCMjAwMDJEOUIyIC8qIHVuaXQgKi8sCiAJCQkJ
MTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNF
OTFGNjAwQkFGNTlDIC8qIHRlc3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0
NkMgLyogdGVzdGFwaS5qcyAqLywKQEAgLTE2NTIsNiArMTcxOSwxMCBAQAogCQk2NTE2MkVGMTA4
RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhh
bmRsZS5oICovLAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9y
LmNwcCAqLywKKwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5o
ICovLAorCQkJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywK
IAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1
QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAv
KiB1bmljb2RlICovLApAQCAtMjIzMCw2ICsyMzAxLDkgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRF
MDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBG
RERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBS
ZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBBcnJheVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjQwRTE2RkM4
QTAwQjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRTkwRTE2RjVDRDAwQjM0NDYwIC8qIEFTQ0lJQ1R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MjU4OSw2ICsyNjYzLDI1IEBACiAvKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjk2M0IxMjEzRjc1
MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0
OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAv
KiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3Rz
IiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGOTYzQjE1MTNGNzUzMDQwMDAyRDlCMiAv
KiBTb3VyY2VzICovLAorCQkJCTBGOTYzQjE3MTNGNzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdvcmtz
ICovLAorCQkJCTBGOTYzQjFBMTNGNzUzMDQwMDAyRDlCMiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0
ICovLAorCQkJCTBGOTYzQjFDMTNGNzUzMDQwMDAyRDlCMiAvKiBJbnN0YWxsIFN1cHBvcnQgU2Ny
aXB0ICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVz
ID0gKAorCQkJCTBGOTYzQjEzMTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovLAorCQkJKTsKKwkJCW5hbWUgPSB1bml0dGVzdHM7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3Rh
cGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVu
aXR0ZXN0cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9v
bCI7CisJCX07CiAJCTE0MTIxMTFGMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovID0gewog
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0
MTIxMTM5MEE0ODc5ODQwMDQ4MDI1NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAibWluaWRvbSIgKi87CkBAIC0yNjk5LDYgKzI3OTIsNyBAQAogCQkJCTE0
MTIxMTFGMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1OUJFMEEzRThG
OTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAv
KiBqc2MgKi8sCisJCQkJMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLywK
IAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBAIC0yODEzLDYgKzI5
MDcsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE1MTNGNzUz
MDQwMDAyRDlCMiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEY5NjNCMjUxM0Y3NTMzMzAwMDJEOUIyIC8qIHVuaXR0ZXN0cy5jcHAgaW4gU291cmNlcyAqLywK
KwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsK
IAkJMTQxMjExMUQwQTQ4NzkzQzAwNDgwMjU1IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBA
IC0yODM3LDYgKzI5MzksNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMkMx
M0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5QkUxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMzA0NCw2ICszMTQ3LDE2IEBACiAvKiBFbmQgUEJYU291cmNlc0J1aWxk
UGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24g
Ki8KKwkJMEY5NjNCMTMxM0Y3NTMwNDAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gOTMyRjVCM0Uw
ODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlICovOworCQkJdGFyZ2V0UHJveHkgPSAw
Rjk2M0IxNDEzRjc1MzA0MDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9
OworCQkwRjk2M0IyOTEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9
IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRjk2M0IxMjEz
Rjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovOworCQkJdGFyZ2V0UHJveHkgPSAwRjk2M0Iy
ODEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OwogCQkx
NDEyMTEzNjBBNDg3OTYxMDA0ODAyNTUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSA5MzJGNUIzRTA4MjJBMUM3
MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUgKi87CkBAIC0zMDg3LDYgKzMyMDAsMzggQEAKIC8q
IEVuZCBQQlhUYXJnZXREZXBlbmRlbmN5IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENCdWlsZENv
bmZpZ3VyYXRpb24gc2VjdGlvbiAqLworCQkwRjk2M0IxRjEzRjc1MzA0MDAwMkQ5QjIgLyogRGVi
dWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRlc3RBUEkueGNj
b25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHVuaXR0
ZXN0czsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGOTYzQjIwMTNGNzUzMDQw
MDAyRDlCMiAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2
NyAvKiBUZXN0QVBJLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9E
VUNUX05BTUUgPSB1bml0dGVzdHM7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJ
CTBGOTYzQjIxMTNGNzUzMDQwMDAyRDlCMiAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRlc3RBUEkueGNjb25maWcgKi87CisJCQlidWlsZFNl
dHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHVuaXR0ZXN0czsKKwkJCX07CisJCQluYW1l
ID0gUHJvZmlsaW5nOworCQl9OworCQkwRjk2M0IyMjEzRjc1MzA0MDAwMkQ5QjIgLyogUHJvZHVj
dGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54
Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdW5p
dHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkxNDEyMTEzQTBB
NDg3OTg0MDA0ODAyNTUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CkBAIC0zMzAxLDYgKzM0NDYsMTcgQEAKIC8qIEVu
ZCBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhDQ29uZmlndXJh
dGlvbkxpc3Qgc2VjdGlvbiAqLworCQkwRjk2M0IxRTEzRjc1MzA0MDAwMkQ5QjIgLyogQnVpbGQg
Y29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInVuaXR0ZXN0cyIgKi8gPSB7
CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9
ICgKKwkJCQkwRjk2M0IxRjEzRjc1MzA0MDAwMkQ5QjIgLyogRGVidWcgKi8sCisJCQkJMEY5NjNC
MjAxM0Y3NTMwNDAwMDJEOUIyIC8qIFJlbGVhc2UgKi8sCisJCQkJMEY5NjNCMjExM0Y3NTMwNDAw
MDJEOUIyIC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRjk2M0IyMjEzRjc1MzA0MDAwMkQ5QjIgLyog
UHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9
IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkx
NDEyMTEzOTBBNDg3OTg0MDA0ODAyNTUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQ
QlhOYXRpdmVUYXJnZXQgIm1pbmlkb20iICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9u
TGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDkzMjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAic3RkaW50LmgiCiAj
aW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgog
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CkBAIC0xMjgsMTkgKzEyOSwyMSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3NlbWJsZXJMYWJlbChtX2luZGV4KTsKICAg
ICAgICAgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICAgICAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9pbmRleCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5h
bGxvYyhnbG9iYWxEYXRhLCBtX2luZGV4KTsKKyAgICAgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiByZXN1bHQgPSBnbG9iYWxEYXRhLmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxs
b2NhdGUoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CiAKICAgICAgICAgICAgIGlmICghcmVzdWx0KQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBtX2luZGV4KTsKKyAgICAgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQtPnN0YXJ0KCksIHJlc3VsdC0+c2l6ZUlu
Qnl0ZXMoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlciwg
bV9pbmRleCk7CisgICAgICAgICAgICBtZW1jcHkocmVzdWx0LT5zdGFydCgpLCBtX2J1ZmZlciwg
bV9pbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFz
ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxh
YmVsIGxhYmVsKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5r
QnVmZmVyLmgJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDIyICs2OSw4IEBAIGNsYXNz
IExpbmtCdWZmZXIgewogI2VuZGlmCiAKIHB1YmxpYzoKLSAgICBMaW5rQnVmZmVyKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0
YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQotICAgICAgICA6IG1fZXhlY3V0YWJsZVBvb2woZXhl
Y3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKDApCi0gICAgICAgICwgbV9jb2RlKDApCi0g
ICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKLSAgICAgICAgLCBtX2dsb2JhbERhdGEoJmdsb2Jh
bERhdGEpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAsIG1fY29tcGxldGVkKGZhbHNlKQotI2Vu
ZGlmCi0gICAgewotICAgICAgICBsaW5rQ29kZSgpOwotICAgIH0KLQotICAgIExpbmtCdWZmZXIo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgRXhlY3V0YWJs
ZUFsbG9jYXRvciYgYWxsb2NhdG9yKQotICAgICAgICA6IG1fZXhlY3V0YWJsZVBvb2woYWxsb2Nh
dG9yLnBvb2xGb3JTaXplKGdsb2JhbERhdGEsIG1hc20tPm1fYXNzZW1ibGVyLmNvZGVTaXplKCkp
KQotICAgICAgICAsIG1fc2l6ZSgwKQorICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAgICAgICAgOiBtX3NpemUoMCkKICAgICAg
ICAgLCBtX2NvZGUoMCkKICAgICAgICAgLCBtX2Fzc2VtYmxlcihtYXNtKQogICAgICAgICAsIG1f
Z2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKQEAgLTE4NSwxNCArMTcxLDcgQEAgcHVibGljOgogICAg
IHsKICAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwogCi0gICAgICAgIHJldHVybiBDb2Rl
UmVmKG1fY29kZSwgbV9leGVjdXRhYmxlUG9vbCwgbV9zaXplKTsKLSAgICB9Ci0KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBmaW5hbGl6ZUNvZGVBZGRlbmR1bSgpCi0gICAgewotICAgICAgICBwZXJm
b3JtRmluYWxpemF0aW9uKCk7Ci0KLSAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKGNv
ZGUoKSk7CisgICAgICAgIHJldHVybiBDb2RlUmVmKG1fZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAg
fQogCiAgICAgQ29kZVB0ciB0cmFtcG9saW5lQXQoTGFiZWwgbGFiZWwpCkBAIC0yMzIsMTQgKzIx
MSwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgQVNTRVJUKCFtX2NvZGUpOwogI2lmICFF
TkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgICAgIG1fY29kZSA9IG1fYXNzZW1ibGVyLT5t
X2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29s
LmdldCgpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV9hc3NlbWJsZXItPm1fYXNz
ZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERhdGEpOworICAgICAgICBpZiAoIW1fZXhl
Y3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jb2RlID0gbV9l
eGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpOwogICAgICAgICBtX3NpemUgPSBtX2Fzc2VtYmxlci0+
bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICAgICAgQVNTRVJUKG1fY29kZSk7CiAjZWxzZQog
ICAgICAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuY29k
ZVNpemUoKTsKLSAgICAgICAgbV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZVBvb2wtPmFs
bG9jKCptX2dsb2JhbERhdGEsIGluaXRpYWxTaXplKTsKLSAgICAgICAgaWYgKCFtX2NvZGUpCisg
ICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9j
YXRvci5hbGxvY2F0ZShpbml0aWFsU2l6ZSk7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9l
eGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpOworICAgICAgICBBU1NFUlQobV9jb2RlKTsKICAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKG1fY29kZSwgaW5pdGlhbFNpemUp
OwogICAgICAgICB1aW50OF90KiBpbkRhdGEgPSAodWludDhfdCopbV9hc3NlbWJsZXItPnVubGlu
a2VkQ29kZSgpOwogICAgICAgICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50OF90Kj4obV9jb2RlKTsKQEAgLTI5Nyw3ICsyODEsNyBAQCBwcml2YXRlOgogCiAgICAgICAg
IGp1bXBzVG9MaW5rLmNsZWFyKCk7CiAgICAgICAgIG1fc2l6ZSA9IHdyaXRlUHRyICsgaW5pdGlh
bFNpemUgLSByZWFkUHRyOwotICAgICAgICBtX2V4ZWN1dGFibGVQb29sLT50cnlTaHJpbmsobV9j
b2RlLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5LT5z
aHJpbmsobV9zaXplKTsKIAogI2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAgICAgIGR1bXBM
aW5rU3RhdGlzdGljcyhtX2NvZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwpAQCAtMzY2LDcgKzM1
MCw3IEBAIHByaXZhdGU6CiAgICAgfQogI2VuZGlmCiAgICAgCi0gICAgUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBt
X2NvZGU7CiAgICAgTWFjcm9Bc3NlbWJsZXIqIG1fYXNzZW1ibGVyOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJl
Zi5oCShyZXZpc2lvbiA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwyMiArMTk5LDU5
IEBAIHByaXZhdGU6CiAvLyBwb2ludGVyIHRvIHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0
byB0aGUgcG9vbCBmcm9tIHdpdGhpbiB3aGljaCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNz
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiB7Citwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgcHJpdmF0
ZSBiZWNhdXNlIGl0J3MgZGFuZ2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAor
ICAgIC8vIHRvIGJlIGVhc3kgdG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhv
ZCBiZWxvdy4KKyAgICBleHBsaWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9jb2RlUHRyKTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKQotICAgICAgICA6IG1fc2l6ZSgwKQogICAgIHsKICAgICB9CiAKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxl
UG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fY29kZShjb2Rl
KQotICAgICAgICAsIG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwg
bV9zaXplKHNpemUpCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBtX2NvZGVQdHIo
ZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnko
ZXhlY3V0YWJsZU1lbW9yeSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1v
cnktPmlzTWFuYWdlZCgpKTsKKyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+c3Rh
cnQoKSk7CisgICAgICAgIEFTU0VSVChtX2NvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICAvLyBV
c2UgdGhpcyBvbmx5IHdoZW4geW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMgdG8gY29k
ZSB0aGF0IGlzCisgICAgLy8gYWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2ggc29tZSBv
dGhlciBtZWFucy4gVHlwaWNhbGx5IHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IGNvZGVQdHIgaXMg
aW1tb3J0YWwuCisgICAgc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgeworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAg
ICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7CisgICAgfQorICAgIAor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2NvZGVQdHI7CisgICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAg
ICB7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBtX2V4ZWN1dGFibGVNZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29kZVB0
cjsgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fY29kZTsKLSAgICBSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKK3ByaXZh
dGU6CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKKyAgICBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSw5ICsxNTk1LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYi5tX29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAg
fQogICAgIAotICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRh
LCBhbGxvY2F0b3IpOworICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHko
Z2xvYmFsRGF0YSk7CiAgICAgfQogCiAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxh
YmVsIHJld2luZFRvKSB7IG1fZm9ybWF0dGVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkBA
IC0xOTM5LDkgKzE5MzksOSBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWxpZ25lZChpbnQg
YWxpZ25tZW50KSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KTsg
fQogICAgICAgICB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9
CiAKLSAgICAgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGds
b2JhbERhdGEsIGFsbG9jYXRvcik7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0
YWJsZUNvcHkoZ2xvYmFsRGF0YSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRv
TGFiZWwoQXNzZW1ibGVyTGFiZWwgcmV3aW5kVG8pIHsgbV9idWZmZXIucmV3aW5kVG9MYWJlbChy
ZXdpbmRUbyk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTcsNyArMjk3LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkg
eyByZXR1cm4gbV9pc0NvbnN0cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJ
VENvZGVGb3JDb25zdHJ1Y3QoKSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2Rl
Rm9yQ2FsbCgpOyB9Ci0gICAgICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsg
cmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2Rl
KCkuZ2V0RXhlY3V0YWJsZU1lbW9yeSgpOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVj
dXRhYmxlKiBvd25lckV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJs
ZS5nZXQoKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0
aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3Ry
dWN0aW9uLmgJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgY2xhc3MgU3RydWN0dXJlQ2hhaW47CiAKICNpZiBFTkFCTEUoSklUKQot
ICAgIHR5cGVkZWYgQ29kZUxvY2F0aW9uTGFiZWwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0U3R1YlJvdXRpbmVUeXBlOworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKIAogICAgIC8vIFN0
cnVjdHVyZSB1c2VkIGJ5IG9wX2dldF9ieV9pZF9zZWxmX2xpc3QgYW5kIG9wX2dldF9ieV9pZF9w
cm90b19saXN0IGluc3RydWN0aW9uIHRvIGhvbGQgZGF0YSBvZmYgdGhlIG1haW4gb3Bjb2RlIHN0
cmVhbS4KICAgICBzdHJ1Y3QgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5m
by5oCShyZXZpc2lvbiA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9T
dHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwogICAgICAgICB9IHU7
CiAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc3R1YlJvdXRpbmU7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBj
YWxsUmV0dXJuTG9jYXRpb247CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdp
bjsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5jcHAJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lk
IEpJVENvbXBpbGVyOjpjb21waWxlKEpJVENvZGUmIGVudHJ5CiAgICAgLy8gR2VuZXJhdGUgdGhl
IGJvZHkgb2YgdGhlIHByb2dyYW0uCiAgICAgY29tcGlsZUJvZHkoKTsKICAgICAvLyBMaW5rCi0g
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0
YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgZW50cnkgPSBKSVRD
b2RlKGxpbmtCdWZmZXIuZmluYWxpemVDb2RlKCksIEpJVENvZGU6OkRGR0pJVCk7CiB9CkBAIC05
ODYsNyArOTg2LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAog
CiAKICAgICAvLyA9PT0gTGluayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBM
aW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5r
QnVmZmVyKTsKICAgICAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNo
ZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBK
SVQgc3R1YnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJ
KHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVz
dG9yZVNjcmF0Y2goTGlua0J1ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVy
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxU
b0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1Yklu
Zm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2Rl
TG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCYgc3R1YlJvdXRp
bmUpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHNpemVfdCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVM
b2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJl
bCwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC0xMzMsMTEgKzEzMywx
MSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAg
ZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNo
R1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKS0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JnN0dWJKaXQpOwogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xh
YmVsLCBzbG93Q2FzZUxhYmVsKTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIH0KIAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8p
CkBAIC0xNzYsMTUgKzE3NiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0
YXRlKiBlCiAgICAgICAgIAogICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVl
ZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNl
cyk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKICAgICAg
ICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwg
c3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOwor
ICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5
TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRp
b25HZXRCeUlkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMxLDcgKzIz
MCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1
YkluZm8uc3R1YlJvdXRpbmUpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
IHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3Ry
dWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkp
KTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24s
IG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5p
dEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
c3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkBAIC0zMjQsNyArMzIzLDcgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgIAogICAgIGlmIChzdHViSW5mby5h
Y2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0
dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0g
bmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEs
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdl
dEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNl
bGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0zNTAsMjEgKzM0OSwyMSBAQCBzdGF0aWMgYm9vbCB0
cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5l
eGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFs
RGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90
b0JlZ2luKTsKICAgICAgICAgCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3Qs
IGxhc3RQcm90b0JlZ2luKTsKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxU
b0RvbmUpKTsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwg
PSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAg
ICAgICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhd
LnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJl
bCwgc3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAg
ICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVf
U0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArNDA3LDcgQEAg
c3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChzdHViSW5m
by5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJU
KCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8u
dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRC
eUlkQ2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IENv
ZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNT
RVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpA
QCAtNDE5LDE4ICs0MTgsMTggQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0
KEV4ZQogICAgIGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsK
ICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAg
IAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29k
ZSgpKTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGVudHJ5TGFiZWw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViUm91dGluZTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0
dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1
cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgZ2Vu
ZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4s
IGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0
dWJSb3V0aW5lKTsKICAgICAgICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+
bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAg
IENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRp
bmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQ
SElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01
NDgsMTggKzU0NywxNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBl
CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5q
dW1wKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Kmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAg
ICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwog
ICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAg
ICAgICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkKICAgICAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2Fz
ZSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxh
YmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgICAgIHN0
dWJJbmZvLnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgICAgIHN0dWJJbmZvLnN0
dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7
CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9w
cmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAg
ICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FU
T1JfREVNQU5EKQogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQkVTVF9GSVRfQUxMT0NBVE9SKQor
I2Vycm9yICJCZXN0LWZpdCBkZW1hbmQgYWxsb2NhdGlvbiBpcyBub3QgeWV0IHN1cHBvcnRlZC4i
CisjZW5kaWYKKwogRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5
c3RlbUFsbG9jKHNpemVfdCBzaXplKQogewogICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRpb24g
PSBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBh
Z2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDkzMjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEwIEBAIGV4dGVybiAiQyIgX19kZWNsc3BlYyhkbGxp
bXBvcnQpIHZvaWQgQ2EKICNpbmNsdWRlIDx3dGYvYnJldy9SZWZQdHJCcmV3Lmg+CiAjZW5kaWYK
IAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0JFU1RfRklUX0FMTE9DQVRPUikKKyNpbmNsdWRlIDx3
dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgorI2VuZGlmCisKICNkZWZpbmUgSklUX0FMTE9DQVRP
Ul9MQVJHRV9BTExPQ19TSVpFIChwYWdlU2l6ZSgpICogNCkKIAogI2lmIEVOQUJMRShBU1NFTUJM
RVJfV1hfRVhDTFVTSVZFKQpAQCAtOTksNiArMTAzLDggQEAgaW5saW5lIHNpemVfdCByb3VuZFVw
QWxsb2NhdGlvblNpemUoc2l6ZQogCiBuYW1lc3BhY2UgSlNDIHsKIAorI2lmICFFTkFCTEUoRVhF
Q1VUQUJMRV9CRVNUX0ZJVF9BTExPQ0FUT1IpCisKIGNsYXNzIEV4ZWN1dGFibGVQb29sIDogcHVi
bGljIFJlZkNvdW50ZWQ8RXhlY3V0YWJsZVBvb2w+IHsKIHB1YmxpYzoKICNpZiBFTkFCTEUoRVhF
Q1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQpAQCAtMTc1LDEwICsxODEsMTkgQEAgcHJpdmF0ZToK
ICAgICBBbGxvY2F0aW9uTGlzdCBtX3Bvb2xzOwogfTsKIAorI2VuZGlmIC8vICFFTkFCTEUoRVhF
Q1VUQUJMRV9CRVNUX0ZJVF9BTExPQ0FUT1IpCisKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9CRVNU
X0ZJVF9BTExPQ0FUT1IpCit0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlOworI2VuZGlmCisKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3Igewog
ICAgIGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBw
dWJsaWM6CisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQkVTVF9GSVRfQUxMT0NBVE9SKQorICAgIEV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJik7CisjZWxzZQogICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKICAgICAgICAgaWYgKGlz
VmFsaWQoKSkKQEAgLTE4OCwxMSArMjAzLDI3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIENSQVNI
KCk7CiAjZW5kaWYKICAgICB9CisjZW5kaWYKKyAgICAKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9C
RVNUX0ZJVF9BTExPQ0FUT1IpCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigp
OworI2Vsc2UKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb2NhdG9yKCkgeyB9CisjZW5k
aWYKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgdW5kZXJN
ZW1vcnlQcmVzc3VyZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxF
KQorICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCk7CisjZWxzZQorICAgIHN0YXRpYyB2b2lk
IGR1bXBQcm9maWxlKCkgeyB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0JFU1Rf
RklUX0FMTE9DQVRPUikKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFs
bG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyNl
bHNlCiAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbEZvclNpemUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKICAgICB7CiAgICAgICAgIC8vIFRyeSB0byBmaXQg
aW4gdGhlIGV4aXN0aW5nIHNtYWxsIGFsbG9jYXRvcgpAQCAtMjEzLDYgKzI0NCw3IEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IHBvb2w7CiAgICAgICAgIHJl
dHVybiBwb29sLnJlbGVhc2UoKTsKICAgICB9CisjZW5kaWYKIAogI2lmIEVOQUJMRShBU1NFTUJM
RVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2b2lkIG1ha2VXcml0YWJsZSh2b2lkKiBzdGFy
dCwgc2l6ZV90IHNpemUpCkBAIC0zMzYsOSArMzY4LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGlj
IHZvaWQgcmVwcm90ZWN0UmVnaW9uKHZvaWQqLCBzaXplX3QsIFByb3RlY3Rpb25TZXR0aW5nKTsK
ICNlbmRpZgogCisjaWYgIUVOQUJMRShFWEVDVVRBQkxFX0JFU1RfRklUX0FMTE9DQVRPUikKICAg
ICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fc21hbGxBbGxvY2F0aW9uUG9vbDsKKyNlbmRpZgog
fTsKIAorI2lmICFFTkFCTEUoRVhFQ1VUQUJMRV9CRVNUX0ZJVF9BTExPQ0FUT1IpCiBpbmxpbmUg
RXhlY3V0YWJsZVBvb2w6OkV4ZWN1dGFibGVQb29sKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG4pCiB7CiAgICAgc2l6ZV90IGFsbG9jU2l6ZSA9IHJvdW5kVXBBbGxvY2F0aW9uU2l6
ZShuLCBwYWdlU2l6ZSgpKTsKQEAgLTM3Nyw4ICs0MTIsOSBAQCBpbmxpbmUgdm9pZCogRXhlY3V0
YWJsZVBvb2w6OnBvb2xBbGxvY2F0CiAgICAgbV9wb29scy5hcHBlbmQocmVzdWx0KTsKICAgICBy
ZXR1cm4gcmVzdWx0LmJhc2UoKTsKIH0KKyNlbmRpZgogCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MK
IAogI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1
bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9NZXRhQWxs
b2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0
Zi9WTVRhZ3MuaD4KIApAQCAtNDYsNiArNDcsMTAxIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
IG5hbWVzcGFjZSBKU0MgewogICAgIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0JFU1RfRklUX0FM
TE9DQVRPUikKKworI2lmIENQVShBUk0pCitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNp
emUgPSAxNiAqIDEwMjQgKiAxMDI0OworI2VsaWYgQ1BVKFg4Nl82NCkKK3N0YXRpYyBjb25zdCBz
aXplX3QgZml4ZWRQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKKyNlbHNlCitzdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OworI2VuZGlmCisK
K2NsYXNzIEZpeGVkVk1Qb29sQWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CitwdWJs
aWM6CisgICAgRml4ZWRWTVBvb2xBbGxvY2F0b3IoKToKKyAgICAgICAgTWV0YUFsbG9jYXRvcigz
MikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgeworICAgICAg
ICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMo
Zml4ZWRQb29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BP
T0xfV1JJVEFCTEUsIHRydWUpOworI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCisgICAgICAgIGlm
ICghbV9yZXNlcnZhdGlvbikKKyAgICAgICAgICAgIENSQVNIKCk7CisjZW5kaWYKKyAgICAgICAg
aWYgKG1fcmVzZXJ2YXRpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNp
emUoKSA9PSBmaXhlZFBvb2xTaXplKTsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKG1f
cmVzZXJ2YXRpb24uYmFzZSgpLCBtX3Jlc2VydmF0aW9uLnNpemUoKSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNl
KHNpemVfdCYpCisgICAgeworICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBw
b29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lk
KiBwYWdlKQorICAgIHsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNp
emUoKSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZv
aWQqIHBhZ2UpCisgICAgeworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBh
Z2VTaXplKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNl
cnZhdGlvbjsKK307CisKK3N0YXRpYyBGaXhlZFZNUG9vbEFsbG9jYXRvciogYWxsb2NhdG9yOwor
Cit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQoreworICAg
IEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xBbGxv
Y2F0b3IoKTsKK30KKworRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihK
U0dsb2JhbERhdGEmKQoreworICAgIEFTU0VSVChhbGxvY2F0b3IpOworfQorCitib29sIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFsbG9jYXRv
ci0+Ynl0ZXNSZXNlcnZlZCgpOworfQorCitib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVy
TWVtb3J5UHJlc3N1cmUoKQoreworICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdGlz
dGljcyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICByZXR1cm4gc3RhdGlz
dGljcy5ieXRlc0FsbG9jYXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7Cit9CisK
K1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6
YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7
CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+
YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIHJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC5yZWxl
YXNlKCk7Cit9CisKK3NpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291
bnQoKQoreworICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7Cit9CisKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGUoKQoreworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUoKTsKK30KKyNl
bmRpZgorCisjZWxzZQorCiAjZGVmaW5lIFR3b1BvdyhuKSAoMXVsbCA8PCBuKQogCiBjbGFzcyBB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgewpAQCAtNDgxLDkgKzU3Nyw4IEBAIHByaXZhdGU6CiB9
OwogCiAKLXN0YXRpYyBTcGluTG9jayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwog
c3RhdGljIEZpeGVkVk1Qb29sQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAwOwotCitzdGF0aWMgU3Bp
bkxvY2sgc3BpbmxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKIAogc2l6ZV90IEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7CkBAIC01MjAsNiArNjE1LDggQEAg
dm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdQogICAgIGFsbG9jYXRvci0+
ZnJlZShhbGxvY2F0aW9uKTsKIH0KIAorI2VuZGlmCisKIH0KIAogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI4LDcgKzUyOCw3IEBAIEpJVENvZGUg
SklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxl
LmlzRW1wdHkoKSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2
UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0
Y2ggdGFibGVzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUo
KTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDkzMjQ2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIx
LDIwICsyMjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1
cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJs
ZVBvb2wsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMg
dm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5LCBUcmFt
cG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAgICAgewogICAgICAgICAgICAgaWYg
KCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgaml0LnByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCB0
cmFtcG9saW5lcyk7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvbGluZXMoZXhlY3V0YWJsZU1lbW9yeSwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMpOwogICAg
ICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvZGVQdHIgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRh
YmxlUG9vbCwgTmF0aXZlRnVuY3Rpb24gZnVuYykKKyAgICAgICAgc3RhdGljIENvZGVSZWYgY29t
cGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlv
biBmdW5jKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJ
VCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIENvZGVSZWYoKTsKICAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0g
ICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChleGVjdXRh
YmxlUG9vbCwgZ2xvYmFsRGF0YSwgZnVuYyk7CisgICAgICAgICAgICByZXR1cm4gaml0LnByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1
cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBj
b25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jiwgc2l6ZV90IGNhY2hlZE9mZnNl
dCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSk7
CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVT
dHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0
cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVj
dCk7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhS
ZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRh
LCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcyk7CisgICAgICAgIHZvaWQgcHJpdmF0
ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+KiBleGVjdXRhYmxlTWVtb3J5LCBKU0dsb2JhbERhdGEqIGRhdGEsIFRyYW1wb2xpbmVTdHJ1
Y3R1cmUgKnRyYW1wb2xpbmVzKTsKICAgICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7Ci0gICAgICAg
IENvZGVQdHIgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmMpOworICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGRhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpOwogICAgICAgICB2b2lkIHByaXZh
dGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpOwogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CkBAIC0xMDI0LDcgKzEwMjQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2VuZGlmCiAgICAgICAgIFdlYWtSYW5kb20g
bV9yYW5kb21HZW5lcmF0b3I7Ci0gICAgICAgIHN0YXRpYyBDb2RlUHRyIHN0cmluZ0dldEJ5VmFs
U3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBw
b29sKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSk7CiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwog
CiAgICAgaW5saW5lIHZvaWQgSklUOjplbWl0X29wX2xvb3AoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lv
biA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NiwxMiArNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9v
bCBvcGVyYXRvciAhKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFtX3Jl
Zi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiAhbV9yZWY7
CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZTsKKyAgICAgICAgICAgIHJldHVybiBt
X3JlZi5jb2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVy
bnMgdGhlIG9mZnNldCBpbiBieXRlcyBvZiAncG9pbnRlckludG9Db2RlJyBpbnRvCkBAIC02OSw3
ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBibG9jayBvZiBjb2RlLiAgSXQg
aXMgQVNTRVJUZWQgdGhhdCBubyBjb2RlYmxvY2sgPjRnYiBpbiBzaXplLgogICAgICAgICB1bnNp
Z25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJ
bnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5tX2NvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJl
dF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRw
dHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQVNT
RVJUKHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkg
PT0gcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVz
dWx0KTsKICAgICAgICAgfQpAQCAtNzcsMjQgKzc3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlIQogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBleGVjdXRl
KFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLm1fY29kZS5leGVjdXRhYmxl
QWRkcmVzcygpLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJl
c3VsdCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJs
ZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CiAgICAgICAgICAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1bHQ7CiAgICAgICAgIH0KIAog
ICAgICAgICB2b2lkKiBzdGFydCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3Jl
Zi5tX2NvZGUuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgp
LmRhdGFMb2NhdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHNpemUoKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNz
KCkpOwotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fc2l6ZTsKKyAgICAgICAgICAgIEFTU0VS
VChtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4g
bV9yZWYuc2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGdldEV4
ZWN1dGFibGVQb29sKCkKKyAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZ2V0RXhlY3V0
YWJsZU1lbW9yeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2V4ZWN1
dGFibGVQb29sLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1v
cnkoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkKQEAg
LTEwNCw5ICsxMDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBIb3N0IGZ1bmN0
aW9ucyBhcmUgYSBiaXQgc3BlY2lhbDsgdGhleSBoYXZlIGEgbV9jb2RlIHBvaW50ZXIgYnV0IHRo
ZXkKICAgICAgICAgLy8gZG8gbm90IGluZGl2aWR1bGx5IHJlZiB0aGUgZXhlY3V0YWJsZSBwb29s
IGNvbnRhaW5pbmcgdGhlIHRyYW1wb2xpbmUuCi0gICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RG
dW5jdGlvbihDb2RlUHRyIGNvZGUpCisgICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlv
bihDb2RlUmVmIGNvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNv
ZGUuZGF0YUxvY2F0aW9uKCksIDAsIDAsIEhvc3RDYWxsVGh1bmspOworICAgICAgICAgICAgcmV0
dXJuIEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVuayk7CiAgICAgICAgIH0KIAogICAgICAgICB2
b2lkIGNsZWFyKCkKQEAgLTExNiw4ICsxMTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUsIEpJVFR5cGUgaml0
VHlwZSkKLSAgICAgICAgICAgIDogbV9yZWYoY29kZSwgZXhlY3V0YWJsZVBvb2wsIHNpemUpCisg
ICAgICAgIEpJVENvZGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRh
YmxlTWVtb3J5LCBKSVRUeXBlIGppdFR5cGUpCisgICAgICAgICAgICA6IG1fcmVmKGV4ZWN1dGFi
bGVNZW1vcnkpCiAgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNyArMzEyLDcgQEAgSklU
OjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVD
YWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorSklUOjpDb2RlUHRyIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0
aXZlRnVuY3Rpb24gZnVuYykKIHsKICAgICBDYWxsIG5hdGl2ZUNhbGw7CiAgICAgTGFiZWwgbmF0
aXZlQ2FsbFRodW5rID0gYWxpZ24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTMyNDYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFi
bGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRy
YW1wb2xpbmVzKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiogZXhlY3V0YWJsZU1lbW9yeSwgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKIHsK
ICAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFj
Y2VzcyBmb3Igc3RyaW5nIGxlbmd0aAogICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0gYWxp
Z24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xp
bmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRo
ZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0
b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0
cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDb25zdHJ1
Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29k
ZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0
YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKKyAgICAqZXhlY3V0YWJsZU1l
bW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+
Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxs
TGlua0JlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSBw
YXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7CkBAIC0y
ODksOSArMjg5LDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwog
ICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiwgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKK0pJVDo6Q29kZVJlZiBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2
ZUZ1bmN0aW9uKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpOworICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0
X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDkz
MjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5h
bWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnN0
cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1
dGFibGVQb29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBq
aXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC03Nyw4ICs3Nyw4IEBAIEpJVDo6Q29kZVB0
ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIo
MCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpLm1fY29kZTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxE
YXRhLCAmaml0KTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAK
IHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShp
dGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRy
KE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmpz
U3RyaW5nVlB0cikpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHVi
KHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOworICAgIGVtaXROYWtlZENhbGwoQ29kZUxv
Y2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcikuY29kZSgpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8s
IHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBA
IC01NDksNyArNTQ5LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRp
bwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKICAgICBDYWxs
IGZhaWx1cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29s
KCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBj
dGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAK
QEAgLTU1OCwxMCArNTU4LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5z
aXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25Q
dHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIGVudHJ5TGFiZWwp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJl
c3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKIH0K
IAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNo
ZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYwOSw3ICs2MDgs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgZW1pdEZh
c3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwogICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9y
bWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xv
dyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRC
eUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTYyMCwxMyArNjE5LDEyIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRS
ZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0
IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxh
YmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+
c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVt
cCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQu
CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJl
Z2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAg
ICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJv
dXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhh
biBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02NjcsNyArNjY1LDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIH0gZWxzZQogICAg
ICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zm
c2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAg
IC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBi
YWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjg0LDEzICs2ODIs
MTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgICAgICB9
CiAgICAgfQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVs
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAg
ICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRp
bmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBv
bmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03MjAsNyArNzE3LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAgICBjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgc3RydWN0dXJlLCBjYWNoZWRPZmZzZXQpOwogICAg
IEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVl
ZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsK
QEAgLTczMCw3ICs3MjcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxp
c3QoCiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRo
ZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1
Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAg
aWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dD
YXNlQ2FsbCk7CiAKQEAgLTczOSwxNCArNzM2LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBo
b3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRl
c3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZUFkZGVuZHVtKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Ns
b3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Q29kZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3Rv
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc4NSw3ICs3ODIsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7
CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29k
ZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAg
Zm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC03OTUsMjAgKzc5MiwyMCBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgfQogCiAgICAgLy8g
VXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVD
YXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
czIsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8g
dGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUg
dG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7
CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlQWRkZW5kdW0oKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJ
bmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwg
ZW50cnlMYWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0
YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVTdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKIH0K
IAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHVi
SW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBl
U3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTg1MSw3ICs4NDgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmpl
Y3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAg
Zm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7
IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04NjEsMjIgKzg1OCwyMiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgfQogCiAgICAgLy8g
VXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0
c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1
Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgY2hh
aW4pOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUg
anVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3Rl
YWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5j
b2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTE5LDcgKzkxNiw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGls
ZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAg
SnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVk
c1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBp
dGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpA
QCAtOTM1LDEzICs5MzIsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
KFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCiAgICAgLy8g
VHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVk
IGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5
TGFiZWw7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0
Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5MzI0NikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NTcsOCArNzU3LDggQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxEYXRhKiBnbG9iYQog
ICAgIGlmICghZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9i
YWxEYXRhLCAmbV9leGVjdXRhYmxlUG9vbCwgJm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7Ci0gICAg
QVNTRVJUKG1fZXhlY3V0YWJsZVBvb2wpOworICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyhnbG9iYWxEYXRhLCAmbV9leGVjdXRhYmxlTWVtb3J5LCAmbV90cmFtcG9saW5lU3Ry
dWN0dXJlKTsKKyAgICBBU1NFUlQoISFtX2V4ZWN1dGFibGVNZW1vcnkpOwogI2lmIENQVShBUk1f
VEhVTUIyKQogICAgIC8vIFVuZm9ydHVuYXRlIHRoZSBhcm0gY29tcGlsZXIgZG9lcyBub3QgbGlr
ZSB0aGUgdXNlIG9mIG9mZnNldG9mIG9uIEpJVFN0YWNrRnJhbWUgKHNpbmNlIGl0IGNvbnRhaW5z
IG5vbiBQT0QgdHlwZXMpLAogICAgIC8vIGFuZCB0aGUgT0JKRUNUX09GRlNFVE9GIG1hY3JvIGRv
ZXMgbm90IGFwcGVhciBjb25zdGFudGlzaCBlbm91Z2ggZm9yIGl0IHRvIGJlIGhhcHB5IHdpdGgg
aXRzIHVzZSBpbiBDT01QSUxFX0FTU0VSVApAQCAtMTYwMiw3ICsxNjAyLDcgQEAgREVGSU5FX1NU
VUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlmIChzdHViSW5mby0+
YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VS
VCghc3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIENvZGVMb2NhdGlvbkxh
YmVsKCksIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkp
OworICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCksIHN0dWJJbmZvLT51Lmdl
dEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgc3R1Yklu
Zm8tPmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0
dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTYyOCwxMiArMTYy
OCwxMiBAQCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgc3dp
dGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9w
cm90bzoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0
dWJJbmZvLT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAg
c3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CiAgICAg
ICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZv
LT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5n
ZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUg
PSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJv
dG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKQEAgLTM1NzAsMTEgKzM1NzAsMTEgQEAg
REVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRvXwogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b09iamVjdChjYWxsRnJh
bWUpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpU3R1YihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgc3RkOjpwYWlyPENUSVN0dWJNYXA6
Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgc3RkOjpwYWlyPENUSVN0dWJNYXA6Oml0ZXJhdG9y
LCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsK
KyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhKTsKICAg
ICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKIH0KIApAQCAtMzU4Miw3ICszNTgyLDcgQEAg
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFp
cjxIb3N0RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5j
dGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAg
ICBpZiAoISplbnRyeS5maXJzdC0+c2Vjb25kKQotICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25k
LnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBK
SVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wsIGZ1
bmN0aW9uKSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFs
RGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVD
VElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgp
KSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAgICByZXR1cm4gZW50cnkuZmly
c3QtPnNlY29uZC5nZXQoKTsKIH0KIApAQCAtMzU5MCw4ICszNTkwLDggQEAgTmF0aXZlRXhlY3V0
YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFpcjxIb3N0RnVuY3Rp
b25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAt
PmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAoISplbnRy
eS5maXJzdC0+c2Vjb25kKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlID0g
Z2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRh
YmxlUG9vbC5nZXQoKSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICAgICAgZW50cnku
Zmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgq
Z2xvYmFsRGF0YSwgY29kZSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9z
dEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEpIDog
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0
KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUs
IGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7
CiAgICAgfQogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gOTMyNDYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3
ICsyOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGN0aU5hdGl2ZUNvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlO
YXRpdmVDb25zdHJ1Y3Q7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVNvZnRN
b2R1bG8oKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpU29mdE1vZHVsbzsgfQog
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpOwogCiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0
dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVu
a0dlbmVyYXRvcik7CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBjbGVhckhvc3RGdW5jdGlvblN0dWJzKCk7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cj4g
Q1RJU3R1Yk1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY+IENUSVN0dWJNYXA7CiAgICAgICAgIENUSVN0dWJNYXAgbV9jdGlT
dHViTWFwOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8TmF0aXZlRnVuY3Rpb24sIFdlYWs8TmF0
aXZlRXhlY3V0YWJsZT4gPiBIb3N0RnVuY3Rpb25TdHViTWFwOwogICAgICAgICBPd25QdHI8SG9z
dEZ1bmN0aW9uU3R1Yk1hcD4gbV9ob3N0RnVuY3Rpb25TdHViTWFwOwotICAgICAgICBSZWZQdHI8
RXhlY3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7CisgICAgICAgIFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CiAKICAgICAgICAgVHJhbXBvbGlu
ZVN0cnVjdHVyZSBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmU7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiA5
MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBj
bGFzcyBTcGVjaWFsaXplZFRodW5rSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAg
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCisgICAgICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
ICAgICAgICAgICAgIDogbV9leHBlY3RlZEFyZ0NvdW50KGV4cGVjdGVkQXJnQ291bnQpCiAgICAg
ICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAgICAgLCBtX3Bvb2wo
cG9vbCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBl
eHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVu
ZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJG
aWxlOjpBcmd1bWVudENvdW50ICogKGludClzaXplb2YoUmVnaXN0ZXIpKSwgVHJ1c3RlZEltbTMy
KGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwpAQCAtMTIzLDEzICsxMjIsMTMgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZmluYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZmFsbGJhY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoZ2xvYmFsRGF0YSwgdGhpcywgbV9wb29sLmdldCgpKTsKKyAgICAgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAg
ICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNb
aV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KS5tX2NvZGU7CisgICAgICAgICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlv
biB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudApAQCAtMTYzLDcgKzE2Miw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgaW50IG1fZXhwZWN0ZWRBcmdD
b3VudDsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Ci0gICAgICAgIFJlZlB0
cjxFeGVjdXRhYmxlUG9vbD4gbV9wb29sOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QgbV9mYWlsdXJlczsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0
cj4gPiBtX2NhbGxzOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjYg
KzYzLDI2IEBAIHN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBq
aXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
ZHN0KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEs
IHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAg
IHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhl
Y3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDEsIGdsb2JhbERhdGEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgY2hhclRvU3Ry
aW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0
LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsK
ICAgICAvLyBsb2FkIGNoYXIgY29kZQogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0
YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC05MCwxMSArOTAsMTEgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxp
emUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKSk7CiAKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERv
dWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwKTsKQEAgLTE3OCwxMiArMTc4LDEyIEBAIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVy
KGxvZyk7CiBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihmbG9vcik7CiBkZWZpbmVVbmFyeURv
dWJsZU9wV3JhcHBlcihjZWlsKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRh
LCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVP
cFdyYXBwZXIoZmxvb3IpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBq
aXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1
bXAubGluaygmaml0KTsKQEAgLTE5NywxMSArMTk3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBmbG9vclRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVu
a0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKSB8
fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7
CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwpAQCAtMjIwLDExICsyMjAsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2
ZVplcm9Db25zdGFudAogc3RhdGljIGNvbnN0IGRvdWJsZSBvbmVDb25zdGFudCA9IDEuMDsKIHN0
YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVIYWxmQ29uc3RhbnQgPSAtMC41OwogICAgIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3Vu
ZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVy
KGpzUm91bmQpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVy
biBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCk7CkBAIC0yMzksMzcgKzIzOSwzNyBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAoIVVuYXJ5RG91
YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpOwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERh
dGEsIHBvb2wpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFq
aXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0
LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQu
cmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBq
aXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7
CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2Jh
bERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICBy
ZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJn
dW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBw
ZXIobG9nKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJl
Z1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFi
c1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2Jh
bERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEp
OwogICAgIGlmICghaml0LnN1cHBvcnRzRG91YmxlQml0b3BzKCkpCi0gICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9u
SW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yc2hpZnQzMihTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBhYnNUaHVua0dlbmVyYXRvcigKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQgaml0KDIsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KDIsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0
LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsK
ICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVn
VDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gOTMyNDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSwyMCArMzEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7
CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0g
ICAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOworICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjsKIAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyICgqVGh1bmtHZW5l
cmF0b3IpKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRh
YmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
ZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhl
Y3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCop
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRh
YmxlUG9vbCopOworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5l
cmF0b3IpKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29k
ZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogfQogI2VuZGlmCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDkzMjQ2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzIsNyArMTcyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVk
ZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRp
YyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1
Y3RvcikKKyAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5h
dGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWNh
bGxUaHVuaykKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZl
RXhlY3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRh
LCBKSVRDb2RlKCksIGZ1bmN0aW9uLCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRp
bmcuY3BwCShyZXZpc2lvbiA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAKICNpbmNsdWRlICJIZWFwLmgiCiAjaW5jbHVkZSAiZHRvYS5oIgorI2luY2x1ZGUgIkV4ZWN1
dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNH
bG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCkBAIC00OSw2ICs1MCw3IEBAIHN0
YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKIHsKICAgICBXVEY6OmluaXRpYWxp
emVUaHJlYWRpbmcoKTsKICAgICBKU0dsb2JhbERhdGE6OnN0b3JlVlB0cnMoKTsKKyAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCk7CiAjaWYgRU5BQkxFKEpTQ19N
VUxUSVBMRV9USFJFQURTKQogICAgIFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHAJKHJldmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDcgKzE4NSw2IEBA
IEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIGVtcHR5TGlz
dChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAs
IGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCi0gICAgLCByZWdleEFsbG9jYXRvcigqdGhpcykK
ICNlbmRpZgogICAgICwgbGV4ZXIobmV3IExleGVyKHRoaXMpKQogICAgICwgcGFyc2VyKG5ldyBQ
YXJzZXIpCkBAIC00MzYsNiArNDM1LDkgQEAgdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGlu
ZygpCiB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQog
ewogICAgIGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0YShleGVjKTsKKyNpZiBFTkFCTEUoQVNT
RU1CTEVSKQorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCk7CisjZW5kaWYK
IH0KIAogdm9pZCBKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lv
biA5MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTIsNyArMTkyLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3Ig
ZXhlY3V0YWJsZUFsbG9jYXRvcjsKLSAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciByZWdleEFs
bG9jYXRvcjsKICNlbmRpZgogCiAjaWYgIUVOQUJMRShKSVQpCkBAIC0yMTUsNyArMjE0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBF
TkFCTEUoSklUKQogICAgICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRv
ciBnZW5lcmF0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3Rp
U3R1Yih0aGlzLCBnZW5lcmF0b3IpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvdW5pdC91bml0dGVzdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy91bml0L3VuaXR0ZXN0cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdW5pdC91bml0dGVzdHMuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIklu
aXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworLy8gVGVz
dCBzdXBwb3J0CisKKyNkZWZpbmUgUlVOX1NVSVRFKGV4cHJlc3Npb24pIGRvIHsgICAgICAgICAg
ICAgIFwKKyAgICAgICAgcHJpbnRmKCIlczpcbiIsICNleHByZXNzaW9uKTsgICAgICAgICAgIFwK
KyAgICAgICAgKGV4cHJlc3Npb24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
IHdoaWxlKDApCisKKyNkZWZpbmUgUlVOX1RFU1QoZXhwcmVzc2lvbikgZG8geyAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCIgICAlczogIiwgI2V4cHJlc3Npb24pOyAgICAgICAg
ICAgIFwKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgKGV4cHJlc3Npb24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgcHJpbnRmKCJPS1xuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlKDApCisKKyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoZXhwcmVzc2lv
bikpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIHByaW50ZigiRkFJTDogJXM6JXM6JWQ6IGFzc2VydGlvbiAlcyBmYWlsZWQhXG4iLCBf
X0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyBcCisgICAgICAg
ICAgICBDUkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworc3RhdGljIHZv
aWQgcHJpbnRWYWx1ZShib29sIHZhbHVlKSB7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBwcmlu
dGYoInRydWUiKTsKKyAgICBlbHNlCisgICAgICAgIHByaW50ZigiZmFsc2UiKTsKK30KKworc3Rh
dGljIHZvaWQgcHJpbnRWYWx1ZShpbnQgdmFsdWUpIHsKKyAgICBwcmludGYoIiVkIiwgdmFsdWUp
OworfQorCitzdGF0aWMgdm9pZCBwcmludFZhbHVlKHNpemVfdCB2YWx1ZSkgeworICAgIHByaW50
ZigiMHglbHgiLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50VmFsdWUodm9pZCogdmFs
dWUpIHsKKyAgICBwcmludGYoIiVwIiwgdmFsdWUpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
Pgorc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxJbXBsKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBhY3R1YWxT
dHJpbmcsIFQgYWN0dWFsLCBUIGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwgIT0gZXhwZWN0
ZWQpIHsKKyAgICAgICAgcHJpbnRmKCJGQUlMOiAlczolczolZDogZXhwZWN0ZWQgJXMgdG8gYmUg
IiwgZmlsZU5hbWUsIGZ1bmN0aW9uTmFtZSwgbGluZU51bWJlciwgYWN0dWFsU3RyaW5nKTsKKyAg
ICAgICAgcHJpbnRWYWx1ZShleHBlY3RlZCk7CisgICAgICAgIHByaW50ZigiIGJ1dCB3YXMgIik7
CisgICAgICAgIHByaW50VmFsdWUoYWN0dWFsKTsKKyAgICAgICAgcHJpbnRmKCJcbiIpOworICAg
ICAgICBDUkFTSCgpOworICAgIH0KK30KKworI2RlZmluZSBURVNUX0FTU0VSVF9FUVVBTChhY3R1
YWwsIGV4cGVjdGVkKSBhc3NlcnRFcXVhbEltcGwoX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19M
SU5FX18sICNhY3R1YWwsIGFjdHVhbCwgZXhwZWN0ZWQpCisKKy8vIFRlc3RzIGZvciBSZWRCbGFj
a1RyZWUKKworY2xhc3MgUmVkQmxhY2tUcmVlVGVzdHMgeworcHJpdmF0ZToKKyAgICBSZWRCbGFj
a1RyZWVUZXN0cygpIHsgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJ1blRlc3Rz
KCkKKyAgICB7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIiIpKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdERyaXZlcigiKnhAeSF6IikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVy
KCIrYSIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2EqeEB5IXoiKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithKmFAYSFhIikpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0RHJpdmVyKCIrYStiIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2Mi
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytkIikpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2Ir
YytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitj
K2QiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytkK2ErYitjK2QrYSti
K2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2Ir
YytkK2ErYitjK2QrYStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28rcCtxK3Ircyt0K3Urdit4
K3kreiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2
K3greSt6KmEqYipjKmQqZSpmKmcqaCppKmoqaypsKm0qbipvKnAqcSpyKnMqdCp1KnYqdyp4Knkq
eiFhIWIhYyFkIWUhZiFnIWghaSFqIWshbCFtIW4hbyFwIXEhciFzIXQhdSF2IXcheCF5IXoiKSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIitkK2QrbSt3QGRAbUB3QGFAZ0BxIikpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrZCtkK2QrZCtkK2QrZCtkK2QrZCtmK2YrZitm
K2YrZitmK2graCtpK2oraytsK20rbytwK3Ercit6QGFAYkBjQGRAZUBmQGdAaEBpQGpAa0BsQG1A
bkBvQHBAcUByQHNAdEB1QHZAd0B4QHlAeiIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3Rh
dGljIHVuc2lnbmVkIGNvdW50ZXI7CisgICAgCisgICAgc3RydWN0IFBhaXIgeworICAgICAgICBj
aGFyIGtleTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWU7CisgICAgICAgIAorICAgICAgICBQYWly
KCkgeyB9CisgICAgICAgIAorICAgICAgICBQYWlyKGNoYXIga2V5LCB1bnNpZ25lZCB2YWx1ZSkK
KyAgICAgICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFBhaXImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09
IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBr
ZXkgPCBvdGhlci5rZXk7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgVmVj
dG9yPFBhaXIsIDE2PiBQYWlyVmVjdG9yOworICAgIAorICAgIHN0YXRpYyBQYWlyVmVjdG9yIGZp
bmRFeGFjdChQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXkpCisgICAgeworICAgICAgICBQ
YWlyVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBhc1ZlY3Rvci5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChh
c1ZlY3Rvci5hdChpbmRleCkua2V5ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGFzVmVjdG9yLmF0KGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0
ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJlbW92ZShQYWly
VmVjdG9yJiBhc1ZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgYXNWZWN0b3Iu
YXQoaW5kZXgpID0gYXNWZWN0b3IubGFzdCgpOworICAgICAgICBhc1ZlY3Rvci5yZW1vdmVMYXN0
KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQYWlyVmVjdG9yIGZpbmRMZWFzdEdyZWF0ZXJU
aGFuT3JFcXVhbChQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXkpCisgICAgeworICAgICAg
ICBjaGFyIGJlc3RLZXkgPSAwOyAvLyBhc3NpZ25tZW50IHRvIG1ha2UgZ2NjIGhhcHB5CisgICAg
ICAgIGJvb2wgZm91bmRLZXkgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID49IGtleSkgeworICAgICAgICAgICAgICAg
IGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5IDwgYmVzdEtleSB8fCAhZm91bmRLZXkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmRLZXkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBi
ZXN0S2V5ID0gYXNWZWN0b3IuYXQoaW5kZXgpLmtleTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBhaXJWZWN0b3IgcmVzdWx0
OworICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZEtleSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmluZEV4YWN0KGFzVmVjdG9yLCBiZXN0
S2V5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Rm91bmRBbmRSZW1vdmUo
UGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5LCB1bnNpZ25lZCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBzaXplX3QgZm91bmRJ
bmRleCA9IDA7IC8vIG1ha2UgY29tcGlsZXJzIGhhcHB5CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA9PSBrZXkK
KyAgICAgICAgICAgICAgICAgICAgJiYgYXNWZWN0b3IuYXQoaW5kZXgpLnZhbHVlID09IHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFmb3VuZCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKGZvdW5kKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmVtb3ZlKGFzVmVjdG9yLCBmb3VuZEluZGV4KTsKKyAg
ICB9CisgICAgCisgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgcGFzc2VzIGEgY29weSBvZiB0aGUg
dmVjdG9yLgorICAgIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFsKFJlZEJsYWNrVHJlZTxjaGFyLCB1
bnNpZ25lZD4mIGFzVHJlZSwgUGFpclZlY3RvciBhc1ZlY3RvcikKKyAgICB7CisgICAgICAgIGZv
ciAoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogY3VycmVudCA9IGFzVHJlZS5m
aXJzdCgpOyBjdXJyZW50OyBjdXJyZW50ID0gYXNUcmVlLnN1Y2Nlc3NvcihjdXJyZW50KSkKKyAg
ICAgICAgICAgIGFzc2VydEZvdW5kQW5kUmVtb3ZlKGFzVmVjdG9yLCBjdXJyZW50LT5rZXksIGN1
cnJlbnQtPnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgYXNzZXJ0U2FtZVZh
bHVlc0ZvcktleShSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+JiBhc1RyZWUsIFJlZEJsYWNr
VHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUsIFBhaXJWZWN0b3IgZm91bmRWYWx1ZXMs
IGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
UmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogcHJldk5vZGUgPSBub2RlOworICAg
ICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIG5vZGUgPSBwcmV2Tm9kZTsKKyAgICAgICAg
ICAgICAgICBwcmV2Tm9kZSA9IGFzVHJlZS5wcmVkZWNlc3NvcihwcmV2Tm9kZSk7CisgICAgICAg
ICAgICB9IHdoaWxlIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS0+a2V5ID09IGtleSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKCFwcmV2Tm9kZSB8fCBwcmV2Tm9kZS0+a2V5IDwga2V5KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGFzc2VydEZv
dW5kQW5kUmVtb3ZlKGZvdW5kVmFsdWVzLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlID0gYXNUcmVlLnN1Y2Nlc3Nvcihub2Rl
KTsKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVCghbm9kZSB8fCBub2RlLT5rZXkgPj0ga2V5
KTsKKyAgICAgICAgICAgIH0gd2hpbGUgKG5vZGUgJiYgbm9kZS0+a2V5ID09IGtleSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKGZvdW5kVmFsdWVzLmlzRW1wdHko
KSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBjb250cm9sIHN0cmluZyBpcyBhIG51bGwtdGVy
bWluYXRlZCBsaXN0IG9mIGNvbW1hbmRzLiAgRWFjaAorICAgIC8vIGNvbW1hbmQgaXMgdHdvIGNo
YXJhY3RlcnMsIHdpdGggdGhlIGZpcnN0IGlkZW50aWZ5aW5nIHRoZSBvcGVyYXRpb24KKyAgICAv
LyBhbmQgdGhlIHNlY29uZCBnaXZpbmcgYSBrZXkuICBUaGUgY29tbWFuZHMgYXJlOgorICAgIC8v
ICAreCAgQWRkIHgKKyAgICAvLyAgKnggIEZpbmQgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgKKyAg
ICAvLyAgQHggIEZpbmQgYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgc21hbGxlc3Qga2V5IHRo
YXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHgKKyAgICAvLyAgIXggIFJlbW92ZSBhbGwg
ZWxlbWVudHMgZXF1YWwgdG8geAorICAgIHN0YXRpYyB2b2lkIHRlc3REcml2ZXIoY29uc3QgY2hh
ciogY29udHJvbFN0cmluZykKKyAgICB7CisgICAgICAgIFBhaXJWZWN0b3IgYXNWZWN0b3I7Cisg
ICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4gYXNUcmVlOworICAgICAgICAKKyAg
ICAgICAgZm9yIChjb25zdCBjaGFyKiBjdXJyZW50ID0gY29udHJvbFN0cmluZzsgKmN1cnJlbnQ7
IGN1cnJlbnQgKz0gMikgeworICAgICAgICAgICAgY2hhciBjb21tYW5kID0gY3VycmVudFswXTsK
KyAgICAgICAgICAgIGNoYXIga2V5ID0gY3VycmVudFsxXTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IHZhbHVlID0gKytjb3VudGVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoY29t
bWFuZCk7CisgICAgICAgICAgICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlICcrJzogeworICAgICAgICAg
ICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBuZXcgUmVk
QmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZTsKKyAgICAgICAgICAgICAgICBub2RlLT5r
ZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICBhc1RyZWUuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgICAgIGFzVmVjdG9yLmFw
cGVuZChQYWlyKGtleSwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyonOiB7CisgICAgICAg
ICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJl
ZS5maW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAg
ICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVlLCBub2RlLCBmaW5kRXhhY3QoYXNWZWN0
b3IsIGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGNhc2UgJ0AnOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNo
YXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5maW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAg
ICAgICBURVNUX0FTU0VSVChub2RlLT5rZXkgPj0ga2V5KTsKKyAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRMZWFzdEdyZWF0ZXJUaGFu
T3JFcXVhbChhc1ZlY3Rvciwga2V5KSwgbm9kZS0+a2V5KTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoZmluZExlYXN0R3JlYXRlclRoYW5P
ckVxdWFsKGFzVmVjdG9yLCBrZXkpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICchJzog
eworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIFJl
ZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBhc1RyZWUucmVtb3ZlKGtl
eSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3Rvciwgbm9kZS0+a2V5LCBub2RlLT52
YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBURVNUX0FTU0VSVChmaW5kRXhhY3QoYXNWZWN0b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIGFzVHJlZS5jaGVja0Nv
bnNpc3RlbmN5KCk7CisjZW5kaWYKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFzVHJl
ZS5zaXplKCksIGFzVmVjdG9yLnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbChhc1Ry
ZWUsIGFzVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KK307CisKK3Vuc2lnbmVkIFJlZEJsYWNr
VHJlZVRlc3RzOjpjb3VudGVyOworCisvLyBUZXN0cyBmb3IgTWV0YUFsbG9jYXRvcgorCitjbGFz
cyBNZXRhQWxsb2NhdG9yVGVzdHMgeworcHJpdmF0ZToKKyAgICBNZXRhQWxsb2NhdG9yVGVzdHMo
KSB7IH0KKworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJ1blRlc3RzKCkKKyAgICB7CisgICAg
ICAgIFJVTl9URVNUKHRlc3ROb3RoaW5nKCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QWxsb2Na
ZXJvKCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0T25lQWxsb2MoMzIpKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdE9uZUFsbG9jKDY0KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RPbmVBbGxvYyhw
YWdlU2l6ZSgpKjIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwg
MzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDAp
KTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDApKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDY0LCAwKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCA2NCwgMCkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgNjQsIDApKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJV
Tl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCAzMiwgMCkpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdFJlcGVhdEFsbG9jRnJlZShwYWdlU2l6ZSgpICogMiwgMzIsIDApKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgcGFnZVNpemUoKSAqIDIsIDApKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZShwYWdlU2l6ZSgpICogMiwgMzIsIDAp
KTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZShwYWdlU2l6ZSgpLCBwYWdl
U2l6ZSgpICogMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBh
Z2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1w
bGVGdWxsQ29hbGVzY2UoMzIsIDMyLCAxMjgpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBs
ZUZ1bGxDb2FsZXNjZSgzMiwgNjQsIDEyOCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxl
RnVsbENvYWxlc2NlKDY0LCAzMiwgMTI4KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVG
dWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFnZVNpemUoKSkpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VT
aXplKCkgKiAyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFn
ZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkgKiAyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1w
bGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgcGFnZVNpemUoKSwgcGFnZVNpemUoKSAqIDIpKTsK
KyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwgMCkpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAzMiwgMCkp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAzMiwg
MzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIHBhZ2VT
aXplKCkgLSAzMiwgMzIsIHBhZ2VTaXplKCkgLSA2NCwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAzMiwgMzIsIDApKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIHBhZ2VTaXplKCkgLSAzMiwgMzIs
IHBhZ2VTaXplKCkgLSA2NCwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZpbGxIZWFw
KDMyLCBwYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMikpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0RmlsbEhlYXAocGFnZVNpemUoKSwgcGFnZXNJbkhlYXApKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdEZpbGxIZWFwKHBhZ2VTaXplKCkgKiAyLCBwYWdlc0luSGVhcCAvIDIpKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdFJpZ2h0QWxsb2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIsIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJpZ2h0QWxsb2NhdGlvbihwYWdlU2l6ZSgpIC8g
NCwgcGFnZVNpemUoKSwgcGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdEJlc3RGaXQoNjQsIDY0LCAzKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0
Rml0KDY0LCA2NCwgMTApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoNjQsIDY0LCAx
MDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDY0LCAzKSk7CisgICAgICAg
IFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwgMTApKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dEJlc3RGaXQoOTYsIDY0LCAxMDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYs
IDk2LCAzKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA5NiwgMTApKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDk2LCA4MCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0U2hyaW5rKDY0LCAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VT
aXplKCksIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSwgcGFn
ZVNpemUoKSAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAq
IDIsIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBh
Z2VTaXplKCkgKyAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCkg
KiAyLCBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUo
KSAqIDIsIHBhZ2VTaXplKCkgLSAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBh
Z2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpICogMiAtIDMyKSk7CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogdGVzdHMgdGhhdCBzdGlsbCBuZWVkIHRvIGJlIGltcGxlbWVudGVkOgorICAgICAg
ICAvLyAtIHN5c3RlbSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgYWxsb2NhdGluZyBtb3JlIG1lbW9y
eQorICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY2xhc3MgU2ltcGxlVGVzdEFsbG9jYXRvcjog
cHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2ltcGxlVGVzdEFs
bG9jYXRvcigpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQ
YWdlICogcGFnZVNpemUoKSksIHBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgflNpbXBsZVRlc3RBbGxvY2F0b3IoKQorICAgICAg
ICB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAg
ICAgICAgIGFsbG9jYXRvckRlc3Ryb3llZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmly
dHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBib3RoIGZyZWUgYW5kIHVubWFwcGVkLgorICAgICAg
ICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YWRkcmVzcykpKTsKKyAgICAgICAgICAgIHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlIG9mIG9iamVjdHMgYXQg
dGhpcyBwb2ludCwgYnV0IGl0IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgLy8gYmUgbWFwcGVk
LgorICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90
IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJlc3MgPCBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyArK2FkZHJlc3Mp
CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIWJ5dGVTdGF0ZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihhZGRyZXNzKSkpOworICAgICAgICAgICAgcGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJhc2VQYWdlID0gMTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgcGFnZXNJbkhlYXAgPSAxMDA7CisgICAgCisgICAgc3RhdGljIFZl
Y3Rvcjxib29sLCAwPiogbWVtb3J5TWFwOworICAgIHN0YXRpYyBWZWN0b3I8Ym9vbCwgMD4qIHBh
Z2VNYXA7CisgICAgc3RhdGljIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOworICAgIAorICAgIHN0
YXRpYyBTaW1wbGVUZXN0QWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgCisgICAgc3RhdGljIHZv
aWQgdGVzdE5vdGhpbmcoKQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgdGhhdCBjcmVhdGluZyBh
bmQgZGVzdHJveWluZyBhbiBhbGxvY2F0b3Igd29ya3MuCisgICAgICAgIAorICAgICAgICBzZXRV
cCgpOworICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0
ZXN0QWxsb2NaZXJvKCkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoYXQgYWxsb2NhdGluZyBh
IHplcm8tbGVuZ3RoIGJsb2NrIHJldHVybnMgTlVMTCBhbmQKKyAgICAgICAgLy8gZG9lcyBub3Qg
Y2hhbmdlIGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworCisgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUocGFnZXNJbkhlYXAgKiBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBm
cmVlKGZpbmFsKTsKKworICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdm9pZCB0ZXN0T25lQWxsb2Moc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICAvLyBUZXN0
cyB0aGUgbW9zdCBiYXNpYyBiZWhhdmlvcjogYWxsb2NhdGUgb25lIHRoaW5nIGFuZCBmcmVlIGl0
LiAgQWxzbworICAgICAgICAvLyB2ZXJpZmllcyB0aGF0IHRoZSBzdGF0ZSBvZiBwYWdlcyBpcyBj
b3JyZWN0LgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemUpOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUt
PnNpemVJbkJ5dGVzKCksIHNpemUpOworICAgICAgICBURVNUX0FTU0VSVChwYWdlU3RhdGUoYmFz
ZVBhZ2UpKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgY29u
ZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoaGFuZGxl
KTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyB2b2lkIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc2l6ZV90IGZpcnN0U2l6ZSwgLi4uKQorICAgIHsK
KyAgICAgICAgLy8gVGVzdHMgcmlnaHQtY29hbGVzY2luZyBieSByZXBlYXRlZGx5IGFsbG9jYXRp
bmcgYW5kIGZyZWVpbmcuICBUaGUgaWRlYQorICAgICAgICAvLyBpcyB0aGF0IGlmIHlvdSBhbGxv
Y2F0ZSBzb21ldGhpbmcgYW5kIHRoZW4gZnJlZSBpdCwgdGhlbiB0aGUgaGVhcCBzaG91bGQKKyAg
ICAgICAgLy8gbG9vayBpZGVudGljYWwgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoZSBhbGxvY2F0
aW9uIGR1ZSB0byBhIHJpZ2h0LWNvYWxlc2NlCisgICAgICAgIC8vIG9mIHRoZSBmcmVlZCBjaHVu
ayBhbmQgdGhlIGFscmVhZHktZnJlZSBtZW1vcnksIGFuZCBzbyBzdWJzZXF1ZW50CisgICAgICAg
IC8vIGFsbG9jYXRpb25zIHNob3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IG9uZS4K
KyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBURVNUX0FT
U0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQ
YWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNp
emVJbkJ5dGVzKCksIGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRs
ZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAg
ICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICB2YV9saXN0IGFyZ0xpc3Q7Cisg
ICAgICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGZpcnN0U2l6ZSk7CisgICAgICAgIHdoaWxlIChzaXpl
X3Qgc2l6ZUluQnl0ZXMgPSB2YV9hcmcoYXJnTGlzdCwgc2l6ZV90KSkgeworICAgICAgICAgICAg
aGFuZGxlID0gYWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25m
aXJtKGhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIH0KKyAgICAg
ICAgdmFfZW5kKGFyZ0xpc3QpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShzaXplX3QgZmly
c3RTaXplLCBzaXplX3Qgc2Vjb25kU2l6ZSwgc2l6ZV90IHRoaXJkU2l6ZSkgeworICAgICAgICAv
LyBBbGxvY2F0ZXMgc29tZXRoaW5nIG9mIHNpemUgZmlyc3RTaXplLCB0aGVuIHNvbWV0aGluZyBv
ZiBzaXplIHNlY29uZFNpemUsIGFuZCB0aGVuCisgICAgICAgIC8vIGZyZWVzIHRoZSBmaXJzdCBh
bGxvY2F0aW9uLCBhbmQgdGhlbiB0aGUgc2Vjb25kLCBhbmQgdGhlbiBhdHRlbXB0cyB0byBhbGxv
Y2F0ZSB0aGUKKyAgICAgICAgLy8gdGhpcmQsIGFzc2VydGluZyB0aGF0IGl0IGFsbG9jYXRlZCBh
dCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBoZWFwLgorICAgICAgICAKKyAgICAgICAgLy8gTm90
ZSB0aGF0IHRoaXMgdGVzdCBtYXkgY2F1c2UgcmlnaHQtYWxsb2NhdGlvbiwgd2hpY2ggd2lsbCBj
YXVzZSB0aGUgdGVzdCB0byBmYWlsLgorICAgICAgICAvLyBUaHVzIHRoZSBjb3JyZWN0IHdheSBv
ZiBydW5uaW5nIHRoaXMgdGVzdCBpcyB0byBlbnN1cmUgdGhhdCBzZWNvbmRTaXplIGlzCisgICAg
ICAgIC8vIHBpY2tlZCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQgbmV2ZXIgc3RyYWRkbGVzIGEgcGFn
ZS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAg
IFRFU1RfQVNTRVJUX0VRVUFMKGZpcnN0SGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoZmlyc3RIYW5kbGUtPnNpemVJbkJ5dGVzKCksIGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAg
ICAgICBjb25maXJtKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmso
Zmlyc3RIYW5kbGUpOworCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRs
ZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNv
bmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFn
ZVNpemUoKSArIGZpcnN0U2l6ZSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRI
YW5kbGUtPnNpemVJbkJ5dGVzKCksIHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgY29u
ZmlybShmaXJzdEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm0oc2Vjb25kSGFuZGxlKTsKKyAgICAg
ICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShzZWNvbmRIYW5k
bGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhzZWNvbmRIYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgY29uZmly
bShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChiYXNlUGFnZSArIHBhZ2VzSW5IZWFwKSAqIHBhZ2VT
aXplKCksIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHRo
aXJkSGFuZGxlID0gYWxsb2NhdGUodGhpcmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwodGhpcmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTCh0aGlyZEhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwgdGhpcmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0odGhp
cmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayh0aGlyZEhhbmRsZSk7Cisg
ICAgICAgIAorICAgICAgICBmcmVlKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHRl
YXJEb3duKCk7CisgICAgfQorICAgIAorICAgIGVudW0gVGVzdEZJRk9BbGxvY01vZGUgeyBGaWxs
QXRFbmQsIEVhZ2VyRmlsbCB9OworICAgIHN0YXRpYyB2b2lkIHRlc3RGSUZPQWxsb2MoVGVzdEZJ
Rk9BbGxvY01vZGUgbW9kZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHRlc3Qg
dGhlIHNpbXBsZSBjYXNlIG9mIG5vLWNvYWxlc2NlIChmcmVlaW5nIHRoZSBsZWZ0LW1vc3QKKyAg
ICAgICAgLy8gY2h1bmsgaW4gbWVtb3J5IHdoZW4gdGhlIGNodW5rIHRvIHRoZSByaWdodCBvZiBp
dCBpcyBhbGxvY2F0ZWQpIGFuZAorICAgICAgICAvLyBmdWxseSBleGVyY2lzZSBsZWZ0LWNvYWxl
c2NpbmcgYW5kIGZ1bGwtY29hbGVzY2luZy4gIEluIEVhZ2VyRmlsbAorICAgICAgICAvLyBtb2Rl
LCB0aGlzIGFsc28gdGVzdHMgcGVyZmVjdC1maXQgYWxsb2NhdGlvbiBhbmQgbm8tY29hbGVzY2lu
ZyBmcmVlLgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKworICAgICAgICBzaXplX3QgdG90
YWxTaXplID0gMDsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxl
KiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICAg
ICAgdmFfc3RhcnQoYXJnTGlzdCwgbW9kZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUlu
Qnl0ZXMgPSB2YV9hcmcoYXJnTGlzdCwgc2l6ZV90KSkgeworICAgICAgICAgICAgTWV0YUFsbG9j
YXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyB0b3RhbFNpemUpKTsKKyAgICAgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJt
SGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVz
LmFwcGVuZChoYW5kbGUpOworICAgICAgICAgICAgdG90YWxTaXplICs9IHNpemVJbkJ5dGVzOwor
ICAgICAgICB9CisgICAgICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4KQor
ICAgICAgICAgICAgY29uZmlybShoYW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgIAorICAgICAg
ICBzaXplX3Qgc2l6ZVNvRmFyID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgaGFuZGxlcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHNpemVTb0Zh
ciArPSBoYW5kbGVzLmF0KGluZGV4KS0+c2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgICAgIGZyZWUo
aGFuZGxlcy5hdChpbmRleCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gRWFnZXJGaWxsKSB7
CisgICAgICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUo
c2l6ZVNvRmFyKTsKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwor
ICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwg
c2l6ZVNvRmFyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25maXJtKGJh
c2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBoYW5kbGVzLnNpemUoKSAtIDEpCisg
ICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZXMubGFzdCgpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0
ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZnJlZSho
YW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmZpcm0oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBzaXplU29GYXIsIGZhbHNl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHNp
emVTb0ZhciA9PSB0b3RhbFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShiYXNlUGFn
ZSAqIHBhZ2VTaXplKCksIChiYXNlUGFnZSArIHBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZh
bHNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtb2RlID09IEZpbGxBdEVuZCkgeworICAgICAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWxIYW5kbGUgPSBhbGxvY2F0ZSh0b3RhbFNp
emUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUtPnN0YXJ0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAg
ICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRvdGFs
U2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oZmluYWxIYW5kbGUpOwor
ICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmluYWxIYW5kbGUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdEZp
bGxIZWFwKHNpemVfdCBzaXplSW5CeXRlcywgc2l6ZV90IG51bUFsbG9jYXRpb25zKQorICAgIHsK
KyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9y
SGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAgIGhhbmRs
ZXMuYXBwZW5kKGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAg
ICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICBURVNUX0FT
U0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4
KQorICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNoZWNr
KTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICB0
ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0UmlnaHRBbGxvY2F0
aW9uKHNpemVfdCBmaXJzdExlZnRTaXplLCBzaXplX3QgZmlyc3RSaWdodFNpemUsIHNpemVfdCBz
ZWNvbmRMZWZ0U2l6ZSwgc2l6ZV90IHNlY29uZFJpZ2h0U2l6ZSkKKyAgICB7CisgICAgICAgIHNl
dFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdExlZnQg
PSBhbGxvY2F0ZShmaXJzdExlZnRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmly
c3RMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0Umln
aHQgPSBhbGxvY2F0ZShmaXJzdFJpZ2h0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFM
KGZpcnN0UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBw
YWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBzZWNvbmRMZWZ0ID0gYWxsb2NhdGUoc2Vjb25kTGVmdFNpemUpOworICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBmaXJzdExlZnQtPnNpemVJbkJ5dGVzKCkp
KTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZFJpZ2h0ID0g
YWxsb2NhdGUoc2Vjb25kUmlnaHRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vj
b25kUmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBwYWdl
c0luSGVhcCkgKiBwYWdlU2l6ZSgpIC0gZmlyc3RSaWdodC0+c2l6ZUluQnl0ZXMoKSkpOworICAg
ICAgICAKKyAgICAgICAgZnJlZShmaXJzdExlZnQpOworICAgICAgICBmcmVlKGZpcnN0UmlnaHQp
OworICAgICAgICBmcmVlKHNlY29uZExlZnQpOworICAgICAgICBmcmVlKHNlY29uZFJpZ2h0KTsK
KyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUo
cGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmlu
YWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUo
KSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7CisgICAgICAgIAorICAgICAgICB0
ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0QmVzdEZpdChzaXpl
X3QgZmlyc3RTaXplLCBzaXplX3Qgc3RlcCwgdW5zaWduZWQgbnVtU2xvdHMpCisgICAgeworICAg
ICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5k
bGUqLCAwPiBoYW5kbGVzVG9GcmVlOworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRs
ZSosIDA+IGhhbmRsZXM7CisgICAgICAgIFZlY3Rvcjx2b2lkKiwgMD4gbG9jYXRpb25zOworICAg
ICAgICAKKyAgICAgICAgc2l6ZV90IHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiB0b0ZyZWUgPSBhbGxvY2F0ZShzaXplKTsKKyAgICAgICAg
ICAgIGlmICghaGFuZGxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodG9G
cmVlLT5zdGFydCgpICE9IGhhbmRsZXMubGFzdCgpLT5lbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOworICAgICAgICAgICAgICAgICAgICB0
b0ZyZWUgPSBhbGxvY2F0ZShzaXplKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZyYWdnZXIgPSBhbGxvY2F0ZSgz
Mik7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmcmFnZ2VyLT5zdGFydCgpLCB0b0Zy
ZWUtPmVuZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZCh0
b0ZyZWUtPnN0YXJ0KCkpOworCisgICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0Zy
ZWUpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoZnJhZ2dlcik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGxvY2F0aW9ucy5zaXplKCkgPT0gbnVtU2xvdHMpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlc1RvRnJlZS5zaXplKCk7ICsr
aW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXNUb0ZyZWUuYXQoaW5kZXgpKTsKKyAgICAg
ICAgCisgICAgICAgIHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBiZXN0Rml0ID0gYWxsb2NhdGUoc2l6ZSAtIDMyKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoYmVzdEZpdC0+c3RhcnQoKSA9PSBsb2NhdGlvbnMu
YXQoaW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBiZXN0Rml0LT5lbmQoKSA9PSBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9jYXRp
b25zLmF0KGluZGV4KSkgKyBzaXplKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIHNtYWxsID0gYWxsb2NhdGUoMzIpOworICAgICAgICAgICAgaWYgKGJl
c3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBU
RVNUX0FTU0VSVF9FUVVBTChzbWFsbC0+c3RhcnQoKSwgYmVzdEZpdC0+ZW5kKCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNtYWxsLT5lbmQo
KSwgYmVzdEZpdC0+c3RhcnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoYmVz
dEZpdCk7CisgICAgICAgICAgICBmcmVlKHNtYWxsKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgc2l6ZSArPSBzdGVwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90czsgKytpbmRleCkKKyAgICAgICAgICAgIGZy
ZWUoaGFuZGxlcy5hdChpbmRleCkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogZmluYWwgPSBhbGxvY2F0ZShwYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpbmFs
KTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyB2b2lkIHRlc3RTaHJpbmsoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUpCisg
ICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgLy8gQWxsb2NhdGUgdGhl
IHRoaW5nIHRoYXQgd2lsbCBiZSBzaHJ1bmsKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNocmlu
ayBpdCwgYW5kIG1ha2Ugc3VyZSB0aGF0IG91ciBzdGF0ZSByZWZsZWN0cyB0aGUgc2hyaW5rYWdl
LgorICAgICAgICBub3RpZnlGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpICsgc2Vjb25kU2l6ZSksIGZpcnN0U2l6
ZSAtIHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgaGFuZGxlLT5zaHJpbmsoc2Vjb25k
U2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwg
c2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBzYW5pdHlDaGVjaygpOworICAgICAgICAK
KyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgbm90IGVtcHR5LgorICAgICAgICBU
RVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZShwYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIGhl
YXAuCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHJlbWFpbmRlciA9IGFsbG9jYXRlKHBh
Z2VzSW5IZWFwICogcGFnZVNpemUoKSAtIHNlY29uZFNpemUpOworICAgICAgICBURVNUX0FTU0VS
VF9FUVVBTChyZW1haW5kZXItPnN0YXJ0KCksIGhhbmRsZS0+ZW5kKCkpOworICAgICAgICAKKyAg
ICAgICAgZnJlZShyZW1haW5kZXIpOworICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAor
ICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBlbXB0eSBhbmQgZmluaXNoIHVwLgor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKHBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsLT5zdGFydCgp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGZyZWUoZmluYWwpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgc2V0VXAoKQorICAgIHsKKyAgICAgICAgbWVt
b3J5TWFwID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICBwYWdlTWFwID0gbmV3IFZl
Y3Rvcjxib29sLCAwPigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdlID0g
YmFzZVBhZ2U7IHBhZ2UgPCBiYXNlUGFnZSArIHBhZ2VzSW5IZWFwOyArK3BhZ2UpIHsKKyAgICAg
ICAgICAgIHBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGJ5dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5QYWdlKQor
ICAgICAgICAgICAgICAgIG1lbW9yeU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGFsbG9jYXRvckRlc3Ryb3llZCA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgYWxs
b2NhdG9yID0gbmV3IFNpbXBsZVRlc3RBbGxvY2F0b3IoKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHZvaWQgdGVhckRvd24oKQorICAgIHsKKyAgICAgICAgLy8gbWVtb3J5IHNob3VsZCBiZSBm
cmVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBhZ2UgPSBiYXNlUGFnZTsgcGFnZSA8IGJhc2VQ
YWdlICsgcGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIXBh
Z2VTdGF0ZShwYWdlKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVJblBhZ2UgPSAw
OyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5QYWdlKQorICAgICAgICAgICAgICAg
IFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocGFnZSAqIHBhZ2VTaXplKCkgKyBieXRlSW5QYWdlKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoaXMgYXV0b21hdGljYWxs
eSB0ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3IgZGlkIG5vdCBsZWFrCisgICAgICAgIC8vIG1lbW9y
eSwgc28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBhcmUgcnVubmluZyB3aXRoICFkZWZpbmVkKE5ERUJV
RykuCisgICAgICAgIC8vIFNlZSBNZXRhQWxsb2NhdG9yOjptX21hbGxvY0JhbGFuY2UuCisgICAg
ICAgIGRlbGV0ZSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVChhbGxv
Y2F0b3JEZXN0cm95ZWQpOworICAgICAgICAKKyAgICAgICAgZGVsZXRlIG1lbW9yeU1hcDsKKyAg
ICAgICAgZGVsZXRlIHBhZ2VNYXA7CisgICAgfQorICAgIAorICAgIGVudW0gU2FuaXR5Q2hlY2tN
b2RlIHsgUnVuU2FuaXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVjayB9OworICAgIHN0YXRpYyBN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIFNhbml0eUNo
ZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpLmxlYWtSZWYoKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoaGFuZGxlKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7Cisg
ICAgICAgIAorICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0g
c3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRC
eXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsK
KyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKKyAgICAg
ICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkgPSB0cnVlOworICAgICAgICAgICAgVEVTVF9B
U1NFUlQocGFnZVN0YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQor
ICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5k
bGU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGZyZWUoTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlID0gUnVuU2FuaXR5Q2hl
Y2spCisgICAgeworICAgICAgICBURVNUX0FTU0VSVChoYW5kbGUpOworICAgICAgICAKKyAgICAg
ICAgbm90aWZ5RnJlZShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7Cisg
ICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzYW5pdHlDaGVj
a01vZGUgPT0gUnVuU2FuaXR5Q2hlY2spCisgICAgICAgICAgICBzYW5pdHlDaGVjaygpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlGcmVlKHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KTsKKyAgICAgICAgdWludHB0cl90IGVuZEJ5dGUg
PSBzdGFydEJ5dGUgKyBzaXplSW5CeXRlczsKKyAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVu
dEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytjdXJyZW50Qnl0ZSkg
eworICAgICAgICAgICAgVEVTVF9BU1NFUlQoYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSk7CisgICAg
ICAgICAgICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgc2FuaXR5Q2hlY2soKQorICAgIHsKKyNpZm5kZWYgTkRF
QlVHCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgp
IC0gYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBhbGxvY2F0b3ItPmRlYnVnRnJlZVNwYWNl
U2l6ZSgpKTsKKyNlbmRpZgorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvY2F0b3ItPmJ5
dGVzUmVzZXJ2ZWQoKSwgcGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9B
U1NFUlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBieXRlc0FsbG9jYXRlZCgp
KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgp
LCBieXRlc0NvbW1pdHRlZCgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY29uZmly
bShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICB1aW50cHRyX3Qg
c3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7
CisgICAgICAgIGNvbmZpcm0oc3RhcnRCeXRlLCBzdGFydEJ5dGUgKyBoYW5kbGUtPnNpemVJbkJ5
dGVzKCksIHRydWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtSGlnaFdh
dGVybWFyayhNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICBjb25m
aXJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPmVuZCgpKSwgKGJhc2VQYWdl
ICsgcGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtKHVpbnRwdHJfdCBzdGFydEJ5dGUsIHVpbnRw
dHJfdCBlbmRCeXRlLCBib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50cHRyX3Qg
Y3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytjdXJyZW50
Qnl0ZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYnl0ZVN0YXRlKGN1cnJlbnRC
eXRlKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgIFRF
U1RfQVNTRVJUKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICB1aW50cHRyX3QgZmlyc3RGcmVl
UGFnZSA9IChzdGFydEJ5dGUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpOworICAgICAg
ICAgICAgdWludHB0cl90IGxhc3RGcmVlUGFnZSA9IChlbmRCeXRlIC0gcGFnZVNpemUoKSkgLyBw
YWdlU2l6ZSgpOworICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudFBhZ2UgPSBmaXJz
dEZyZWVQYWdlOyBjdXJyZW50UGFnZSA8PSBsYXN0RnJlZVBhZ2U7ICsrY3VycmVudFBhZ2UpCisg
ICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShjdXJyZW50UGFnZSkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKQor
ICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG1lbW9yeU1hcC0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAg
ICAgICBpZiAobWVtb3J5TWFwLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgcmVzdWx0Kys7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0
ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgcGFnZU1hcC0+
c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAocGFnZU1hcC0+YXQoaW5kZXgpKQor
ICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1
bHQgKiBwYWdlU2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCYgYnl0ZVN0YXRl
KHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnl0ZVN0YXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBi
b29sJiBieXRlU3RhdGUodWludHB0cl90IGFkZHJlc3MpCisgICAgeworICAgICAgICB1aW50cHRy
X3QgYnl0ZUluZGV4ID0gYWRkcmVzcyAtIGJhc2VQYWdlICogcGFnZVNpemUoKTsKKyAgICAgICAg
cmV0dXJuIG1lbW9yeU1hcC0+YXQoYnl0ZUluZGV4KTsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IGJvb2wmIHBhZ2VTdGF0ZSh1aW50cHRyX3QgcGFnZSkKKyAgICB7CisgICAgICAgIHVpbnRwdHJf
dCBwYWdlSW5kZXggPSBwYWdlIC0gYmFzZVBhZ2U7CisgICAgICAgIHJldHVybiBwYWdlTWFwLT5h
dChwYWdlSW5kZXgpOworICAgIH0KK307CisKK1ZlY3Rvcjxib29sLCAwPiogTWV0YUFsbG9jYXRv
clRlc3RzOjptZW1vcnlNYXA7CitWZWN0b3I8Ym9vbCwgMD4qIE1ldGFBbGxvY2F0b3JUZXN0czo6
cGFnZU1hcDsKK2Jvb2wgTWV0YUFsbG9jYXRvclRlc3RzOjphbGxvY2F0b3JEZXN0cm95ZWQ7CitN
ZXRhQWxsb2NhdG9yVGVzdHM6OlNpbXBsZVRlc3RBbGxvY2F0b3IqIE1ldGFBbGxvY2F0b3JUZXN0
czo6YWxsb2NhdG9yOworCisvLyBSZWdyZXNzaW9uIHRlc3RzIGZvciBNZXRhQWxsb2NhdG9yIC0g
c2ltdWxhdGVzIGNhc2VzIHRoYXQgd2UndmUgc2VlbiBmYWlsIGluIHRoZQorLy8gcGFzdC4KKwor
Y2xhc3MgTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzIHsKK3ByaXZhdGU6CisgICAg
TWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzKCkgeyB9CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAg
ICBSVU5fVEVTVChydW5UcmVlUm9vdENvcnJ1cHRpb25UZXN0KCkpOworI2VuZGlmCisgICAgfQor
Citwcml2YXRlOgorI2lmIENQVShYODZfNjQpCisgICAgY2xhc3MgTnVsbFRlc3RBbGxvY2F0b3I6
IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE51bGxUZXN0QWxs
b2NhdG9yKCkKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gbWF0Y2hlcyBGaXhl
ZFZNUG9vbEFsbG9jYXRvcgorICAgICAgICB7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFj
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPigweDQ0MDMzOWMwMTAwMGxsdSksIDEwMjQgKiAxMDI0
ICogMTAyNCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCogYWxs
b2NhdGVOZXdTcGFjZShzaXplX3QmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdl
KHZvaWQqKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgc3RhdGljIHZvaWQgcnVuVHJlZVJvb3RDb3JydXB0aW9uVGVzdCgpCisgICAgewor
ICAgICAgICBOdWxsVGVzdEFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICB7
CisgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCAwPiBoYW5k
bGVzOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDczNikp
OworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDE1NTIwKSk7
CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMTAyNCkpOwor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDU3NikpOworICAg
ICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDI5NzYpKTsKKyAgICAg
ICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg0ODApKTsKKyAgICAgICAg
ICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgyMjQwKSk7CisgICAgICAgICAg
ICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoOTYpKTsKKyAgICAgICAgICAgIGhh
bmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgzNDg4KSk7CisgICAgICAgICAgICBoYW5k
bGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMzg0KSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQoNiktPnN0YXJ0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KDB4NDQwMzc5YzAwMTAwbGx1KSk7CisgICAgICAgICAgICBURVNUX0FT
U0VSVF9FUVVBTChoYW5kbGVzLmF0KDYpLT5zaXplSW5CeXRlcygpLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KDIyNDApKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQoOCkt
PnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4NDQwMzM5YzA1ZDYwbGx1KSk7Cisg
ICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDgpLT5zaXplSW5CeXRlcygp
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KDM0ODgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aGFuZGxlcy5hdCg2KS5jbGVhcigpOworICAgICAgICAgICAgaGFuZGxlcy5hdCg4KS5jbGVhcigp
OworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9OworCitpbnQgbWFpbihpbnQsIGNoYXIqKikK
K3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKworICAgIGlmIChmYWxzZSkgewor
ICAgICAgICBSVU5fU1VJVEUoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKCkpOworICAgICAg
ICBSVU5fU1VJVEUoTWV0YUFsbG9jYXRvclRlc3RzOjpydW5UZXN0cygpKTsKKyAgICB9CisgICAg
UlVOX1NVSVRFKE1ldGFBbGxvY2F0b3I2NGJpdFJlZ3Jlc3Npb25UZXN0czo6cnVuVGVzdHMoKSk7
CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkLlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJNZXRhQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRv
ckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6
ZUluQnl0ZXMpCisgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgLCBtX3N0YXJ0KHN0
YXJ0KQorICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKK3sKKyAgICAvL3ByaW50Zigi
YWxsb2NhdGVkICVwLCAlbHVcbiIsIG1fc3RhcnQsIHNpemVJbkJ5dGVzKTsKKyAgICBBU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICBBU1NFUlQoc3RhcnQpOworICAgIEFTU0VSVChzaXplSW5CeXRlcyk7
Cit9CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKK3sKKyAg
ICBpZiAoIW1fYWxsb2NhdG9yKQorICAgICAgICByZXR1cm47CisgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBpZiAobV9zaXplSW5CeXRlcykgewor
ICAgICAgICAvL3ByaW50ZigiZnJlZWQgJXAsICVsdVxuIiwgbV9zdGFydCwgbV9zaXplSW5CeXRl
cyk7CisgICAgICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KG1fc3RhcnQs
IG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJl
bGVhc2VkSGFuZGxlKG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMpOworICAgIH0KK30KKwordm9pZCBN
ZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQoreworICAg
IC8vcHJpbnRmKCJzaHJ1bmsgJXAgZnJvbSAlbHUgdG8gJWx1XG4iLCBtX3N0YXJ0LCBtX3NpemVJ
bkJ5dGVzLCBuZXdTaXplSW5CeXRlcyk7CisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1f
c2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbV9hbGxvY2F0b3IpIHsKKyAgICAgICAgbV9z
aXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisKKyAg
ICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsK
KyAgICAKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CisgICAg
CisgICAgaWYgKG5ld1NpemVJbkJ5dGVzID09IG1fc2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICB1aW50cHRyX3QgZnJlZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG1fc3RhcnQpICsgbmV3U2l6ZUluQnl0ZXM7CisgICAgc2l6ZV90IGZyZWVTaXplID0g
bV9zaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOworICAgIHVpbnRwdHJfdCBmcmVlRW5kID0g
ZnJlZVN0YXJ0ICsgZnJlZVNpemU7CisgICAgCisgICAgdWludHB0cl90IGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSkgJiAt
bV9hbGxvY2F0b3ItPm1fcGFnZVNpemU7CisgICAgaWYgKGZpcnN0Q29tcGxldGVseUZyZWVQYWdl
IDwgZnJlZUVuZCkKKyAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3ko
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6
ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOworICAgIAorICAgIG1f
YWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIAorICAgIG1fc2l6ZUluQnl0ZXMg
PSBuZXdTaXplSW5CeXRlczsKK30KKworTWV0YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXpl
X3QgYWxsb2NhdGlvbkdyYW51bGUpCisgICAgOiBtX2FsbG9jYXRpb25HcmFudWxlKGFsbG9jYXRp
b25HcmFudWxlKQorICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSgpKQorICAgICwgbV9ieXRlc0Fs
bG9jYXRlZCgwKQorICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCisgICAgLCBtX2J5dGVzQ29tbWl0
dGVkKDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9tYWxsb2NCYWxhbmNlKDApCisjZW5kaWYK
KyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICAsIG1fbnVtQWxsb2NhdGlv
bnMoMCkKKyAgICAsIG1fbnVtRnJlZXMoMCkKKyNlbmRpZgoreworICAgIG1fbG9jay5Jbml0KCk7
CisgICAgCisgICAgZm9yIChtX2xvZ1BhZ2VTaXplID0gMDsgbV9sb2dQYWdlU2l6ZSA8IDMyOyAr
K21fbG9nUGFnZVNpemUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwg
bV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXplKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nUGFnZVNpemUg
PT0gbV9wYWdlU2l6ZSk7CisgICAgCisgICAgZm9yIChtX2xvZ0FsbG9jYXRpb25HcmFudWxlID0g
MDsgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA8IDMyOyArK21fbG9nQWxsb2NhdGlvbkdyYW51bGUp
IHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9u
R3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2Nh
dGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7Cit9CisKK01ldGFBbGxvY2F0b3I6
On5NZXRhQWxsb2NhdG9yKCkKK3sKKyAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2Zy
ZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9kZTspIHsKKyAgICAgICAgRnJlZVNwYWNlTm9kZSog
bmV4dCA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5zdWNjZXNzb3Iobm9kZSk7CisgICAgICAgIG1fZnJl
ZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5v
ZGUpOworICAgICAgICBub2RlID0gbmV4dDsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEFT
U0VSVCghbV9tYWxsb2NCYWxhbmNlKTsKKyNlbmRpZgorfQorCitQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykK
K3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisKKyAgICBpZiAoIXNpemVJ
bkJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBzaXplSW5CeXRlcyA9IHJvdW5k
VXAoc2l6ZUluQnl0ZXMpOworICAgIAorICAgIHZvaWQqIHN0YXJ0ID0gZmluZEFuZFJlbW92ZUZy
ZWVTcGFjZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFzdGFydCkgeworICAgICAgICBzaXplX3Qg
bnVtUGFnZXMgPSAoc2l6ZUluQnl0ZXMgKyBtX3BhZ2VTaXplIC0gMSkgPj4gbV9sb2dQYWdlU2l6
ZTsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0ID0gYWxsb2NhdGVOZXdTcGFjZShudW1QYWdlcyk7
CisgICAgICAgIGlmICghc3RhcnQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByb3VuZGVkVXBTaXplID0gbnVtUGFnZXMgPDwgbV9sb2dQYWdlU2l6ZTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVChyb3VuZGVkVXBTaXplID49IHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgCisgICAgICAgIG1fYnl0ZXNSZXNlcnZlZCArPSByb3VuZGVkVXBTaXplOworICAg
ICAgICAKKyAgICAgICAgaWYgKHJvdW5kZWRVcFNpemUgPiBzaXplSW5CeXRlcykgeworICAgICAg
ICAgICAgdm9pZCogZnJlZVNwYWNlU3RhcnQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAg
ICAgc2l6ZV90IGZyZWVTcGFjZVNpemUgPSByb3VuZGVkVXBTaXplIC0gc2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBhZGRGcmVlU3BhY2UoZnJlZVNwYWNlU3RhcnQsIGZyZWVTcGFjZVNpemUpOwor
ICAgICAgICB9CisgICAgfQorICAgIGluY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJ
bkJ5dGVzKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkICs9IHNpemVJbkJ5dGVzOworI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKKyNlbmRp
ZgorICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFy
dCwgc2l6ZUluQnl0ZXMpKTsKK30KKworTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxs
b2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2Vy
KCZtX2xvY2spOworICAgIFN0YXRpc3RpY3MgcmVzdWx0OworICAgIHJlc3VsdC5ieXRlc0FsbG9j
YXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5
dGVzUmVzZXJ2ZWQ7CisgICAgcmVzdWx0LmJ5dGVzQ29tbWl0dGVkID0gbV9ieXRlc0NvbW1pdHRl
ZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBNZXRhQWxsb2NhdG9yOjpmaW5kQW5k
UmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICAvL3ByaW50Zigic2Vh
cmNoaW5nIGZvciAlbHUgaW4gJXBcbiIsIHNpemVJbkJ5dGVzLCAmbV9mcmVlU3BhY2VTaXplTWFw
KTsKKyAgICBGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpbmRMZWFz
dEdyZWF0ZXJUaGFuT3JFcXVhbChzaXplSW5CeXRlcyk7CisgICAgLy9wcmludGYoImZvdW5kIG5v
ZGUgPSAlcFxuIiwgbm9kZSk7CisgICAgCisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIHByaW50
ZigiV0FSTklORyEgbWV0YSBhbGxvY2F0aW9uIGZhaWxlZCFcbiIpOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG5vZGUtPmtleSA+PSBzaXplSW5CeXRlcyk7Cisg
ICAgCisgICAgLy9wcmludGYoImluIGFsbG9jYXRlLCByZW1vdmluZyAlcFxuIiwgbm9kZSk7Cisg
ICAgbV9mcmVlU3BhY2VTaXplTWFwLnJlbW92ZShub2RlKTsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQ7CisgICAgCisgICAgaWYgKG5vZGUtPmtleSA9PSBzaXplSW5CeXRlcykgeworICAgICAgICAv
LyBFYXN5IGNhc2U6IHBlcmZlY3QgZml0LCBzbyBqdXN0IHJlbW92ZSB0aGUgbm9kZSBlbnRpcmVs
eS4KKyAgICAgICAgcmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgIAorICAgICAgICBtX2Zy
ZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUobm9kZS0+dmFsdWUpOworICAgICAgICBtX2Zy
ZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAg
ICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVHJ5
IHRvIGJlIGEgZ29vZCBjaXRpemVuIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgY2h1bmsg
b2YgbWVtb3J5CisgICAgICAgIC8vIHN0cmFkZGxlcyBhcyBmZXcgcGFnZXMgYXMgcG9zc2libGUs
IGJ1dCBvbmx5IGluc29mYXIgYXMgZG9pbmcgc28gd2lsbAorICAgICAgICAvLyBub3QgaW5jcmVh
c2UgZnJhZ21lbnRhdGlvbi4gVGhlIGludHVpdGlvbiBpcyB0aGF0IG1pbmltaXppbmcKKyAgICAg
ICAgLy8gZnJhZ21lbnRhdGlvbiBpcyBhIHN0cmljdGx5IGhpZ2hlciBwcmlvcml0eSB0aGFuIG1p
bmltaXppbmcgdGhlIG51bWJlcgorICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNl
IGluIHRoZSBsb25nIHJ1biwgc21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCisgICAgICAgIC8v
IGZld2VyIGNvbW1pdHRlZCBwYWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KKyAg
ICAgICAgCisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obm9kZS0+dmFsdWUpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJf
dCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsg
bm9kZS0+a2V5IC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICAgICAgdWludHB0cl90
IGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAg
ICAgdWludHB0cl90IGZpcnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5IC0gc2l6ZUluQnl0ZXMpID4+
IG1fbG9nUGFnZVNpemU7CisgICAgICAgIAorICAgICAgICBpZiAodHJ1ZSB8fCBsYXN0UGFnZUZv
ckxlZnRBbGxvY2F0aW9uIC0gZmlyc3RQYWdlICsgMSA8PSBsYXN0UGFnZSAtIGZpcnN0UGFnZUZv
clJpZ2h0QWxsb2NhdGlvbiArIDEpIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSBs
ZWZ0IHNpZGUgb2YgdGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhl
IHJpZ2h0LgorICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXplSW5CeXRlczsK
KyAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy9wcmludGYoImluIGxlZnQtYWxsb2NhdGUsIGFkZGluZyAl
cFxuIiwgbm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUp
OworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuYWRkKG5vZGUtPnZhbHVl
LCBub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRo
ZSByaWdodCBzaXplIG9mIHRoZSByZXR1cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRv
IHRoZSBsZWZ0OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsg
bm9kZS0+a2V5IC0gc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Zy
ZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvL3ByaW50ZigiaW4gcmlnaHQtYWxsb2NhdGUsIGFkZGluZyAlcFxu
Iiwgbm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOwor
ICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChyZXN1bHQsIG5vZGUpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vbV9mcmVlU3BhY2VTaXplTWFwLmR1bXAoKTsK
KworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNw
YWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1GcmVlcysrOwor
I2VuZGlmCisgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBzaXplSW5CeXRlczsKKyAgICBhZGRGcmVl
U3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRG
cmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6
ZUluQnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9CisKK3Np
emVfdCBNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgc2l6ZV90IHJlc3Vs
dCA9IDA7CisgICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFw
LmZpcnN0KCk7IG5vZGU7IG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29yKG5vZGUp
KQorICAgICAgICByZXN1bHQgKz0gbm9kZS0+a2V5OworICAgIHJldHVybiByZXN1bHQ7CisjZWxz
ZQorICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBNZXRhQWxs
b2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sK
KyAgICAvL3ByaW50ZigiYWRkaW5nIGZyZWUgc3BhY2UgJXAsICVsdVxuIiwgc3RhcnQsIHNpemVJ
bkJ5dGVzKTsKKworICAgIHZvaWQqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7CisgICAgCisgICAg
SGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+OjppdGVyYXRvciBsZWZ0TmVpZ2hib3IgPSBt
X2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuZmluZChzdGFydCk7CisgICAgSGFzaE1hcDx2b2lkKiwg
RnJlZVNwYWNlTm9kZSo+OjppdGVyYXRvciByaWdodE5laWdoYm9yID0gbV9mcmVlU3BhY2VTdGFy
dEFkZHJlc3NNYXAuZmluZChlbmQpOworICAgIAorICAgIGlmIChsZWZ0TmVpZ2hib3IgIT0gbV9m
cmVlU3BhY2VFbmRBZGRyZXNzTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgc29tZXRo
aW5nIHdlIGNhbiBjb2FsZXNjZSB3aXRoIG9uIHRoZSBsZWZ0LiAgUmVtb3ZlIGl0IGZyb20gdGhl
IHRyZWUsIGFuZAorICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVz
cyBtYXAuCisgICAgICAgIAorICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkg
KyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+a2V5KSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAg
ICAgICAgCisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5z
ZWNvbmQ7CisgICAgICAgIAorICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFs
dWU7CisgICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5rZXk7CisgICAgICAgIHZv
aWQqIGxlZnRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obGVmdFN0YXJ0KSArIGxlZnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VS
VChsZWZ0RW5kID09IHN0YXJ0KTsKKyAgICAgICAgCisgICAgICAgIC8vcHJpbnRmKCJpbiBmcmVl
IHNwYWNlLCByZW1vdmluZyBsZWZ0IG5laWdoYm9yICVwXG4iLGxlZnROb2RlKTsKKyAgICAgICAg
bV9mcmVlU3BhY2VTaXplTWFwLnJlbW92ZShsZWZ0Tm9kZSk7CisgICAgICAgIG1fZnJlZVNwYWNl
RW5kQWRkcmVzc01hcC5yZW1vdmUobGVmdEVuZCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cg
Y2hlY2sgaWYgdGhlcmUgaXMgYWxzbyBzb21ldGhpbmcgdG8gY29hbGVzY2Ugd2l0aCBvbiB0aGUg
cmlnaHQuCisgICAgICAgIGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0aGluZyBpbiB0aGUg
bWlkZGxlIG9mIGZyZWUgYmxvY2tzLiAgQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAorICAgICAgICAg
ICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUg
bWFwcy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNl
Y29uZC0+dmFsdWUgPT0gcmlnaHROZWlnaGJvci0+Zmlyc3QpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7
CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7Cisg
ICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5rZXk7CisgICAgICAgICAg
ICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0ID09IGVuZCk7CisgICAgICAgICAgICBBU1NFUlQo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRT
dGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vcHJpbnRmKCJpbiBmcmVlIHNwYWNlLCByZW1v
dmluZyByaWdodCBuZWlnaGJvciAlcFxuIixyaWdodE5vZGUpOworICAgICAgICAgICAgbV9mcmVl
U3BhY2VTaXplTWFwLnJlbW92ZShyaWdodE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VT
dGFydEFkZHJlc3NNYXAucmVtb3ZlKHJpZ2h0U3RhcnQpOworICAgICAgICAgICAgbV9mcmVlU3Bh
Y2VFbmRBZGRyZXNzTWFwLnJlbW92ZShyaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZyZWVGcmVlU3BhY2VOb2RlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGxlZnROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXMgKyByaWdodFNpemU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vcHJpbnRmKCJpbiBmcmVlIHNwYWNlLCBhZGRpbmcgdHdvLXdheSBj
b2FsZXNjZWQgbm9kZSAlcFxuIixsZWZ0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNp
emVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5hZGQocmlnaHRFbmQsIGxlZnROb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIGxlZnROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vcHJpbnRmKCJpbiBmcmVlIHNwYWNlLCBhZGRpbmcgbGVmdC1jb2FsZXNjZWQgbm9kZSAl
cFxuIixsZWZ0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxl
ZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBs
ZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYW5ub3QgY29h
bGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0
LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFy
dEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9k
ZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQg
PSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSBy
aWdodE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmln
aHRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJpZ2h0U3RhcnQgPT0g
ZW5kKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRl
cyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICAv
L3ByaW50ZigiaW4gZnJlZSBzcGFjZSwgcmVtb3ZpbmcgcmlnaHQgbmVpZ2hib3IgJXBcbiIsIHJp
Z2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9k
ZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRT
dGFydCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNpemVJ
bkJ5dGVzOworICAgICAgICAgICAgcmlnaHROb2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvL3ByaW50ZigiaW4gZnJlZSBzcGFjZSwgYWRkaW5nIHJpZ2h0LWNv
YWxlc2NlZCBub2RlICVwXG4iLCByaWdodE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VT
aXplTWFwLmluc2VydChyaWdodE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFk
ZHJlc3NNYXAuYWRkKHN0YXJ0LCByaWdodE5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gTm90aGluZyB0byBjb2FsZXNjZSB3aXRoLCBzbyBjcmVhdGUgYSBuZXcgZnJlZSBz
cGFjZSBub2RlIGFuZCBhZGQgaXQuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZyZWVTcGFj
ZU5vZGUqIG5vZGUgPSBhbGxvY0ZyZWVTcGFjZU5vZGUoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbm9kZS0+a2V5ID0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBub2RlLT52YWx1ZSA9
IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICAvL3ByaW50ZigiaW4gZnJlZSBzcGFj
ZSwgYWRkaW5nIG5ldyBub2RlICVwXG4iLCBub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNl
U2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVz
c01hcC5hZGQoc3RhcnQsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNz
TWFwLmFkZChlbmQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vbV9mcmVl
U3BhY2VTaXplTWFwLmR1bXAoKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjppbmNyZW1lbnRQ
YWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB1
aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3Mp
ID4+IG1fbG9nUGFnZVNpemU7CisgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdl
U2l6ZTsKKyAgICAKKyAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9
IGxhc3RQYWdlOyArK3BhZ2UpIHsKKyAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKSB7CisgICAgICAgICAgICAvL3By
aW50ZigiYWRkaW5nIHBhZ2UgJXBcbiIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UpKTsK
KyAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQocGFnZSwgMSk7CisgICAgICAgICAg
ICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CisgICAgICAgICAgICAvL3ByaW50Zigi
bmVlZCBwYWdlICVwXG4iLCByZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFn
ZVNpemUpKTsKKyAgICAgICAgICAgIG5vdGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy9wcmludGYoIml0ZXIgYXQgJXAsICVwXG4iLCAmaXRlci0+Zmlyc3QsICZpdGVyLT5zZWNv
bmQpOworICAgICAgICAgICAgaXRlci0+c2Vjb25kKys7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNz
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVp
bnRwdHJfdCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykg
KyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50
cHRyX3QgcGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAg
ICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2Nj
dXBhbmN5TWFwLmZpbmQocGFnZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFnZU9jY3Vw
YW5jeU1hcC5lbmQoKSk7CisgICAgICAgIC8vcHJpbnRmKCJkZWMgaXRlciBhdCAlcCwgJXBcbiIs
ICZpdGVyLT5maXJzdCwgJml0ZXItPnNlY29uZCk7CisgICAgICAgIGlmICghLS0oaXRlci0+c2Vj
b25kKSkgeworICAgICAgICAgICAgaWYgKGZhbHNlKSB7CisgICAgICAgICAgICAgICAgLy9wcmlu
dGYoImRlYyAoMikgaXRlciBhdCAlcCwgJXBcbiIsICZpdGVyLT5maXJzdCwgJml0ZXItPnNlY29u
ZCk7CisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kKys7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJkZWMgKDIpIGl0ZXIgYXQgJXAsICVwXG4iLCAm
aXRlci0+Zmlyc3QsICZpdGVyLT5zZWNvbmQpOworICAgICAgICAgICAgICAgIG1fcGFnZU9jY3Vw
YW5jeU1hcC5yZW1vdmUoaXRlcik7CisgICAgICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAt
PSBtX3BhZ2VTaXplOworICAgICAgICAgICAgICAgIC8vcHJpbnRmKCJwYWdlIGlzIGZyZWUgJXBc
biIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOworICAg
ICAgICAgICAgICAgIG5vdGlmeVBhZ2VJc0ZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFn
ZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpyb3VuZFVwKHNpemVfdCBzaXplSW5CeXRlcykKK3sK
KyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fYWxsb2NhdGlv
bkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIChz
aXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKSAmIC1tX2FsbG9jYXRpb25HcmFu
dWxlOworfQorCitNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlKiBNZXRhQWxsb2NhdG9yOjph
bGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFu
Y2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmVlU3BhY2VOb2RlKj4oZmFz
dE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9kZSkpKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9y
OjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKiBub2RlKQoreworI2lmbmRlZiBOREVC
VUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsKKyNlbmRpZgorICAgIGZhc3RGcmVlKG5vZGUpOwor
fQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIE1ldGFBbGxvY2F0
b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBwcmludGYoIm51bSBhbGxvY2F0aW9ucyA9ICV1LCBu
dW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxvY2F0aW9ucywgbV9udW1GcmVlcyk7Cit9CisjZW5k
aWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9jYXRvcl9o
CisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCisjZGVmaW5lIEVOQUJMRV9NRVRBX0FMTE9DQVRPUl9QUk9GSUxFIDAKKworY2xhc3MgTWV0
YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWV0YUFsbG9jYXRvcik7Citw
dWJsaWM6CisgICAgCisgICAgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUp
OworICAgIAorICAgIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKKyAgICAKKyAgICBQYXNzUmVm
UHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcyk7Cisg
ICAgCisgICAgLy8gTm9uLWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0
aXN0aWNzLgorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxv
Y2F0ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNl
cnZlZDsgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNDb21t
aXR0ZWQ7IH0KKyAgICAKKyAgICAvLyBBdG9taWMgbWV0aG9kIGZvciBnZXR0aW5nIGFsbG9jYXRv
ciBzdGF0aXN0aWNzLgorICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAgICAgICAgc2l6ZV90IGJ5
dGVzQWxsb2NhdGVkOworICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgc2l6
ZV90IGJ5dGVzQ29tbWl0dGVkOworICAgIH07CisgICAgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlz
dGljcygpOworCisgICAgLy8gQWRkIG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBD
YWxsIHRoaXMgZGlyZWN0bHkgZnJvbQorICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lz
aCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Igd2l0aGluIGEKKyAgICAvLyBmaXhlZCBwb29sLgor
ICAgIHZvaWQgYWRkRnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cyk7CisKKyAgICAvLyBUaGlzIGlzIG1lYW50IG9ubHkgZm9yIGltcGxlbWVudGluZyB0ZXN0cy4g
TmV2ZXIgY2FsbCB0aGlzIGluIHJlbGVhc2UKKyAgICAvLyBidWlsZHMuCisgICAgc2l6ZV90IGRl
YnVnRnJlZVNwYWNlU2l6ZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9G
SUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAgdm9pZCBkdW1wUHJvZmls
ZSgpIHsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSBuZXcg
dmlydHVhbCBzcGFjZSwgYnV0IGRvbid0IGNvbW1pdC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKKyAg
ICAvLyBwYWdlcyB0aGFuIHdlIGFza2VkLCBpbiB3aGljaCBjYXNlIG51bVBhZ2VzIGlzIGNoYW5n
ZWQuCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMp
ID0gMDsKKyAgICAKKyAgICAvLyBDb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3Rp
ZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSA9IDA7CisgICAgCisgICAgLy8gVW5jb21taXQgYSBwYWdl
LgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpID0gMDsKKyAg
ICAKKyAgICAvLyBOT1RFOiBub25lIG9mIHRoZSBhYm92ZSBtZXRob2RzIGFyZSBjYWxsZWQgZHVy
aW5nIGFsbG9jYXRvcgorICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRh
QWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZworICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVz
IHRoYXQgcmVmZXIgdG8gaXQuCisKK3ByaXZhdGU6CisgICAgCisgICAgZnJpZW5kIGNsYXNzIE1l
dGFBbGxvY2F0b3JIYW5kbGU7CisgICAgCisgICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8c2l6ZV90
LCB2b2lkKj4gVHJlZTsKKyAgICB0eXBlZGVmIFRyZWU6Ok5vZGUgRnJlZVNwYWNlTm9kZTsKKyAg
ICAKKyAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMg
ZWZmZWN0aXZlbHkKKyAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQg
aXQgZG9lcyBub3QgbWFyayB0aGUKKyAgICAvLyByZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBpbi11
c2UuCisgICAgdm9pZCogZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMp
OworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtZW1vcnkgZnJvbSBhbiBhbGxvY2F0aW9u
IGlzIGZyZWVkLgorICAgIHZvaWQgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGxv
dy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhZGRpbmcgZnJlZSBzcGFjZTsgaXQKKyAgICAvLyBp
cyBjYWxsZWQgZnJvbSBib3RoIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSBhbmQgZnJv
bQorICAgIC8vIGFkZEZyZXNoRnJlZVNwYWNlLgorICAgIHZvaWQgYWRkRnJlZVNwYWNlKHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIE1hbmFnZW1lbnQgb2Yg
dXNlZCBzcGFjZS4KKyAgICAKKyAgICB2b2lkIGluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCog
YWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1
cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBV
dGlsaXRpZXMuCisgICAgCisgICAgc2l6ZV90IHJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKTsK
KyAgICAKKyAgICBGcmVlU3BhY2VOb2RlKiBhbGxvY0ZyZWVTcGFjZU5vZGUoKTsKKyAgICB2b2lk
IGZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUqKTsKKyAgICAKKyAgICBzaXplX3QgbV9h
bGxvY2F0aW9uR3JhbnVsZTsKKyAgICB1bnNpZ25lZCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlOwor
ICAgIHNpemVfdCBtX3BhZ2VTaXplOworICAgIHVuc2lnbmVkIG1fbG9nUGFnZVNpemU7CisgICAg
CisgICAgVHJlZSBtX2ZyZWVTcGFjZVNpemVNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNw
YWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwOworICAgIEhhc2hNYXA8dm9pZCos
IEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx1
aW50cHRyX3QsIHNpemVfdD4gbV9wYWdlT2NjdXBhbmN5TWFwOworICAgIAorICAgIHNpemVfdCBt
X2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CisgICAgc2l6ZV90
IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgU3BpbkxvY2sgbV9sb2NrOworCisjaWZuZGVm
IE5ERUJVRworICAgIHNpemVfdCBtX21hbGxvY0JhbGFuY2U7CisjZW5kaWYKKworI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHVuc2lnbmVkIG1fbnVtQWxsb2NhdGlvbnM7
CisgICAgdW5zaWduZWQgbV9udW1GcmVlczsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBXVEZfTWV0YUFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JIYW5k
bGVfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTWV0YUFsbG9jYXRvcjsKKwor
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTogcHVibGljIFJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRv
ckhhbmRsZT4geworcHJpdmF0ZToKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0
b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQor
ICAgICAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgICAgICwgbV9zdGFydChzdGFydCkKKyAgICAg
ICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0
YXJ0KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsK
KyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBjcmVhdGVT
ZWxmTWFuYWdlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHN0YXJ0LCBz
aXplSW5CeXRlcykpOworICAgIH0KKyAgICAKKyAgICB2b2lkKiBzdGFydCgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9zdGFydDsKKyAgICB9CisgICAgCisgICAgdm9pZCogZW5kKCkKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5dGVzKTsKKyAgICB9CisgICAgICAgIAor
ICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9zaXplSW5C
eXRlczsKKyAgICB9CisgICAgICAgIAorICAgIHZvaWQgc2hyaW5rKHNpemVfdCBuZXdTaXplSW5C
eXRlcyk7CisgICAgCisgICAgYm9vbCBpc01hbmFnZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEhbV9hbGxvY2F0b3I7CisgICAgfQorICAgICAgICAKKyAgICBNZXRhQWxsb2NhdG9yKiBhbGxv
Y2F0b3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKKyAgICAgICAgcmV0
dXJuIG1fYWxsb2NhdG9yOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IE1ldGFBbGxvY2F0b3I7CisgICAgCisgICAgTWV0YUFsbG9jYXRvciogbV9hbGxvY2F0b3I7Cisg
ICAgdm9pZCogbV9zdGFydDsKKyAgICBzaXplX3QgbV9zaXplSW5CeXRlczsKK307CisKK30KKwor
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiA5
MzI0NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAkod29ya2luZyBj
b3B5KQpAQCAtMTAzMSw2ICsxMDMxLDcgQEAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogI2lmIENQ
VShYODZfNjQpCiAjZGVmaW5lIEVOQUJMRV9FWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCAxCisj
ZGVmaW5lIEVOQUJMRV9FWEVDVVRBQkxFX0JFU1RfRklUX0FMTE9DQVRPUiAxCiAjZWxzZQogI2Rl
ZmluZSBFTkFCTEVfRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EIDEKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEJhc2VkIG9uIFJlZC1CbGFjayB0cmVlIGltcGxlbWVu
dGF0aW9uIGJ5IEVtaW4gTWFydGluaWFuCisgKiAtIGh0dHA6Ly93d3cubWl0LmVkdS9+ZW1pbi9z
b3VyY2VfY29kZS9pbmRleC5odG1sICAgICAgICAgCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWRCbGFja1RyZWVfaAorI2Rl
ZmluZSBSZWRCbGFja1RyZWVfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyBUaGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJlZSB3aXRoIHRoZSBm
b2xsb3dpbmcgcHJvcGVydGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Ygbm9kZXMgaW4gdGhl
IHRyZWUgaXMgZW50aXJlbHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlvdSBhcmUgaW4gcG9z
c2Vzc2lvbiBvZiBhIHBvaW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0ZQorLy8gICBpdCBm
cm9tIHRoZSB0cmVlLiAgVGhlIHRyZWUgd2lsbCBzdWJzZXF1ZW50bHkgbm8gbG9uZ2VyIGhhdmUg
YQorLy8gICByZWZlcmVuY2UgdG8gdGhpcyBub2RlLgorLy8gLSBUaGUga2V5IHR5cGUgbXVzdCBp
bXBsZW1lbnQgb3BlcmF0b3I8IGFuZCA9PS4KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZSwg
dHlwZW5hbWUgVmFsdWVUeXBlPgorY2xhc3MgUmVkQmxhY2tUcmVlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShSZWRCbGFja1RyZWUpOworcHVibGljOgorICAgIGNsYXNzIFJhd05vZGUgewor
ICAgICAgICBmcmllbmQgY2xhc3MgUmVkQmxhY2tUcmVlOworICAgICAgICAKKyAgICAgICAgLy8g
Tk9URTogdGhlc2UgbWV0aG9kcyBzaG91bGQgcGFjayB0aGUgcGFyZW50IGFuZCByZWQgaW50byBh
IHNpbmdsZQorICAgICAgICAvLyB3b3JkLiBCdXQgZG9pbmcgc28gYXBwZWFycyB0byByZXZlYWwg
YSBidWcgaW4gdGhlIGNvbXBpbGVyLgorICAgICAgICBSYXdOb2RlKiBwYXJlbnQoKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQ7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIFJhd05vZGUqIHNldFBhcmVudChSYXdOb2RlKiBuZXdQYXJlbnQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudCA9IG5ld1BhcmVudDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBpc1JlZCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3JlZDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBz
ZXRSZWQoYm9vbCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcmVkID0g
dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJhd05vZGUqIG1fbGVmdDsKKyAg
ICAgICAgUmF3Tm9kZSogbV9yaWdodDsKKyAgICAgICAgUmF3Tm9kZSogbV9wYXJlbnQ7CisgICAg
ICAgIGJvb2wgbV9yZWQ7CisgICAgfTsKKyAgICAKKyAgICBjbGFzcyBOb2RlOiBwdWJsaWMgUmF3
Tm9kZSB7CisgICAgcHVibGljOgorICAgICAgICBLZXlUeXBlIGtleTsKKyAgICAgICAgVmFsdWVU
eXBlIHZhbHVlOworICAgIH07CisgICAgCisgICAgUmVkQmxhY2tUcmVlKCkKKyAgICB7CisgICAg
ICAgIG1fbmlsU2VudGluZWwuc2V0UGFyZW50KCZtX25pbFNlbnRpbmVsKTsKKyAgICAgICAgbV9u
aWxTZW50aW5lbC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50aW5l
bC5tX3JpZ2h0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1fbmlsU2VudGluZWwuc2V0UmVk
KGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIG1fcm9vdC5zZXRQYXJlbnQoJm1fbmlsU2VudGlu
ZWwpOworICAgICAgICBtX3Jvb3QubV9sZWZ0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1f
cm9vdC5tX3JpZ2h0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1fcm9vdC5zZXRSZWQoZmFs
c2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydChOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgaW5zZXJ0SGVscChub2RlKTsKKworICAgICAgICBSYXdOb2RlKiB4ID0gbm9kZTsKKyAg
ICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAgCisgICAgICAgIHgtPnNldFJlZCh0cnVlKTsKKyAg
ICAgICAgd2hpbGUgKHgtPnBhcmVudCgpLT5pc1JlZCgpKSB7CisgICAgICAgICAgICBpZiAoeC0+
cGFyZW50KCkgPT0geC0+cGFyZW50KCktPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAg
ICAgICB5ID0geC0+cGFyZW50KCktPnBhcmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAg
IGlmICh5LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRS
ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB5LT5zZXRSZWQoZmFsc2UpOworICAgICAg
ICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQoKS0+bV9y
aWdodCkgeworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4KTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpLT5wYXJlbnQoKSk7CisgICAgICAg
ICAgICAgICAgfSAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgeSA9IHgt
PnBhcmVudCgpLT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAgICAgICAgIGlmICh5LT5pc1Jl
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICB5LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgeCA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByaWdodFJvdGF0ZSh4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
eC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGxlZnRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICB9IAor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJvb3QoKS0+bV9sZWZ0LT5zZXRSZWQo
ZmFsc2UpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgp
KTsKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICBO
b2RlKiByZW1vdmUoTm9kZSogeikKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAg
IFJhd05vZGUqIHg7CisKKyAgICAgICAgeSA9ICh6LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSB8
fCB6LT5tX3JpZ2h0ID09IG5pbFNlbnRpbmVsKCkpID8geiA6IHN1Y2Nlc3NvckludGVybmFsKHop
OworICAgICAgICB4ID0geS0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCkgPyB5LT5tX3JpZ2h0IDog
eS0+bV9sZWZ0OworICAgICAgICBpZiAocm9vdCgpID09IHgtPnNldFBhcmVudCh5LT5wYXJlbnQo
KSkpIHsKKyAgICAgICAgICAgIHJvb3QoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAg
ICAgICB5LT5wYXJlbnQoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgeS0+cGFyZW50KCktPm1fcmlnaHQgPSB4OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmICh5ICE9IHopIHsKKyAgICAgICAgICAgIEFTU0VSVCh5ICE9IG5p
bFNlbnRpbmVsKCkpOworCisgICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpIHJlbW92ZUZpeFVw
KHgpOworICAKKyAgICAgICAgICAgIHktPm1fbGVmdCA9IHotPm1fbGVmdDsKKyAgICAgICAgICAg
IHktPm1fcmlnaHQgPSB6LT5tX3JpZ2h0OworICAgICAgICAgICAgeS0+c2V0UGFyZW50KHotPnBh
cmVudCgpKTsKKyAgICAgICAgICAgIHktPnNldFJlZCh6LT5pc1JlZCgpKTsKKyAgICAgICAgICAg
IHotPm1fbGVmdC0+c2V0UGFyZW50KHotPm1fcmlnaHQtPnNldFBhcmVudCh5KSk7CisgICAgICAg
ICAgICBpZiAoeiA9PSB6LT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgei0+
cGFyZW50KCktPm1fbGVmdCA9IHk7IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB6LT5wYXJlbnQoKS0+bV9yaWdodCA9IHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpIHJlbW92ZUZpeFVwKHgpOworICAg
ICAgICB9CisgIAorICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFT
U0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisKKyAgICAgICAgcmV0dXJuIHo7CisgICAg
fQorICAgIAorICAgIE5vZGUqIGZpcnN0KCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUg
PSByb290KCktPm1fbGVmdDsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAg
UmF3Tm9kZSogbmV4dCA9IG5vZGUtPm1fbGVmdDsKKyAgICAgICAgICAgIGlmIChuZXh0ID09IG5p
bFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShub2RlKTsKKyAgICAg
ICAgICAgIG5vZGUgPSBuZXh0OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGxh
c3QoKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogbm9kZSA9IHJvb3QoKS0+bV9sZWZ0OworICAg
ICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+
bV9yaWdodDsKKyAgICAgICAgICAgIGlmIChuZXh0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFzTm9kZShub2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBuZXh0Owor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIHN1Y2Nlc3NvcihOb2RlKiBub2RlKQor
ICAgIHsKKyAgICAgICAgUmF3Tm9kZSogcmVzdWx0ID0gc3VjY2Vzc29ySW50ZXJuYWwobm9kZSk7
CisgICAgICAgIGlmIChyZXN1bHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICByZXR1cm4gYXNOb2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIHByZWRlY2Vzc29yKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4ID0g
bm9kZTsKKyAgICAgICAgUmF3Tm9kZSogeTsKKworICAgICAgICBpZiAobmlsU2VudGluZWwoKSAh
PSAoeSA9IHgtPm1fbGVmdCkpIHsKKyAgICAgICAgICAgIHdoaWxlICh5LT5tX3JpZ2h0ICE9IG5p
bFNlbnRpbmVsKCkpIHsKKyAgICAgICAgICAgICAgICB5ID0geS0+bV9yaWdodDsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhc05vZGUoeSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB5ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICB3aGlsZSAoeCA9PSB5LT5t
X2xlZnQpIHsgCisgICAgICAgICAgICAgICAgaWYgKHkgPT0gcm9vdCgpKSByZXR1cm4gMDsKKyAg
ICAgICAgICAgICAgICB4ID0geTsKKyAgICAgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGFzTm9kZSh5KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaW5kRXhhY3QoY29uc3QgS2V5VHlwZSYga2V5
KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBp
ZiAoeCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdo
aWxlICghKGFzTm9kZSh4KS0+a2V5ID09IGtleSkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUo
eCktPmtleSA+IGtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICAgICAgaWYg
KHggPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gYXNOb2RlKHgpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiByZW1v
dmUoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZmlu
ZEV4YWN0KGtleSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSog
ZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7Cisg
ICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3Tm9k
ZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNlbnRpbmVsKCkpIHsK
KyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3Vy
cmVudCktPmtleSA8IGtleSkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9y
aWdodDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJlc3QgPSBjdXJyZW50
OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAgICB9CisgICAg
CisgICAgTm9kZSogZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtl
eSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAg
ICAgICAgUmF3Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNl
bnRpbmVsKCkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlm
IChhc05vZGUoY3VycmVudCktPmtleSA8IGtleSkgeworICAgICAgICAgICAgICAgIGJlc3QgPSBj
dXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7CisgICAg
ICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fcmln
aHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAgICB9CisgICAg
CisgICAgLy8gVGhpcyBpcyBhbiBPKG4pIG9wZXJhdGlvbi4KKyAgICBzaXplX3Qgc2l6ZSgpCisg
ICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChOb2RlKiBjdXJy
ZW50ID0gZmlyc3QoKTsgY3VycmVudDsgY3VycmVudCA9IHN1Y2Nlc3NvcihjdXJyZW50KSkKKyAg
ICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICAvLyBUaGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJvb2wgaXNFbXB0eSgpCisg
ICAgeworICAgICAgICByZXR1cm4gcm9vdCgpLT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKTsKKyAg
ICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCgh
bmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNl
KHJvb3QoKS0+bV9sZWZ0KTsKKyAgICAgICAgQVNTRVJUKHJvb3QoKS0+bV9yaWdodCA9PSBuaWxT
ZW50aW5lbCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAg
IHByaW50ZigiVHJlZSBhdCAlcDpcbiIsIHRoaXMpOworICAgICAgICBkdW1wUmVjdXJzZShyb290
KCktPm1fbGVmdCk7CisgICAgICAgIHByaW50ZigiICAgcm9vdDogJXAsICVwLCAlcFxuIiwgcm9v
dCgpLT5tX2xlZnQsIHJvb3QoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocm9v
dCgpLT5wYXJlbnRBbmRSZWQpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgbmlsOiAlcCwgJXAsICVw
XG4iLCBuaWxTZW50aW5lbCgpLT5tX2xlZnQsIG5pbFNlbnRpbmVsKCktPm1fcmlnaHQsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5pbFNlbnRpbmVsKCktPnBhcmVudEFuZFJlZCkpOworICAgIH0K
KyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgbGVmdFJvdGF0ZShSYXdOb2RlKiB4KQorICAg
IHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKworICAgICAgICB5ID0geC0+bV9yaWdodDsKKyAgICAg
ICAgeC0+bV9yaWdodCA9IHktPm1fbGVmdDsKKworICAgICAgICBpZiAoeS0+bV9sZWZ0ICE9IG5p
bFNlbnRpbmVsKCkpCisgICAgICAgICAgICB5LT5tX2xlZnQtPnNldFBhcmVudCh4KTsKKyAgCisg
ICAgICAgIHktPnNldFBhcmVudCh4LT5wYXJlbnQoKSk7CisKKyAgICAgICAgaWYoIHggPT0geC0+
cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX2xlZnQgPSB5Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9yaWdodCA9IHk7CisgICAg
ICAgIHktPm1fbGVmdCA9IHg7CisgICAgICAgIHgtPnNldFBhcmVudCh5KTsKKworICAgICAgICBB
U1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJp
Z2h0Um90YXRlKFJhd05vZGUqIHkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4OworCisgICAg
ICAgIHggPSB5LT5tX2xlZnQ7CisgICAgICAgIHktPm1fbGVmdCA9IHgtPm1fcmlnaHQ7CisKKyAg
ICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0geC0+bV9yaWdodCkKKyAgICAgICAgICAgIHgtPm1f
cmlnaHQtPnNldFBhcmVudCh5KTsKKworICAgICAgICB4LT5zZXRQYXJlbnQoeS0+cGFyZW50KCkp
OworICAgICAgICBpZiggeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgeS0+
cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHktPnBhcmVu
dCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHk7CisgICAgICAgIHktPnNl
dFBhcmVudCh4KTsKKworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEhlbHAoTm9kZSogeikKKyAgICB7CisgICAgICAg
IFJhd05vZGUqIHg7CisgICAgICAgIFJhd05vZGUqIHk7CisgIAorICAgICAgICB6LT5tX2xlZnQg
PSB6LT5tX3JpZ2h0ID0gbmlsU2VudGluZWwoKTsKKyAgICAgICAgeSA9IHJvb3QoKTsKKyAgICAg
ICAgeCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICB3aGlsZSAoeCAhPSBuaWxTZW50aW5lbCgp
KSB7CisgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIGlmICh6LT5rZXkgPCBhc05vZGUo
eCktPmtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICB9CisgICAgICAgIHot
PnNldFBhcmVudCh5KTsKKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpIHx8IHotPmtleSA8IGFzTm9k
ZSh5KS0+a2V5KQorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gejsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgeS0+bV9yaWdodCA9IHo7CisKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgp
LT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogc3VjY2Vzc29ySW50ZXJuYWwo
UmF3Tm9kZSogeCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAgIAorICAgICAg
ICBpZiAobmlsU2VudGluZWwoKSAhPSAoeSA9IHgtPm1fcmlnaHQpKSB7CisgICAgICAgICAgICB3
aGlsZSAoeS0+bV9sZWZ0ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAgICAgICAgICAgICB5ID0g
eS0+bV9sZWZ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICB5ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICB3aGls
ZSAoeCA9PSB5LT5tX3JpZ2h0KSB7CisgICAgICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAg
ICAgICAgeSA9IHktPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHkg
PT0gcm9vdCgpKSByZXR1cm4gbmlsU2VudGluZWwoKTsKKyAgICAgICAgICAgIHJldHVybiB5Owor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcmVtb3ZlRml4VXAoUmF3Tm9kZSogeCkK
KyAgICB7CisgICAgICAgIFJhd05vZGUqIHJlYWxSb290ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAg
ICAgIFJhd05vZGUqIHc7CisgICAgICAgIAorICAgICAgICB3aGlsZSAoIXgtPmlzUmVkKCkgJiYg
cmVhbFJvb3QgIT0geCkgeworICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fbGVm
dCkgeworICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAg
ICAgICAgICBpZiAody0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQo
MCk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUoeC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAg
ICAgICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5pc1JlZCgp
KSB7IAorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHctPm1fbGVmdC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRl
KHcpOworICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0Owor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh4LT5w
YXJlbnQoKS0+aXNSZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRS
ZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB3LT5tX3JpZ2h0LT5zZXRSZWQoZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgeCA9IHJlYWxSb290OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAg
ICAgICAgICAgICAgaWYgKHctPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0
UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZCh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50KCkpOworICAgICAg
ICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpICYmICF3LT5tX2xlZnQt
PmlzUmVkKCkpIHsgCisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+bV9sZWZ0LT5pc1JlZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB3LT5tX3JpZ2h0LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9s
ZWZ0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHctPnNldFJl
ZCh4LT5wYXJlbnQoKS0+aXNSZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgp
LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB3LT5tX2xlZnQtPnNldFJlZChm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgeCA9IHJlYWxSb290OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB4LT5zZXRSZWQoZmFsc2UpOworCisgICAgICAg
IEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgp
LT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgY2hlY2tD
b25zaXN0ZW5jeVJlY3Vyc2UoUmF3Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2Rl
ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChub2Rl
LT5pc1JlZCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm1fbGVmdC0+aXNSZWQoKSk7
CisgICAgICAgICAgICBBU1NFUlQoIW5vZGUtPm1fcmlnaHQtPmlzUmVkKCkpOworICAgICAgICB9
CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKG5vZGUtPm1fbGVmdCk7CisgICAgICAg
IGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKG5vZGUtPm1fcmlnaHQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXBSZWN1cnNlKFJhd05vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9k
ZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcmludGYo
IiAgIG5vZGU6ICVwXG4iLCBub2RlKTsKKyAgICAgICAgcHJpbnRmKCIgICAgICBjb2xvciA9ICVz
XG4iLCBub2RlLT5pc1JlZCgpID8gInJlZCIgOiAiYmxhY2siKTsKKyAgICAgICAgcHJpbnRmKCIg
ICAgICBsZWZ0ICA9ICVwXG4iLCBub2RlLT5tX2xlZnQpOworICAgICAgICBwcmludGYoIiAgICAg
IHJpZ2h0ID0gJXBcbiIsIG5vZGUtPm1fcmlnaHQpOworICAgICAgICBkdW1wUmVjdXJzZShub2Rl
LT5tX2xlZnQpOworICAgICAgICBkdW1wUmVjdXJzZShub2RlLT5tX3JpZ2h0KTsKKyAgICB9Cisj
ZW5kaWYKKyAgICAKKyAgICBSYXdOb2RlKiByb290KCkKKyAgICB7CisgICAgICAgIHJldHVybiAm
bV9yb290OworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlKiBuaWxTZW50aW5lbCgpCisgICAgewor
ICAgICAgICByZXR1cm4gJm1fbmlsU2VudGluZWw7CisgICAgfQorICAgIAorICAgIE5vZGUqIGFz
Tm9kZShSYXdOb2RlKiByYXdOb2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJhd05vZGUgIT0g
cm9vdCgpKTsKKyAgICAgICAgQVNTRVJUKHJhd05vZGUgIT0gbmlsU2VudGluZWwoKSk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxOb2RlKj4ocmF3Tm9kZSk7CisgICAgfQorICAgIAorICAg
IFJhd05vZGUgbV9yb290OworICAgIFJhd05vZGUgbV9uaWxTZW50aW5lbDsKK307CisKK30KKwor
I2VuZGlmCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJl
dmlzaW9uIDkzMjQ2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgYmFj
a3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZpbmFsaXplIHRoZSBjb2RlLgotICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJl
Z2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5r
QnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgp
KTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gOTMyNDYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKICAgICB9
CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0
dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCAqZ2V0QWRk
cigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgo=
</data>
<flag name="commit-queue"
          id="100062"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104411</attachid>
            <date>2011-08-18 15:34:53 -0700</date>
            <delta_ts>2011-08-26 14:17:20 -0700</delta_ts>
            <desc>work in progress - 32-bit works</desc>
            <filename>execalloc_patch_4.diff</filename>
            <type>text/plain</type>
            <size>227667</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTMzNTkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ0IEBA
CisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IhKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAq
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmFkZHJl
c3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c3RhcnQpOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0
RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6
CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Omdl
dENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChwcmludFZhbHVlKToKKyAgICAg
ICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6UmVkQmxh
Y2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQYWlyKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3Rz
OjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFj
dCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6cmVtb3ZlKToKKyAgICAgICAgKFJlZEJs
YWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6YXNz
ZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6dGVzdERy
aXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3Rz
Ojp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE9uZUFs
bG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RTaW1wbGVGdWxsQ29hbGVzY2UpOgor
ICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0RklGT0FsbG9jKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JU
ZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6
OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFNocmluayk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2Nl
KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6c2V0VXApOgorICAgICAgICAoTWV0YUFs
bG9jYXRvclRlc3RzOjp0ZWFyRG93bik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmFs
bG9jYXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6ZnJlZSk6CisgICAgICAgIChN
ZXRhQWxsb2NhdG9yVGVzdHM6Om5vdGlmeUZyZWUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRl
c3RzOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmNvbmZpcm0p
OgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpjb25maXJtSGlnaFdhdGVybWFyayk6Cisg
ICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6Ynl0ZXNDb21taXR0ZWQpOgorICAgICAgICAoTWV0YUFsbG9jYXRv
clRlc3RzOjpieXRlU3RhdGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpwYWdlU3Rh
dGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpNZXRhQWxs
b2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0
UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yNjRiaXRS
ZWdyZXNzaW9uVGVzdHM6OnJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QpOgorICAgICAgICAobWFp
bik6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6On5N
ZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cm91
bmRVcCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0Fs
bG9jYXRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzUmVzZXJ2ZWQpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0NvbW1pdHRlZCk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUmVkQmxhY2tUcmVlLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OnBhcmVudCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjppc1JlZCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6UmF3Tm9kZTo6c2V0UmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSZWRCbGFj
a1RyZWUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpm
aXJzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpw
cmVkZWNlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEV4YWN0KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbCk6
CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Y2hlY2tDb25z
aXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZHVtcCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6bGVmdFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6cmlnaHRSb3RhdGUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydEhlbHAp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnN1Y2Nlc3NvckludGVybmFsKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmVGaXhVcCk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6Y2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmR1bXBSZWN1cnNlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyb290KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpuaWxTZW50aW5lbCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6YXNOb2RlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKiB5YXJy
L1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmdldEFkZHIpOgorCiAyMDExLTA4
LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2pzZnVuZnV6
el0gREZHIHNwZWN1bGF0aXZlIEpJVCBkb2VzIGRpdmlkZS1ieS16ZXJvIGNoZWNrcyBpbmNvcnJl
Y3RseQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZp
c2lvbiA5MzI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwMCw2ICs0MDAsMTIgQEAgX19aTjNXVEYxMmNyZWF0ZVRocmVh
ZEVQRlB2UzBfRVMwX1BLYwogX19aTjNXVEYxMmRldGFjaFRocmVhZEVqCiBfX1pOM1dURjEyaXNN
YWluVGhyZWFkRXYKIF9fWk4zV1RGMTJyYW5kb21OdW1iZXJFdgorX19aTjNXVEYxM01ldGFBbGxv
Y2F0b3IxN2FkZEZyZXNoRnJlZVNwYWNlRVB2bQorX19aTjNXVEYxM01ldGFBbGxvY2F0b3IxOGRl
YnVnRnJlZVNwYWNlU2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjhhbGxvY2F0ZUVtCitf
X1pOM1dURjEzTWV0YUFsbG9jYXRvckMyRW0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yRDFFdgor
X19aTjNXVEYxM01ldGFBbGxvY2F0b3JEMkV2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExcmVp
ZnlTdHJpbmdFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxMXNocmlua1RvRml0RXYKIF9fWk4z
V1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNlcnZlQ2FwYWNpdHlFagpAQCAtNDM0LDYgKzQ0MCw4IEBA
IF9fWk4zV1RGMThjYWxjdWxhdGVVVENPZmZzZXRFdgogX19aTjNXVEYxOGNoYXJhY3RlcnNUb0Rv
dWJsZUVQS3RtUGJTMl8KIF9fWk4zV1RGMThkYXRlVG9EYXlzRnJvbTE5NzBFaWlpCiBfX1pOM1dU
RjE4bW9udGhGcm9tRGF5SW5ZZWFyRWliCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZTZz
aHJpbmtFbQorX19aTjNXVEYxOU1ldGFBbGxvY2F0b3JIYW5kbGVEMUV2CiBfX1pOM1dURjE5aW5p
dGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM1dURjIwZXF1YWxJZ25vcmluZ051bGxpdHlFUE5TXzEw
U3RyaW5nSW1wbEVTMV8KIF9fWk4zV1RGMjBmYXN0TWFsbG9jU3RhdGlzdGljc0V2CkBAIC01MTMs
NiArNTIxLDcgQEAgX19aTjNXVEY4SW50ZXJuYWwyMWZhc3RNYWxsb2NNYXRjaEZhaWxlZAogX19a
TjNXVEY4ZmFzdEZyZWVFUHYKIF9fWk4zV1RGOG1zVG9ZZWFyRWQKIF9fWk4zV1RGOG51bGxBdG9t
RQorX19aTjNXVEY4cGFnZVNpemVFdgogX19aTjNXVEY4c3RhckF0b21FCiBfX1pOM1dURjh0ZXh0
QXRvbUUKIF9fWk4zV1RGOUJ5dGVBcnJheTZjcmVhdGVFbQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDYgKzI3LDcgQEAKIAkJCQkxNDEyMTRCRjBBNDkxOTBFMDA0ODAyNTUgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLywKIAkJCQk5MzJGNUJFOTA4MjJBMUM3MDA3MzY5NzUgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLywKIAkJCQkxNEJENTlDNzBBM0U4RkE0MDBCQUY1OUMgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLywKKwkJCQkwRjk2M0IyOTEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLywKIAkJCSk7CiAJCQluYW1lID0gQWxsOwogCQkJcHJvZHVjdE5hbWUgPSBB
bGw7CkBAIC00OSw2ICs1MCwxMyBAQAogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3du
RmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTEx
QTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxp
bWl0cy5jcHAgKi87IH07CiAJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVt
YmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Mjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKKwkJMEY5
NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFt
ZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjBBNENGMDRCM0Iz
RTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBGOTYzQjE5
MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3Jr
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3
MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRjk2M0IyNTEzRjc1
MzMzMDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVzdHMu
Y3BwICovOyB9OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEz
Rjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1l
dGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBz
ZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07
CisJCTBGOTYzQjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAw
MkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MDAwNjc3MTJB
NkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIzIC8qIE9TQWxsb2Nh
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkxNDA1NjZDNDEwN0VDMjU1
MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAwMDAxODY1IC8qIEpTQVBJ
VmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTYxNyw2ICs2MjUsMjAgQEAKIC8qIEVuZCBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2Vj
dGlvbiAqLworCQkwRjk2M0IxNDEzRjc1MzA0MDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVBy
b3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVy
UG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwor
CQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gOTMyRjVCM0UwODIy
QTFDNzAwNzM2OTc1OworCQkJcmVtb3RlSW5mbyA9IEphdmFTY3JpcHRDb3JlOworCQl9OworCQkw
Rjk2M0IyODEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewor
CQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2
N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBl
ID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIy
OworCQkJcmVtb3RlSW5mbyA9IHVuaXR0ZXN0czsKKwkJfTsKIAkJMTQxMjExMzUwQTQ4Nzk2MTAw
NDgwMjU1IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRh
aW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJB
QUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTY3Niw2ICs2OTgsMjYgQEAKIC8qIEVuZCBQ
QlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb3B5RmlsZXNC
dWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5NjNCMUExM0Y3NTMwNDAwMDJEOUIyIC8qIENvcHkg
U3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWRzdFBhdGggPSAiIjsKKwkJCWRz
dFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiQ29w
eSBTdXBwb3J0IFNjcmlwdCI7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKKwkJfTsKKwkJMEY5NjNCMUMxM0Y3NTMwNDAwMDJEOUIyIC8qIEluc3RhbGwgU3VwcG9y
dCBTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gODsKKwkJCWRzdFBhdGggPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0Zy
YW1ld29ya3MvSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzIjsK
KwkJCWRzdFN1YmZvbGRlclNwZWMgPSAwOworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJbmFtZSA9
ICJJbnN0YWxsIFN1cHBvcnQgU2NyaXB0IjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAxOworCQl9OwogCQk1REJCMTUxMTEzMUQwQjEzMDA1NkFEMzYgLyogQ29weSBT
dXBwb3J0IFNjcmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNzI5LDYgKzc3MSwxMiBAQAogCQkw
QkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6
ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGlt
aXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyOTQ3OUIxMjZFNjk4QzAw
QjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRGVjaW1hbE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVzdHMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdW5pdHRlc3RzLmNwcDsgcGF0aCA9IHRlc3RzL3VuaXQv
dW5pdHRlc3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMjMxM0Y3
NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gdW5pdHRlc3RzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQkwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAv
KiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0Iy
RTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTE0MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxv
Y2F0b3JQb3NpeC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0Fs
bG9jYXRvclBvc2l4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwRDE3RDYw
RThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNCYXNlUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTMyNSw2ICsxMzczLDE1IEBACiAvKiBFbmQgUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5NjNC
MTcxM0Y3NTMwNDAwMDJEOUIyIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlpc2EgPSBQQlhGcmFt
ZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlm
aWxlcyA9ICgKKwkJCQkwRjk2M0IxODEzRjc1MzA0MDAwMkQ5QjIgLyogQ29yZUZvdW5kYXRpb24u
ZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY5NjNCMTkxM0Y3NTMwNDAwMDJEOUIy
IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkxNDEyMTEx
RTBBNDg3OTNDMDA0ODAyNTUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTEz
NzMsNiArMTQzMCw3IEBACiAJCQkJOTMyRjVCRTEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLywK
IAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyogbWluaWRvbSAqLywKIAkJCQkxNEJENTlC
RjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKKwkJCQkwRjk2M0IyMzEzRjc1MzA0MDAw
MkQ5QjIgLyogdW5pdHRlc3RzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDM4LDkgKzE0OTYsMTggQEAKIAkJCXRhYldpZHRo
ID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMEY5NjNCMEYxM0Y3NTJCMjAwMDJEOUIy
IC8qIHVuaXQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJ
CTBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVzdHMuY3BwICovLAorCQkJKTsKKwkJ
CW5hbWUgPSB1bml0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMTQxMjEx
MDAwQTQ4NzcyNjAwNDgwMjU1IC8qIHRlc3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IwRjEzRjc1MkIyMDAwMkQ5QjIgLyogdW5pdCAqLywK
IAkJCQkxNDQwMDUxNzBBNTMxQ0I1MDAwNUYwNjEgLyogbWluaWRvbSAqLywKIAkJCQkxNEJENUEy
RDBBM0U5MUY2MDBCQUY1OUMgLyogdGVzdGFwaS5jICovLAogCQkJCTE0RDg1Nzc0MEE0Njk2Qzgw
MDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovLApAQCAtMTY1Miw2ICsxNzE5LDEwIEBACiAJCTY1MTYy
RUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9ySGFuZGxlLmggKi8sCisJCQkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3IuY3BwICovLAorCQkJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmggKi8sCisJCQkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5o
ICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMgKi8sCiAJCQkJODY1NjU3
M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCiAJCQkJRTE5NTY3OEQwOUU3Q0YxMjAwQjg5
RDEzIC8qIHVuaWNvZGUgKi8sCkBAIC0yMjMwLDYgKzIzMDEsOSBAQAogCQkJCTg2RDNCMkM0MTAx
NTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QURE
MTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0
YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIy
IC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTcwRTE2RjVDRDAw
QjM0NDYwIC8qIEFycmF5UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzUyNDBF
MTZGQzhBMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNFOTBFMTZGNUNEMDBCMzQ0NjAgLyogQVNDSUlDVHlwZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yNTg5LDYgKzI2NjMsMjUgQEAKIC8qIEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0aW9uICovCisJCTBGOTYzQjEy
MTNGNzUzMDQwMDAyRDlCMiAvKiB1bml0dGVzdHMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVU
YXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5NjNCMUUxM0Y3NTMwNDAwMDJE
OUIyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ1bml0
dGVzdHMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEY5NjNCMTUxM0Y3NTMwNDAwMDJE
OUIyIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY5NjNCMTcxM0Y3NTMwNDAwMDJEOUIyIC8qIEZyYW1l
d29ya3MgKi8sCisJCQkJMEY5NjNCMUExM0Y3NTMwNDAwMDJEOUIyIC8qIENvcHkgU3VwcG9ydCBT
Y3JpcHQgKi8sCisJCQkJMEY5NjNCMUMxM0Y3NTMwNDAwMDJEOUIyIC8qIEluc3RhbGwgU3VwcG9y
dCBTY3JpcHQgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRl
bmNpZXMgPSAoCisJCQkJMEY5NjNCMTMxM0Y3NTMwNDAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IHVuaXR0ZXN0czsKKwkJCXByb2R1Y3ROYW1lID0g
dGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRjk2M0IyMzEzRjc1MzA0MDAwMkQ5QjIg
LyogdW5pdHRlc3RzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMTQxMjExMUYwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8g
PSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMTQxMjExMzkwQTQ4Nzk4NDAwNDgwMjU1IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJtaW5pZG9tIiAqLzsKQEAgLTI2OTksNiArMjc5Miw3IEBACiAJ
CQkJMTQxMjExMUYwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkUw
QTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJOTMyRjVCREEwODIyQTFDNzAwNzM2
OTc1IC8qIGpzYyAqLywKKwkJCQkwRjk2M0IxMjEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3Rz
ICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTI4MTMs
NiArMjkwNywxNCBAQAogLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICov
CiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5NjNCMTUx
M0Y3NTMwNDAwMDJEOUIyIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVp
bGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgK
KwkJCQkwRjk2M0IyNTEzRjc1MzMzMDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OwogCQkxNDEyMTExRDBBNDg3OTNDMDA0ODAyNTUgLyogU291cmNlcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0
NzsKQEAgLTI4MzcsNiArMjkzOSw3IEBACiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsK
IAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRjk2
M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlCRDEwN0VDMzc2MDA0MjdBNDggLyogQXJnTGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlCRTEwN0VDMzc2MDA0MjdBNDggLyogQXJndW1lbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMDQ0LDYgKzMxNDcsMTYgQEAKIC8qIEVuZCBQQlhTb3VyY2Vz
QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2Vj
dGlvbiAqLworCQkwRjk2M0IxMzEzRjc1MzA0MDAwMkQ5QjIgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSA5MzJG
NUIzRTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUgKi87CisJCQl0YXJnZXRQcm94
eSA9IDBGOTYzQjE0MTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87
CisJCX07CisJCTBGOTYzQjI5MTNGNzY0RDEwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGOTYz
QjEyMTNGNzUzMDQwMDAyRDlCMiAvKiB1bml0dGVzdHMgKi87CisJCQl0YXJnZXRQcm94eSA9IDBG
OTYzQjI4MTNGNzY0RDEwMDAyRDlCMiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07
CiAJCTE0MTIxMTM2MEE0ODc5NjEwMDQ4MDI1NSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0g
ewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDkzMkY1QjNFMDgy
MkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZSAqLzsKQEAgLTMwODcsNiArMzIwMCwzOCBA
QAogLyogRW5kIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0J1
aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCisJCTBGOTYzQjFGMTNGNzUzMDQwMDAyRDlCMiAv
KiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNv
bmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQ
SS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0g
dW5pdHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEY5NjNCMjAxM0Y3
NTMwNDAwMDJEOUIyIC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRlc3RBUEkueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJ
CVBST0RVQ1RfTkFNRSA9IHVuaXR0ZXN0czsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJ
fTsKKwkJMEY5NjNCMjExM0Y3NTMwNDAwMDJEOUIyIC8qIFByb2ZpbGluZyAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2Ug
PSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdW5pdHRlc3RzOworCQkJfTsKKwkJ
CW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBGOTYzQjIyMTNGNzUzMDQwMDAyRDlCMiAvKiBQ
cm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0
QVBJLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUg
PSB1bml0dGVzdHM7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTE0MTIx
MTNBMEE0ODc5ODQwMDQ4MDI1NSAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKQEAgLTMzMDEsNiArMzQ0NiwxNyBAQAog
LyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENDb25m
aWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJCTBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3RzIiAq
LyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRp
b25zID0gKAorCQkJCTBGOTYzQjFGMTNGNzUzMDQwMDAyRDlCMiAvKiBEZWJ1ZyAqLywKKwkJCQkw
Rjk2M0IyMDEzRjc1MzA0MDAwMkQ5QjIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjk2M0IyMTEzRjc1
MzA0MDAwMkQ5QjIgLyogUHJvZmlsaW5nICovLAorCQkJCTBGOTYzQjIyMTNGNzUzMDQwMDAyRDlC
MiAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNp
YmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07
CiAJCTE0MTIxMTM5MEE0ODc5ODQwMDQ4MDI1NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWE5hdGl2ZVRhcmdldCAibWluaWRvbSIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3Vy
YXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24g
OTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJzdGRpbnQu
aCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNs
dWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KQEAgLTEyOCwxOSArMTI5LDIxIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVsKG1faW5kZXgp
OwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2luZGV4KQogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jKGdsb2JhbERhdGEsIG1faW5kZXgpOworICAgICAgICAgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGdsb2JhbERhdGEuZXhlY3V0YWJsZUFsbG9jYXRv
ci5hbGxvY2F0ZShnbG9iYWxEYXRhLCBtX2luZGV4KTsKIAogICAgICAgICAgICAgaWYgKCFyZXN1
bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQsIG1faW5kZXgpOworICAgICAgICAgICAgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdC0+c3RhcnQoKSwgcmVzdWx0LT5z
aXplSW5CeXRlcygpKTsKIAotICAgICAgICAgICAgcmV0dXJuIG1lbWNweShyZXN1bHQsIG1fYnVm
ZmVyLCBtX2luZGV4KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQtPnN0YXJ0KCksIG1fYnVm
ZmVyLCBtX2luZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5y
ZWxlYXNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1i
bGVyTGFiZWwgbGFiZWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xp
bmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMjIgKzY5LDggQEAg
Y2xhc3MgTGlua0J1ZmZlciB7CiAjZW5kaWYKIAogcHVibGljOgotICAgIExpbmtCdWZmZXIoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgIDogbV9leGVjdXRhYmxlUG9v
bChleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBtX2NvZGUo
MCkKLSAgICAgICAgLCBtX2Fzc2VtYmxlcihtYXNtKQotICAgICAgICAsIG1fZ2xvYmFsRGF0YSgm
Z2xvYmFsRGF0YSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2Up
Ci0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGxpbmtDb2RlKCk7Ci0gICAgfQotCi0gICAgTGlua0J1
ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCBFeGVj
dXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCi0gICAgICAgIDogbV9leGVjdXRhYmxlUG9vbChh
bGxvY2F0b3IucG9vbEZvclNpemUoZ2xvYmFsRGF0YSwgbWFzbS0+bV9hc3NlbWJsZXIuY29kZVNp
emUoKSkpCi0gICAgICAgICwgbV9zaXplKDApCisgICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICA6IG1fc2l6ZSgwKQog
ICAgICAgICAsIG1fY29kZSgwKQogICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCiAgICAgICAg
ICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQpAQCAtMTg1LDE0ICsxNzEsNyBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7CiAKLSAgICAgICAgcmV0dXJu
IENvZGVSZWYobV9jb2RlLCBtX2V4ZWN1dGFibGVQb29sLCBtX3NpemUpOwotICAgIH0KLQotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGZpbmFsaXplQ29kZUFkZGVuZHVtKCkKLSAgICB7Ci0gICAgICAg
IHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKLQotICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFi
ZWwoY29kZSgpKTsKKyAgICAgICAgcmV0dXJuIENvZGVSZWYobV9leGVjdXRhYmxlTWVtb3J5KTsK
ICAgICB9CiAKICAgICBDb2RlUHRyIHRyYW1wb2xpbmVBdChMYWJlbCBsYWJlbCkKQEAgLTIzMiwx
NCArMjExLDE5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQoIW1fY29kZSk7CiAj
aWYgIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKLSAgICAgICAgbV9jb2RlID0gbV9hc3NlbWJs
ZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERhdGEsIG1fZXhlY3V0YWJs
ZVBvb2wuZ2V0KCkpOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2Fzc2VtYmxlci0+
bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xvYmFsRGF0YSk7CisgICAgICAgIGlmICgh
bV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGUg
PSBtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CiAgICAgICAgIG1fc2l6ZSA9IG1fYXNzZW1i
bGVyLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgICAgICBBU1NFUlQobV9jb2RlKTsKICNl
bHNlCiAgICAgICAgIHNpemVfdCBpbml0aWFsU2l6ZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxl
ci5jb2RlU2l6ZSgpOwotICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlUG9v
bC0+YWxsb2MoKm1fZ2xvYmFsRGF0YSwgaW5pdGlhbFNpemUpOwotICAgICAgICBpZiAoIW1fY29k
ZSkKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxl
QWxsb2NhdG9yLmFsbG9jYXRlKGluaXRpYWxTaXplKTsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFi
bGVNZW1vcnkpCiAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29kZSA9ICh1aW50OF90
KiltX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CisgICAgICAgIEFTU0VSVChtX2NvZGUpOwog
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUobV9jb2RlLCBpbml0aWFs
U2l6ZSk7CiAgICAgICAgIHVpbnQ4X3QqIGluRGF0YSA9ICh1aW50OF90KiltX2Fzc2VtYmxlci0+
dW5saW5rZWRDb2RlKCk7CiAgICAgICAgIHVpbnQ4X3QqIG91dERhdGEgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4X3QqPihtX2NvZGUpOwpAQCAtMjk3LDcgKzI4MSw3IEBAIHByaXZhdGU6CiAKICAg
ICAgICAganVtcHNUb0xpbmsuY2xlYXIoKTsKICAgICAgICAgbV9zaXplID0gd3JpdGVQdHIgKyBp
bml0aWFsU2l6ZSAtIHJlYWRQdHI7Ci0gICAgICAgIG1fZXhlY3V0YWJsZVBvb2wtPnRyeVNocmlu
ayhtX2NvZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1v
cnktPnNocmluayhtX3NpemUpOwogCiAjaWYgRFVNUF9MSU5LX1NUQVRJU1RJQ1MKICAgICAgICAg
ZHVtcExpbmtTdGF0aXN0aWNzKG1fY29kZSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7CkBAIC0zNjYs
NyArMzUwLDcgQEAgcHJpdmF0ZToKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICBSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHZv
aWQqIG1fY29kZTsKICAgICBNYWNyb0Fzc2VtYmxlciogbV9hc3NlbWJsZXI7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmLmgJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDIyICsx
OTksNTkgQEAgcHJpdmF0ZToKIC8vIHBvaW50ZXIgdG8gdGhlIGNvZGUsIGFuZCBhIHJlZiBwb2lu
dGVyIHRvIHRoZSBwb29sIGZyb20gd2l0aGluIHdoaWNoIGl0CiAvLyB3YXMgYWxsb2NhdGVkLgog
Y2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHsKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBw
cml2YXRlIGJlY2F1c2UgaXQncyBkYW5nZXJvdXMgZW5vdWdoIHRoYXQgd2Ugd2FudCB1c2VzIG9m
IGl0CisgICAgLy8gdG8gYmUgZWFzeSB0byBmaW5kIC0gaGVuY2UgdGhlIHN0YXRpYyBjcmVhdGUg
bWV0aG9kIGJlbG93LgorICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICAgICAgOiBtX2NvZGVQdHIoY29kZVB0cikKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2NvZGVQdHIpOworICAgIH0KKwogcHVibGljOgogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZigpCi0gICAgICAgIDogbV9zaXplKDApCiAgICAgewogICAgIH0K
IAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZih2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUpCi0gICAgICAgIDogbV9jb2Rl
KGNvZGUpCi0gICAgICAgICwgbV9leGVjdXRhYmxlUG9vbChleGVjdXRhYmxlUG9vbCkKLSAgICAg
ICAgLCBtX3NpemUoc2l6ZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5KQorICAgICAgICA6IG1fY29k
ZVB0cihleGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKQorICAgICAgICAsIG1fZXhlY3V0YWJsZU1l
bW9yeShleGVjdXRhYmxlTWVtb3J5KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJs
ZU1lbW9yeS0+aXNNYW5hZ2VkKCkpOworICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5
LT5zdGFydCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CisgICAgfQorICAgIAorICAg
IC8vIFVzZSB0aGlzIG9ubHkgd2hlbiB5b3Uga25vdyB0aGF0IHRoZSBjb2RlUHRyIHJlZmVycyB0
byBjb2RlIHRoYXQgaXMKKyAgICAvLyBhbHJlYWR5IGJlaW5nIGtlcHQgYWxpdmUgdGhyb3VnaCBz
b21lIG90aGVyIG1lYW5zLiBUeXBpY2FsbHkgdGhpcyBtZWFucworICAgIC8vIHRoYXQgY29kZVB0
ciBpcyBpbW1vcnRhbC4KKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoY29kZVB0cik7CisgICAgfQorICAg
IAorICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9yeS5nZXQoKTsKKyAgICB9Cisg
ICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fY29kZVB0cjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dAogICAgIHsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2l6ZUluQnl0ZXMo
KTsKICAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9j
b2RlUHRyOyB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jb2RlOwotICAgIFJlZlB0
cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKLSAgICBzaXplX3QgbV9zaXplOwor
cHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jb2RlUHRyOworICAgIFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk1LDkgKzE1
OTUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5tX29mZnNldDsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgIFBhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2Jh
bERhdGEsIGFsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5leGVjdXRhYmxl
Q29weShnbG9iYWxEYXRhKTsKICAgICB9CiAKICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1i
bGVyTGFiZWwgcmV3aW5kVG8pIHsgbV9mb3JtYXR0ZXIucmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7
IH0KQEAgLTE5MzksOSArMTkzOSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNBbGlnbmVk
KGludCBhbGlnbm1lbnQpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1l
bnQpOyB9CiAgICAgICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRh
KCk7IH0KIAotICAgICAgICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgICAgIFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNv
cHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5l
eGVjdXRhYmxlQ29weShnbG9iYWxEYXRhKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmV3
aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBtX2J1ZmZlci5yZXdpbmRUb0xh
YmVsKHJld2luZFRvKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw3ICsyOTcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENvZGUmIGdldEpJVENv
ZGUoKSB7IHJldHVybiBtX2lzQ29uc3RydWN0b3IgPyBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJh
dGVkSklUQ29kZUZvckNvbnN0cnVjdCgpIDogb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJ
VENvZGVGb3JDYWxsKCk7IH0KLSAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFibGVQb29s
KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVQb29sKCk7IH0KKyAgICAgICAg
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgpIHsgcmV0dXJuIGdldEpJ
VENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7IH0KICNlbmRpZgogCiAgICAgICAgIFNjcmlw
dEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVj
dXRhYmxlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIAogI2lmIEVOQUJMRShK
SVQpCi0gICAgdHlwZWRlZiBDb2RlTG9jYXRpb25MYWJlbCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3RTdHViUm91dGluZVR5cGU7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlOwogCiAgICAg
Ly8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5
X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNv
ZGUgc3RyZWFtLgogICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0gcHV0QnlJZFJlcGxhY2U7CiAgICAgICAg
IH0gdTsKIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdHViUm91dGluZTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOwogICAgICAgICBDb2RlTG9jYXRpb25D
YWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0
aEJlZ2luOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJ
VENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI4LDcgKzkyOCw3IEBA
IHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkKICAgICAvLyBHZW5lcmF0
ZSB0aGUgYm9keSBvZiB0aGUgcHJvZ3JhbS4KICAgICBjb21waWxlQm9keSgpOwogICAgIC8vIExp
bmsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9i
YWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICBlbnRyeSA9
IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0K
QEAgLTk4Niw3ICs5ODYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklU
Q29kCiAKIAogICAgIC8vID09PSBMaW5rID09PQotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOwor
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBsaW5r
KGxpbmtCdWZmZXIpOwogICAgIAogICAgIC8vIEZJWE1FOiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZp
bGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERGR09wZXJ0YWlvbiBzdHlsZSBjYWxscywg
bm90IEpJVCBzdHVicy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRj
aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNo
LmNwcAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Jl
cGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyB2b2lkIGxp
bmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hC
dWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJhdGVQ
cm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBvZmZz
ZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsJiBzdHVi
Um91dGluZSkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0
YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
Q29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZUxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTEzMywxMSAr
MTMzLDExIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAK
ICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNj
cmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygp
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxE
YXRhLCAmc3R1YkppdCk7CiAgICAgCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVy
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNj
ZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwogICAgIAotICAgIHN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBzdHViUm91dGluZSA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHVi
SW5mbykKQEAgLTE3NiwxNSArMTc2LDE0IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChF
eGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0
LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVy
ZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgICAgIAog
ICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCi0g
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGVBZGRlbmR1bSgpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFi
ZWw7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CiAgICAgICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29k
ZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwg
ZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVj
ayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9w
ZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzEs
NyArMjMwLDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAg
IGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNo
YWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
LCBzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENo
ZWNrKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNv
ZGUoKSkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5m
by5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluKTsKQEAgLTMyNCw3ICszMjMsNyBAQCBzdGF0
aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgCiAgICAgaWYgKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgIEFTU0VS
VCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRC
eUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFs
RGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51Lmdl
dEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBzdHViSW5mby5p
bml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRC
eUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTM1MCwyMSArMzQ5LDIxIEBAIHN0YXRpYyBi
b29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgCiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAg
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpn
bG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5k
ZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3Rv
QmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3Rb
bGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNTRVJUKCEhbGFz
dFByb3RvQmVnaW4pOwogICAgICAgICAKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0
cnVjdCwgbGFzdFByb3RvQmVnaW4pOwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvRG9uZSkpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlM
YWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwogICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRy
eUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0
aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwOCw3ICs0MDcs
NyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgaWYgKHN0
dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewogICAgICAgICBB
U1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEs
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHVi
SW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51
LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSk7Ci0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90
b0xpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlz
dCk7CkBAIC00MTksMTggKzQxOCwxOCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90
b0xpc3QoRXhlCiAgICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSkgewogICAgICAgICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKICAg
ICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVs
KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGlu
ZS5jb2RlKCkpOwogICAgICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAKLSAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIHN0dWJSb3V0aW5lOwogICAgICAgICAKLSAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIGVudHJ5TGFiZWwpOworICAgICAg
ICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVD
aGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdp
biwgc3R1YlJvdXRpbmUpOwogICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAg
ICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwog
ICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Um91dGluZS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9M
WU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
QEAgLTU0OCwxOCArNTQ3LDE3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHVi
Sml0Lmp1bXAoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1Ykpp
dCk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwog
ICAgICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQogICAgICAgICAgICAgICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVs
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVu
dHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgICAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICAgICAgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0g
ICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxh
YmVsKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBh
cHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZUNoYWluKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw0MiArMjcsMTExIEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAKKyNp
ZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQorI2luY2x1ZGUgPHd0Zi9NZXRh
QWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9WTVRhZ3MuaD4KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAordXNpbmcg
bmFtZXNwYWNlIFdURjsKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJM
RV9BTExPQ0FUT1JfREVNQU5EKQogCi1FeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRh
YmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IHNpemUpCitjbGFzcyBEZW1hbmRFeGVjdXRhYmxl
QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgRGVtYW5kRXhl
Y3V0YWJsZUFsbG9jYXRvcigpCisgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQg
dXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisgICAgeworICAgICAgICAvLyBEb24ndCBw
cmVhbGxvY2F0ZSBhbnkgbWVtb3J5IGhlcmUuCisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkRl
bWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlc2VydmF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc2VydmF0
aW9ucy5hdChpKS5kZWFsbG9jYXRlKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVh
bCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpCisgICAgeworICAgICAg
ICBzaXplX3QgbmV3TnVtUGFnZXMgPSAoKChudW1QYWdlcyAqIHBhZ2VTaXplKCkgKyBKSVRfQUxM
T0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgLSAxKSAvIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0Nf
U0laRSAqIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSkgKyBwYWdlU2l6ZSgpIC0gMSkg
LyBwYWdlU2l6ZSgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld051bVBhZ2VzID49IG51
bVBhZ2VzKTsKKyAgICAgICAgCisgICAgICAgIG51bVBhZ2VzID0gbmV3TnVtUGFnZXM7CisgICAg
ICAgIAorICAgICAgICBQYWdlUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRp
b246OnJlc2VydmUobnVtUGFnZXMgKiBwYWdlU2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2Rl
UGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIGlmICghcmVz
ZXJ2YXRpb24pCisgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAKKyAgICAgICAgcmVzZXJ2
YXRpb25zLmFwcGVuZChyZXNlcnZhdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVz
ZXJ2YXRpb24uYmFzZSgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVl
ZFBhZ2Uodm9pZCogcGFnZSkKKyAgICB7CisgICAgICAgIE9TQWxsb2NhdG9yOjpjb21taXQocGFn
ZSwgcGFnZVNpemUoKSwgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKKyAgICB7
CisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFBhZ2VSZXNlcnZhdGlvbiwgMTY+IHJlc2VydmF0aW9u
czsKK307CisKK3N0YXRpYyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CisK
K3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpCiB7Ci0gICAg
UGFnZUFsbG9jYXRpb24gYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZShzaXpl
LCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwg
dHJ1ZSk7Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVy
biBhbGxvY2F0aW9uOworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0b3IgPSBu
ZXcgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpOwogfQogCi12b2lkIEV4ZWN1dGFibGVQb29s
OjpzeXN0ZW1SZWxlYXNlKEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQor
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQog
ewotICAgIGFsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOworICAgIEFTU0VSVChhbGxvY2F0b3IpOwog
fQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewogICAgIHJl
dHVybiB0cnVlOwogfQotICAgIAorCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVt
b3J5UHJlc3N1cmUoKQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKKworUGFzc1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShK
U0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMp
OworICAgIGlmICghcmVzdWx0KQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZSgpOworfQorCiBzaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0
ZUNvdW50KCkKIHsKLSAgICByZXR1cm4gMDsKLX0gCisgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0
ZXNDb21taXR0ZWQoKTsKK30KIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQor
dm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCit7CisgICAgYWxsb2NhdG9y
LT5kdW1wUHJvZmlsZSgpOworfQogI2VuZGlmCiAKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJM
RV9BTExPQ0FUT1JfREVNQU5EKQorCiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUp
CiAKICNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTWU1CSUFOKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDkzMjcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gZm9yIHB0
cmRpZmZfdAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgor
I2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VB
bGxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgpAQCAtOTksMTIwICsxMDAsMjcgQEAgaW5saW5lIHNpemVfdCByb3VuZFVw
QWxsb2NhdGlvblNpemUoc2l6ZQogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgRXhlY3V0YWJs
ZVBvb2wgOiBwdWJsaWMgUmVmQ291bnRlZDxFeGVjdXRhYmxlUG9vbD4gewotcHVibGljOgotI2lm
IEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCi0gICAgdHlwZWRlZiBQYWdlQWxs
b2NhdGlvbiBBbGxvY2F0aW9uOwotI2Vsc2UKLSAgICBjbGFzcyBBbGxvY2F0aW9uIHsKLSAgICBw
dWJsaWM6Ci0gICAgICAgIEFsbG9jYXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCi0gICAg
ICAgICAgICA6IG1fYmFzZShiYXNlKQotICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAg
ICAgewotICAgICAgICB9Ci0gICAgICAgIHZvaWQqIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0K
LSAgICAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9iYXNlOyB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICB2b2lkKiBtX2Jhc2U7Ci0gICAgICAgIHNpemVfdCBtX3NpemU7Ci0gICAgfTsKLSNlbmRp
ZgotICAgIHR5cGVkZWYgVmVjdG9yPEFsbG9jYXRpb24sIDI+IEFsbG9jYXRpb25MaXN0OwotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyBFeGVjdXRhYmxlUG9vbChnbG9iYWxEYXRhLCBuKSk7Ci0gICAgfQotCi0gICAgdm9pZCogYWxs
b2MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChtX2ZyZWVQdHIgPD0gbV9lbmQpOwotCi0gICAgICAgIC8vIFJvdW5kICduJyB1cCB0byBh
IG11bHRpcGxlIG9mIHdvcmQgc2l6ZTsgaWYgYWxsIGFsbG9jYXRpb25zIGFyZSBvZgotICAgICAg
ICAvLyB3b3JkIHNpemVkIHF1YW50aXRpZXMsIHRoZW4gYWxsIHN1YnNlcXVlbnQgYWxsb2NhdGlv
bnMgd2lsbCBiZSBhbGlnbmVkLgotICAgICAgICBuID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4s
IHNpemVvZih2b2lkKikpOwotCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG4p
IDwgKG1fZW5kIC0gbV9mcmVlUHRyKSkgewotICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9m
cmVlUHRyOwotICAgICAgICAgICAgbV9mcmVlUHRyICs9IG47Ci0gICAgICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5zdWZmaWNpZW50IHNwYWNlIHRvIGFs
bG9jYXRlIGluIHRoZSBleGlzdGluZyBwb29sCi0gICAgICAgIC8vIHNvIHdlIG5lZWQgYWxsb2Nh
dGUgaW50byBhIG5ldyBwb29sCi0gICAgICAgIHJldHVybiBwb29sQWxsb2NhdGUoZ2xvYmFsRGF0
YSwgbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJ5U2hyaW5rKHZvaWQqIGFsbG9jYXRpb24s
IHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0
aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyBvbGRTaXplICE9IG1fZnJlZVB0cikKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFs
bG9jYXRpb24pICsgcm91bmRVcEFsbG9jYXRpb25TaXplKG5ld1NpemUsIHNpemVvZih2b2lkKikp
OwotICAgIH0KLQotICAgIH5FeGVjdXRhYmxlUG9vbCgpCi0gICAgewotICAgICAgICBBbGxvY2F0
aW9uTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9wb29scy5lbmQoKTsKLSAgICAgICAgZm9yIChBbGxv
Y2F0aW9uTGlzdDo6aXRlcmF0b3IgcHRyID0gbV9wb29scy5iZWdpbigpOyBwdHIgIT0gZW5kOyAr
K3B0cikKLSAgICAgICAgICAgIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKCpwdHIpOwot
ICAgIH0KLQotICAgIHNpemVfdCBhdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiAobV9wb29scy5z
aXplKCkgPiAxKSA/IDAgOiBtX2VuZCAtIG1fZnJlZVB0cjsgfQotCi1wcml2YXRlOgotICAgIHN0
YXRpYyBBbGxvY2F0aW9uIHN5c3RlbUFsbG9jKHNpemVfdCBuKTsKLSAgICBzdGF0aWMgdm9pZCBz
eXN0ZW1SZWxlYXNlKEFsbG9jYXRpb24mIGFsbG9jKTsKLQotICAgIEV4ZWN1dGFibGVQb29sKEpT
R2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQotICAgIHZvaWQqIHBvb2xBbGxvY2F0ZShKU0dsb2Jh
bERhdGEmLCBzaXplX3Qgbik7Ci0KLSAgICBjaGFyKiBtX2ZyZWVQdHI7Ci0gICAgY2hhciogbV9l
bmQ7Ci0gICAgQWxsb2NhdGlvbkxpc3QgbV9wb29sczsKLX07Cit0eXBlZGVmIFdURjo6TWV0YUFs
bG9jYXRvckhhbmRsZSBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOwogCiBjbGFzcyBFeGVjdXRhYmxl
QWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1
dGFibGUgfTsKIAogcHVibGljOgotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQotICAgIHsKLSAgICAgICAgaWYgKGlzVmFsaWQoKSkKLSAgICAgICAgICAg
IG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0
YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKTsKLSNpZiAhRU5BQkxFKElOVEVSUFJF
VEVSKQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgfQor
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJik7CisgICAgCisgICAgc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7
CiAKICAgICBzdGF0aWMgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJlKCk7CisgICAgCisjaWYgRU5B
QkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUo
KTsKKyNlbHNlCisgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KKyNlbmRpZgogCi0g
ICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbEZvclNpemUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBmaXQgaW4gdGhl
IGV4aXN0aW5nIHNtYWxsIGFsbG9jYXRvcgotICAgICAgICBBU1NFUlQobV9zbWFsbEFsbG9jYXRp
b25Qb29sKTsKLSAgICAgICAgaWYgKG4gPCBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJs
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxBbGxvY2F0aW9uUG9vbDsKLQotICAgICAg
ICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBsYXJnZSwgd2UganVzdCBwcm92aWRlIGEgdW5zaGFyZWQg
YWxsb2NhdG9yCi0gICAgICAgIGlmIChuID4gSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpF
KQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwg
bik7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFsbG9jYXRvcgotICAgICAgICBSZWZQdHI8
RXhlY3V0YWJsZVBvb2w+IHBvb2wgPSBFeGVjdXRhYmxlUG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEs
IEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG5l
dyBhbGxvY2F0b3Igd2lsbCByZXN1bHQgaW4gbW9yZSBmcmVlIHNwYWNlIHRoYW4gaW4KLSAgICAg
ICAgLy8gdGhlIGN1cnJlbnQgc21hbGwgYWxsb2NhdG9yLCB0aGVuIHdlIHdpbGwgdXNlIGl0IGlu
c3RlYWQKLSAgICAgICAgaWYgKChwb29sLT5hdmFpbGFibGUoKSAtIG4pID4gbV9zbWFsbEFsbG9j
YXRpb25Qb29sLT5hdmFpbGFibGUoKSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9v
bCA9IHBvb2w7Ci0gICAgICAgIHJldHVybiBwb29sLnJlbGVhc2UoKTsKLSAgICB9CisgICAgUGFz
c1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dY
X0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCBtYWtlV3JpdGFibGUodm9pZCogc3RhcnQsIHNp
emVfdCBzaXplKQpAQCAtMzM1LDUwICsyNDMsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShBU1NF
TUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lk
Kiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0dGluZyk7CiAjZW5kaWYKLQotICAgIFJlZlB0cjxFeGVj
dXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwogfTsKIAotaW5saW5lIEV4ZWN1dGFi
bGVQb29sOjpFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBu
KQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgcGFn
ZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlvbiBtZW0gPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwot
ICAgIGlmICghbWVtLmJhc2UoKSkgewotICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShn
bG9iYWxEYXRhKTsKLSAgICAgICAgbWVtID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICB9
Ci0gICAgbV9wb29scy5hcHBlbmQobWVtKTsKLSAgICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxj
aGFyKj4obWVtLmJhc2UoKSk7Ci0gICAgaWYgKCFtX2ZyZWVQdHIpCi0gICAgICAgIENSQVNIKCk7
IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIG1fZW5kID0gbV9mcmVlUHRyICsgYWxsb2NTaXpl
OwotICAgIGRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIoKTsKLX0KLQotaW5saW5lIHZvaWQqIEV4
ZWN1dGFibGVQb29sOjpwb29sQWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4s
IHBhZ2VTaXplKCkpOwotICAgIAotICAgIEFsbG9jYXRpb24gcmVzdWx0ID0gc3lzdGVtQWxsb2Mo
YWxsb2NTaXplKTsKLSAgICBpZiAoIXJlc3VsdC5iYXNlKCkpIHsKLSAgICAgICAgcmVsZWFzZUV4
ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJlc3VsdCA9IHN5c3RlbUFsbG9j
KGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmJhc2UoKSkKLSAgICAgICAgICAgIENS
QVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobV9l
bmQgPj0gbV9mcmVlUHRyKTsKLSAgICBpZiAoKGFsbG9jU2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8
c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAgICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0
aW9uIHBvb2wKLSAgICAgICAgbV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5i
YXNlKCkpICsgbjsKLSAgICAgICAgbV9lbmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJh
c2UoKSkgKyBhbGxvY1NpemU7Ci0gICAgfQotCi0gICAgbV9wb29scy5hcHBlbmQocmVzdWx0KTsK
LSAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAK
ICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUoQVNTRU1CTEVSKQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA5MzI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpbmNsdWRlICJU
Q1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+
CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3Mu
aD4KIApAQCAtNDYsNDgxICs0NSw5OCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAKLSNkZWZpbmUgVHdvUG93KG4pICgxdWxsIDw8IG4pCi0KLWNsYXNzIEFs
bG9jYXRpb25UYWJsZVNpemVDbGFzcyB7Ci1wdWJsaWM6Ci0gICAgQWxsb2NhdGlvblRhYmxlU2l6
ZUNsYXNzKHNpemVfdCBzaXplLCBzaXplX3QgYmxvY2tTaXplLCB1bnNpZ25lZCBsb2cyQmxvY2tT
aXplKQotICAgICAgICA6IG1fYmxvY2tTaXplKGJsb2NrU2l6ZSkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChibG9ja1NpemUgPT0gVHdvUG93KGxvZzJCbG9ja1NpemUpKTsKLQotICAgICAgICAvLyBD
YWxjdWxhdGUgdGhlIG51bWJlciBvZiBibG9ja3MgbmVlZGVkIHRvIGhvbGQgc2l6ZS4KLSAgICAg
ICAgc2l6ZV90IGJsb2NrTWFzayA9IGJsb2NrU2l6ZSAtIDE7Ci0gICAgICAgIG1fYmxvY2tDb3Vu
dCA9IChzaXplICsgYmxvY2tNYXNrKSA+PiBsb2cyQmxvY2tTaXplOwotCi0gICAgICAgIC8vIEFs
aWduIHRvIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28gPj0gbV9ibG9ja0NvdW50LgotICAgICAg
ICBtX2Jsb2NrQWxpZ25tZW50ID0gMTsKLSAgICAgICAgd2hpbGUgKG1fYmxvY2tBbGlnbm1lbnQg
PCBtX2Jsb2NrQ291bnQpCi0gICAgICAgICAgICBtX2Jsb2NrQWxpZ25tZW50ICs9IG1fYmxvY2tB
bGlnbm1lbnQ7Ci0gICAgfQotCi0gICAgc2l6ZV90IGJsb2NrU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tTaXplOyB9Ci0gICAgc2l6ZV90IGJsb2NrQ291bnQoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2NrQ291bnQ7IH0KLSAgICBzaXplX3QgYmxvY2tBbGlnbm1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrQWxpZ25tZW50OyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gbV9ibG9ja1NpemUgKiBtX2Jsb2NrQ291bnQ7Ci0gICAgfQotCi1wcml2YXRlOgot
ICAgIHNpemVfdCBtX2Jsb2NrU2l6ZTsKLSAgICBzaXplX3QgbV9ibG9ja0NvdW50OwotICAgIHNp
emVfdCBtX2Jsb2NrQWxpZ25tZW50OwotfTsKLQotdGVtcGxhdGU8dW5zaWduZWQgbG9nMkVudHJp
ZXM+Ci1jbGFzcyBBbGxvY2F0aW9uVGFibGVMZWFmIHsKLSAgICB0eXBlZGVmIHVpbnQ2NF90IEJp
dEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJTdWJyZWdp
b25TaXplID0gMTI7IC8vIDJeMTIgPT0gcGFnZXNpemUKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSArIGxvZzJFbnRyaWVzOwotCi0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0gVHdvUG93KGxvZzJTdWJyZWdp
b25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lvblNpemUgPSBUd29Qb3cobG9n
MlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gVHdvUG93
KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRyaWVzIDw9IChzaXplb2YoQml0
RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZUxlYWZfZW50cmllc19maXRfaW5fQml0RmllbGQp
OwotCi0gICAgQWxsb2NhdGlvblRhYmxlTGVhZigpCi0gICAgICAgIDogbV9hbGxvY2F0ZWQoMCkK
LSAgICB7Ci0gICAgfQotCi0gICAgfkFsbG9jYXRpb25UYWJsZUxlYWYoKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9j
YXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNp
emVDbGFzcy5ibG9ja1NpemUoKSA9PSBzdWJyZWdpb25TaXplKTsKLSAgICAgICAgQVNTRVJUKCFp
c0Z1bGwoKSk7Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9ja0Fs
aWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgp
OwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVlIGJs
b2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCAo
YWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxpZ25t
ZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBpICs9
IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEobV9hbGxvY2F0ZWQgJiBtYXNrKSkgewot
ICAgICAgICAgICAgICAgIG1fYWxsb2NhdGVkIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIChpICsgKGFsaWdubWVudCAtIGNvdW50KSkgPDwgbG9nMlN1YnJlZ2lvblNpemU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBtYXNrIDw8PSBhbGlnbm1lbnQ7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9j
YXRpb24sIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA9PSBzdWJyZWdpb25TaXplKTsKLQotICAg
ICAgICBzaXplX3QgZW50cnkgPSBsb2NhdGlvbiA+PiBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAg
ICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgQml0Rmll
bGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsKLQotICAgICAgICBBU1NF
UlQoKG1fYWxsb2NhdGVkICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAgIG1fYWxsb2NhdGVkICY9
IH5tYXNrOwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpCi0gICAgewotICAgICAgICByZXR1
cm4gIW1fYWxsb2NhdGVkOwotICAgIH0KLQotICAgIGJvb2wgaXNGdWxsKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhfm1fYWxsb2NhdGVkOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3Qgc2l6
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVnaW9uU2l6ZTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6ZSwgc3VicmVn
aW9uU2l6ZSwgbG9nMlN1YnJlZ2lvblNpemUpOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAg
ICB2b2lkIGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGluZGVudCA9IDAp
Ci0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCi0g
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSAgICAgICAgZnByaW50ZihzdGRl
cnIsICIlMDh4OiBbJTAxNmxseF1cbiIsIChpbnQpcGFyZW50T2Zmc2V0LCBtX2FsbG9jYXRlZCk7
Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgQml0RmllbGQgbV9hbGxvY2F0ZWQ7Ci19
OwotCi0KLXRlbXBsYXRlPGNsYXNzIE5leHRMZXZlbD4KLWNsYXNzIExhenlBbGxvY2F0aW9uVGFi
bGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9
IE5leHRMZXZlbDo6bG9nMlJlZ2lvblNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVu
dHJpZXMgPSBOZXh0TGV2ZWw6OmVudHJpZXM7Ci0KLSAgICBMYXp5QWxsb2NhdGlvblRhYmxlKCkK
LSAgICAgICAgOiBtX3B0cigwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+TGF6eUFsbG9jYXRpb25U
YWJsZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBz
aXplX3QgYWxsb2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAg
ewotICAgICAgICBpZiAoIW1fcHRyKQotICAgICAgICAgICAgbV9wdHIgPSBuZXcgTmV4dExldmVs
KCk7Ci0gICAgICAgIHJldHVybiBtX3B0ci0+YWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICB9Ci0K
LSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mm
IHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIG1fcHRy
LT5mcmVlKGxvY2F0aW9uLCBzaXplQ2xhc3MpOwotICAgICAgICBpZiAobV9wdHItPmlzRW1wdHko
KSkgewotICAgICAgICAgICAgZGVsZXRlIG1fcHRyOwotICAgICAgICAgICAgbV9wdHIgPSAwOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAhbV9wdHI7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Z1bGwoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1fcHRyICYmIG1fcHRyLT5pc0Z1bGwoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6
ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5leHRMZXZlbDo6c2l6ZSgpOwotICAg
IH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9
IDAsIHVuc2lnbmVkIGluZGVudCA9IDApCi0gICAgewotICAgICAgICBBU1NFUlQobV9wdHIpOwot
ICAgICAgICBtX3B0ci0+ZHVtcChwYXJlbnRPZmZzZXQsIGluZGVudCk7Ci0gICAgfQotI2VuZGlm
Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXpl
X3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOZXh0TGV2ZWw6OmNsYXNzRm9yU2l6ZShz
aXplKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsKiBtX3B0cjsKLX07Ci0KLXRl
bXBsYXRlPGNsYXNzIE5leHRMZXZlbCwgdW5zaWduZWQgbG9nMkVudHJpZXM+Ci1jbGFzcyBBbGxv
Y2F0aW9uVGFibGVEaXJlY3RvcnkgewotICAgIHR5cGVkZWYgdWludDY0X3QgQml0RmllbGQ7Ci0K
LXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlN1YnJlZ2lvblNpemUgPSBO
ZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cy
UmVnaW9uU2l6ZSA9IGxvZzJTdWJyZWdpb25TaXplICsgbG9nMkVudHJpZXM7Ci0KLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IHN1YnJlZ2lvblNpemUgPSBUd29Qb3cobG9nMlN1YnJlZ2lvblNpemUp
OwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyUmVnaW9u
U2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVudHJpZXMgPSBUd29Qb3cobG9nMkVu
dHJpZXMpOwotICAgIENPTVBJTEVfQVNTRVJUKGVudHJpZXMgPD0gKHNpemVvZihCaXRGaWVsZCkg
KiA4KSwgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5X2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsK
LQotICAgIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSgpCi0gICAgICAgIDogbV9mdWxsKDApCi0g
ICAgICAgICwgbV9oYXNTdWJhbGxvY2F0aW9uKDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxv
Y2F0aW9uVGFibGVEaXJlY3RvcnkoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7
Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYg
c2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8
PSBzdWJyZWdpb25TaXplKTsKLSAgICAgICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0KLSAgICAgICAg
aWYgKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8IHN1YnJlZ2lvblNpemUpIHsKLSAgICAgICAgICAg
IEJpdEZpZWxkIGJpdCA9IDE7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZW50cmllczsgKytpLCBiaXQgKz0gYml0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnVsbCAm
IGJpdCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc2l6
ZV90IGxvY2F0aW9uID0gbV9zdWJhbGxvY2F0aW9uc1tpXS5hbGxvY2F0ZShzaXplQ2xhc3MpOwot
ICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBJZiB0aGlzIGRpZG4ndCBhbHJlYWR5IGhhdmUgYSBzdWJyZWdpb24sIGl0IGRv
ZXMgbm93IQotICAgICAgICAgICAgICAgICAgICBtX2hhc1N1YmFsbG9jYXRpb24gfD0gYml0Owot
ICAgICAgICAgICAgICAgICAgICAvLyBNaXJyb3IgdGhlIHN1YmFsbG9jYXRpb24ncyBmdWxsIGJp
dC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3ViYWxsb2NhdGlvbnNbaV0uaXNGdWxsKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gYml0OwotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gKGkgKiBzdWJyZWdpb25TaXplKSB8IGxvY2F0aW9uOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIEEgYmxvY2sgaXMgYWxsb2NhdGVkIGlmIGVpdGhlciBpdCBpcyBm
dWxseSBhbGxvY2F0ZWQgb3IgY29udGFpbnMgc3ViYWxsb2NhdGlvbnMuCi0gICAgICAgIEJpdEZp
ZWxkIGFsbG9jYXRlZCA9IG1fZnVsbCB8IG1faGFzU3ViYWxsb2NhdGlvbjsKLQotICAgICAgICBz
aXplX3QgYWxpZ25tZW50ID0gc2l6ZUNsYXNzLmJsb2NrQWxpZ25tZW50KCk7Ci0gICAgICAgIHNp
emVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAgIC8vIFVzZSB0aGlz
IG1hc2sgdG8gY2hlY2sgZm9yIHNwYW5zIG9mIGZyZWUgYmxvY2tzLgotICAgICAgICBCaXRGaWVs
ZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IChhbGlnbm1lbnQgLSBjb3VudCk7Ci0K
LSAgICAgICAgLy8gU3RlcCBpbiB1bml0cyBvZiBhbGlnbm1lbnQgc2l6ZS4KLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7IGkgKz0gYWxpZ25tZW50KSB7Ci0gICAgICAg
ICAgICBpZiAoIShhbGxvY2F0ZWQgJiBtYXNrKSkgewotICAgICAgICAgICAgICAgIG1fZnVsbCB8
PSBtYXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkp
IDw8IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8
PD0gYWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9
Ci0KLSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xh
c3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXpl
KCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24g
Pj4gbG9nMlN1YnJlZ2lvblNpemU7Ci0KLSAgICAgICAgaWYgKHNpemVDbGFzcy5ibG9ja1NpemUo
KSA8IHN1YnJlZ2lvblNpemUpIHsKLSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwg
ZW50cnk7Ci0gICAgICAgICAgICBtX3N1YmFsbG9jYXRpb25zW2VudHJ5XS5mcmVlKGxvY2F0aW9u
ICYgKHN1YnJlZ2lvblNpemUgLSAxKSwgc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgIC8vIENoZWNr
IGlmIHRoZSBzdWJhbGxvY2F0aW9uIGlzIG5vdyBlbXB0eS4KLSAgICAgICAgICAgIGlmIChtX3N1
YmFsbG9jYXRpb25zW2VudHJ5XS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9oYXNTdWJh
bGxvY2F0aW9uICY9IH5iaXQ7Ci0gICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrLCBpdCBj
bGVhcmx5IGlzbid0IGZ1bGwgYW55IG1vcmUhCi0gICAgICAgICAgICBtX2Z1bGwgJj0gfmJpdDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5i
bG9ja0NvdW50KCk7Ci0gICAgICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50
KSAtIDEpIDw8IGVudHJ5OwotICAgICAgICAgICAgQVNTRVJUKChtX2Z1bGwgJiBtYXNrKSA9PSBt
YXNrKTsKLSAgICAgICAgICAgIEFTU0VSVCghKG1faGFzU3ViYWxsb2NhdGlvbiAmIG1hc2spKTsK
LSAgICAgICAgICAgIG1fZnVsbCAmPSB+bWFzazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJv
b2wgaXNFbXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIShtX2Z1bGwgfCBtX2hhc1N1YmFs
bG9jYXRpb24pOwotICAgIH0KLQotICAgIGJvb2wgaXNGdWxsKCkKLSAgICB7ICAgCi0gICAgICAg
IHJldHVybiAhfm1fZnVsbDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuIHJlZ2lvblNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9j
YXRpb25UYWJsZVNpemVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAg
ICAgICBpZiAoc2l6ZSA8IHN1YnJlZ2lvblNpemUpIHsKLSAgICAgICAgICAgIEFsbG9jYXRpb25U
YWJsZVNpemVDbGFzcyBzaXplQ2xhc3MgPSBOZXh0TGV2ZWw6OmNsYXNzRm9yU2l6ZShzaXplKTsK
LSAgICAgICAgICAgIGlmIChzaXplQ2xhc3Muc2l6ZSgpIDwgTmV4dExldmVsOjpzaXplKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHNpemVDbGFzczsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJy
ZWdpb25TaXplKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVf
dCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIgICAgIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyIsIChp
bnQpcGFyZW50T2Zmc2V0KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJp
ZXM7ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAg
ICAgICAgY2hhciBjID0gbV9oYXNTdWJhbGxvY2F0aW9uICYgYml0Ci0gICAgICAgICAgICAgICAg
PyAobV9mdWxsICYgYml0ID8gJ04nIDogJ24nKQotICAgICAgICAgICAgICAgIDogKG1fZnVsbCAm
IGJpdCA/ICdGJyA6ICctJyk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVjIiwgYyk7
Ci0gICAgICAgIH0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJdXG4iKTsKLQotICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBCaXRG
aWVsZCBiaXQgPSAxdWxsIDw8IGk7Ci0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcGFyZW50
T2Zmc2V0IHwgKHN1YnJlZ2lvblNpemUgKiBpKTsKLSAgICAgICAgICAgIGlmIChtX2hhc1N1YmFs
bG9jYXRpb24gJiBiaXQpCi0gICAgICAgICAgICAgICAgbV9zdWJhbGxvY2F0aW9uc1tpXS5kdW1w
KG9mZnNldCwgaW5kZW50ICsgMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBOZXh0TGV2ZWwgbV9zdWJhbGxvY2F0aW9uc1tlbnRyaWVzXTsKLSAgICAvLyBTdWJy
ZWdpb25zIGV4aXN0IGluIG9uZSBvZiBmb3VyIHN0YXRlczoKLSAgICAvLyAoMSkgZW1wdHkgKGJv
dGggYml0cyBjbGVhcikKLSAgICAvLyAoMikgZnVsbHkgYWxsb2NhdGVkIGFzIGEgc2luZ2xlIGFs
bG9jYXRpb24gKG1fZnVsbCBzZXQpCi0gICAgLy8gKDMpIHBhcnRpYWxseSBhbGxvY2F0ZWQgdGhy
b3VnaCBzdWJhbGxvY2F0aW9ucyAobV9oYXNTdWJhbGxvY2F0aW9uIHNldCkKLSAgICAvLyAoNCkg
ZnVsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKGJvdGggYml0cyBzZXQpCi0g
ICAgQml0RmllbGQgbV9mdWxsOwotICAgIEJpdEZpZWxkIG1faGFzU3ViYWxsb2NhdGlvbjsKLX07
Ci0KLQotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVMZWFmPDY+IFBhZ2VUYWJsZXMyNTZLQjsKLXR5
cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PFBhZ2VUYWJsZXMyNTZLQiwgNj4gUGFnZVRh
YmxlczE2TUI7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxMYXp5QWxsb2NhdGlv
blRhYmxlPFBhZ2VUYWJsZXMxNk1CPiwgMT4gUGFnZVRhYmxlczMyTUI7Ci10eXBlZGVmIEFsbG9j
YXRpb25UYWJsZURpcmVjdG9yeTxMYXp5QWxsb2NhdGlvblRhYmxlPFBhZ2VUYWJsZXMxNk1CPiwg
Nj4gUGFnZVRhYmxlczFHQjsKLQogI2lmIENQVShBUk0pCi10eXBlZGVmIFBhZ2VUYWJsZXMxNk1C
IEZpeGVkVk1Qb29sUGFnZVRhYmxlczsKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6
ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoWDg2XzY0KQotdHlwZWRlZiBQYWdlVGFi
bGVzMUdCIEZpeGVkVk1Qb29sUGFnZVRhYmxlczsKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQ
b29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKICNlbHNlCi10eXBlZGVmIFBhZ2VUYWJsZXMz
Mk1CIEZpeGVkVk1Qb29sUGFnZVRhYmxlczsKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29s
U2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKIAotCi1jbGFzcyBGaXhlZFZNUG9vbEFs
bG9jYXRvcgoteworY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOiBwdWJsaWMg
TWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgRml4ZWRWTVBvb2xBbGxvY2F0b3IoKQorICAg
IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgICAgIDogTWV0YUFsbG9jYXRv
cigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAgewotICAg
ICAgICBBU1NFUlQoUGFnZVRhYmxlczI1NktCOjpzaXplKCkgPT0gMjU2ICogMTAyNCk7Ci0gICAg
ICAgIEFTU0VSVChQYWdlVGFibGVzMTZNQjo6c2l6ZSgpID09IDE2ICogMTAyNCAqIDEwMjQpOwot
ICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczMyTUI6OnNpemUoKSA9PSAzMiAqIDEwMjQgKiAxMDI0
KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMxR0I6OnNpemUoKSA9PSAxMDI0ICogMTAyNCAq
IDEwMjQpOwotCi0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2Vy
dmVXaXRoR3VhcmRQYWdlcyhGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OnNpemUoKSwgT1NBbGxvY2F0
b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAg
ICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFn
ZXMoZml4ZWRQb29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxF
X1BPT0xfV1JJVEFCTEUsIHRydWUpOwogI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAg
IGlmICghaXNWYWxpZCgpKQorICAgICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAgICAgICAg
ICBDUkFTSCgpOwogI2VuZGlmCisgICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7CisgICAgICAg
ICAgICBBU1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0gZml4ZWRQb29sU2l6ZSk7CisgICAg
ICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShtX3Jlc2VydmF0aW9uLmJhc2UoKSwgbV9yZXNlcnZh
dGlvbi5zaXplKCkpOworICAgICAgICB9CiAgICAgfQotIAotICAgIEV4ZWN1dGFibGVQb29sOjpB
bGxvY2F0aW9uIGFsbG9jKHNpemVfdCByZXF1ZXN0ZWRTaXplKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKHJlcXVlc3RlZFNpemUpOwotICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6
ZUNsYXNzID0gY2xhc3NGb3JTaXplKHJlcXVlc3RlZFNpemUpOwotICAgICAgICBzaXplX3Qgc2l6
ZSA9IHNpemVDbGFzcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChzaXplKTsKLQotICAgICAgICBp
ZiAoc2l6ZSA+PSBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OnNpemUoKSkKLSAgICAgICAgICAgIHJl
dHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbigwLCAwKTsKLSAgICAgICAgaWYgKG1fcGFn
ZXMuaXNGdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRp
b24oMCwgMCk7Ci0KLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IG1fcGFnZXMuYWxsb2NhdGUoc2l6
ZUNsYXNzKTsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgIHJl
dHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbigwLCAwKTsKLQotICAgICAgICB2b2lkKiBw
b2ludGVyID0gb2Zmc2V0VG9Qb2ludGVyKG9mZnNldCk7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24u
Y29tbWl0KHBvaW50ZXIsIHNpemUpOwotICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFs
bG9jYXRpb24ocG9pbnRlciwgc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKEV4ZWN1dGFi
bGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jYXRpb24pCisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpCiAgICAgewotICAgICAgICB2b2lk
KiBwb2ludGVyID0gYWxsb2NhdGlvbi5iYXNlKCk7Ci0gICAgICAgIHNpemVfdCBzaXplID0gYWxs
b2NhdGlvbi5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChzaXplKTsKLQotICAgICAgICBtX3Jlc2Vy
dmF0aW9uLmRlY29tbWl0KHBvaW50ZXIsIHNpemUpOwotCi0gICAgICAgIEFsbG9jYXRpb25UYWJs
ZVNpemVDbGFzcyBzaXplQ2xhc3MgPSBjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgIEFTU0VS
VChzaXplQ2xhc3Muc2l6ZSgpID09IHNpemUpOwotICAgICAgICBtX3BhZ2VzLmZyZWUocG9pbnRl
clRvT2Zmc2V0KHBvaW50ZXIpLCBzaXplQ2xhc3MpOworICAgICAgICAvLyBXZSdyZSBvcGVyYXRp
bmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRl
ZC4KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlZCgpCisg
ICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCiAgICAgewot
ICAgICAgICByZXR1cm4gbV9yZXNlcnZhdGlvbi5jb21taXR0ZWQoKTsKKyAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSk7CiAgICAgfQotCi0gICAgYm9vbCBpc1Zh
bGlkKCkgY29uc3QKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lk
KiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsKKyAgICAgICAg
bV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsKICAgICB9CiAKIHByaXZh
dGU6Ci0gICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OmNsYXNzRm9y
U2l6ZShzaXplKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBvZmZzZXRUb1BvaW50ZXIoc2l6ZV90IG9m
ZnNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSkgKyBvZmZzZXQpOwot
ICAgIH0KLQotICAgIHNpemVfdCBwb2ludGVyVG9PZmZzZXQodm9pZCogcG9pbnRlcikKLSAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKLSAgICB9Ci0K
ICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKLSAgICBGaXhlZFZNUG9vbFBhZ2VU
YWJsZXMgbV9wYWdlczsKIH07CiAKK3N0YXRpYyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3IqIGFsbG9jYXRvcjsKIAotc3RhdGljIFNwaW5Mb2NrIHNwaW5sb2NrID0gU1BJTkxPQ0tfSU5J
VElBTElaRVI7Ci1zdGF0aWMgRml4ZWRWTVBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7Ci0K
K3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpCit7CisgICAg
QVNTRVJUKCFhbGxvY2F0b3IpOworICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1
dGFibGVBbGxvY2F0b3IoKTsKK30KIAotc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1p
dHRlZEJ5dGVDb3VudCgpCitFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9y
KEpTR2xvYmFsRGF0YSYpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmc3Bpbmxv
Y2spOwotICAgIHJldHVybiBhbGxvY2F0b3IgPyBhbGxvY2F0b3ItPmFsbG9jYXRlZCgpIDogMDsK
LX0gICAKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKK30KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigm
c3BpbmxvY2spOwotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBhbGxvY2F0b3IgPSBuZXcg
Rml4ZWRWTVBvb2xBbGxvY2F0b3IoKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7
CisgICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7CiB9CiAKIGJvb2wgRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7Ci0gICAgLy8gVGVjaG5p
Y2FsbHkgd2Ugc2hvdWxkIHRha2UgdGhlIHNwaW4gbG9jayBoZXJlLCBidXQgd2UgZG9uJ3QgY2Fy
ZSBpZiB3ZSBnZXQgc3RhbGUgZGF0YS4KLSAgICAvLyBUaGlzIGlzIG9ubHkgcmVhbGx5IGEgaGV1
cmlzdGljIGFueXdheS4KLSAgICByZXR1cm4gYWxsb2NhdG9yICYmIChhbGxvY2F0b3ItPmFsbG9j
YXRlZCgpID4gKEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6c2l6ZSgpIC8gMikpOworICAgIE1ldGFB
bGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdGlzdGljcyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRp
c3RpY3MoKTsKKyAgICByZXR1cm4gc3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCA+IHN0YXRpc3Rp
Y3MuYnl0ZXNSZXNlcnZlZCAvIDI7CiB9CiAKLUV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIEV4
ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSkKK1Bhc3NSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiB7Ci0gICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBBU1NFUlQoYWxsb2NhdG9yKTsKLSAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5hbGxvYyhzaXplKTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAg
aWYgKCFyZXN1bHQpIHsKKyAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0
YSk7CisgICAgICAgIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworc2l6ZV90IEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisgICAgcmV0dXJuIGFsbG9jYXRv
ci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVs
ZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikgCisjaWYgRU5BQkxF
KE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQ
cm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwot
ICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJlZShhbGxvY2F0aW9uKTsK
KyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9CisjZW5kaWYKIAogfQogCiAKLSNlbmRp
ZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FU
T1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5MzI3
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTI4LDcgKzUyOCw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBm
dW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJs
ZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBK
SVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5m
bywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVy
bkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRy
YW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xp
bmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+KiBleGVjdXRhYmxlTWVtb3J5LCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykK
ICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDAp
OwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGV4
ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7CisgICAgICAgICAgICBqaXQu
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZXhlY3V0YWJsZU1lbW9yeSwgZ2xv
YmFsRGF0YSwgdHJhbXBvbGluZXMpOwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvZGVQ
dHIgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgTmF0aXZlRnVuY3Rpb24gZnVuYykK
KyAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBD
b2RlUHRyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVSZWYoKTsKICAgICAgICAgICAg
IEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChleGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgZnVuYyk7Cisg
ICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxE
YXRhLCBmdW5jKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0QnlJ
ZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJl
Kiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsK
QEAgLTI3NCw5ICsyNzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVj
dHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVy
dHlTbG90Jiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVy
ZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCk7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRh
YmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9s
aW5lcyk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMo
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5LCBKU0dsb2Jh
bERhdGEqIGRhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKTsKICAgICAgICAg
TGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXND
b25zdHJ1Y3QgPSBmYWxzZSk7Ci0gICAgICAgIENvZGVQdHIgcHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBKU0dsb2Jh
bERhdGEqIGRhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpOworICAgICAgICBDb2RlUmVmIHByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGRhdGEsIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmMpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nh
c2UoSnVtcCk7CkBAIC0xMDI0LDcgKzEwMjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgog
I2VuZGlmCiAgICAgICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7Ci0gICAgICAgIHN0
YXRpYyBDb2RlUHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYg
c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSk7CiAg
ICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogCiAgICAgaW5saW5lIHZvaWQgSklUOjplbWl0X29w
X2xvb3AoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiA5MzI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01NiwxMiArNTYsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBvcGVyYXRvciAhKCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgICAgIHJldHVybiAhbV9yZWY7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlUHRy
IGFkZHJlc3NGb3JDYWxsKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1f
Y29kZTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCBpbiBieXRlcyBvZiAncG9p
bnRlckludG9Db2RlJyBpbnRvCkBAIC02OSw3ICs2OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyBibG9jayBvZiBjb2RlLiAgSXQgaXMgQVNTRVJUZWQgdGhhdCBubyBjb2RlYmxvY2sg
PjRnYiBpbiBzaXplLgogICAgICAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50
b0NvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBp
bnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0Nv
ZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0gcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKICAgICAgICAgfQpAQCAtNzcsMjQgKzc3
LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBFeGVjdXRlIHRoZSBjb2RlIQogICAg
ICAgICBpbmxpbmUgSlNWYWx1ZSBleGVjdXRlKFJlZ2lzdGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICB7
Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9s
aW5lKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWdpc3RlckZpbGUsIGNhbGxG
cmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRh
KSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjdGlUcmFt
cG9saW5lKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpLCByZWdpc3RlckZpbGUsIGNh
bGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxE
YXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uID8ganNOdWxs
KCkgOiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkKiBzdGFydCgpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2NvZGUuZGF0YUxvY2F0aW9uKCk7CisgICAg
ICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmRhdGFMb2NhdGlvbigpOwogICAgICAgICB9CiAK
ICAgICAgICAgc2l6ZV90IHNpemUoKQogICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQobV9y
ZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwotICAgICAgICAgICAgcmV0dXJuIG1fcmVm
Lm1fc2l6ZTsKKyAgICAgICAgICAgIEFTU0VSVChtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuc2l6ZSgpOwogICAgICAgICB9CiAKLSAg
ICAgICAgRXhlY3V0YWJsZVBvb2wqIGdldEV4ZWN1dGFibGVQb29sKCkKKyAgICAgICAgRXhlY3V0
YWJsZU1lbW9yeUhhbmRsZSogZ2V0RXhlY3V0YWJsZU1lbW9yeSgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX3JlZi5tX2V4ZWN1dGFibGVQb29sLmdldCgpOworICAgICAgICAgICAg
cmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgSklUVHlwZSBqaXRUeXBlKCkKQEAgLTEwNCw5ICsxMDQsOSBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICAvLyBIb3N0IGZ1bmN0aW9ucyBhcmUgYSBiaXQgc3BlY2lhbDsgdGhleSBo
YXZlIGEgbV9jb2RlIHBvaW50ZXIgYnV0IHRoZXkKICAgICAgICAgLy8gZG8gbm90IGluZGl2aWR1
bGx5IHJlZiB0aGUgZXhlY3V0YWJsZSBwb29sIGNvbnRhaW5pbmcgdGhlIHRyYW1wb2xpbmUuCi0g
ICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlvbihDb2RlUHRyIGNvZGUpCisgICAgICAg
IHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlvbihDb2RlUmVmIGNvZGUpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUuZGF0YUxvY2F0aW9uKCksIDAsIDAsIEhvc3RD
YWxsVGh1bmspOworICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZSwgSG9zdENhbGxUaHVu
ayk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNsZWFyKCkKQEAgLTExNiw4ICsxMTYsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgSklU
Q29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9v
bCwgc2l6ZV90IHNpemUsIEpJVFR5cGUgaml0VHlwZSkKLSAgICAgICAgICAgIDogbV9yZWYoY29k
ZSwgZXhlY3V0YWJsZVBvb2wsIHNpemUpCisgICAgICAgIEpJVENvZGUoUGFzc1JlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5LCBKSVRUeXBlIGppdFR5cGUpCisg
ICAgICAgICAgICA6IG1fcmVmKGV4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgICAgICAsIG1faml0
VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHJldmlzaW9uIDkzMjcyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiog
ZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVj
dHVyZSAqdHJhbXBvbGluZXMpCit2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xp
bmVzKQogewogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogICAgIExhYmVsIHNvZnRN
b2RCZWdpbiA9IGFsaWduKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxs
ID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKIAogICAgIC8v
IEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxs
cywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVj
dXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNh
bGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxD
b21waWxlQ2NvbnN0cnVjdCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxl
KSk7CiAKICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwotICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQb29sOworICAg
ICpleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4ZWN1dGFibGVNZW1vcnkoKTsKIAogICAg
IHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2
aXJ0dWFsQ2FsbEJlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9
IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ29uc3RydWN0QmVnaW4pOwpAQCAtMzEy
LDEwICszMTIsOSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAg
ICAgcmV0dXJuIG5hdGl2ZUNhbGxUaHVuazsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFi
bGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCitK
SVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogewogICAgIENhbGwgbmF0aXZlQ2Fs
bDsKLSAgICBMYWJlbCBuYXRpdmVDYWxsVGh1bmsgPSBhbGlnbigpOwogCiAgICAgZW1pdFB1dElt
bWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKTsKIApA
QCAtNDQ3LDEyICs0NDYsMTAgQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdgogICAgIHJldCgpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBj
b3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUg
TWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzLCBleGVjdXRhYmxlUG9vbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVu
Y3Rpb25QdHIoZnVuYykpOwotICAgIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotCi0gICAg
cmV0dXJuIHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDYWxsVGh1bmspOworICAgIHJl
dHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
bW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBv
b2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5l
U3RydWN0dXJlICp0cmFtcG9saW5lcykKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hp
bmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4qIGV4ZWN1dGFibGVN
ZW1vcnksIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJh
bXBvbGluZXMpCiB7CiAgICAgLy8gKDIpIFRoZSBzZWNvbmQgZnVuY3Rpb24gcHJvdmlkZXMgZmFz
dCBwcm9wZXJ0eSBhY2Nlc3MgZm9yIHN0cmluZyBsZW5ndGgKICAgICBMYWJlbCBzdHJpbmdMZW5n
dGhCZWdpbiA9IGFsaWduKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxs
ID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKIAogICAgIC8v
IEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxs
cywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVj
dXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNh
bGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxD
b21waWxlQ29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUp
KTsKIAogICAgIENvZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
Ci0gICAgKmV4ZWN1dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAg
KmV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJsZU1lbW9yeSgpOwogCiAgICAg
dHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVB
dCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25z
dHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1Y3RMaW5r
QmVnaW4pOwpAQCAtMjg5LDkgKzI4OSw5IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGls
ZUNUSU5hdGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwogfQogCi1KSVQ6OkNvZGVQ
dHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxl
UG9vbD4sIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24pCitKSVQ6OkNv
ZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKIHsKLSAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICByZXR1cm4gQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
czMyXzY0LmNwcAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21ldGhvZF9jaGVjayhJbnN0cgogICAgIG1fYnl0
ZWNvZGVPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfaWQpOwogfQogCi1KSVQ6OkNv
ZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgSlNJ
bnRlcmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtMTkzLDggKzE5Myw4
IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92
ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgcG9vbCk7Ci0gICAgcmV0dXJu
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0KTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAg
IGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3Ry
aW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0ciht
X2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxE
YXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOworICAgIGVtaXRO
YWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcikuY29kZSgpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVn
VDApOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKQEAgLTU0MSw3ICs1
NDEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgcmVz
dG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwogICAgIENhbGwgZmFpbHVyZUNh
bGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3Rp
X29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogICAg
IApAQCAtNTUwLDEwICs1NTAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlv
blB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAgIH0KICAgICAK
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOwor
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwog
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRk
cmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwog
fQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNh
Y2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQpAQCAtNjA2LDcgKzYw
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBtb3Zl
KFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1QxKTsKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTYxNywxMyArNjE2LDEyIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNl
dEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZl
IGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7
Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+
c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKICAgICAvLyBG
aW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0
byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJy
YW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVs
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9w
dXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rp
b24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWls
KSk7CkBAIC02NjYsNyArNjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFBy
b3RvKFN0cgogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVj
dXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMpOwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0
aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4K
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwp
OwpAQCAtNjg0LDEzICs2ODIsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFBy
b3RvKFN0cgogICAgIH0KIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBl
bnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1Yklu
Zm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
cGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9n
ZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKQEAgLTcy
Myw3ICs3MjAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAK
ICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBp
ZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRl
cmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0
ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTczMSw3ICs3MjgsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAgIH0KICAgICB9ICAg
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIGlmICghbGFzdFBy
b3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwog
ICAgIApAQCAtNzQwLDE0ICs3MzcsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5k
dW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Km1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVs
LCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29k
ZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC03ODcsNyArNzg0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdAogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAg
ICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29k
ZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZv
ciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBp
dGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRv
KQpAQCAtNzk1LDIxICs3OTIsMjEgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFBy
b3RvTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRp
b24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNh
c2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90
b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUo
KSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAg
ICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUs
IGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CiAKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxG
cmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5
TGFiZWwsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBwcm90b3R5cGVTdHJ1
Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIHBy
b3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAg
ICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJv
dG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg1NCw3ICs4NTEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAg
Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVC
bG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3Ig
KFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRl
ciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykK
QEAgLTg2MiwyMiArODU5LDIyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFp
bkxpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5
cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgbGFzdFByb3RvQmVn
aW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFk
ZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0
aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgY2hhaW4pOworICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgY2hhaW4pOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgog
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgp
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVT
dHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyMSw3ICs5MTgsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNvbXBpbGVHZXRE
aXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAo
bmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0
b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIp
IHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTkzNSwxMyArOTMyLDEzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNl
dEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZl
IGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7
Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBDb2RlUmVmIHN0
dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUg
anVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3Rl
YWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5j
b2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBv
bmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gOTMyNzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNl
IEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotSklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAg
ICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTc3LDggKzc3LDggQEAgSklUOjpDb2RlUHRyIEpJVDo6
c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVn
VDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpn
bG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCkubV9jb2RlOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZq
aXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpA
QCAtMTIxLDcgKzEyMSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3Ry
dWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAv
LyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1
YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdW
UHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25M
YWJlbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KS5jb2RlKCkpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDAp
OwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdUMCk7CiAgICAgZW1pdEp1bXBT
bG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKQEAgLTU0OSw3
ICs1NDksNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAg
cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwogICAgIENhbGwgZmFpbHVy
ZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBh
dGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9w
dXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKIApAQCAtNTU4
LDEwICs1NTgsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlf
b3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAgIH0KICAgICAKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5k
dW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJ
bmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgZW50cnlMYWJlbCk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lk
IEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNl
dCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQpAQCAtNjA5LDcgKzYwOCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBlbWl0RmFzdEFyaXRo
SW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgp
OwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2Nv
ZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93
Q2FzZUNhbGwpOwpAQCAtNjIwLDEzICs2MTksMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkp
OwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2ls
bCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91
dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBD
b2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVt
cEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5j
b2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2Ug
LSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY2Nyw3ICs2NjUsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgfSBlbHNlCiAgICAgICAgIGNv
bXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVXNl
IHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8g
dGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNs
b3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
LXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02ODQsMTMgKzY4MiwxMiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgICAgIH0KICAgICB9
CiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBi
ZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cg
Y2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2Rl
TG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2Rl
KCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBp
biBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlf
b3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKQEAgLTcyMCw3ICs3MTcsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQocmVnVDAsIHJlZ1QwLCBzdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBz
dWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtNzMw
LDcgKzcyNyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAg
ICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1
cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBpZiAoIWxh
c3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
KTsKIApAQCAtNzM5LDE0ICs3MzYsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRj
aCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3Ig
dXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5k
dW0oKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRo
ZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2Up
OwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtNzg1LDcgKzc4Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90b0xpc3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2st
PmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZl
Y3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAh
PSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTc5NSwyMCArNzkyLDIwIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICB9CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZS5jb2RlKCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwg
bGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFz
dFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90
IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0
IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxh
YmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CisgICAgcHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUsIHByb3RvdHlw
ZVN0cnVjdHVyZSk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2Fz
ZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zm
c2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNvZGUoKSkpOwogfQogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1
cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hh
aW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQ
cm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZy
YW1lKQpAQCAtODUxLDcgKzg0OCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRD
aGFpbkxpc3QKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVn
VDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZl
Y3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAh
PSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTg2MSwyMiArODU4LDIyIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICB9CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZS5jb2RlKCkpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWls
LCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRo
ZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRv
IGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwog
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNv
IHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBjaGFpbik7Cisg
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlLCBjaGFpbik7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRv
IHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAg
ICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4u
anVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJl
cGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkp
OwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MTksNyArOTE2LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICBjb21waWxlR2V0RGly
ZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1
Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1Ykxp
bmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC05MzUs
MTMgKzkzMiwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0
aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsK
KyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Cisg
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAKICAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRv
U2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3Jl
IHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1Nyw4ICs3
NTcsOCBAQCBKSVRUaHVua3M6OkpJVFRodW5rcyhKU0dsb2JhbERhdGEqIGdsb2JhCiAgICAgaWYg
KCFnbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgSklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEs
ICZtX2V4ZWN1dGFibGVQb29sLCAmbV90cmFtcG9saW5lU3RydWN0dXJlKTsKLSAgICBBU1NFUlQo
bV9leGVjdXRhYmxlUG9vbCk7CisgICAgSklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KGdsb2JhbERhdGEsICZtX2V4ZWN1dGFibGVNZW1vcnksICZtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUp
OworICAgIEFTU0VSVCghIW1fZXhlY3V0YWJsZU1lbW9yeSk7CiAjaWYgQ1BVKEFSTV9USFVNQjIp
CiAgICAgLy8gVW5mb3J0dW5hdGUgdGhlIGFybSBjb21waWxlciBkb2VzIG5vdCBsaWtlIHRoZSB1
c2Ugb2Ygb2Zmc2V0b2Ygb24gSklUU3RhY2tGcmFtZSAoc2luY2UgaXQgY29udGFpbnMgbm9uIFBP
RCB0eXBlcyksCiAgICAgLy8gYW5kIHRoZSBPQkpFQ1RfT0ZGU0VUT0YgbWFjcm8gZG9lcyBub3Qg
YXBwZWFyIGNvbnN0YW50aXNoIGVub3VnaCBmb3IgaXQgdG8gYmUgaGFwcHkgd2l0aCBpdHMgdXNl
IGluIENPTVBJTEVfQVNTRVJUCkBAIC0xNjAyLDcgKzE2MDIsNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICAgICAgaWYgKHN0dWJJbmZvLT5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICAgICAgQVNTRVJUKCFzdHVi
SW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgQ29kZUxvY2F0aW9uTGFiZWwoKSwg
c3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAg
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNl
bGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgICAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8t
PnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0xNjI4LDEyICsxNjI4LDEyIEBA
IHN0YXRpYyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIGcKICAgICBzd2l0Y2ggKHN0
dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvOgog
ICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHVi
SW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8t
PnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgICAgIHN0dWJJ
bmZvLT5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgICAgICBzdHViSW5m
by0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9jaGFpbjoKICAgICAgICAgcHJv
dG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Z2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0
QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRD
aGFpbi5jaGFpbi5nZXQoKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IENvZGVM
b2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZigpOwogICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3Qo
cHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNj
ZXNzX2dldF9ieV9pZF9wcm90b19saXN0OgpAQCAtMzU3MCwxMSArMzU3MCwxMSBAQCBERUZJTkVf
U1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgdG9fCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvT2JqZWN0KGNhbGxGcmFtZSkpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8Q1RJU3R1Yk1hcDo6aXRlcmF0
b3IsIGJvb2w+IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cigpKTsKKyAgICBzdGQ6OnBhaXI8Q1RJU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+
IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZigpKTsKICAgICBpZiAoZW50cnkuc2Vjb25kKQotICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25k
ID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wuZ2V0KCkpOworICAgICAg
ICBlbnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEpOwogICAgIHJldHVy
biBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCkBAIC0zNTgyLDcgKzM1ODIsNyBAQCBOYXRpdmVF
eGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAgICAgc3RkOjpwYWlyPEhvc3RG
dW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1
Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwogICAgIGlmICgh
KmVudHJ5LmZpcnN0LT5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpn
bG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29t
cGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbCwgZnVuY3Rpb24p
LCBmdW5jdGlvbiwgY3RpTmF0aXZlQ29uc3RydWN0KCksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBO
YXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2
ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxs
SG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOwogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vj
b25kLmdldCgpOwogfQogCkBAIC0zNTkwLDggKzM1OTAsOCBAQCBOYXRpdmVFeGVjdXRhYmxlKiBK
SVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAgICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJN
YXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1
bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwogICAgIGlmICghKmVudHJ5LmZpcnN0
LT5zZWNvbmQpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUgPSBnbG9iYWxE
YXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29s
LmdldCgpKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAgICAgICBlbnRyeS5maXJzdC0+
c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxE
YXRhLCBjb2RlLCBmdW5jdGlvbiwgY3RpTmF0aXZlQ29uc3RydWN0KCksIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yKSk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0g
Z2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xvYmFsRGF0YSkgOiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2Jh
bERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgY29kZSwgZnVuY3Rp
b24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5h
dGl2ZUNvbnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAgICB9
CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5MzI3MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjk0LDcgKzI5NCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpTmF0
aXZlQ29uc3RydWN0KCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aU5hdGl2ZUNv
bnN0cnVjdDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU29mdE1vZHVsbygp
IHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlTb2Z0TW9kdWxvOyB9CiAKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvcik7CiAKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0ds
b2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhv
c3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJh
dG9yKTsKQEAgLTMwMiwxMSArMzAyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGNsZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVk
ZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiBDVElTdHVi
TWFwOworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZj4gQ1RJU3R1Yk1hcDsKICAgICAgICAgQ1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7
CiAgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxOYXRpdmVGdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVj
dXRhYmxlPiA+IEhvc3RGdW5jdGlvblN0dWJNYXA7CiAgICAgICAgIE93blB0cjxIb3N0RnVuY3Rp
b25TdHViTWFwPiBtX2hvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgICAgIFJlZlB0cjxFeGVjdXRh
YmxlUG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIAogICAgICAgICBUcmFtcG9saW5lU3RydWN0
dXJlIG1fdHJhbXBvbGluZVN0cnVjdHVyZTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDkzMjcyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNw
ZWNpYWxpemVkVGh1bmtKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgIHB1YmxpYzoK
ICAgICAgICAgc3RhdGljIGNvbnN0IGludCBUaGlzQXJndW1lbnQgPSAtMTsKLSAgICAgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVChpbnQgZXhwZWN0ZWRBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKKyAgICAgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VChpbnQgZXhwZWN0ZWRBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAg
ICAgICAgOiBtX2V4cGVjdGVkQXJnQ291bnQoZXhwZWN0ZWRBcmdDb3VudCkKICAgICAgICAgICAg
ICwgbV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAsIG1fcG9vbChwb29sKQog
ICAgICAgICB7CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVk
IG51bWJlciBvZiBhcmd1bWVudHMKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5j
aDMyKE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkFy
Z3VtZW50Q291bnQgKiAoaW50KXNpemVvZihSZWdpc3RlcikpLCBUcnVzdGVkSW1tMzIoZXhwZWN0
ZWRBcmdDb3VudCArIDEpKSk7CkBAIC0xMjMsMTMgKzEyMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZmluYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZmFsbGJhY2spCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBm
aW5hbGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBm
YWxsYmFjaykKICAgICAgICAgewotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihn
bG9iYWxEYXRhLCB0aGlzLCBtX3Bvb2wuZ2V0KCkpOworICAgICAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcihnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsobV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgaSsrKQogICAgICAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJzdCwgbV9jYWxsc1tpXS5zZWNv
bmQpOwotICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29k
ZTsKKyAgICAgICAgICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMg
ZnBSZWdpc3RlcjAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CkBAIC0xNjMsNyArMTYyLDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBpbnQgbV9leHBlY3RlZEFyZ0NvdW50Owog
ICAgICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAgICAgICAgUmVmUHRyPEV4ZWN1
dGFibGVQb29sPiBtX3Bvb2w7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2Zh
aWx1cmVzOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENhbGwsIEZ1bmN0aW9uUHRyPiA+IG1f
Y2FsbHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAJKHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywyNiArNjMsMjYg
QEAgc3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1bgogICAgIGppdC5hcHBl
bmRGYWlsdXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7
CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgc3RyaW5n
Q2hhckxvYWQoaml0KTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxl
UG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xv
YmFsRGF0YSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0KTsKICAgICBjaGFyVG9TdHJpbmcoaml0
LCBnbG9iYWxEYXRhLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJu
SlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFs
aXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBv
b2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIC8v
IGxvYWQgY2hhciBjb2RlCiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBjaGFyVG9TdHJpbmcoaml0LCBnbG9iYWxEYXRhLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTkwLDExICs5MCwxMSBAQCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xv
YmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQ
b2ludFNxcnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
IAogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBS
ZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAp
OwpAQCAtMTc4LDEyICsxNzgsMTIgQEAgZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKTsK
IGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKTsKIGRlZmluZVVuYXJ5RG91YmxlT3BX
cmFwcGVyKGNlaWwpOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wp
OworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBl
cihmbG9vcikgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQo
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1
cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5r
KCZqaXQpOwpAQCAtMTk3LDExICsxOTcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29y
VGh1bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0
YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQu
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBq
aXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbklu
dEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CkBAIC0yMjAsMTEgKzIyMCwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0Nv
bnN0YW50CiBzdGF0aWMgY29uc3QgZG91YmxlIG9uZUNvbnN0YW50ID0gMS4wOwogc3RhdGljIGNv
bnN0IGRvdWJsZSBuZWdhdGl2ZUhhbGZDb25zdGFudCA9IC0wLjU7CiAgICAgCi1NYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3Vu
ZCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRK
dW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKQEAgLTIzOSwzNyArMjM5LDM3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBy
b3VuZFRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhl
Y3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdy
YXBwZXIoZXhwKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9v
bCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERv
dWJsZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGppdC5yZXR1cm5E
b3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5h
bGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBp
ZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKSk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7
CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cp
KTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwog
ICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkK
K01hY3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwg
cG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAg
aWYgKCFqaXQuc3VwcG9ydHNEb3VibGVCaXRvcHMoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJzaGlmdDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDEpOwpAQCAtMjg2LDExICsyODYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFi
c1RodW5rR2VuZXJhdG9yKAogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQoMiwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMiwg
Z2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAg
ICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYo
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAKICAgICBqaXQubG9hZERv
dWJsZSgmb25lQ29uc3RhbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGpp
dC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiA5MzI3MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICsz
MSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKICAgICBj
bGFzcyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKLSAgICBjbGFz
cyBNYWNyb0Fzc2VtYmxlckNvZGVQdHI7CisgICAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OwogCi0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgKCpUaHVua0dlbmVyYXRvciko
SlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29s
Kik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZy
b21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNlaWxUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwg
RXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29s
Kik7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvciko
SlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hh
ckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTMyNzIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3Miw3ICsxNzIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBFeGVj
dXRhYmxlQmFzZSBCYXNlOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgc3RhdGljIE5hdGl2
ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQor
ICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24g
ZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVu
Y3Rpb24gY29uc3RydWN0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5r
KQogICAgICAgICAgICAgICAgIHJldHVybiBuZXcgKGFsbG9jYXRlQ2VsbDxOYXRpdmVFeGVjdXRh
YmxlPihnbG9iYWxEYXRhLmhlYXApKSBOYXRpdmVFeGVjdXRhYmxlKGdsb2JhbERhdGEsIEpJVENv
ZGUoKSwgZnVuY3Rpb24sIEpJVENvZGUoKSwgY29uc3RydWN0b3IpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJ
KHJldmlzaW9uIDkzMjcyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lu
Y2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJkdG9hLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKQEAgLTQ5LDYgKzUwLDcgQEAgc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogewogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOwogICAgIEpTR2xvYmFsRGF0YTo6c3RvcmVWUHRycygpOworICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKTsKICNpZiBFTkFCTEUoSlNDX01VTFRJUExF
X1RIUkVBRFMpCiAgICAgUmVnaXN0ZXJGaWxlOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcAkocmV2aXNpb24gOTMyNzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODUsNyArMTg1LDYgQEAgSlNHbG9i
YWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgZW1wdHlMaXN0KG5ldyBN
YXJrZWRBcmd1bWVudEJ1ZmZlcikKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICwgZXhlY3V0
YWJsZUFsbG9jYXRvcigqdGhpcykKLSAgICAsIHJlZ2V4QWxsb2NhdG9yKCp0aGlzKQogI2VuZGlm
CiAgICAgLCBsZXhlcihuZXcgTGV4ZXIodGhpcykpCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikK
QEAgLTQzNiw2ICs0MzUsOSBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkKIHZv
aWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAg
aW50ZXJwcmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJMRVIp
CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgogfQogCiB2
b2lkIEpTR2xvYmFsRGF0YTo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkzMjcy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAj
aWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRh
YmxlQWxsb2NhdG9yOwotICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIHJlZ2V4QWxsb2NhdG9y
OwogI2VuZGlmCiAKICNpZiAhRU5BQkxFKEpJVCkKQEAgLTIxNSw3ICsyMTQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJMRShK
SVQpCiAgICAgICAgIE93blB0cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVy
YXRvcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRo
aXMsIGdlbmVyYXRvcik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy91bml0L3VuaXR0ZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy91bml0L3VuaXR0ZXN0cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3Rm
L01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCisvLyBUZXN0IHN1cHBv
cnQKKworI2RlZmluZSBSVU5fU1VJVEUoZXhwcmVzc2lvbikgZG8geyAgICAgICAgICAgICAgXAor
ICAgICAgICBwcmludGYoIiVzOlxuIiwgI2V4cHJlc3Npb24pOyAgICAgICAgICAgXAorICAgICAg
ICAoZXhwcmVzc2lvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUo
MCkKKworI2RlZmluZSBSVU5fVEVTVChleHByZXNzaW9uKSBkbyB7ICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBwcmludGYoIiAgICVzOiAiLCAjZXhwcmVzc2lvbik7ICAgICAgICAgICAgXAor
ICAgICAgICBmZmx1c2goc3Rkb3V0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAoZXhwcmVzc2lvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBwcmludGYoIk9LXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUoMCkKKworI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNzaW9uKSBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIShleHByZXNzaW9uKSkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
cHJpbnRmKCJGQUlMOiAlczolczolZDogYXNzZXJ0aW9uICVzIGZhaWxlZCFcbiIsIF9fRklMRV9f
LCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjZXhwcmVzc2lvbik7IFwKKyAgICAgICAgICAgIENS
QVNIKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCitzdGF0aWMgdm9pZCBwcmlu
dFZhbHVlKGJvb2wgdmFsdWUpIHsKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHByaW50ZigidHJ1
ZSIpOworICAgIGVsc2UKKyAgICAgICAgcHJpbnRmKCJmYWxzZSIpOworfQorCitzdGF0aWMgdm9p
ZCBwcmludFZhbHVlKGludCB2YWx1ZSkgeworICAgIHByaW50ZigiJWQiLCB2YWx1ZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHByaW50VmFsdWUoc2l6ZV90IHZhbHVlKSB7CisgICAgcHJpbnRmKCIweCVs
eCIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRWYWx1ZSh2b2lkKiB2YWx1ZSkgewor
ICAgIHByaW50ZigiJXAiLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0
aWMgdm9pZCBhc3NlcnRFcXVhbEltcGwoY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGFjdHVhbFN0cmluZywg
VCBhY3R1YWwsIFQgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgewor
ICAgICAgICBwcmludGYoIkZBSUw6ICVzOiVzOiVkOiBleHBlY3RlZCAlcyB0byBiZSAiLCBmaWxl
TmFtZSwgZnVuY3Rpb25OYW1lLCBsaW5lTnVtYmVyLCBhY3R1YWxTdHJpbmcpOworICAgICAgICBw
cmludFZhbHVlKGV4cGVjdGVkKTsKKyAgICAgICAgcHJpbnRmKCIgYnV0IHdhcyAiKTsKKyAgICAg
ICAgcHJpbnRWYWx1ZShhY3R1YWwpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgYXNz
ZXJ0RXF1YWxJbXBsKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBhY3R1YWxTdHJpbmcsIFQgYWN0dWFsLCBp
bnQgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPSAoVClleHBlY3RlZCkgeworICAgICAg
ICBwcmludGYoIkZBSUw6ICVzOiVzOiVkOiBleHBlY3RlZCAlcyB0byBiZSAiLCBmaWxlTmFtZSwg
ZnVuY3Rpb25OYW1lLCBsaW5lTnVtYmVyLCBhY3R1YWxTdHJpbmcpOworICAgICAgICBwcmludFZh
bHVlKGV4cGVjdGVkKTsKKyAgICAgICAgcHJpbnRmKCIgYnV0IHdhcyAiKTsKKyAgICAgICAgcHJp
bnRWYWx1ZShhY3R1YWwpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIENSQVNIKCk7
CisgICAgfQorfQorCisjZGVmaW5lIFRFU1RfQVNTRVJUX0VRVUFMKGFjdHVhbCwgZXhwZWN0ZWQp
IGFzc2VydEVxdWFsSW1wbChfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgI2FjdHVh
bCwgYWN0dWFsLCBleHBlY3RlZCkKKworLy8gVGVzdHMgZm9yIFJlZEJsYWNrVHJlZQorCitjbGFz
cyBSZWRCbGFja1RyZWVUZXN0cyB7Citwcml2YXRlOgorICAgIFJlZEJsYWNrVHJlZVRlc3RzKCkg
eyB9CisgICAgCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJp
dmVyKCIqeEB5IXoiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithIikpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYSp4QHkheiIpKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdERyaXZlcigiK2EqYUBhIWEiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIith
K2IiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYyIpKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdERyaXZlcigiK2ErYitjK2QiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RE
cml2ZXIoIithK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCIpKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6IikpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrZStmK2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oqYSpiKmMq
ZCplKmYqZypoKmkqaiprKmwqbSpuKm8qcCpxKnIqcyp0KnUqdip3KngqeSp6IWEhYiFjIWQhZSFm
IWchaCFpIWohayFsIW0hbiFvIXAhcSFyIXMhdCF1IXYhdyF4IXkheiIpKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdERyaXZlcigiK2QrZCttK3dAZEBtQHdAYUBnQHEiKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3REcml2ZXIoIitkK2QrZCtkK2QrZCtkK2QrZCtkK2YrZitmK2YrZitmK2YraCtoK2kr
aitrK2wrbStvK3ArcStyK3pAYUBiQGNAZEBlQGZAZ0BoQGlAakBrQGxAbUBuQG9AcEBxQHJAc0B0
QHVAdkB3QHhAeUB6IikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQg
Y291bnRlcjsKKyAgICAKKyAgICBzdHJ1Y3QgUGFpciB7CisgICAgICAgIGNoYXIga2V5OworICAg
ICAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFBhaXIoKSB7IH0KKyAgICAg
ICAgCisgICAgICAgIFBhaXIoY2hhciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICAgICAg
OiBrZXkoa2V5KQorICAgICAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFpciYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrZXkgPT0gb3RoZXIua2V5Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQYWlyJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleSA8IG90aGVyLmtl
eTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBWZWN0b3I8UGFpciwgMTY+
IFBhaXJWZWN0b3I7CisgICAgCisgICAgc3RhdGljIFBhaXJWZWN0b3IgZmluZEV4YWN0KFBhaXJW
ZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIFBhaXJWZWN0b3IgcmVz
dWx0OworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGFz
VmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGlu
ZGV4KS5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXNWZWN0b3Iu
YXQoaW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KHJlc3Vs
dC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlKFBhaXJWZWN0b3ImIGFzVmVj
dG9yLCBzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBhc1ZlY3Rvci5hdChpbmRleCkgPSBh
c1ZlY3Rvci5sYXN0KCk7CisgICAgICAgIGFzVmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIFBhaXJWZWN0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKFBh
aXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIGNoYXIgYmVzdEtl
eSA9IDA7IC8vIGFzc2lnbm1lbnQgdG8gbWFrZSBnY2MgaGFwcHkKKyAgICAgICAgYm9vbCBmb3Vu
ZEtleSA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBp
bmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVj
dG9yLmF0KGluZGV4KS5rZXkgPj0ga2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9y
LmF0KGluZGV4KS5rZXkgPCBiZXN0S2V5IHx8ICFmb3VuZEtleSkgeworICAgICAgICAgICAgICAg
ICAgICBmb3VuZEtleSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJlc3RLZXkgPSBhc1Zl
Y3Rvci5hdChpbmRleCkua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAor
ICAgICAgICBpZiAoIWZvdW5kS2V5KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiBmaW5kRXhhY3QoYXNWZWN0b3IsIGJlc3RLZXkpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRGb3VuZEFuZFJlbW92ZShQYWlyVmVjdG9yJiBh
c1ZlY3RvciwgY2hhciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gMDsgLy8g
bWFrZSBjb21waWxlcnMgaGFwcHkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID09IGtleQorICAgICAgICAgICAg
ICAgICAgICAmJiBhc1ZlY3Rvci5hdChpbmRleCkudmFsdWUgPT0gdmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgVEVTVF9BU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm91
bmRJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVEVTVF9BU1NFUlQoZm91bmQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZW1vdmUoYXNWZWN0b3IsIGZvdW5kSW5kZXgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIGRlbGliZXJhdGVseSBwYXNzZXMgYSBjb3B5IG9mIHRoZSB2ZWN0b3IuCisgICAg
c3RhdGljIHZvaWQgYXNzZXJ0RXF1YWwoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNU
cmVlLCBQYWlyVmVjdG9yIGFzVmVjdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChSZWRCbGFja1Ry
ZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBjdXJyZW50ID0gYXNUcmVlLmZpcnN0KCk7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBhc1RyZWUuc3VjY2Vzc29yKGN1cnJlbnQpKQorICAgICAgICAgICAgYXNz
ZXJ0Rm91bmRBbmRSZW1vdmUoYXNWZWN0b3IsIGN1cnJlbnQtPmtleSwgY3VycmVudC0+dmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KFJl
ZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4mIGFzVHJlZSwgUmVkQmxhY2tUcmVlPGNoYXIsIHVu
c2lnbmVkPjo6Tm9kZSogbm9kZSwgUGFpclZlY3RvciBmb3VuZFZhbHVlcywgY2hhciBrZXkpCisg
ICAgeworICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
bm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWRCbGFja1RyZWU8
Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBwcmV2Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBkbyB7
CisgICAgICAgICAgICAgICAgbm9kZSA9IHByZXZOb2RlOworICAgICAgICAgICAgICAgIHByZXZO
b2RlID0gYXNUcmVlLnByZWRlY2Vzc29yKHByZXZOb2RlKTsKKyAgICAgICAgICAgIH0gd2hpbGUg
KHByZXZOb2RlICYmIHByZXZOb2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAgVEVT
VF9BU1NFUlQoIXByZXZOb2RlIHx8IHByZXZOb2RlLT5rZXkgPCBrZXkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUo
Zm91bmRWYWx1ZXMsIG5vZGUtPmtleSwgbm9kZS0+dmFsdWUpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG5vZGUgPSBhc1RyZWUuc3VjY2Vzc29yKG5vZGUpOworICAgICAgICAg
ICAgICAgIFRFU1RfQVNTRVJUKCFub2RlIHx8IG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAg
ICAgfSB3aGlsZSAobm9kZSAmJiBub2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgVEVTVF9BU1NFUlQoZm91bmRWYWx1ZXMuaXNFbXB0eSgpKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVGhlIGNvbnRyb2wgc3RyaW5nIGlzIGEgbnVsbC10ZXJtaW5hdGVkIGxpc3Qg
b2YgY29tbWFuZHMuICBFYWNoCisgICAgLy8gY29tbWFuZCBpcyB0d28gY2hhcmFjdGVycywgd2l0
aCB0aGUgZmlyc3QgaWRlbnRpZnlpbmcgdGhlIG9wZXJhdGlvbgorICAgIC8vIGFuZCB0aGUgc2Vj
b25kIGdpdmluZyBhIGtleS4gIFRoZSBjb21tYW5kcyBhcmU6CisgICAgLy8gICt4ICBBZGQgeAor
ICAgIC8vICAqeCAgRmluZCBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAorICAgIC8vICBAeCAgRmlu
ZCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBzbWFsbGVzdCBrZXkgdGhhdCBpcyBncmVhdGVy
IHRoYW4gb3IgZXF1YWwgdG8geAorICAgIC8vICAheCAgUmVtb3ZlIGFsbCBlbGVtZW50cyBlcXVh
bCB0byB4CisgICAgc3RhdGljIHZvaWQgdGVzdERyaXZlcihjb25zdCBjaGFyKiBjb250cm9sU3Ry
aW5nKQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciBhc1ZlY3RvcjsKKyAgICAgICAgUmVkQmxh
Y2tUcmVlPGNoYXIsIHVuc2lnbmVkPiBhc1RyZWU7CisgICAgICAgIAorICAgICAgICBmb3IgKGNv
bnN0IGNoYXIqIGN1cnJlbnQgPSBjb250cm9sU3RyaW5nOyAqY3VycmVudDsgY3VycmVudCArPSAy
KSB7CisgICAgICAgICAgICBjaGFyIGNvbW1hbmQgPSBjdXJyZW50WzBdOworICAgICAgICAgICAg
Y2hhciBrZXkgPSBjdXJyZW50WzFdOworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSArK2Nv
dW50ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChjb21tYW5kKTsKKyAgICAg
ICAgICAgIEFTU0VSVChrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGNv
bW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2UgJysnOiB7CisgICAgICAgICAgICAgICAgUmVkQmxh
Y2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IG5ldyBSZWRCbGFja1RyZWU8Y2hh
ciwgdW5zaWduZWQ+OjpOb2RlOworICAgICAgICAgICAgICAgIG5vZGUtPmtleSA9IGtleTsKKyAg
ICAgICAgICAgICAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGFzVHJl
ZS5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICAgICAgYXNWZWN0b3IuYXBwZW5kKFBhaXIoa2V5
LCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAnKic6IHsKKyAgICAgICAgICAgICAgICBSZWRC
bGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRFeGFjdChr
ZXkpOworICAgICAgICAgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0U2Ft
ZVZhbHVlc0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KSwga2V5
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Y2FzZSAnQCc6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+
OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChrZXkpOwor
ICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNT
RVJUKG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRTYW1lVmFs
dWVzRm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVj
dG9yLCBrZXkpLCBub2RlLT5rZXkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgICAgICAgICBURVNUX0FTU0VSVChmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoYXNWZWN0
b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyEnOiB7CisgICAgICAgICAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNo
YXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5yZW1vdmUoa2V5KTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dEZvdW5kQW5kUmVtb3ZlKGFzVmVjdG9yLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNT
RVJUKGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgYXNUcmVlLmNoZWNrQ29uc2lzdGVuY3koKTsK
KyNlbmRpZgorICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYXNUcmVlLnNpemUoKSwgYXNW
ZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFsKGFzVHJlZSwgYXNWZWN0b3Ip
OworICAgICAgICB9CisgICAgfQorfTsKKwordW5zaWduZWQgUmVkQmxhY2tUcmVlVGVzdHM6OmNv
dW50ZXI7CisKKy8vIFRlc3RzIGZvciBNZXRhQWxsb2NhdG9yCisKK2NsYXNzIE1ldGFBbGxvY2F0
b3JUZXN0cyB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JUZXN0cygpIHsgfQorCitwdWJs
aWM6CisgICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdE5vdGhpbmcoKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RBbGxvY1plcm8oKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RPbmVBbGxvYygzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0T25l
QWxsb2MoNjQpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdE9uZUFsbG9jKHBhZ2VTaXplKCkqMikp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMCkpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgMCkpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDY0LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJl
cGVhdEFsbG9jRnJlZSgzMiwgNjQsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBl
YXRBbGxvY0ZyZWUoNjQsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0
QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
UmVwZWF0QWxsb2NGcmVlKDMyLCBwYWdlU2l6ZSgpICogMiwgMCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCAzMiwgMCkpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgKiAyLCAw
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUocGFnZVNpemUoKSAqIDIs
IHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNj
ZSgzMiwgMzIsIDEyOCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENvYWxlc2Nl
KDMyLCA2NCwgMTI4KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2Uo
NjQsIDMyLCAxMjgpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgz
MiwgcGFnZVNpemUoKSAtIDMyLCBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RT
aW1wbGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFnZVNpemUoKSAqIDIpKTsK
KyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShwYWdlU2l6ZSgpLCAzMiwg
cGFnZVNpemUoKSAqIDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNj
ZShwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpICogMikpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJV
Tl9URVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAzMiwgMCkpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgcGFnZVNpemUoKSAtIDMyLCAz
MiwgcGFnZVNpemUoKSAtIDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0Fs
bG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZPQWxs
b2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZP
QWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgcGFnZVNpemUoKSAtIDMyLCAzMiwgcGFnZVNpemUoKSAt
IDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RmlsbEhlYXAoMzIsIGRlZmF1bHRQ
YWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0Rmls
bEhlYXAocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwKSk7CisgICAgICAgIFJVTl9URVNU
KHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgpICogMiwgZGVmYXVsdFBhZ2VzSW5IZWFwIC8gMikpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0UmlnaHRBbGxvY2F0aW9uKDMyLCBwYWdlU2l6ZSgpLCAzMiwg
cGFnZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmlnaHRBbGxvY2F0aW9uKHBhZ2VT
aXplKCkgLyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSkpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKSk7Cisg
ICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVj
aykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDEwMCwgRG9udFJ1blNh
bml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwgMywgUnVu
U2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDY0LCAxMCwg
RG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2
NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RG
aXQoOTYsIDk2LCAzLCBSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVz
dEZpdCg5NiwgOTYsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdEJlc3RGaXQoOTYsIDk2LCA4MCwgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJV
Tl9URVNUKHRlc3RTaHJpbmsoNjQsIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmso
cGFnZVNpemUoKSwgMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgp
LCBwYWdlU2l6ZSgpIC0gMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6
ZSgpICogMiwgMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgpICog
MiwgcGFnZVNpemUoKSArIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNp
emUoKSAqIDIsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdl
U2l6ZSgpICogMiwgcGFnZVNpemUoKSAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJp
bmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKiAyIC0gMzIpKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFw
LCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3REZW1hbmRBbGxvY0NvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCoyLCBk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RE
ZW1hbmRBbGxvY0RvbnRDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAqMiwg
ZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgZW51bSBTYW5pdHlDaGVja01vZGUgeyBSdW5TYW5pdHlDaGVjaywgRG9udFJ1blNhbml0
eUNoZWNrIH07CisgICAgCisgICAgZW51bSBIZWFwR3Jvd3RoTW9kZSB7IERvbnRHcm93SGVhcCwg
Rm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2UsIEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNj
ZSB9OworICAgIAorICAgIHN0YXRpYyBIZWFwR3Jvd3RoTW9kZSBjdXJyZW50SGVhcEdyb3d0aE1v
ZGU7CisgICAgc3RhdGljIHNpemVfdCBhbGxvd0FsbG9jYXRlUGFnZXM7CisgICAgc3RhdGljIHNp
emVfdCByZXF1ZXN0ZWROdW1QYWdlczsKKworICAgIGNsYXNzIFNpbXBsZVRlc3RBbGxvY2F0b3I6
IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNpbXBsZVRlc3RB
bGxvY2F0b3IoKQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKQorICAgICAgICB7Cisg
ICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNl
UGFnZSAqIHBhZ2VTaXplKCkpLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB+U2ltcGxlVGVzdEFsbG9jYXRvcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3JEZXN0cm95ZWQp
OworICAgICAgICAgICAgYWxsb2NhdG9yRGVzdHJveWVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVt
UGFnZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudEhlYXBHcm93dGhN
b2RlKSB7CisgICAgICAgICAgICBjYXNlIERvbnRHcm93SGVhcDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRm9yVGVzdERlbWFu
ZEFsbG9jQ29hbGVzY2U6CisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0RvbnRD
b2FsZXNjZTogeworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKGFsbG93QWxsb2NhdGVQYWdl
cyk7CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoYWxsb3dBbGxvY2F0ZVBhZ2VzID49IG51
bVBhZ2VzKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IG51bVBhZ2VzOwor
ICAgICAgICAgICAgICAgIG51bVBhZ2VzID0gYWxsb3dBbGxvY2F0ZVBhZ2VzOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAgICAgICAg
ICBpZiAoY3VycmVudEhlYXBHcm93dGhNb2RlID09IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2Nl
KQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBh
Z2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyBvZmZzZXQpICogcGFnZVNpemUoKSk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gMDsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnRlciA9IDA7IGNvdW50
ZXIgPCBudW1QYWdlcyArIG9mZnNldDsgKytjb3VudGVyKSB7CisgICAgICAgICAgICAgICAgICAg
IHBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgYnl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRlciA8IHBhZ2VTaXplKCk7ICsrYnl0ZUNvdW50
ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZGl0
aW9uYWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmly
dHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBib3RoIGZyZWUgYW5kIHVubWFwcGVkLgorICAgICAg
ICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YWRkcmVzcykpKTsKKyAgICAgICAgICAgIHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlIG9mIG9iamVjdHMgYXQg
dGhpcyBwb2ludCwgYnV0IGl0IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgLy8gYmUgbWFwcGVk
LgorICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90
IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJlc3MgPCBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyArK2FkZHJlc3Mp
CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIWJ5dGVTdGF0ZShyZWludGVycHJldF9jYXN0
PHZvaWQqPihhZGRyZXNzKSkpOworICAgICAgICAgICAgcGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJhc2VQYWdlID0gMTsKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFBhZ2VzSW5IZWFwID0gMTAwOworICAgIAorICAgIHN0
YXRpYyB1bnNpZ25lZCBhZGRpdGlvbmFsUGFnZXNJbkhlYXA7CisgICAgCisgICAgc3RhdGljIFZl
Y3Rvcjxib29sLCAwPiogbWVtb3J5TWFwOworICAgIHN0YXRpYyBWZWN0b3I8Ym9vbCwgMD4qIHBh
Z2VNYXA7CisgICAgc3RhdGljIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOworICAgIAorICAgIHN0
YXRpYyBTaW1wbGVUZXN0QWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgCisgICAgc3RhdGljIHZv
aWQgdGVzdE5vdGhpbmcoKQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgdGhhdCBjcmVhdGluZyBh
bmQgZGVzdHJveWluZyBhbiBhbGxvY2F0b3Igd29ya3MuCisgICAgICAgIAorICAgICAgICBzZXRV
cCgpOworICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0
ZXN0QWxsb2NaZXJvKCkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoYXQgYWxsb2NhdGluZyBh
IHplcm8tbGVuZ3RoIGJsb2NrIHJldHVybnMgTlVMTCBhbmQKKyAgICAgICAgLy8gZG9lcyBub3Qg
Y2hhbmdlIGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworCisgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5I
ZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAg
ICAgICAgZnJlZShmaW5hbCk7CisKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAg
Ly8gVGVzdHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6IGFsbG9jYXRlIG9uZSB0aGluZyBhbmQg
ZnJlZSBpdC4gIEFsc28KKyAgICAgICAgLy8gdmVyaWZpZXMgdGhhdCB0aGUgc3RhdGUgb2YgcGFn
ZXMgaXMgY29ycmVjdC4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplKTsKKyAgICAg
ICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
aGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0
YXRlKGJhc2VQYWdlKSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAg
ICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVl
KGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB0ZXN0UmVwZWF0QWxsb2NGcmVlKHNpemVfdCBmaXJzdFNpemUsIC4uLikK
KyAgICB7CisgICAgICAgIC8vIFRlc3RzIHJpZ2h0LWNvYWxlc2NpbmcgYnkgcmVwZWF0ZWRseSBh
bGxvY2F0aW5nIGFuZCBmcmVlaW5nLiAgVGhlIGlkZWEKKyAgICAgICAgLy8gaXMgdGhhdCBpZiB5
b3UgYWxsb2NhdGUgc29tZXRoaW5nIGFuZCB0aGVuIGZyZWUgaXQsIHRoZW4gdGhlIGhlYXAgc2hv
dWxkCisgICAgICAgIC8vIGxvb2sgaWRlbnRpY2FsIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUg
YWxsb2NhdGlvbiBkdWUgdG8gYSByaWdodC1jb2FsZXNjZQorICAgICAgICAvLyBvZiB0aGUgZnJl
ZWQgY2h1bmsgYW5kIHRoZSBhbHJlYWR5LWZyZWUgbWVtb3J5LCBhbmQgc28gc3Vic2VxdWVudAor
ICAgICAgICAvLyBhbGxvY2F0aW9ucyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIHRoZSBmaXJz
dCBvbmUuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFu
ZGxlLT5zaXplSW5CeXRlcygpLCBmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmly
bShoYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBhcmdM
aXN0OworICAgICAgICB2YV9zdGFydChhcmdMaXN0LCBmaXJzdFNpemUpOworICAgICAgICB3aGls
ZSAoc2l6ZV90IHNpemVJbkJ5dGVzID0gdmFfYXJnKGFyZ0xpc3QsIHNpemVfdCkpIHsKKyAgICAg
ICAgICAgIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFz
ZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5k
bGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uZmlybShoYW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFu
ZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICB9
CisgICAgICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2Uoc2l6
ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUsIHNpemVfdCB0aGlyZFNpemUpIHsKKyAg
ICAgICAgLy8gQWxsb2NhdGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0U2l6ZSwgdGhlbiBzb21l
dGhpbmcgb2Ygc2l6ZSBzZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAgICAvLyBmcmVlcyB0aGUg
Zmlyc3QgYWxsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5kIHRoZW4gYXR0ZW1wdHMg
dG8gYWxsb2NhdGUgdGhlCisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRpbmcgdGhhdCBpdCBhbGxv
Y2F0ZWQgYXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAgICAgICAgCisgICAgICAg
IC8vIE5vdGUgdGhhdCB0aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFsbG9jYXRpb24sIHdoaWNo
IHdpbGwgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8gVGh1cyB0aGUgY29ycmVj
dCB3YXkgb2YgcnVubmluZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgc2Vjb25kU2l6ZSBp
cworICAgICAgICAvLyBwaWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IG5ldmVyIHN0cmFkZGxl
cyBhIHBhZ2UuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAg
TWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwor
ICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGZpcnN0SGFuZGxlLT5zaXplSW5CeXRlcygpLCBmaXJzdFNpemUpOworICAgICAg
ICAKKyAgICAgICAgY29uZmlybShmaXJzdEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0
ZXJtYXJrKGZpcnN0SGFuZGxlKTsKKworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNv
bmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkgKyBmaXJzdFNpemUpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
c2Vjb25kSGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAg
ICAgIGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7
CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAor
ICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oc2Vj
b25kSGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFuZGxlKTsK
KyAgICAgICAgCisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJ
bkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9j
YXRvckhhbmRsZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOworICAgICAgICBU
RVNUX0FTU0VSVF9FUVVBTCh0aGlyZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFM
KHRoaXJkSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0aGlyZFNpemUpOworICAgICAgICAKKyAgICAg
ICAgY29uZmlybSh0aGlyZEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHRo
aXJkSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUodGhpcmRIYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgZW51bSBUZXN0RklGT0Fs
bG9jTW9kZSB7IEZpbGxBdEVuZCwgRWFnZXJGaWxsIH07CisgICAgc3RhdGljIHZvaWQgdGVzdEZJ
Rk9BbGxvYyhUZXN0RklGT0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAgeworICAgICAgICAvLyBU
aGlzIHdpbGwgdGVzdCB0aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVzY2UgKGZyZWVpbmcgdGhl
IGxlZnQtbW9zdAorICAgICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hlbiB0aGUgY2h1bmsgdG8g
dGhlIHJpZ2h0IG9mIGl0IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAgIC8vIGZ1bGx5IGV4ZXJj
aXNlIGxlZnQtY29hbGVzY2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiAgSW4gRWFnZXJGaWxsCisg
ICAgICAgIC8vIG1vZGUsIHRoaXMgYWxzbyB0ZXN0cyBwZXJmZWN0LWZpdCBhbGxvY2F0aW9uIGFu
ZCBuby1jb2FsZXNjaW5nIGZyZWUuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworCisgICAg
ICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFB
bGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBh
cmdMaXN0OworICAgICAgICB2YV9zdGFydChhcmdMaXN0LCBtb2RlKTsKKyAgICAgICAgd2hpbGUg
KHNpemVfdCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBzaXplX3QpKSB7CisgICAgICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7
CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSkpOworICAg
ICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5C
eXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAg
ICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGhhbmRsZXMuYXBwZW5kKGhhbmRsZSk7CisgICAgICAgICAgICB0b3RhbFNpemUgKz0g
c2l6ZUluQnl0ZXM7CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5kKGFyZ0xpc3QpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlcy5zaXpl
KCk7ICsraW5kZXgpCisgICAgICAgICAgICBjb25maXJtKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAg
ICAgICAgCisgICAgICAgIHNpemVfdCBzaXplU29GYXIgPSAwOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgc2l6ZVNvRmFyICs9IGhhbmRsZXMuYXQoaW5kZXgpLT5zaXplSW5CeXRlcygpOworICAg
ICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgICAgICBpZiAobW9kZSA9
PSBFYWdlckZpbGwpIHsKKyAgICAgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5k
bGUgPSBhbGxvY2F0ZShzaXplU29GYXIpOworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VR
VUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBw
YWdlU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5z
aXplSW5CeXRlcygpLCBzaXplU29GYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkg
KyB0b3RhbFNpemUsIHRydWUpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXMu
c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFu
ZGxlcy5sYXN0KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
Y29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQYWdlICogcGFnZVNpemUoKSArIHNp
emVTb0ZhciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBBU1NFUlQoc2l6ZVNvRmFyID09IHRvdGFsU2l6ZSk7CisgICAgICAgIAorICAgICAgICBj
b25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5I
ZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtb2RlID09
IEZpbGxBdEVuZCkgeworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWxIYW5k
bGUgPSBhbGxvY2F0ZSh0b3RhbFNpemUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
ZmluYWxIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICog
cGFnZVNpemUoKSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUt
PnNpemVJbkJ5dGVzKCksIHRvdGFsU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNv
bmZpcm0oZmluYWxIYW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmlu
YWxIYW5kbGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgdGVzdEZpbGxIZWFwKHNpemVfdCBzaXplSW5CeXRlcywgc2l6ZV90IG51
bUFsbG9jYXRpb25zKQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRl
eCkKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250
UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAg
ICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRl
cykpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51
bUFsbG9jYXRpb25zOyArK2luZGV4KQorICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4
KSwgRG9udFJ1blNhbml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7
CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCB0ZXN0UmlnaHRBbGxvY2F0aW9uKHNpemVfdCBmaXJzdExlZnRTaXplLCBzaXplX3QgZmly
c3RSaWdodFNpemUsIHNpemVfdCBzZWNvbmRMZWZ0U2l6ZSwgc2l6ZV90IHNlY29uZFJpZ2h0U2l6
ZSkKKyAgICB7CisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBmaXJzdExlZnQgPSBhbGxvY2F0ZShmaXJzdExlZnRTaXplKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoZmlyc3RMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGZpcnN0UmlnaHQgPSBhbGxvY2F0ZShmaXJzdFJpZ2h0U2l6ZSk7CisgICAg
ICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpcnN0UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kTGVmdCA9IGFsbG9j
YXRlKHNlY29uZExlZnRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kTGVm
dC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
ICsgZmlyc3RMZWZ0LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBzZWNvbmRSaWdodCA9IGFsbG9jYXRlKHNlY29uZFJpZ2h0U2l6ZSk7Cisg
ICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZFJpZ2h0LT5lbmQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkg
LSBmaXJzdFJpZ2h0LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZp
cnN0TGVmdCk7CisgICAgICAgIGZyZWUoZmlyc3RSaWdodCk7CisgICAgICAgIGZyZWUoc2Vjb25k
TGVmdCk7CisgICAgICAgIGZyZWUoc2Vjb25kUmlnaHQpOworICAgICAgICAKKyAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAK
KyAgICAgICAgZnJlZShmaW5hbCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0QmVzdEZpdChzaXplX3QgZmlyc3RTaXplLCBz
aXplX3Qgc3RlcCwgdW5zaWduZWQgbnVtU2xvdHMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVj
a01vZGUpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9y
PE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzVG9GcmVlOworICAgICAgICBWZWN0b3I8
TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAgICAgIFZlY3Rvcjx2b2lkKiwg
MD4gbG9jYXRpb25zOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemUgPSBmaXJzdFNpemU7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2lu
ZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiB0b0ZyZWUgPSBhbGxvY2F0
ZShzaXplLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgaWYgKCFoYW5kbGVzLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgICAgIHdoaWxlICh0b0ZyZWUtPnN0YXJ0KCkgIT0gaGFuZGxl
cy5sYXN0KCktPmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXNUb0ZyZWUuYXBw
ZW5kKHRvRnJlZSk7CisgICAgICAgICAgICAgICAgICAgIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUs
IHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmcmFnZ2VyID0gYWxsb2NhdGUoMzIsIHNh
bml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmcmFnZ2VyLT5z
dGFydCgpLCB0b0ZyZWUtPmVuZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYXRp
b25zLmFwcGVuZCh0b0ZyZWUtPnN0YXJ0KCkpOworCisgICAgICAgICAgICBoYW5kbGVzVG9GcmVl
LmFwcGVuZCh0b0ZyZWUpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoZnJhZ2dlcik7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5zaXplKCkgPT0gbnVtU2xvdHMpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlc1RvRnJl
ZS5zaXplKCk7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXNUb0ZyZWUuYXQoaW5k
ZXgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgc2l6ZSA9IGZpcnN0U2l6
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsr
aW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGJlc3RGaXQgPSBhbGxv
Y2F0ZShzaXplIC0gMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFRFU1RfQVNTRVJUKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KQor
ICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmVzdEZpdC0+ZW5kKCkgPT0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxvY2F0aW9ucy5hdChpbmRl
eCkpICsgc2l6ZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKiBzbWFsbCA9IGFsbG9jYXRlKDMyLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAg
aWYgKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChzbWFsbC0+c3RhcnQoKSwgYmVzdEZpdC0+ZW5kKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNtYWxs
LT5lbmQoKSwgYmVzdEZpdC0+c3RhcnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZy
ZWUoYmVzdEZpdCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIGZyZWUoc21hbGwsIHNh
bml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5k
ZXgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpLCBz
YW5pdHlDaGVja01vZGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIAorICAgICAgICBmcmVlKGZpbmFsLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAg
ICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdFNocmlu
ayhzaXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIHNl
dFVwKCk7CisgICAgICAgIAorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhhdCB3aWxs
IGJlIHNocnVuaworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0
ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQgbWFrZSBz
dXJlIHRoYXQgb3VyIHN0YXRlIHJlZmxlY3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAgIG5vdGlm
eUZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGhhbmRsZS0+c3RhcnQoKSkgKyBzZWNvbmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25kU2l6ZSk7
CisgICAgICAgIAorICAgICAgICBoYW5kbGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAg
ICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICAvLyBBc3Nl
cnQgdGhhdCB0aGUgaGVhcCBpcyBub3QgZW1wdHkuCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxv
Y2F0b3ItPmFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIGhlYXAuCisgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHJlbWFpbmRlciA9IGFsbG9jYXRlKGRlZmF1bHRQYWdl
c0luSGVhcCAqIHBhZ2VTaXplKCkgLSBzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwocmVtYWluZGVyLT5zdGFydCgpLCBoYW5kbGUtPmVuZCgpKTsKKyAgICAgICAgCisgICAg
ICAgIGZyZWUocmVtYWluZGVyKTsKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAg
ICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgZW1wdHkgYW5kIGZpbmlzaCB1cC4KKyAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJ
bkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93
bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0RGVtYW5kQWxsb2NDb2FsZXNj
ZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRTaXplKQor
ICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdl
U2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhh
bmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VS
VCghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJU
KCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBw
YWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBG
b3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0g
bnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRI
YW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNT
RVJUKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChhbGxvd0FsbG9jYXRlUGFnZXMsIDApOworICAgICAgICBURVNUX0FTU0VS
VF9FUVVBTChyZXF1ZXN0ZWROdW1QYWdlcywgKHNlY29uZFNpemUgKyBwYWdlU2l6ZSgpIC0gMSkg
LyBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJ
bkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFn
ZXMgPSAwOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZy
ZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAg
ICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3REZW1hbmRB
bGxvY0RvbnRDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVf
dCBzZWNvbmRTaXplKQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAg
IGZyZWUoYWxsb2NhdGUoZmlyc3RTaXplKSk7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZGVmYXVs
dFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVCghYWxsb2Nh
dG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUo
KSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUg
PSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFs
bG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBURVNUX0FTU0VSVCghYWxs
b2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNp
emUoKSkpOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVz
dERlbWFuZEFsbG9jRG9udENvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBu
dW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhh
bmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NF
UlQoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKGFsbG93QWxsb2NhdGVQYWdlcywgMCk7CisgICAgICAgIFRFU1RfQVNTRVJU
X0VRVUFMKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAv
IHBhZ2VTaXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0lu
SGVhcCArIDEpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVt
UGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxs
b2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKwor
ICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOwor
ICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgc2Vjb25kSGFu
ZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZp
cnN0SGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBh
Z2VTaXplKCkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhl
YXAgKyAxKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAg
ICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHNldFVwKCkKKyAgICB7CisgICAgICAgIG1lbW9y
eU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAgcGFnZU1hcCA9IG5ldyBWZWN0
b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJh
c2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgewor
ICAgICAgICAgICAgcGFnZU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYnl0ZUluUGFnZSA9IDA7IGJ5dGVJblBhZ2UgPCBwYWdlU2l6ZSgpOyArK2J5dGVJblBh
Z2UpCisgICAgICAgICAgICAgICAgbWVtb3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICB9
CisKKyAgICAgICAgYWxsb2NhdG9yRGVzdHJveWVkID0gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7CisgICAgICAgIGFsbG93QWxs
b2NhdGVQYWdlcyA9IDA7CisgICAgICAgIGFkZGl0aW9uYWxQYWdlc0luSGVhcCA9IDA7CisgICAg
ICAgIAorICAgICAgICBhbGxvY2F0b3IgPSBuZXcgU2ltcGxlVGVzdEFsbG9jYXRvcigpOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZWFyRG93bigpCisgICAgeworICAgICAgICBURVNU
X0FTU0VSVChjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoYWxsb3dBbGxvY2F0ZVBhZ2VzLCAwKTsKKyAgICAgICAgVEVTVF9B
U1NFUlRfRVFVQUwocmVxdWVzdGVkTnVtUGFnZXMsIDApOworICAgICAgICAKKyAgICAgICAgLy8g
bWVtb3J5IHNob3VsZCBiZSBmcmVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBhZ2UgPSBiYXNl
UGFnZTsgcGFnZSA8IGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwOyArK3BhZ2UpIHsKKyAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKCFwYWdlU3RhdGUocGFnZSkpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBieXRlSW5QYWdlID0gMDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0
ZUluUGFnZSkKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVCghYnl0ZVN0YXRlKHBhZ2UgKiBw
YWdlU2l6ZSgpICsgYnl0ZUluUGFnZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBOT1RFOiB0aGlzIGF1dG9tYXRpY2FsbHkgdGVzdHMgdGhhdCB0aGUgYWxsb2NhdG9yIGRpZCBu
b3QgbGVhaworICAgICAgICAvLyBtZW1vcnksIHNvIGxvbmcgYXMgdGhlc2UgdGVzdHMgYXJlIHJ1
bm5pbmcgd2l0aCAhZGVmaW5lZChOREVCVUcpLgorICAgICAgICAvLyBTZWUgTWV0YUFsbG9jYXRv
cjo6bV9tYWxsb2NCYWxhbmNlLgorICAgICAgICBkZWxldGUgYWxsb2NhdG9yOworICAgICAgICAK
KyAgICAgICAgVEVTVF9BU1NFUlQoYWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAgCisgICAg
ICAgIGRlbGV0ZSBtZW1vcnlNYXA7CisgICAgICAgIGRlbGV0ZSBwYWdlTWFwOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgTWV0YUFsbG9jYXRvckhhbmRsZSogYWxsb2NhdGUoc2l6ZV90IHNpemVJ
bkJ5dGVzLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlID0gUnVuU2FuaXR5Q2hlY2sp
CisgICAgeworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzKS5sZWFrUmVmKCk7CisgICAgICAgIFRFU1RfQVNTRVJUKGhh
bmRsZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwg
c2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAgICB1aW50
cHRyX3QgZW5kQnl0ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJbkJ5dGVzOworICAgICAgICBmb3IgKHVp
bnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyAr
K2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCghYnl0ZVN0YXRlKGN1cnJl
bnRCeXRlKSk7CisgICAgICAgICAgICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gdHJ1ZTsKKyAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBS
dW5TYW5pdHlDaGVjaykKKyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAg
ICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBmcmVlKE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSwgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9k
ZSA9IFJ1blNhbml0eUNoZWNrKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoaGFuZGxlKTsK
KyAgICAgICAgCisgICAgICAgIG5vdGlmeUZyZWUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNp
emVJbkJ5dGVzKCkpOworICAgICAgICBoYW5kbGUtPmRlcmVmKCk7CisgICAgICAgIAorICAgICAg
ICBpZiAoc2FuaXR5Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2Fu
aXR5Q2hlY2soKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbm90aWZ5RnJlZSh2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0
YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCk7CisgICAgICAgIHVp
bnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAo
dWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7
ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKGJ5dGVTdGF0ZShjdXJy
ZW50Qnl0ZSkpOworICAgICAgICAgICAgYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHNhbml0eUNoZWNrKCkKKyAg
ICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvY2F0b3It
PmJ5dGVzUmVzZXJ2ZWQoKSAtIGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWxsb2NhdG9y
LT5kZWJ1Z0ZyZWVTcGFjZVNpemUoKSk7CisjZW5kaWYKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCksIChkZWZhdWx0UGFnZXNJbkhlYXAgKyBhZGRp
dGlvbmFsUGFnZXNJbkhlYXApICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VR
VUFMKGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYnl0ZXNBbGxvY2F0ZWQoKSk7CisgICAg
ICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKSwgYnl0ZXND
b21taXR0ZWQoKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGNvbmZpcm0oTWV0YUFs
bG9jYXRvckhhbmRsZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAg
ICBjb25maXJtKHN0YXJ0Qnl0ZSwgc3RhcnRCeXRlICsgaGFuZGxlLT5zaXplSW5CeXRlcygpLCB0
cnVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY29uZmlybUhpZ2hXYXRlcm1hcmso
TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgY29uZmlybShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGFuZGxlLT5lbmQoKSksIChiYXNlUGFnZSArIGRlZmF1
bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgIHN0YXRpYyB2b2lkIGNvbmZpcm0odWludHB0cl90IHN0YXJ0Qnl0ZSwgdWludHB0
cl90IGVuZEJ5dGUsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBmb3IgKHVpbnRwdHJfdCBj
dXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRC
eXRlKSB7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChieXRlU3RhdGUoY3VycmVudEJ5
dGUpLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgVEVT
VF9BU1NFUlQocGFnZVN0YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9
CisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBmaXJzdEZyZWVQ
YWdlID0gKHN0YXJ0Qnl0ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7CisgICAgICAg
ICAgICB1aW50cHRyX3QgbGFzdEZyZWVQYWdlID0gKGVuZEJ5dGUgLSBwYWdlU2l6ZSgpKSAvIHBh
Z2VTaXplKCk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50UGFnZSA9IGZpcnN0
RnJlZVBhZ2U7IGN1cnJlbnRQYWdlIDw9IGxhc3RGcmVlUGFnZTsgKytjdXJyZW50UGFnZSkKKyAg
ICAgICAgICAgICAgICBURVNUX0FTU0VSVCghcGFnZVN0YXRlKGN1cnJlbnRQYWdlKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpCisg
ICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbWVtb3J5TWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIGlmIChtZW1vcnlNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBwYWdlTWFwLT5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChwYWdlTWFwLT5hdChpbmRleCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3Vs
dCAqIHBhZ2VTaXplKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sJiBieXRlU3RhdGUo
dm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBieXRlU3RhdGUocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJv
b2wmIGJ5dGVTdGF0ZSh1aW50cHRyX3QgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJf
dCBieXRlSW5kZXggPSBhZGRyZXNzIC0gYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpOworICAgICAgICBy
ZXR1cm4gbWVtb3J5TWFwLT5hdChieXRlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
Ym9vbCYgcGFnZVN0YXRlKHVpbnRwdHJfdCBwYWdlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90
IHBhZ2VJbmRleCA9IHBhZ2UgLSBiYXNlUGFnZTsKKyAgICAgICAgcmV0dXJuIHBhZ2VNYXAtPmF0
KHBhZ2VJbmRleCk7CisgICAgfQorfTsKKworTWV0YUFsbG9jYXRvclRlc3RzOjpIZWFwR3Jvd3Ro
TW9kZSBNZXRhQWxsb2NhdG9yVGVzdHM6OmN1cnJlbnRIZWFwR3Jvd3RoTW9kZTsKK3NpemVfdCBN
ZXRhQWxsb2NhdG9yVGVzdHM6OmFsbG93QWxsb2NhdGVQYWdlczsKK3NpemVfdCBNZXRhQWxsb2Nh
dG9yVGVzdHM6OnJlcXVlc3RlZE51bVBhZ2VzOwordW5zaWduZWQgTWV0YUFsbG9jYXRvclRlc3Rz
OjphZGRpdGlvbmFsUGFnZXNJbkhlYXA7CitWZWN0b3I8Ym9vbCwgMD4qIE1ldGFBbGxvY2F0b3JU
ZXN0czo6bWVtb3J5TWFwOworVmVjdG9yPGJvb2wsIDA+KiBNZXRhQWxsb2NhdG9yVGVzdHM6OnBh
Z2VNYXA7Citib29sIE1ldGFBbGxvY2F0b3JUZXN0czo6YWxsb2NhdG9yRGVzdHJveWVkOworTWV0
YUFsbG9jYXRvclRlc3RzOjpTaW1wbGVUZXN0QWxsb2NhdG9yKiBNZXRhQWxsb2NhdG9yVGVzdHM6
OmFsbG9jYXRvcjsKKworLy8gUmVncmVzc2lvbiB0ZXN0cyBmb3IgTWV0YUFsbG9jYXRvciAtIHNp
bXVsYXRlcyBjYXNlcyB0aGF0IHdlJ3ZlIHNlZW4gZmFpbCBpbiB0aGUKKy8vIHBhc3QuCisKK2Ns
YXNzIE1ldGFBbGxvY2F0b3I2NGJpdFJlZ3Jlc3Npb25UZXN0cyB7Citwcml2YXRlOgorICAgIE1l
dGFBbGxvY2F0b3I2NGJpdFJlZ3Jlc3Npb25UZXN0cygpIHsgfQorICAgIAorcHVibGljOgorICAg
IHN0YXRpYyB2b2lkIHJ1blRlc3RzKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAg
UlVOX1RFU1QocnVuVHJlZVJvb3RDb3JydXB0aW9uVGVzdCgpKTsKKyNlbmRpZgorICAgIH0KKwor
cHJpdmF0ZToKKyNpZiBDUFUoWDg2XzY0KQorICAgIGNsYXNzIE51bGxUZXN0QWxsb2NhdG9yOiBw
dWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBOdWxsVGVzdEFsbG9j
YXRvcigpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIG1hdGNoZXMgRml4ZWRW
TVBvb2xBbGxvY2F0b3IKKyAgICAgICAgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2Uo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHg0NDAzMzljMDEwMDBsbHUpLCAxMDI0ICogMTAyNCAq
IDEwMjQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9j
YXRlTmV3U3BhY2Uoc2l6ZV90JikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2
b2lkKikKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsK
KworICAgIHN0YXRpYyB2b2lkIHJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QoKQorICAgIHsKKyAg
ICAgICAgTnVsbFRlc3RBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgewor
ICAgICAgICAgICAgVmVjdG9yPFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgMD4gaGFuZGxl
czsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg3MzYpKTsK
KyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgxNTUyMCkpOwor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDEwMjQpKTsKKyAg
ICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg1NzYpKTsKKyAgICAg
ICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgyOTc2KSk7CisgICAgICAg
ICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoNDgwKSk7CisgICAgICAgICAg
ICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMjI0MCkpOworICAgICAgICAgICAg
aGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDk2KSk7CisgICAgICAgICAgICBoYW5k
bGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMzQ4OCkpOworICAgICAgICAgICAgaGFuZGxl
cy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDM4NCkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDYpLT5zdGFydCgpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPigweDQ0MDM3OWMwMDEwMGxsdSkpOworICAgICAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoaGFuZGxlcy5hdCg2KS0+c2l6ZUluQnl0ZXMoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90
PigyMjQwKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDgpLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigweDQ0MDMzOWMwNWQ2MGxsdSkpOworICAg
ICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlcy5hdCg4KS0+c2l6ZUluQnl0ZXMoKSwg
c3RhdGljX2Nhc3Q8c2l6ZV90PigzNDg4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhh
bmRsZXMuYXQoNikuY2xlYXIoKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXQoOCkuY2xlYXIoKTsK
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorfTsKKworaW50IG1haW4oaW50LCBjaGFyKiopCit7
CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAgICBSVU5fU1VJVEUoUmVkQmxh
Y2tUcmVlVGVzdHM6OnJ1blRlc3RzKCkpOworICAgIFJVTl9TVUlURShNZXRhQWxsb2NhdG9yVGVz
dHM6OnJ1blRlc3RzKCkpOworICAgIFJVTl9TVUlURShNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNz
aW9uVGVzdHM6OnJ1blRlc3RzKCkpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZC5cbiIp
OworICAgIHJldHVybiAwOworfQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
TWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK01ldGFBbGxvY2F0
b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIDogbV9hbGxvY2F0b3IoYWxsb2Nh
dG9yKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0
ZXMpCit7CisgICAgLy9wcmludGYoImFsbG9jYXRlZCAlcCwgJWx1XG4iLCBtX3N0YXJ0LCBzaXpl
SW5CeXRlcyk7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7CisgICAgQVNTRVJUKHN0YXJ0KTsKKyAg
ICBBU1NFUlQoc2l6ZUluQnl0ZXMpOworfQorCitNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFs
bG9jYXRvckhhbmRsZSgpCit7CisgICAgaWYgKCFtX2FsbG9jYXRvcikKKyAgICAgICAgcmV0dXJu
OworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAg
aWYgKG1fc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgLy9wcmludGYoImZyZWVkICVwLCAlbHVcbiIs
IG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50
UGFnZU9jY3VwYW5jeShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVzKTsKKyAgICAgICAgbV9hbGxvY2F0
b3ItPmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVz
KTsKKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBu
ZXdTaXplSW5CeXRlcykKK3sKKyAgICAvL3ByaW50Zigic2hydW5rICVwIGZyb20gJWx1IHRvICVs
dVxuIiwgbV9zdGFydCwgbV9zaXplSW5CeXRlcywgbmV3U2l6ZUluQnl0ZXMpOworICAgIEFTU0VS
VChuZXdTaXplSW5CeXRlcyA8PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW1fYWxs
b2NhdG9yKSB7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxs
b2NhdG9yLT5tX2xvY2spOworCisgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91
bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9
IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmIChuZXdTaXplSW5CeXRlcyA9PSBtX3NpemVJ
bkJ5dGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdWludHB0cl90IGZyZWVTdGFydCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N0YXJ0KSArIG5ld1NpemVJbkJ5dGVzOwor
ICAgIHNpemVfdCBmcmVlU2l6ZSA9IG1fc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKKyAg
ICB1aW50cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOworICAgIAorICAgIHVp
bnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRv
ci0+bV9wYWdlU2l6ZSAtIDEpICYgLW1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplOworICAgIGlmIChm
aXJzdENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVFbmQpCisgICAgICAgIG1fYWxsb2NhdG9yLT5k
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxl
dGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVl
U3RhcnQpKTsKKyAgICAKKyAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2Vk
SGFuZGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyZWVTdGFydCksIGZyZWVTaXplKTsKKyAg
ICAKKyAgICBtX3NpemVJbkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7Cit9CisKK01ldGFBbGxvY2F0
b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKQorICAgIDogbV9hbGxv
Y2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKKyAgICAsIG1fcGFnZVNpemUocGFnZVNp
emUoKSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fYnl0ZXNSZXNlcnZlZCgw
KQorICAgICwgbV9ieXRlc0NvbW1pdHRlZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbWFs
bG9jQmFsYW5jZSgwKQorI2VuZGlmCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUp
CisgICAgLCBtX251bUFsbG9jYXRpb25zKDApCisgICAgLCBtX251bUZyZWVzKDApCisjZW5kaWYK
K3sKKyAgICBtX2xvY2suSW5pdCgpOworICAgIAorICAgIGZvciAobV9sb2dQYWdlU2l6ZSA9IDA7
IG1fbG9nUGFnZVNpemUgPCAzMjsgKyttX2xvZ1BhZ2VTaXplKSB7CisgICAgICAgIGlmIChzdGF0
aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90
PigxKSA8PCBtX2xvZ1BhZ2VTaXplID09IG1fcGFnZVNpemUpOworICAgIAorICAgIGZvciAobV9s
b2dBbGxvY2F0aW9uR3JhbnVsZSA9IDA7IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPCAzMjsgKytt
X2xvZ0FsbG9jYXRpb25HcmFudWxlKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+
KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUp
OworfQorCitNZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCit7CisgICAgZm9yIChGcmVl
U3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7IG5vZGU7KSB7Cisg
ICAgICAgIEZyZWVTcGFjZU5vZGUqIG5leHQgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29y
KG5vZGUpOworICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgICAg
ICBmcmVlRnJlZVNwYWNlTm9kZShub2RlKTsKKyAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgfQor
I2lmbmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fbWFsbG9jQmFsYW5jZSk7CisjZW5kaWYKK30K
KworUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOworCisgICAgaWYgKCFzaXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgc2l6ZUluQnl0ZXMgPSByb3VuZFVwKHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICB2b2lkKiBz
dGFydCA9IGZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZUluQnl0ZXMpOworICAgIGlmICghc3Rh
cnQpIHsKKyAgICAgICAgc2l6ZV90IHJlcXVlc3RlZE51bWJlck9mUGFnZXMgPSAoc2l6ZUluQnl0
ZXMgKyBtX3BhZ2VTaXplIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgc2l6ZV90IG51
bWJlck9mUGFnZXMgPSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzOworICAgICAgICAKKyAgICAgICAg
c3RhcnQgPSBhbGxvY2F0ZU5ld1NwYWNlKG51bWJlck9mUGFnZXMpOworICAgICAgICBpZiAoIXN0
YXJ0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVt
YmVyT2ZQYWdlcyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCByb3VuZGVkVXBTaXplID0gbnVtYmVyT2ZQYWdlcyA8PCBtX2xvZ1BhZ2VTaXplOwor
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKHJvdW5kZWRVcFNpemUgPj0gc2l6ZUluQnl0ZXMpOwor
ICAgICAgICAKKyAgICAgICAgbV9ieXRlc1Jlc2VydmVkICs9IHJvdW5kZWRVcFNpemU7CisgICAg
ICAgIAorICAgICAgICBpZiAocm91bmRlZFVwU2l6ZSA+IHNpemVJbkJ5dGVzKSB7CisgICAgICAg
ICAgICB2b2lkKiBmcmVlU3BhY2VTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAg
ICBzaXplX3QgZnJlZVNwYWNlU2l6ZSA9IHJvdW5kZWRVcFNpemUgLSBzaXplSW5CeXRlczsKKyAg
ICAgICAgICAgIGFkZEZyZWVTcGFjZShmcmVlU3BhY2VTdGFydCwgZnJlZVNwYWNlU2l6ZSk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgaW5jcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydCwgc2l6ZUlu
Qnl0ZXMpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWQgKz0gc2l6ZUluQnl0ZXM7CisjaWYgRU5BQkxF
KE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1BbGxvY2F0aW9ucysrOworI2VuZGlm
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0
LCBzaXplSW5CeXRlcykpOworfQorCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxv
Y2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIo
Jm1fbG9jayk7CisgICAgU3RhdGlzdGljcyByZXN1bHQ7CisgICAgcmVzdWx0LmJ5dGVzQWxsb2Nh
dGVkID0gbV9ieXRlc0FsbG9jYXRlZDsKKyAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0
ZXNSZXNlcnZlZDsKKyAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgPSBtX2J5dGVzQ29tbWl0dGVk
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIE1ldGFBbGxvY2F0b3I6OmZpbmRBbmRS
ZW1vdmVGcmVlU3BhY2Uoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIC8vcHJpbnRmKCJzZWFy
Y2hpbmcgZm9yICVsdSBpbiAlcFxuIiwgc2l6ZUluQnl0ZXMsICZtX2ZyZWVTcGFjZVNpemVNYXAp
OworICAgIEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmluZExlYXN0
R3JlYXRlclRoYW5PckVxdWFsKHNpemVJbkJ5dGVzKTsKKyAgICAvL3ByaW50ZigiZm91bmQgbm9k
ZSA9ICVwXG4iLCBub2RlKTsKKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIEFTU0VSVChub2RlLT5rZXkgPj0gc2l6ZUluQnl0ZXMpOworICAgIAorICAg
IC8vcHJpbnRmKCJpbiBhbGxvY2F0ZSwgcmVtb3ZpbmcgJXBcbiIsIG5vZGUpOworICAgIG1fZnJl
ZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0OworICAg
IAorICAgIGlmIChub2RlLT5rZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgLy8gRWFzeSBj
YXNlOiBwZXJmZWN0IGZpdCwgc28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50aXJlbHkuCisgICAg
ICAgIHJlc3VsdCA9IG5vZGUtPnZhbHVlOworICAgICAgICAKKyAgICAgICAgbV9mcmVlU3BhY2VT
dGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VF
bmRBZGRyZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7CisgICAgICAgIGZyZWVG
cmVlU3BhY2VOb2RlKG5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRyeSB0byBiZSBh
IGdvb2QgY2l0aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNodW5rIG9mIG1lbW9y
eQorICAgICAgICAvLyBzdHJhZGRsZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3NpYmxlLCBidXQgb25s
eSBpbnNvZmFyIGFzIGRvaW5nIHNvIHdpbGwKKyAgICAgICAgLy8gbm90IGluY3JlYXNlIGZyYWdt
ZW50YXRpb24uIFRoZSBpbnR1aXRpb24gaXMgdGhhdCBtaW5pbWl6aW5nCisgICAgICAgIC8vIGZy
YWdtZW50YXRpb24gaXMgYSBzdHJpY3RseSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBtaW5pbWl6aW5n
IHRoZSBudW1iZXIKKyAgICAgICAgLy8gb2YgY29tbWl0dGVkIHBhZ2VzLCBzaW5jZSBpbiB0aGUg
bG9uZyBydW4sIHNtYWxsZXIgZnJhZ21lbnRhdGlvbiBtZWFucworICAgICAgICAvLyBmZXdlciBj
b21taXR0ZWQgcGFnZXMgYW5kIGZld2VyIGZhaWx1cmVzIGluIGdlbmVyYWwuCisgICAgICAgIAor
ICAgICAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPnZhbHVlKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBh
Z2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtl
eSAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgICAgIHVpbnRwdHJfdCBsYXN0UGFn
ZUZvckxlZnRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52
YWx1ZSkgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRw
dHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1Bh
Z2VTaXplOworICAgICAgICAKKyAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24g
LSBmaXJzdFBhZ2UgKyAxIDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9u
ICsgMSkgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQgc2lkZSBvZiB0aGUg
cmV0dXJuZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmlnaHQuCisgICAgICAg
ICAgICByZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9m
cmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgbm9k
ZS0+dmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obm9kZS0+dmFsdWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvL3ByaW50ZigiaW4gbGVmdC1hbGxvY2F0ZSwgYWRkaW5nICVwXG4iLCBub2RlKTsKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQobm9kZS0+dmFsdWUsIG5vZGUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIHJpZ2h0IHNpemUgb2Yg
dGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIGxlZnQ7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSBzaXpl
SW5CeXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBub2RlLT5rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vcHJpbnRmKCJpbiByaWdodC1hbGxvY2F0ZSwgYWRkaW5nICVwXG4iLCBub2RlKTsKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2Zy
ZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJlc3VsdCwgbm9kZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy9tX2ZyZWVTcGFjZVNpemVNYXAuZHVtcCgpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRI
YW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyNpZiBFTkFCTEUoTUVU
QV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBtX251bUZyZWVzKys7CisjZW5kaWYKKyAgICBtX2J5
dGVzQWxsb2NhdGVkIC09IHNpemVJbkJ5dGVzOworICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6
ZUluQnl0ZXMpOworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9j
a2VyKCZtX2xvY2spOworICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsKKyAgICBh
ZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKworc2l6ZV90IE1ldGFBbGxvY2F0
b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICBmb3Ig
KEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9kZTsg
bm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5zdWNjZXNzb3Iobm9kZSkpCisgICAgICAgIHJlc3Vs
dCArPSBub2RlLT5rZXk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgQ1JBU0goKTsK
KyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVT
cGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIC8vcHJpbnRmKCJh
ZGRpbmcgZnJlZSBzcGFjZSAlcCwgJWx1XG4iLCBzdGFydCwgc2l6ZUluQnl0ZXMpOworCisgICAg
dm9pZCogZW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIYXNoTWFwPHZvaWQqLCBG
cmVlU3BhY2VOb2RlKj46Oml0ZXJhdG9yIGxlZnROZWlnaGJvciA9IG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5maW5kKHN0YXJ0KTsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj46
Oml0ZXJhdG9yIHJpZ2h0TmVpZ2hib3IgPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5maW5k
KGVuZCk7CisgICAgCisgICAgaWYgKGxlZnROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZUVuZEFkZHJl
c3NNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxl
c2NlIHdpdGggb24gdGhlIGxlZnQuICBSZW1vdmUgaXQgZnJvbSB0aGUgdHJlZSwgYW5kCisgICAg
ICAgIC8vIHJlbW92ZSBpdHMgZW5kIGZyb20gdGhlIGVuZCBhZGRyZXNzIG1hcC4KKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obGVmdE5laWdoYm9yLT5zZWNvbmQtPnZhbHVlKSArIGxlZnROZWlnaGJvci0+
c2Vjb25kLT5rZXkpID09IGxlZnROZWlnaGJvci0+Zmlyc3QpOworICAgICAgICAKKyAgICAgICAg
RnJlZVNwYWNlTm9kZSogbGVmdE5vZGUgPSBsZWZ0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAg
CisgICAgICAgIHZvaWQqIGxlZnRTdGFydCA9IGxlZnROb2RlLT52YWx1ZTsKKyAgICAgICAgc2l6
ZV90IGxlZnRTaXplID0gbGVmdE5vZGUtPmtleTsKKyAgICAgICAgdm9pZCogbGVmdEVuZCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0U3Rh
cnQpICsgbGVmdFNpemUpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxlZnRFbmQgPT0gc3Rh
cnQpOworICAgICAgICAKKyAgICAgICAgLy9wcmludGYoImluIGZyZWUgc3BhY2UsIHJlbW92aW5n
IGxlZnQgbmVpZ2hib3IgJXBcbiIsbGVmdE5vZGUpOworICAgICAgICBtX2ZyZWVTcGFjZVNpemVN
YXAucmVtb3ZlKGxlZnROb2RlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJl
bW92ZShsZWZ0RW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB0aGVyZSBp
cyBhbHNvIHNvbWV0aGluZyB0byBjb2FsZXNjZSB3aXRoIG9uIHRoZSByaWdodC4KKyAgICAgICAg
aWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsK
KyAgICAgICAgICAgIC8vIEZyZWVpbmcgc29tZXRoaW5nIGluIHRoZSBtaWRkbGUgb2YgZnJlZSBi
bG9ja3MuICBDb2FsZXNjZSBib3RoIGxlZnQgYW5kCisgICAgICAgICAgICAvLyByaWdodCwgd2hp
bHN0IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJvciBmcm9tIHRoZSBtYXBzLgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSA9PSBy
aWdodE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEZyZWVTcGFj
ZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZv
aWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVf
dCByaWdodFNpemUgPSByaWdodE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5k
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJp
Z2h0U3RhcnQpICsgcmlnaHRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KHJpZ2h0U3RhcnQgPT0gZW5kKTsKKyAgICAgICAgICAgIEFTU0VSVChyZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdFN0YXJ0KSArIGxlZnRTaXpl
ICsgc2l6ZUluQnl0ZXMgKyByaWdodFNpemUpID09IHJpZ2h0RW5kKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy9wcmludGYoImluIGZyZWUgc3BhY2UsIHJlbW92aW5nIHJpZ2h0IG5laWdo
Ym9yICVwXG4iLHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVt
b3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5y
ZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAu
cmVtb3ZlKHJpZ2h0RW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZUZyZWVTcGFj
ZU5vZGUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVmdE5vZGUtPmtl
eSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly9wcmludGYoImluIGZyZWUgc3BhY2UsIGFkZGluZyB0d28td2F5IGNvYWxlc2NlZCBub2RlICVw
XG4iLGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobGVm
dE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChyaWdodEVu
ZCwgbGVmdE5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVmdE5vZGUtPmtl
eSArPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy9wcmludGYoImlu
IGZyZWUgc3BhY2UsIGFkZGluZyBsZWZ0LWNvYWxlc2NlZCBub2RlICVwXG4iLGxlZnROb2RlKTsK
KyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobGVmdE5vZGUpOworICAgICAg
ICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChlbmQsIGxlZnROb2RlKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7
IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCisgICAgICAgIAorICAg
ICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQo
KSkgeworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJv
ci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3It
PmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+a2V5Owor
ICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOworICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChyaWdodEVuZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9
PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vcHJpbnRmKCJpbiBmcmVl
IHNwYWNlLCByZW1vdmluZyByaWdodCBuZWlnaGJvciAlcFxuIiwgcmlnaHROb2RlKTsKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgcmlnaHROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAg
ICAgICByaWdodE5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vcHJpbnRmKCJpbiBmcmVlIHNwYWNlLCBhZGRpbmcgcmlnaHQtY29hbGVzY2VkIG5vZGUgJXBc
biIsIHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KHJp
Z2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3Rh
cnQsIHJpZ2h0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3RoaW5n
IHRvIGNvYWxlc2NlIHdpdGgsIHNvIGNyZWF0ZSBhIG5ldyBmcmVlIHNwYWNlIG5vZGUgYW5kIGFk
ZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IGFs
bG9jRnJlZVNwYWNlTm9kZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5rZXkg
PSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vcHJpbnRmKCJpbiBmcmVlIHNwYWNlLCBhZGRpbmcgbmV3IG5v
ZGUgJXBcbiIsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChu
b2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChzdGFydCwg
bm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKGVuZCwgbm9k
ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy9tX2ZyZWVTcGFjZVNpemVNYXAuZHVt
cCgpOworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9p
ZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIHVpbnRwdHJfdCBmaXJzdFBh
Z2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6
ZTsKKyAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGFkZHJlc3MpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAg
IGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFn
ZSkgeworICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9
IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOworICAgICAgICBpZiAoaXRlciA9PSBtX3Bh
Z2VPY2N1cGFuY3lNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vcHJpbnRmKCJhZGRpbmcgcGFn
ZSAlcFxuIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSkpOworICAgICAgICAgICAgbV9w
YWdlT2NjdXBhbmN5TWFwLmFkZChwYWdlLCAxKTsKKyAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0
ZWQgKz0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIC8vcHJpbnRmKCJuZWVkIHBhZ2UgJXBcbiIs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOworICAgICAg
ICAgICAgbm90aWZ5TmVlZFBhZ2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xv
Z1BhZ2VTaXplKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvL3ByaW50ZigiaXRl
ciBhdCAlcCwgJXBcbiIsICZpdGVyLT5maXJzdCwgJml0ZXItPnNlY29uZCk7CisgICAgICAgICAg
ICBpdGVyLT5zZWNvbmQrKzsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2Nh
dG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5C
eXRlcykKK3sKKyAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGFkZHJlc3MpID4+IG1fbG9nUGFnZVNpemU7CisgICAgdWludHB0cl90IGxhc3RQYWdl
ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIHNpemVJbkJ5dGVzIC0g
MSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmly
c3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKKyAgICAgICAgSGFzaE1hcDx1aW50
cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChw
YWdlKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsK
KyAgICAgICAgLy9wcmludGYoImRlYyBpdGVyIGF0ICVwLCAlcFxuIiwgJml0ZXItPmZpcnN0LCAm
aXRlci0+c2Vjb25kKTsKKyAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAg
ICAgICBpZiAoZmFsc2UpIHsKKyAgICAgICAgICAgICAgICAvL3ByaW50ZigiZGVjICgyKSBpdGVy
IGF0ICVwLCAlcFxuIiwgJml0ZXItPmZpcnN0LCAmaXRlci0+c2Vjb25kKTsKKyAgICAgICAgICAg
ICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgLy9wcmludGYoImRlYyAoMikgaXRlciBhdCAlcCwgJXBcbiIsICZpdGVyLT5maXJzdCwgJml0
ZXItPnNlY29uZCk7CisgICAgICAgICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLnJlbW92ZShp
dGVyKTsKKyAgICAgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7Cisg
ICAgICAgICAgICAgICAgLy9wcmludGYoInBhZ2UgaXMgZnJlZSAlcFxuIiwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAgICAgICAgICAgICAgbm90
aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNp
emUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworc2l6ZV90IE1ldGFB
bGxvY2F0b3I6OnJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIGlmIChzdGQ6Om51
bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9hbGxvY2F0aW9uR3JhbnVsZSA8PSBzaXpl
SW5CeXRlcykKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gKHNpemVJbkJ5dGVzICsgbV9h
bGxvY2F0aW9uR3JhbnVsZSAtIDEpICYgLW1fYWxsb2NhdGlvbkdyYW51bGU7Cit9CisKK01ldGFB
bGxvY2F0b3I6OkZyZWVTcGFjZU5vZGUqIE1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9k
ZSgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbWFsbG9jQmFsYW5jZSsrOworI2VuZGlmCisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyZWVTcGFjZU5vZGUqPihmYXN0TWFsbG9jKHNpemVvZihG
cmVlU3BhY2VOb2RlKSkpOworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VO
b2RlKEZyZWVTcGFjZU5vZGUqIG5vZGUpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbWFsbG9j
QmFsYW5jZS0tOworI2VuZGlmCisgICAgZmFzdEZyZWUobm9kZSk7Cit9CisKKyNpZiBFTkFCTEUo
TUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUo
KQoreworICAgIHByaW50ZigibnVtIGFsbG9jYXRpb25zID0gJXUsIG51bSBmcmVlcyA9ICV1XG4i
LCBtX251bUFsbG9jYXRpb25zLCBtX251bUZyZWVzKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9j
YXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0
YUFsbG9jYXRvcl9oCisjZGVmaW5lIFdURl9NZXRhQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVlLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUgRU5B
QkxFX01FVEFfQUxMT0NBVE9SX1BST0ZJTEUgMAorCitjbGFzcyBNZXRhQWxsb2NhdG9yIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKK3B1YmxpYzoKKyAgICAKKyAg
ICBNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSk7CisgICAgCisgICAgdmly
dHVhbCB+TWV0YUFsbG9jYXRvcigpOworICAgIAorICAgIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRv
ckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBOb24t
YXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCisgICAgc2l6
ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQorICAgIHNp
emVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CisgICAgc2l6
ZV90IGJ5dGVzQ29tbWl0dGVkKCkgeyByZXR1cm4gbV9ieXRlc0NvbW1pdHRlZDsgfQorICAgIAor
ICAgIC8vIEF0b21pYyBtZXRob2QgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCisg
ICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQ7Cisg
ICAgICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOworICAgICAgICBzaXplX3QgYnl0ZXNDb21taXR0
ZWQ7CisgICAgfTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCk7CisKKyAgICAv
LyBBZGQgbW9yZSBmcmVlIHNwYWNlIHRvIHRoZSBhbGxvY2F0b3IuIENhbGwgdGhpcyBkaXJlY3Rs
eSBmcm9tCisgICAgLy8gdGhlIGNvbnN0cnVjdG9yIGlmIHlvdSB3aXNoIHRvIG9wZXJhdGUgdGhl
IGFsbG9jYXRvciB3aXRoaW4gYQorICAgIC8vIGZpeGVkIHBvb2wuCisgICAgdm9pZCBhZGRGcmVz
aEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKworICAgIC8vIFRo
aXMgaXMgbWVhbnQgb25seSBmb3IgaW1wbGVtZW50aW5nIHRlc3RzLiBOZXZlciBjYWxsIHRoaXMg
aW4gcmVsZWFzZQorICAgIC8vIGJ1aWxkcy4KKyAgICBzaXplX3QgZGVidWdGcmVlU3BhY2VTaXpl
KCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9pZCBk
dW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkgeyB9CisjZW5kaWYK
KworcHJvdGVjdGVkOgorICAgIAorICAgIC8vIEFsbG9jYXRlIG5ldyB2aXJ0dWFsIHNwYWNlLCBi
dXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4gbW9yZQorICAgIC8vIHBhZ2VzIHRoYW4g
d2UgYXNrZWQsIGluIHdoaWNoIGNhc2UgbnVtUGFnZXMgaXMgY2hhbmdlZC4KKyAgICB2aXJ0dWFs
IHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykgPSAwOworICAgIAorICAg
IC8vIENvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQq
IHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBVbmNvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkgPSAwOworICAgIAorICAgIC8vIE5PVEU6
IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCBkdXJpbmcgYWxsb2NhdG9yCisg
ICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1ldGFBbGxvY2F0b3IgY2Fubm90
IGRpZSBzbyBsb25nCisgICAgLy8gYXMgdGhlcmUgYXJlIEhhbmRsZXMgdGhhdCByZWZlciB0byBp
dC4KKworcHJpdmF0ZToKKyAgICAKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRs
ZTsKKyAgICAKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxzaXplX3QsIHZvaWQqPiBUcmVlOwor
ICAgIHR5cGVkZWYgVHJlZTo6Tm9kZSBGcmVlU3BhY2VOb2RlOworICAgIAorICAgIC8vIFJlbW92
ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBpcyBlZmZlY3RpdmVseQorICAg
IC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBtYXJr
IHRoZQorICAgIC8vIHJldHVybmVkIHNwYWNlIGFzIGJlaW5nIGluLXVzZS4KKyAgICB2b2lkKiBm
aW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBUaGlz
IGlzIGNhbGxlZCB3aGVuIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRpb24gaXMgZnJlZWQuCisgICAg
dm9pZCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBz
aXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgbG93LWxldmVsIGltcGxlbWVu
dGF0aW9uIG9mIGFkZGluZyBmcmVlIHNwYWNlOyBpdAorICAgIC8vIGlzIGNhbGxlZCBmcm9tIGJv
dGggYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlIGFuZCBmcm9tCisgICAgLy8gYWRkRnJl
c2hGcmVlU3BhY2UuCisgICAgdm9pZCBhZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBz
aXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTWFuYWdlbWVudCBvZiB1c2VkIHNwYWNlLgorICAg
IAorICAgIHZvaWQgaW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qg
c2l6ZUluQnl0ZXMpOworICAgIHZvaWQgZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRy
ZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFV0aWxpdGllcy4KKyAgICAK
KyAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEZyZWVT
cGFjZU5vZGUqIGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgIHZvaWQgZnJlZUZyZWVTcGFjZU5v
ZGUoRnJlZVNwYWNlTm9kZSopOworICAgIAorICAgIHNpemVfdCBtX2FsbG9jYXRpb25HcmFudWxl
OworICAgIHVuc2lnbmVkIG1fbG9nQWxsb2NhdGlvbkdyYW51bGU7CisgICAgc2l6ZV90IG1fcGFn
ZVNpemU7CisgICAgdW5zaWduZWQgbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBUcmVlIG1fZnJl
ZVNwYWNlU2l6ZU1hcDsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4gbV9mcmVl
U3BhY2VTdGFydEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcDsKKyAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90
PiBtX3BhZ2VPY2N1cGFuY3lNYXA7CisgICAgCisgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7
CisgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKKyAgICBzaXplX3QgbV9ieXRlc0NvbW1pdHRl
ZDsKKyAgICAKKyAgICBTcGluTG9jayBtX2xvY2s7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgc2l6
ZV90IG1fbWFsbG9jQmFsYW5jZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9S
X1BST0ZJTEUpCisgICAgdW5zaWduZWQgbV9udW1BbGxvY2F0aW9uczsKKyAgICB1bnNpZ25lZCBt
X251bUZyZWVzOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IFdURl9NZXRhQWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisjZGVmaW5lIFdU
Rl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yOworCitjbGFzcyBNZXRhQWxsb2Nh
dG9ySGFuZGxlOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiB7Citwcml2
YXRlOgorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgICAgIDogbV9hbGxv
Y2F0b3IoMCkKKyAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1fc2l6ZUluQnl0
ZXMoc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhcnQpOworICAgIH0KKyAg
ICAKK3B1YmxpYzoKKyAgICB+TWV0YUFsbG9jYXRvckhhbmRsZSgpOworICAgIAorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGNyZWF0ZVNlbGZNYW5hZ2VkSGFuZGxl
KHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUoc3RhcnQsIHNpemVJbkJ5dGVzKSk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQqIHN0YXJ0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0
YXJ0OworICAgIH0KKyAgICAKKyAgICB2b2lkKiBlbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N0
YXJ0KSArIG1fc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICAgICAgCisgICAgc2l6ZV90IHNpemVJ
bkJ5dGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgIH0KKyAg
ICAgICAgCisgICAgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKKyAgICAKKyAg
ICBib29sIGlzTWFuYWdlZCgpCisgICAgeworICAgICAgICByZXR1cm4gISFtX2FsbG9jYXRvcjsK
KyAgICB9CisgICAgICAgIAorICAgIE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcigpCisgICAgewor
ICAgICAgICBBU1NFUlQobV9hbGxvY2F0b3IpOworICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsK
KyAgICAKKyAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICB2b2lkKiBtX3N0YXJ0
OworICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBCYXNlZCBvbiBSZWQtQmxhY2sgdHJlZSBpbXBsZW1lbnRh
dGlvbiBieSBFbWluIE1hcnRpbmlhbgorICogLSBodHRwOi8vd3d3Lm1pdC5lZHUvfmVtaW4vc291
cmNlX2NvZGUvaW5kZXguaHRtbCAgICAgICAgIAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVkQmxhY2tUcmVlX2gKKyNkZWZp
bmUgUmVkQmxhY2tUcmVlX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKworLy8gVGhpcyBpbXBsZW1lbnRzIGEgcmVkLWJsYWNrIHRyZWUgd2l0aCB0aGUgZm9s
bG93aW5nIHByb3BlcnRpZXM6CisvLyAtIFRoZSBhbGxvY2F0aW9uIG9mIG5vZGVzIGluIHRoZSB0
cmVlIGlzIGVudGlyZWx5IHVwIHRvIHRoZSB1c2VyLgorLy8gLSBJZiB5b3UgYXJlIGluIHBvc3Nl
c3Npb24gb2YgYSBwb2ludGVyIHRvIGEgbm9kZSwgeW91IGNhbiBkZWxldGUKKy8vICAgaXQgZnJv
bSB0aGUgdHJlZS4gIFRoZSB0cmVlIHdpbGwgc3Vic2VxdWVudGx5IG5vIGxvbmdlciBoYXZlIGEK
Ky8vICAgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZS4KKy8vIC0gVGhlIGtleSB0eXBlIG11c3QgaW1w
bGVtZW50IG9wZXJhdG9yPCBhbmQgPT0uCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5
cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIFJlZEJsYWNrVHJlZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUmVkQmxhY2tUcmVlKTsKK3B1YmxpYzoKKyAgICBjbGFzcyBSYXdOb2RlIHsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIFJlZEJsYWNrVHJlZTsKKyAgICAgICAgCisgICAgICAgIC8vIE5P
VEU6IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBz
aW5nbGUKKyAgICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEg
YnVnIGluIHRoZSBjb21waWxlci4KKyAgICAgICAgUmF3Tm9kZSogcGFyZW50KCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBSYXdOb2RlKiBzZXRQYXJlbnQoUmF3Tm9kZSogbmV3UGFyZW50KQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQgPSBuZXdQYXJlbnQ7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgaXNSZWQoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9yZWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgc2V0
UmVkKGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZCA9IHZh
bHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBtX2xlZnQ7CisgICAg
ICAgIFJhd05vZGUqIG1fcmlnaHQ7CisgICAgICAgIFJhd05vZGUqIG1fcGFyZW50OworICAgICAg
ICBib29sIG1fcmVkOworICAgIH07CisgICAgCisgICAgY2xhc3MgTm9kZTogcHVibGljIFJhd05v
ZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgS2V5VHlwZSBrZXk7CisgICAgICAgIFZhbHVlVHlw
ZSB2YWx1ZTsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZSgpCisgICAgeworICAgICAg
ICBtX25pbFNlbnRpbmVsLnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAgICAgIG1fbmls
U2VudGluZWwubV9sZWZ0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1fbmlsU2VudGluZWwu
bV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVsLnNldFJlZChm
YWxzZSk7CisgICAgICAgIAorICAgICAgICBtX3Jvb3Quc2V0UGFyZW50KCZtX25pbFNlbnRpbmVs
KTsKKyAgICAgICAgbV9yb290Lm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jv
b3QubV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jvb3Quc2V0UmVkKGZhbHNl
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAg
ICAgIGluc2VydEhlbHAobm9kZSk7CisKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5vZGU7CisgICAg
ICAgIFJhd05vZGUqIHk7CisgICAgICAgIAorICAgICAgICB4LT5zZXRSZWQodHJ1ZSk7CisgICAg
ICAgIHdoaWxlICh4LT5wYXJlbnQoKS0+aXNSZWQoKSkgeworICAgICAgICAgICAgaWYgKHgtPnBh
cmVudCgpID09IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAg
ICAgeSA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICBp
ZiAoeS0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVk
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fcmln
aHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAg
ICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAg
ICAgICAgIH0gCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHkgPSB4LT5w
YXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAoeS0+aXNSZWQo
KSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
eC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmlnaHRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBs
ZWZ0Um90YXRlKHgtPnBhcmVudCgpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgfSAKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByb290KCktPm1fbGVmdC0+c2V0UmVkKGZh
bHNlKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7
CisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogcmVtb3ZlKE5vZGUqIHopCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICBS
YXdOb2RlKiB4OworCisgICAgICAgIHkgPSAoei0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCkgfHwg
ei0+bV9yaWdodCA9PSBuaWxTZW50aW5lbCgpKSA/IHogOiBzdWNjZXNzb3JJbnRlcm5hbCh6KTsK
KyAgICAgICAgeCA9IHktPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpID8geS0+bV9yaWdodCA6IHkt
Pm1fbGVmdDsKKyAgICAgICAgaWYgKHJvb3QoKSA9PSB4LT5zZXRQYXJlbnQoeS0+cGFyZW50KCkp
KSB7CisgICAgICAgICAgICByb290KCktPm1fbGVmdCA9IHg7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAg
ICAgeS0+cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHktPnBhcmVudCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoeSAhPSB6KSB7CisgICAgICAgICAgICBBU1NFUlQoeSAhPSBuaWxT
ZW50aW5lbCgpKTsKKworICAgICAgICAgICAgaWYgKCF5LT5pc1JlZCgpKSByZW1vdmVGaXhVcCh4
KTsKKyAgCisgICAgICAgICAgICB5LT5tX2xlZnQgPSB6LT5tX2xlZnQ7CisgICAgICAgICAgICB5
LT5tX3JpZ2h0ID0gei0+bV9yaWdodDsKKyAgICAgICAgICAgIHktPnNldFBhcmVudCh6LT5wYXJl
bnQoKSk7CisgICAgICAgICAgICB5LT5zZXRSZWQoei0+aXNSZWQoKSk7CisgICAgICAgICAgICB6
LT5tX2xlZnQtPnNldFBhcmVudCh6LT5tX3JpZ2h0LT5zZXRQYXJlbnQoeSkpOworICAgICAgICAg
ICAgaWYgKHogPT0gei0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAgIHotPnBh
cmVudCgpLT5tX2xlZnQgPSB5OyAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgei0+cGFyZW50KCktPm1fcmlnaHQgPSB5OworICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgaWYgKCF5LT5pc1JlZCgpKSByZW1vdmVGaXhVcCh4KTsKKyAgICAg
ICAgfQorICAKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NF
UlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworCisgICAgICAgIHJldHVybiB6OworICAgIH0K
KyAgICAKKyAgICBOb2RlKiBmaXJzdCgpCisgICAgeworICAgICAgICBSYXdOb2RlKiBub2RlID0g
cm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJh
d05vZGUqIG5leHQgPSBub2RlLT5tX2xlZnQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxT
ZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAg
ICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBsYXN0
KCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUgPSByb290KCktPm1fbGVmdDsKKyAgICAg
ICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm1f
cmlnaHQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAgICBub2RlID0gbmV4dDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBzdWNjZXNzb3IoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIFJhd05vZGUqIHJlc3VsdCA9IHN1Y2Nlc3NvckludGVybmFsKG5vZGUpOwor
ICAgICAgICBpZiAocmVzdWx0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIGFzTm9kZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBOb2Rl
KiBwcmVkZWNlc3NvcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5v
ZGU7CisgICAgICAgIFJhd05vZGUqIHk7CisKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0g
KHkgPSB4LT5tX2xlZnQpKSB7CisgICAgICAgICAgICB3aGlsZSAoeS0+bV9yaWdodCAhPSBuaWxT
ZW50aW5lbCgpKSB7CisgICAgICAgICAgICAgICAgeSA9IHktPm1fcmlnaHQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICByZXR1cm4gYXNOb2RlKHkpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgeSA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgd2hpbGUgKHggPT0geS0+bV9s
ZWZ0KSB7IAorICAgICAgICAgICAgICAgIGlmICh5ID09IHJvb3QoKSkgcmV0dXJuIDA7CisgICAg
ICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHkgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBhc05vZGUoeSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZEV4YWN0KGNvbnN0IEtleVR5cGUmIGtleSkK
KyAgICB7CisgICAgICAgIFJhd05vZGUqIHggPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgaWYg
KHggPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB3aGls
ZSAoIShhc05vZGUoeCktPmtleSA9PSBrZXkpKSB7CisgICAgICAgICAgICBpZiAoYXNOb2RlKHgp
LT5rZXkgPiBrZXkpCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fbGVmdDsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9yaWdodDsKKyAgICAgICAgICAgIGlmICh4
ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGFzTm9kZSh4KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcmVtb3Zl
KGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGZpbmRF
eGFjdChrZXkpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gcmVtb3ZlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZp
bmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAg
ICAgICBSYXdOb2RlKiBjdXJyZW50ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIFJhd05vZGUq
IGJlc3QgPSAwOworICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBuaWxTZW50aW5lbCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5rZXkgPT0ga2V5KQorICAgICAgICAgICAg
ICAgIHJldHVybiBhc05vZGUoY3VycmVudCk7CisgICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJl
bnQpLT5rZXkgPCBrZXkpCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fcmln
aHQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VycmVudDsK
KyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9sZWZ0OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoYmVzdCk7CisgICAgfQorICAgIAor
ICAgIE5vZGUqIGZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbChjb25zdCBLZXlUeXBlJiBrZXkp
CisgICAgeworICAgICAgICBSYXdOb2RlKiBjdXJyZW50ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAg
ICAgIFJhd05vZGUqIGJlc3QgPSAwOworICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBuaWxTZW50
aW5lbCgpKSB7CisgICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5rZXkgPT0ga2V5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUoY3VycmVudCk7CisgICAgICAgICAgICBpZiAo
YXNOb2RlKGN1cnJlbnQpLT5rZXkgPCBrZXkpIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3Vy
cmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9sZWZ0OworICAgICAg
ICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX3JpZ2h0
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoYmVzdCk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24uCisgICAgc2l6ZV90IHNpemUoKQorICAg
IHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoTm9kZSogY3VycmVu
dCA9IGZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBzdWNjZXNzb3IoY3VycmVudCkpCisgICAg
ICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgLy8gVGhpcyBpcyBhbiBPKDEpIG9wZXJhdGlvbi4KKyAgICBib29sIGlzRW1wdHkoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHJvb3QoKS0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCk7CisgICAg
fQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIW5p
bFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShy
b290KCktPm1fbGVmdCk7CisgICAgICAgIEFTU0VSVChyb290KCktPm1fcmlnaHQgPT0gbmlsU2Vu
dGluZWwoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICBw
cmludGYoIlRyZWUgYXQgJXA6XG4iLCB0aGlzKTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uocm9vdCgp
LT5tX2xlZnQpOworICAgICAgICBwcmludGYoIiAgIHJvb3Q6ICVwLCAlcCwgJXBcbiIsIHJvb3Qo
KS0+bV9sZWZ0LCByb290KCktPm1fcmlnaHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJvb3Qo
KS0+cGFyZW50QW5kUmVkKSk7CisgICAgICAgIHByaW50ZigiICAgIG5pbDogJXAsICVwLCAlcFxu
IiwgbmlsU2VudGluZWwoKS0+bV9sZWZ0LCBuaWxTZW50aW5lbCgpLT5tX3JpZ2h0LCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihuaWxTZW50aW5lbCgpLT5wYXJlbnRBbmRSZWQpKTsKKyAgICB9Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGxlZnRSb3RhdGUoUmF3Tm9kZSogeCkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIHk7CisKKyAgICAgICAgeSA9IHgtPm1fcmlnaHQ7CisgICAgICAg
IHgtPm1fcmlnaHQgPSB5LT5tX2xlZnQ7CisKKyAgICAgICAgaWYgKHktPm1fbGVmdCAhPSBuaWxT
ZW50aW5lbCgpKQorICAgICAgICAgICAgeS0+bV9sZWZ0LT5zZXRQYXJlbnQoeCk7CisgIAorICAg
ICAgICB5LT5zZXRQYXJlbnQoeC0+cGFyZW50KCkpOworCisgICAgICAgIGlmKCB4ID09IHgtPnBh
cmVudCgpLT5tX2xlZnQpCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9sZWZ0ID0geTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgeC0+cGFyZW50KCktPm1fcmlnaHQgPSB5OworICAgICAg
ICB5LT5tX2xlZnQgPSB4OworICAgICAgICB4LT5zZXRQYXJlbnQoeSk7CisKKyAgICAgICAgQVNT
RVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByaWdo
dFJvdGF0ZShSYXdOb2RlKiB5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeDsKKworICAgICAg
ICB4ID0geS0+bV9sZWZ0OworICAgICAgICB5LT5tX2xlZnQgPSB4LT5tX3JpZ2h0OworCisgICAg
ICAgIGlmIChuaWxTZW50aW5lbCgpICE9IHgtPm1fcmlnaHQpCisgICAgICAgICAgICB4LT5tX3Jp
Z2h0LT5zZXRQYXJlbnQoeSk7CisKKyAgICAgICAgeC0+c2V0UGFyZW50KHktPnBhcmVudCgpKTsK
KyAgICAgICAgaWYoIHkgPT0geS0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgIHktPnBh
cmVudCgpLT5tX2xlZnQgPSB4OworICAgICAgICBlbHNlCisgICAgICAgICAgICB5LT5wYXJlbnQo
KS0+bV9yaWdodCA9IHg7CisgICAgICAgIHgtPm1fcmlnaHQgPSB5OworICAgICAgICB5LT5zZXRQ
YXJlbnQoeCk7CisKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBpbnNlcnRIZWxwKE5vZGUqIHopCisgICAgeworICAgICAgICBS
YXdOb2RlKiB4OworICAgICAgICBSYXdOb2RlKiB5OworICAKKyAgICAgICAgei0+bV9sZWZ0ID0g
ei0+bV9yaWdodCA9IG5pbFNlbnRpbmVsKCk7CisgICAgICAgIHkgPSByb290KCk7CisgICAgICAg
IHggPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgd2hpbGUgKHggIT0gbmlsU2VudGluZWwoKSkg
eworICAgICAgICAgICAgeSA9IHg7CisgICAgICAgICAgICBpZiAoei0+a2V5IDwgYXNOb2RlKHgp
LT5rZXkpCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fbGVmdDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB4ID0geC0+bV9yaWdodDsKKyAgICAgICAgfQorICAgICAgICB6LT5z
ZXRQYXJlbnQoeSk7CisgICAgICAgIGlmICh5ID09IHJvb3QoKSB8fCB6LT5rZXkgPCBhc05vZGUo
eSktPmtleSkKKyAgICAgICAgICAgIHktPm1fbGVmdCA9IHo7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHktPm1fcmlnaHQgPSB6OworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+
aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIFJhd05vZGUqIHN1Y2Nlc3NvckludGVybmFsKFJh
d05vZGUqIHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICAKKyAgICAgICAg
aWYgKG5pbFNlbnRpbmVsKCkgIT0gKHkgPSB4LT5tX3JpZ2h0KSkgeworICAgICAgICAgICAgd2hp
bGUgKHktPm1fbGVmdCAhPSBuaWxTZW50aW5lbCgpKSB7CisgICAgICAgICAgICAgICAgeSA9IHkt
Pm1fbGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgeSA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgd2hpbGUg
KHggPT0geS0+bV9yaWdodCkgeworICAgICAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAg
ICAgIHkgPSB5LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh5ID09
IHJvb3QoKSkgcmV0dXJuIG5pbFNlbnRpbmVsKCk7CisgICAgICAgICAgICByZXR1cm4geTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZUZpeFVwKFJhd05vZGUqIHgpCisg
ICAgeworICAgICAgICBSYXdOb2RlKiByZWFsUm9vdCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAg
ICBSYXdOb2RlKiB3OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF4LT5pc1JlZCgpICYmIHJl
YWxSb290ICE9IHgpIHsKKyAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQp
IHsKKyAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAg
ICAgICAgaWYgKHctPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKDAp
OworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAg
ICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkg
eyAKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAg
ICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICB3LT5tX2xlZnQtPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh3
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFy
ZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVk
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAg
ICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHctPnNldFJl
ZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5p
c1JlZCgpKSB7IAorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIXctPm1fbGVmdC0+aXNSZWQoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRS
b3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVm
dDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQo
eC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+
c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFs
c2UpOworICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeC0+c2V0UmVkKGZhbHNlKTsKKworICAgICAgICBB
U1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+
aXNSZWQoKSk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29u
c2lzdGVuY3lSZWN1cnNlKFJhd05vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZSA9
PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobm9kZS0+
aXNSZWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX2xlZnQtPmlzUmVkKCkpOwor
ICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX3JpZ2h0LT5pc1JlZCgpKTsKKyAgICAgICAgfQor
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX2xlZnQpOworICAgICAgICBj
aGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX3JpZ2h0KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wUmVjdXJzZShSYXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUg
PT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpbnRmKCIg
ICBub2RlOiAlcFxuIiwgbm9kZSk7CisgICAgICAgIHByaW50ZigiICAgICAgY29sb3IgPSAlc1xu
Iiwgbm9kZS0+aXNSZWQoKSA/ICJyZWQiIDogImJsYWNrIik7CisgICAgICAgIHByaW50ZigiICAg
ICAgbGVmdCAgPSAlcFxuIiwgbm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICBy
aWdodCA9ICVwXG4iLCBub2RlLT5tX3JpZ2h0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+
bV9sZWZ0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7CisgICAgfQorI2Vu
ZGlmCisgICAgCisgICAgUmF3Tm9kZSogcm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gJm1f
cm9vdDsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogbmlsU2VudGluZWwoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICZtX25pbFNlbnRpbmVsOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBhc05v
ZGUoUmF3Tm9kZSogcmF3Tm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IHJv
b3QoKSk7CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IG5pbFNlbnRpbmVsKCkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZSo+KHJhd05vZGUpOworICAgIH0KKyAgICAKKyAgICBS
YXdOb2RlIG1fcm9vdDsKKyAgICBSYXdOb2RlIG1fbmlsU2VudGluZWw7Cit9OworCit9CisKKyNl
bmRpZgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZp
c2lvbiA5MzI3MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGJhY2t0
cmFjaygpOwogCiAgICAgICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxEYXRhLT5yZWdl
eEFsbG9jYXRvcik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqZ2xvYmFsRGF0YSwg
dGhpcyk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1
ZmZlcik7CiAgICAgICAgIGppdE9iamVjdC5zZXQobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSk7
CiAgICAgICAgIGppdE9iamVjdC5zZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDkzMjcyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwx
MSArNjUsMTEgQEAgcHVibGljOgogCiAgICAgaW50IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0
LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAgICB7Ci0g
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5tX2NvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CisgICAg
ICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CiAgICAgfQog
CiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVy
biBtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQorICAgIHZvaWQgKmdldEFkZHIo
KSB7IHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2VuZGlmCiAK
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMzU5KQor
KysgU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDIwIEBACisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgVGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBm
cmVlIGluZGl2aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9k
dWNlZCBhIGJlc3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9j
YXRvcgorICAgICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxv
Y2F0ZSBtZW1vcnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRp
dmlkdWFsIG5vZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5l
aXRoZXIgQVZMVHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhp
cy4KKyAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8g
dXNlIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDogQWRkZWQuCisKIDIwMTEt
MDgtMTUgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWZhY3RvciBKUyBvYmplY3RzIHRvIGFsbG9jYXRlIGluIHN0YXRpYyBjcmVhdGUgbWV0aG9k
cyByYXRoZXIgdGhhbiBjb25zdHJ1Y3RvcnMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5MzM1OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTA4LTE4ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9y
IG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2aWR1YWwKKyAgICAgICAgY2h1bmtzIG9m
IGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
ICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJlc3QtZml0LCBiYWxhbmNlZC10cmVlIGJh
c2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAgICAgICByZXF1aXJlZCBhIGJhbGFuY2Vk
IHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoYXQKKyAgICAgICAgcGVy
bWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5vZGVzIGRpcmVjdGx5IChhcyBvcHBvc2Vk
IHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZMVHJlZSBub3IgV2ViQ29yZSdzIFBPRFJl
ZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNl
cyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAg
aGFuZGxlLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgc2luY2UgYmVoYXZpb3IgaXMgbm90IGNo
YW5nZWQuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oOiBBZGRlZC4KKwogMjAxMS0wOC0xOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3
LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjkzMzU0
LgpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVy
cy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNv
cmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0b3JI
YW5kbGUuaD4K
</data>
<flag name="commit-queue"
          id="100242"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105406</attachid>
            <date>2011-08-26 14:17:20 -0700</date>
            <delta_ts>2011-08-26 14:34:38 -0700</delta_ts>
            <desc>work in progress - fix style, fix more platforms</desc>
            <filename>metaalloc_patch_10.diff</filename>
            <type>text/plain</type>
            <size>228362</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ0IEBA
CisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IhKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAq
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmFkZHJl
c3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c3RhcnQpOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0
RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6
CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Omdl
dENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChwcmludFZhbHVlKToKKyAgICAg
ICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6UmVkQmxh
Y2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQYWlyKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3Rz
OjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFj
dCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6cmVtb3ZlKToKKyAgICAgICAgKFJlZEJs
YWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6YXNz
ZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6dGVzdERy
aXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3Rz
Ojp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE9uZUFs
bG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RTaW1wbGVGdWxsQ29hbGVzY2UpOgor
ICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0RklGT0FsbG9jKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JU
ZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6
OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFNocmluayk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2Nl
KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6c2V0VXApOgorICAgICAgICAoTWV0YUFs
bG9jYXRvclRlc3RzOjp0ZWFyRG93bik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmFs
bG9jYXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6ZnJlZSk6CisgICAgICAgIChN
ZXRhQWxsb2NhdG9yVGVzdHM6Om5vdGlmeUZyZWUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRl
c3RzOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmNvbmZpcm0p
OgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpjb25maXJtSGlnaFdhdGVybWFyayk6Cisg
ICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6Ynl0ZXNDb21taXR0ZWQpOgorICAgICAgICAoTWV0YUFsbG9jYXRv
clRlc3RzOjpieXRlU3RhdGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpwYWdlU3Rh
dGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpNZXRhQWxs
b2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0
UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yNjRiaXRS
ZWdyZXNzaW9uVGVzdHM6OnJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QpOgorICAgICAgICAobWFp
bik6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6On5N
ZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cm91
bmRVcCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0Fs
bG9jYXRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzUmVzZXJ2ZWQpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0NvbW1pdHRlZCk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUmVkQmxhY2tUcmVlLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OnBhcmVudCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjppc1JlZCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6UmF3Tm9kZTo6c2V0UmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSZWRCbGFj
a1RyZWUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpm
aXJzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpw
cmVkZWNlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEV4YWN0KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbCk6
CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Y2hlY2tDb25z
aXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZHVtcCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6bGVmdFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6cmlnaHRSb3RhdGUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydEhlbHAp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnN1Y2Nlc3NvckludGVybmFsKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmVGaXhVcCk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6Y2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmR1bXBSZWN1cnNlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyb290KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpuaWxTZW50aW5lbCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6YXNOb2RlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKiB5YXJy
L1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmdldEFkZHIpOgorCiAyMDExLTA4
LTE5ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAd2Via2l0Lm9yZz4KIAogICAgICAgICBPbmx5ICNp
bmNsdWRlIDxzaWduYWwuaD4gYW5kIHJlcXVpcmUgU0FfUkVTVEFSVCB3aGVuIGJ1aWxkaW5nIHdp
dGggSlNDX01VTFRJUExFX1RIUkVBRFMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5MzQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsNiArNTAyLDkgQEAg
amF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9N
YXRoRXh0cmFzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NZXRhQWxsb2NhdG9yLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxs
b2NhdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL05vbkNvcHlpbmdTb3J0LmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvTm9uY29weWFibGUuaCBcCkBAIC01MzQsNiArNTM3LDcgQEAgamF2YXNjcmlw
dGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21OdW1i
ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlclNlZWQuaCBcCisJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9SZWZDb3VudGVkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRl
ZExlYWtDb3VudGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVk
TGVha0NvdW50ZXIuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5leHAJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDAwLDYgKzQwMCwxMiBAQCBfX1pOM1dURjEy
Y3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCiBfX1pOM1dURjEyZGV0YWNoVGhyZWFkRWoKIF9f
Wk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CitfX1pOM1dU
RjEzTWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCitfX1pOM1dURjEzTWV0YUFs
bG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yOGFs
bG9jYXRlRW0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQorX19aTjNXVEYxM01ldGFBbGxv
Y2F0b3JEMUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckQyRXYKIF9fWk4zV1RGMTNTdHJpbmdC
dWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5rVG9G
aXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00MzQs
NiArNDQwLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4Y2hh
cmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3MEVp
aWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxsb2Nh
dG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYKIF9f
Wk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5nTnVs
bGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0aWNz
RXYKQEAgLTUxMyw2ICs1MjEsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01hdGNo
RmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19aTjNX
VEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUKIF9f
Wk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
V1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAt
NzU3LDYgKzc1NywxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBh
dGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8Rmls
ZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgorCQk8
L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9y
SGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTg5Nyw2ICs5MDksMTAgQEAKIAkJ
CT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVkQmxh
Y2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5c
Li5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTI3LDYgKzI3LDcgQEAKIAkJCQkxNDEyMTRCRjBBNDkxOTBFMDA0ODAyNTUgLyogUEJYVGFy
Z2V0RGVwZW5kZW5jeSAqLywKIAkJCQk5MzJGNUJFOTA4MjJBMUM3MDA3MzY5NzUgLyogUEJYVGFy
Z2V0RGVwZW5kZW5jeSAqLywKIAkJCQkxNEJENTlDNzBBM0U4RkE0MDBCQUY1OUMgLyogUEJYVGFy
Z2V0RGVwZW5kZW5jeSAqLywKKwkJCQkwRjk2M0IyOTEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYVGFy
Z2V0RGVwZW5kZW5jeSAqLywKIAkJCSk7CiAJCQluYW1lID0gQWxsOwogCQkJcHJvZHVjdE5hbWUg
PSBBbGw7CkBAIC00OSw2ICs1MCwxMyBAQAogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyog
T3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEy
OTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6
ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFs
TnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKKwkJ
MEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjBBNENGMDRC
M0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBGOTYz
QjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3
MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRjk2M0IyNTEz
Rjc1MzMzMDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVz
dHMuY3BwICovOyB9OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0Iy
NjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICov
OyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07
IH07CisJCTBGOTYzQjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JE
MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxs
b2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4
MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1
ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3ODMwMDY0
RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBv
c2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsgfTsKQEAg
LTYxOCw2ICs2MjYsMjAgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQkwRjk2M0IxNDEzRjc1MzA0
MDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29u
dGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMw
MkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90
ZUdsb2JhbElEU3RyaW5nID0gOTMyRjVCM0UwODIyQTFDNzAwNzM2OTc1OworCQkJcmVtb3RlSW5m
byA9IEphdmFTY3JpcHRDb3JlOworCQl9OworCQkwRjk2M0IyODEzRjc2NEQxMDAwMkQ5QjIgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3Ry
aW5nID0gMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIyOworCQkJcmVtb3RlSW5mbyA9IHVuaXR0ZXN0
czsKKwkJfTsKIAkJMTQxMjExMzUwQTQ4Nzk2MTAwNDgwMjU1IC8qIFBCWENvbnRhaW5lckl0ZW1Q
cm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5l
clBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsK
QEAgLTY3Nyw2ICs2OTksMjYgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5
NjNCMUExM0Y3NTMwNDAwMDJEOUIyIC8qIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJCQlp
c2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKKwkJCWRzdFBhdGggPSAiIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZp
bGVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiQ29weSBTdXBwb3J0IFNjcmlwdCI7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMEY5NjNCMUMxM0Y3
NTMwNDAwMDJEOUIyIC8qIEluc3RhbGwgU3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQ
QlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKKwkJCWRzdFBh
dGggPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvSmF2YVNjcmlwdENvcmUuZnJh
bWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAwOwor
CQkJZmlsZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJJbnN0YWxsIFN1cHBvcnQgU2NyaXB0IjsK
KwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOworCQl9OwogCQk1REJC
MTUxMTEzMUQwQjEzMDA1NkFEMzYgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHsKIAkJCWlz
YSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgz
NjQ3OwpAQCAtNzMwLDYgKzc3MiwxMiBAQAogCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyog
Q3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENyb3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
QkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEYyOTQ3OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbE51bWJlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAv
KiB1bml0dGVzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdW5p
dHRlc3RzLmNwcDsgcGF0aCA9IHRlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVk
Lm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdW5pdHRlc3Rz
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjk2M0IyNjEzRjc1Mzk5
MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0Iy
QTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFs
bG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxs
b2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNG
QzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0
MDAwNjc2MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPU0FsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxNDAwMDY5MjEyQTZGOUUxMDA2NEQxMjMgLyogT1NBbGxvY2F0b3JQb3NpeC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBPU0FsbG9jYXRvclBvc2l4LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMjcsNiArMTM3NSwxNSBAQAogLyogRW5k
IFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVp
bGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE3MTNGNzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdv
cmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMTgxM0Y3NTMw
NDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAor
CQkJCTBGOTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsg
aW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQxMjExMUUwQTQ4NzkzQzAwNDgwMjU1IC8qIEZyYW1ld29y
a3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0
aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xMzc1LDYgKzE0MzIsNyBAQAogCQkJCTkzMkY1QkUx
MDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1
IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkg
Ki8sCisJCQkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLywKIAkJCSk7
CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTQ0
MCw5ICsxNDk4LDE4IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07
CisJCTBGOTYzQjBGMTNGNzUyQjIwMDAyRDlCMiAvKiB1bml0ICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IxMTEzRjc1MkY3MDAwMkQ5QjIgLyog
dW5pdHRlc3RzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gdW5pdDsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY5NjNCMEYx
M0Y3NTJCMjAwMDJEOUIyIC8qIHVuaXQgKi8sCiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYx
IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFGNTlDIC8qIHRlc3RhcGku
YyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLywKQEAg
LTE2NTQsNiArMTcyMSwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IyRTEz
RkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAorCQkJCTBGOTYzQjJC
MTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjk2M0IyQTEz
Rjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAorCQkJCTBGOTYzQjI2MTNGNzUz
OTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAz
QjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICov
LAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovLApAQCAtMjIzMyw2
ICsyMzA0LDkgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdB
c3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRjEzRkM2NkJC
MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5
NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheVByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM1MjQwRTE2RkM4QTAwQjM0NDYwIC8qIEFycmF5
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTkzLDYgKzI2NjcsMjUgQEAKIC8q
IEVuZCBQQlhIZWFkZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2
ZVRhcmdldCBzZWN0aW9uICovCisJCTBGOTYzQjEyMTNGNzUzMDQwMDAyRDlCMiAvKiB1bml0dGVz
dHMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMEY5NjNCMUUxM0Y3NTMwNDAwMDJEOUIyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ1bml0dGVzdHMiICovOworCQkJYnVpbGRQaGFzZXMg
PSAoCisJCQkJMEY5NjNCMTUxM0Y3NTMwNDAwMDJEOUIyIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY5
NjNCMTcxM0Y3NTMwNDAwMDJEOUIyIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJMEY5NjNCMUExM0Y3
NTMwNDAwMDJEOUIyIC8qIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCisJCQkJMEY5NjNCMUMxM0Y3
NTMwNDAwMDJEOUIyIC8qIEluc3RhbGwgU3VwcG9ydCBTY3JpcHQgKi8sCisJCQkpOworCQkJYnVp
bGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY5NjNCMTMxM0Y3
NTMwNDAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9
IHVuaXR0ZXN0czsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVu
Y2UgPSAwRjk2M0IyMzEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovOworCQkJcHJvZHVj
dFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsKIAkJMTQxMjExMUYw
QTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQxMjExMzkwQTQ4Nzk4NDAwNDgwMjU1
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJtaW5pZG9t
IiAqLzsKQEAgLTI3MDMsNiArMjc5Niw3IEBACiAJCQkJMTQxMjExMUYwQTQ4NzkzQzAwNDgwMjU1
IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkUwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkg
Ki8sCiAJCQkJOTMyRjVCREEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLywKKwkJCQkwRjk2M0Ix
MjEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQ
QlhQcm9qZWN0IHNlY3Rpb24gKi8KQEAgLTI4MTcsNiArMjkxMSwxNCBAQAogLyogRW5kIFBCWFNo
ZWxsU2NyaXB0QnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWls
ZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5NjNCMTUxM0Y3NTMwNDAwMDJEOUIyIC8qIFNvdXJjZXMg
Ki8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFz
ayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjk2M0IyNTEzRjc1MzMzMDAwMkQ5
QjIgLyogdW5pdHRlc3RzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkxNDEyMTExRDBBNDg3OTNDMDA0
ODAyNTUgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTI4NDEsNiArMjk0Myw3IEBACiAJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CiAJCQlmaWxlcyA9ICgKKwkJCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0
YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VDMzc2MDA0MjdB
NDggLyogQXJnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRTEwN0VDMzc2MDA0
MjdBNDggLyogQXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZC
REUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zMDQ4LDYg
KzMxNTEsMTYgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8q
IEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCQkwRjk2M0IxMzEzRjc1MzA0
MDAwMkQ5QjIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdl
dERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSA5MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2
YVNjcmlwdENvcmUgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGOTYzQjE0MTNGNzUzMDQwMDAyRDlC
MiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCTBGOTYzQjI5MTNGNzY0RDEw
MDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0
RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGOTYzQjEyMTNGNzUzMDQwMDAyRDlCMiAvKiB1bml0
dGVzdHMgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGOTYzQjI4MTNGNzY0RDEwMDAyRDlCMiAvKiBQ
QlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTE0MTIxMTM2MEE0ODc5NjEwMDQ4MDI1
NSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5k
ZW5jeTsKIAkJCXRhcmdldCA9IDkzMkY1QjNFMDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZSAqLzsKQEAgLTMwOTEsNiArMzIwNCwzOCBAQAogLyogRW5kIFBCWFRhcmdldERlcGVuZGVu
Y3kgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICov
CisJCTBGOTYzQjFGMTNGNzUzMDQwMDAyRDlCMiAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0
dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdW5pdHRlc3RzOworCQkJfTsKKwkJCW5hbWUg
PSBEZWJ1ZzsKKwkJfTsKKwkJMEY5NjNCMjAxM0Y3NTMwNDAwMDJEOUIyIC8qIFJlbGVhc2UgKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRlc3RBUEkueGNjb25maWcg
Ki87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHVuaXR0ZXN0czsK
KwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMEY5NjNCMjExM0Y3NTMwNDAwMDJE
OUIyIC8qIFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwor
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0Njcg
LyogVGVzdEFQSS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVD
VF9OQU1FID0gdW5pdHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJ
CTBGOTYzQjIyMTNGNzUzMDQwMDAyRDlCMiAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0g
WENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJD
MDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB1bml0dGVzdHM7CisJCQl9OworCQkJbmFt
ZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTE0MTIxMTNBMEE0ODc5ODQwMDQ4MDI1NSAvKiBEZWJ1
ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5n
cyA9IHsKQEAgLTMzMDUsNiArMzQ1MCwxNyBAQAogLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9u
IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCisJ
CTBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3RzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBGOTYzQjFGMTNGNzUz
MDQwMDAyRDlCMiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjk2M0IyMDEzRjc1MzA0MDAwMkQ5QjIgLyog
UmVsZWFzZSAqLywKKwkJCQkwRjk2M0IyMTEzRjc1MzA0MDAwMkQ5QjIgLyogUHJvZmlsaW5nICov
LAorCQkJCTBGOTYzQjIyMTNGNzUzMDQwMDAyRDlCMiAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsK
KwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1
cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTE0MTIxMTM5MEE0ODc5ODQwMDQ4MDI1
NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibWluaWRv
bSIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1i
bGVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRv
ci5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KQEAgLTEyOCwxOSArMTI5LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIEFzc2VtYmxlckxhYmVsKG1faW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9p
ZCogZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9v
bCogYWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKCFtX2luZGV4KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jKGdsb2JhbERhdGEsIG1faW5k
ZXgpOworICAgICAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9
IGdsb2JhbERhdGEuZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZShnbG9iYWxEYXRhLCBtX2lu
ZGV4KTsKIAogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1
bHQsIG1faW5kZXgpOworICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRh
YmxlKHJlc3VsdC0+c3RhcnQoKSwgcmVzdWx0LT5zaXplSW5CeXRlcygpKTsKIAotICAgICAgICAg
ICAgcmV0dXJuIG1lbWNweShyZXN1bHQsIG1fYnVmZmVyLCBtX2luZGV4KTsKKyAgICAgICAgICAg
IG1lbWNweShyZXN1bHQtPnN0YXJ0KCksIG1fYnVmZmVyLCBtX2luZGV4KTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFiZWwgbGFiZWwpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gOTM0
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjksMjIgKzY5LDggQEAgY2xhc3MgTGlua0J1ZmZlciB7CiAjZW5kaWYK
IAogcHVibGljOgotICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNy
b0Fzc2VtYmxlciogbWFzbSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wpCi0gICAgICAgIDogbV9leGVjdXRhYmxlUG9vbChleGVjdXRhYmxlUG9vbCkKLSAgICAgICAg
LCBtX3NpemUoMCkKLSAgICAgICAgLCBtX2NvZGUoMCkKLSAgICAgICAgLCBtX2Fzc2VtYmxlciht
YXNtKQotICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKLSNpZm5kZWYgTkRFQlVH
Ci0gICAgICAgICwgbV9jb21wbGV0ZWQoZmFsc2UpCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGxp
bmtDb2RlKCk7Ci0gICAgfQotCi0gICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCBFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3Ip
Ci0gICAgICAgIDogbV9leGVjdXRhYmxlUG9vbChhbGxvY2F0b3IucG9vbEZvclNpemUoZ2xvYmFs
RGF0YSwgbWFzbS0+bV9hc3NlbWJsZXIuY29kZVNpemUoKSkpCi0gICAgICAgICwgbV9zaXplKDAp
CisgICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVy
KiBtYXNtKQorICAgICAgICA6IG1fc2l6ZSgwKQogICAgICAgICAsIG1fY29kZSgwKQogICAgICAg
ICAsIG1fYXNzZW1ibGVyKG1hc20pCiAgICAgICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRh
KQpAQCAtMTg1LDE0ICsxNzEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBwZXJmb3JtRmlu
YWxpemF0aW9uKCk7CiAKLSAgICAgICAgcmV0dXJuIENvZGVSZWYobV9jb2RlLCBtX2V4ZWN1dGFi
bGVQb29sLCBtX3NpemUpOwotICAgIH0KLQotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZpbmFsaXpl
Q29kZUFkZGVuZHVtKCkKLSAgICB7Ci0gICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKLQot
ICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTGFiZWwoY29kZSgpKTsKKyAgICAgICAgcmV0dXJu
IENvZGVSZWYobV9leGVjdXRhYmxlTWVtb3J5KTsKICAgICB9CiAKICAgICBDb2RlUHRyIHRyYW1w
b2xpbmVBdChMYWJlbCBsYWJlbCkKQEAgLTIzMiwxNCArMjExLDE5IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBBU1NFUlQoIW1fY29kZSk7CiAjaWYgIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElP
TikKLSAgICAgICAgbV9jb2RlID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVD
b3B5KCptX2dsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wuZ2V0KCkpOworICAgICAgICBtX2V4
ZWN1dGFibGVNZW1vcnkgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHko
Km1fZ2xvYmFsRGF0YSk7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBtX2NvZGUgPSBtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0
KCk7CiAgICAgICAgIG1fc2l6ZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgp
OwogICAgICAgICBBU1NFUlQobV9jb2RlKTsKICNlbHNlCiAgICAgICAgIHNpemVfdCBpbml0aWFs
U2l6ZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwotICAgICAgICBtX2Nv
ZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlUG9vbC0+YWxsb2MoKm1fZ2xvYmFsRGF0YSwgaW5p
dGlhbFNpemUpOwotICAgICAgICBpZiAoIW1fY29kZSkKKyAgICAgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKCptX2dsb2Jh
bERhdGEsIGluaXRpYWxTaXplKTsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29kZSA9ICh1aW50OF90KiltX2V4ZWN1dGFi
bGVNZW1vcnktPnN0YXJ0KCk7CisgICAgICAgIEFTU0VSVChtX2NvZGUpOwogICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUobV9jb2RlLCBpbml0aWFsU2l6ZSk7CiAgICAg
ICAgIHVpbnQ4X3QqIGluRGF0YSA9ICh1aW50OF90KiltX2Fzc2VtYmxlci0+dW5saW5rZWRDb2Rl
KCk7CiAgICAgICAgIHVpbnQ4X3QqIG91dERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3Qq
PihtX2NvZGUpOwpAQCAtMjk3LDcgKzI4MSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAganVtcHNU
b0xpbmsuY2xlYXIoKTsKICAgICAgICAgbV9zaXplID0gd3JpdGVQdHIgKyBpbml0aWFsU2l6ZSAt
IHJlYWRQdHI7Ci0gICAgICAgIG1fZXhlY3V0YWJsZVBvb2wtPnRyeVNocmluayhtX2NvZGUsIGlu
aXRpYWxTaXplLCBtX3NpemUpOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayht
X3NpemUpOwogCiAjaWYgRFVNUF9MSU5LX1NUQVRJU1RJQ1MKICAgICAgICAgZHVtcExpbmtTdGF0
aXN0aWNzKG1fY29kZSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7CkBAIC0zNjYsNyArMzUwLDcgQEAg
cHJpdmF0ZToKICAgICB9CiAjZW5kaWYKICAgICAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
IG1fZXhlY3V0YWJsZVBvb2w7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1f
ZXhlY3V0YWJsZU1lbW9yeTsKICAgICBzaXplX3QgbV9zaXplOwogICAgIHZvaWQqIG1fY29kZTsK
ICAgICBNYWNyb0Fzc2VtYmxlciogbV9hc3NlbWJsZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJl
dmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDIyICsxOTksNTkgQEAgcHJp
dmF0ZToKIC8vIHBvaW50ZXIgdG8gdGhlIGNvZGUsIGFuZCBhIHJlZiBwb2ludGVyIHRvIHRoZSBw
b29sIGZyb20gd2l0aGluIHdoaWNoIGl0CiAvLyB3YXMgYWxsb2NhdGVkLgogY2xhc3MgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHsKK3ByaXZhdGU6CisgICAgLy8gVGhpcyBpcyBwcml2YXRlIGJlY2F1
c2UgaXQncyBkYW5nZXJvdXMgZW5vdWdoIHRoYXQgd2Ugd2FudCB1c2VzIG9mIGl0CisgICAgLy8g
dG8gYmUgZWFzeSB0byBmaW5kIC0gaGVuY2UgdGhlIHN0YXRpYyBjcmVhdGUgbWV0aG9kIGJlbG93
LgorICAgIGV4cGxpY2l0IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZVB0cikKKyAgICAgICAgOiBtX2NvZGVQdHIoY29kZVB0cikKKyAgICB7CisgICAgICAg
IEFTU0VSVChtX2NvZGVQdHIpOworICAgIH0KKwogcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZigpCi0gICAgICAgIDogbV9zaXplKDApCiAgICAgewogICAgIH0KIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZih2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBl
eGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUpCi0gICAgICAgIDogbV9jb2RlKGNvZGUpCi0gICAg
ICAgICwgbV9leGVjdXRhYmxlUG9vbChleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgLCBtX3NpemUo
c2l6ZSkKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5KQorICAgICAgICA6IG1fY29kZVB0cihleGVjdXRh
YmxlTWVtb3J5LT5zdGFydCgpKQorICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShleGVjdXRh
YmxlTWVtb3J5KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNN
YW5hZ2VkKCkpOworICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CisgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlz
IG9ubHkgd2hlbiB5b3Uga25vdyB0aGF0IHRoZSBjb2RlUHRyIHJlZmVycyB0byBjb2RlIHRoYXQg
aXMKKyAgICAvLyBhbHJlYWR5IGJlaW5nIGtlcHQgYWxpdmUgdGhyb3VnaCBzb21lIG90aGVyIG1l
YW5zLiBUeXBpY2FsbHkgdGhpcyBtZWFucworICAgIC8vIHRoYXQgY29kZVB0ciBpcyBpbW1vcnRh
bC4KKyAgICBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICB7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoY29kZVB0cik7CisgICAgfQorICAgIAorICAgIEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGUqIGV4ZWN1dGFibGVNZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9yeS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
Y29kZVB0cjsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKKyAg
ICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgcmV0dXJuIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9Cisg
ICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CiAK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jb2RlOwotICAgIFJlZlB0cjxFeGVjdXRhYmxl
UG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKLSAgICBzaXplX3QgbV9zaXplOworcHJpdmF0ZToKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbV9jb2RlUHRyOworICAgIFJlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L1g4NkFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk1LDkgKzE1OTUsOSBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiBiLm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAgICB9CiAgICAg
Ci0gICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIGFsbG9j
YXRvcik7CisgICAgICAgIHJldHVybiBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxE
YXRhKTsKICAgICB9CiAKICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFiZWwgcmV3
aW5kVG8pIHsgbV9mb3JtYXR0ZXIucmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7IH0KQEAgLTE5Mzks
OSArMTkzOSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNBbGlnbmVkKGludCBhbGlnbm1l
bnQpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpOyB9CiAgICAg
ICAgIHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KIAotICAg
ICAgICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1
dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0
YSwgYWxsb2NhdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29w
eShnbG9iYWxEYXRhKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmV3aW5kVG9MYWJlbChB
c3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBtX2J1ZmZlci5yZXdpbmRUb0xhYmVsKHJld2luZFRv
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAko
cmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5OSw3ICsyOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVy
biBtX2lzQ29uc3RydWN0b3IgPyBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZv
ckNvbnN0cnVjdCgpIDogb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxs
KCk7IH0KLSAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGV4ZWN1dGFibGVQb29sKCkgeyByZXR1cm4g
Z2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVQb29sKCk7IH0KKyAgICAgICAgRXhlY3V0YWJsZU1l
bW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRF
eGVjdXRhYmxlTWVtb3J5KCk7IH0KICNlbmRpZgogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgp
OyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICBjbGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdHlw
ZWRlZiBDb2RlTG9jYXRpb25MYWJlbCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGU7CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBlOwogCiAgICAgLy8gU3RydWN0dXJl
IHVzZWQgYnkgb3BfZ2V0X2J5X2lkX3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xp
c3QgaW5zdHJ1Y3Rpb24gdG8gaG9sZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgog
ICAgIHN0cnVjdCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QgewpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJl
dmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVy
ZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgICAgIH0gcHV0QnlJZFJlcGxhY2U7CiAgICAgICAgIH0gdTsKIAotICAg
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzdHViUm91dGluZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHN0dWJSb3V0aW5lOwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1
cm5Mb2NhdGlvbjsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luOwogICAg
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENv
bXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTI4LDcgKzkyOCw3IEBAIHZvaWQgSklUQ29t
cGlsZXI6OmNvbXBpbGUoSklUQ29kZSYgZW50cnkKICAgICAvLyBHZW5lcmF0ZSB0aGUgYm9keSBv
ZiB0aGUgcHJvZ3JhbS4KICAgICBjb21waWxlQm9keSgpOwogICAgIC8vIExpbmsKLSAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVj
dXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICBlbnRyeSA9IEpJVENvZGUobGlu
a0J1ZmZlci5maW5hbGl6ZUNvZGUoKSwgSklUQ29kZTo6REZHSklUKTsKIH0KQEAgLTk4Niw3ICs5
ODYsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAKIAogICAg
IC8vID09PSBMaW5rID09PQotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBsaW5rKGxpbmtCdWZmZXIp
OwogICAgIAogICAgIC8vIEZJWE1FOiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBh
cml0eSBjaGVjayBvdmVyIHRvIERGR09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVi
cy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNp
b24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw3IEBAIHN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2Ny
YXRjaChMaW5rQnVmZmUKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRU
b1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSks
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBvZmZzZXQsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlv
bkxhYmVsIHNsb3dDYXNlTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsJiBzdHViUm91dGluZSkKK3N0
YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBT
dHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90
IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9u
TGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYmIHN0dWJSb3V0aW5lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAKQEAgLTEzMywxMSArMTMzLDExIEBAIHN0
YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIKICAgICAKICAgICBlbWl0UmVz
dG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1
Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLT5leGVjdXRhYmxl
UG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1Ykpp
dCk7CiAgICAgCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNs
b3dDYXNlTGFiZWwpOwogICAgIAotICAgIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlQWRkZW5kdW0oKTsKKyAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOwogfQogCiBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGJhc2VWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25z
dCBQcm9wZXJ0eVNsb3QmIHNsb3QsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTE3
NiwxNSArMTc2LDE0IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUK
ICAgICAgICAgCiAgICAgICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0
b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAg
ICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgICAgIAogICAgICAgICBsaW5r
UmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5m
bywgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1
bSgpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgICAg
IHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAg
ICAgIAogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7
CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5
SWQpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMzEsNyArMjMwLDcgQEAg
c3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgIGdlbmVyYXRlUHJv
dG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwg
b2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5z
dHViUm91dGluZSk7CiAgICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVj
ayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0
aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5mby5pbml0R2V0QnlJ
ZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1
cmUsIHByb3RvdHlwZUNoYWluKTsKQEAgLTMyNCw3ICszMjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlC
dWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5
cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgIEFTU0VSVCghc3R1YkluZm8u
c3R1YlJvdXRpbmUpOwotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNl
bGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Qu
c3RydWN0dXJlTGlzdDsKQEAgLTM1MCwyMSArMzQ5LDIxIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxk
R2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAm
c3R1YkppdCk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4p
OwogICAgICAgICAKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgbGFzdFBy
b3RvQmVnaW4pOwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkp
OwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAK
LSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpn
bG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1
Y3R1cmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4
XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0
aW5lLCBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1w
TG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAg
CiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0g
MSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQwOCw3ICs0MDcsNyBAQCBzdGF0aWMg
Ym9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9jaGFpbikgewogICAgICAgICBBU1NFUlQoISFzdHVi
SW5mby5zdHViUm91dGluZSk7CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5l
dyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5
SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFp
bi5jaGFpbi5nZXQoKSk7Ci0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0
aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc3R1
YkluZm8uYWNjZXNzVHlwZSA9IGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdCk7CkBAIC00MTks
MTggKzQxOCwxOCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAg
ICAgaWYgKGxpc3RJbmRleCA8IFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewogICAgICAg
ICBzdHViSW5mby51LmdldEJ5SWRQcm90b0xpc3QubGlzdFNpemUrKzsKICAgICAgICAgCi0gICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwog
ICAgICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgZW50cnlMYWJlbDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0
aW5lOwogICAgICAgICAKLSAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVj
LCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIGVudHJ5TGFiZWwpOworICAgICAgICBnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQs
IG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgc3R1YlJvdXRp
bmUpOwogICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xp
c3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBl
bnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2Rl
KCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElT
VF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU0OCwxOCAr
NTQ3LDE3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFs
RGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgICAgICAgICAg
aWYgKG5lZWRUb1Jlc3RvcmVTY3JhdGNoKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgICAgICAgICAgc3R1YkluZm8u
c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKKyAgICAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5q
dW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1
dEJ5SWRGdW5jdGlvbihzbG90LCBwdXRLaW5kKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHN0dWJJbmZvLmluaXRQdXRCeUlkVHJhbnNpdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgb2xkU3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWlu
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0MiArMjcsMTEx
IEBACiAKICNpbmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAKKyNpZiBFTkFCTEUoRVhF
Q1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+
CisjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WTVRhZ3Mu
aD4KKyNlbmRpZgorCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAordXNpbmcgbmFtZXNwYWNlIFdU
RjsKKwogbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1Jf
REVNQU5EKQogCi1FeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lz
dGVtQWxsb2Moc2l6ZV90IHNpemUpCitjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOiBw
dWJsaWMgTWV0YUFsbG9jYXRvciB7CitwdWJsaWM6CisgICAgRGVtYW5kRXhlY3V0YWJsZUFsbG9j
YXRvcigpCisgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9j
YXRpb25zIHRvIDMyIGJ5dGVzCisgICAgeworICAgICAgICAvLyBEb24ndCBwcmVhbGxvY2F0ZSBh
bnkgbWVtb3J5IGhlcmUuCisgICAgfQorICAgIAorICAgIHZpcnR1YWwgfkRlbWFuZEV4ZWN1dGFi
bGVBbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJl
c2VydmF0aW9ucy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc2VydmF0aW9ucy5hdChpKS5k
ZWFsbG9jYXRlKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkKiBhbGxv
Y2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpCisgICAgeworICAgICAgICBzaXplX3QgbmV3
TnVtUGFnZXMgPSAoKChudW1QYWdlcyAqIHBhZ2VTaXplKCkgKyBKSVRfQUxMT0NBVE9SX0xBUkdF
X0FMTE9DX1NJWkUgLSAxKSAvIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSAqIEpJVF9B
TExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSkgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgp
OworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5ld051bVBhZ2VzID49IG51bVBhZ2VzKTsKKyAg
ICAgICAgCisgICAgICAgIG51bVBhZ2VzID0gbmV3TnVtUGFnZXM7CisgICAgICAgIAorICAgICAg
ICBQYWdlUmVzZXJ2YXRpb24gcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUo
bnVtUGFnZXMgKiBwYWdlU2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNV
VEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIGlmICghcmVzZXJ2YXRpb24pCisg
ICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAKKyAgICAgICAgcmVzZXJ2YXRpb25zLmFwcGVu
ZChyZXNlcnZhdGlvbik7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb24uYmFz
ZSgpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCog
cGFnZSkKKyAgICB7CisgICAgICAgIE9TQWxsb2NhdG9yOjpjb21taXQocGFnZSwgcGFnZVNpemUo
KSwgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICB9CisgICAgCisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKKyAgICB7CisgICAgICAgIE9T
QWxsb2NhdG9yOjpkZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgVmVjdG9yPFBhZ2VSZXNlcnZhdGlvbiwgMTY+IHJlc2VydmF0aW9uczsKK307CisKK3N0
YXRpYyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CisKK3ZvaWQgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpCiB7Ci0gICAgUGFnZUFsbG9jYXRp
b24gYWxsb2NhdGlvbiA9IFBhZ2VBbGxvY2F0aW9uOjphbGxvY2F0ZShzaXplLCBPU0FsbG9jYXRv
cjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0gICAg
aWYgKCFhbGxvY2F0aW9uKQotICAgICAgICBDUkFTSCgpOwotICAgIHJldHVybiBhbGxvY2F0aW9u
OworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0b3IgPSBuZXcgRGVtYW5kRXhl
Y3V0YWJsZUFsbG9jYXRvcigpOwogfQogCi12b2lkIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxl
YXNlKEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uJiBhbGxvY2F0aW9uKQorRXhlY3V0YWJsZUFs
bG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIGFsbG9j
YXRpb24uZGVhbGxvY2F0ZSgpOworICAgIEFTU0VSVChhbGxvY2F0b3IpOwogfQogCiBib29sIEV4
ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwog
fQotICAgIAorCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUo
KQogewogICAgIHJldHVybiBmYWxzZTsKIH0KLSAgICAKKworUGFzc1JlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEm
LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICgh
cmVzdWx0KQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwor
fQorCiBzaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKIHsK
LSAgICByZXR1cm4gMDsKLX0gCisgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQo
KTsKK30KIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQordm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCit7CisgICAgYWxsb2NhdG9yLT5kdW1wUHJvZmls
ZSgpOworfQogI2VuZGlmCiAKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1Jf
REVNQU5EKQorCiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAKICNpZiBPUyhX
SU5ET1dTKSB8fCBPUyhTWU1CSUFOKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxzdGRkZWYuaD4gLy8gZm9yIHB0cmRpZmZfdAogI2lu
Y2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgpAQCAtMTAyLDEyMCArMTAzLDI3IEBAIGlubGluZSBzaXplX3Qgcm91bmRVcEFsbG9jYXRpb25T
aXplKHNpemUKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNsYXNzIEV4ZWN1dGFibGVQb29sIDogcHVi
bGljIFJlZkNvdW50ZWQ8RXhlY3V0YWJsZVBvb2w+IHsKLXB1YmxpYzoKLSNpZiBFTkFCTEUoRVhF
Q1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQotICAgIHR5cGVkZWYgUGFnZUFsbG9jYXRpb24gQWxs
b2NhdGlvbjsKLSNlbHNlCi0gICAgY2xhc3MgQWxsb2NhdGlvbiB7Ci0gICAgcHVibGljOgotICAg
ICAgICBBbGxvY2F0aW9uKHZvaWQqIGJhc2UsIHNpemVfdCBzaXplKQotICAgICAgICAgICAgOiBt
X2Jhc2UoYmFzZSkKLSAgICAgICAgICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgIHsKLSAgICAg
ICAgfQotICAgICAgICB2b2lkKiBiYXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgICAgIHNp
emVfdCBzaXplKCkgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fYmFzZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCog
bV9iYXNlOwotICAgICAgICBzaXplX3QgbV9zaXplOwotICAgIH07Ci0jZW5kaWYKLSAgICB0eXBl
ZGVmIFZlY3RvcjxBbGxvY2F0aW9uLCAyPiBBbGxvY2F0aW9uTGlzdDsKLQotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhlY3V0YWJs
ZVBvb2woZ2xvYmFsRGF0YSwgbikpOwotICAgIH0KLQotICAgIHZvaWQqIGFsbG9jKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4pCi0gICAgewotICAgICAgICBBU1NFUlQobV9mcmVl
UHRyIDw9IG1fZW5kKTsKLQotICAgICAgICAvLyBSb3VuZCAnbicgdXAgdG8gYSBtdWx0aXBsZSBv
ZiB3b3JkIHNpemU7IGlmIGFsbCBhbGxvY2F0aW9ucyBhcmUgb2YKLSAgICAgICAgLy8gd29yZCBz
aXplZCBxdWFudGl0aWVzLCB0aGVuIGFsbCBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIHdpbGwgYmUg
YWxpZ25lZC4KLSAgICAgICAgbiA9IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuLCBzaXplb2Yodm9p
ZCopKTsKLQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihuKSA8IChtX2VuZCAt
IG1fZnJlZVB0cikpIHsKLSAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZVB0cjsKLSAg
ICAgICAgICAgIG1fZnJlZVB0ciArPSBuOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEluc3VmZmljaWVudCBzcGFjZSB0byBhbGxvY2F0ZSBpbiB0
aGUgZXhpc3RpbmcgcG9vbAotICAgICAgICAvLyBzbyB3ZSBuZWVkIGFsbG9jYXRlIGludG8gYSBu
ZXcgcG9vbAotICAgICAgICByZXR1cm4gcG9vbEFsbG9jYXRlKGdsb2JhbERhdGEsIG4pOwotICAg
IH0KLSAgICAKLSAgICB2b2lkIHRyeVNocmluayh2b2lkKiBhbGxvY2F0aW9uLCBzaXplX3Qgb2xk
U2l6ZSwgc2l6ZV90IG5ld1NpemUpCi0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Y2hh
cio+KGFsbG9jYXRpb24pICsgb2xkU2l6ZSAhPSBtX2ZyZWVQdHIpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIG1fZnJlZVB0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0aW9uKSAr
IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuZXdTaXplLCBzaXplb2Yodm9pZCopKTsKLSAgICB9Ci0K
LSAgICB+RXhlY3V0YWJsZVBvb2woKQotICAgIHsKLSAgICAgICAgQWxsb2NhdGlvbkxpc3Q6Oml0
ZXJhdG9yIGVuZCA9IG1fcG9vbHMuZW5kKCk7Ci0gICAgICAgIGZvciAoQWxsb2NhdGlvbkxpc3Q6
Oml0ZXJhdG9yIHB0ciA9IG1fcG9vbHMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAg
ICAgICAgICBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZSgqcHRyKTsKLSAgICB9Ci0KLSAg
ICBzaXplX3QgYXZhaWxhYmxlKCkgY29uc3QgeyByZXR1cm4gKG1fcG9vbHMuc2l6ZSgpID4gMSkg
PyAwIDogbV9lbmQgLSBtX2ZyZWVQdHI7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgQWxsb2Nh
dGlvbiBzeXN0ZW1BbGxvYyhzaXplX3Qgbik7Ci0gICAgc3RhdGljIHZvaWQgc3lzdGVtUmVsZWFz
ZShBbGxvY2F0aW9uJiBhbGxvYyk7Ci0KLSAgICBFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERhdGEm
LCBzaXplX3Qgbik7Ci0KLSAgICB2b2lkKiBwb29sQWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6
ZV90IG4pOwotCi0gICAgY2hhciogbV9mcmVlUHRyOwotICAgIGNoYXIqIG1fZW5kOwotICAgIEFs
bG9jYXRpb25MaXN0IG1fcG9vbHM7Ci19OwordHlwZWRlZiBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5k
bGUgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZTsKIAogY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvciB7
CiAgICAgZW51bSBQcm90ZWN0aW9uU2V0dGluZyB7IFdyaXRhYmxlLCBFeGVjdXRhYmxlIH07CiAK
IHB1YmxpYzoKLSAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKLSAgICB7Ci0gICAgICAgIGlmIChpc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX3NtYWxsQWxs
b2NhdGlvblBvb2wgPSBFeGVjdXRhYmxlUG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEsIEpJVF9BTExP
Q0FUT1JfTEFSR0VfQUxMT0NfU0laRSk7Ci0jaWYgIUVOQUJMRShJTlRFUlBSRVRFUikKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgQ1JBU0goKTsKLSNlbmRpZgotICAgIH0KKyAgICBFeGVjdXRh
YmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGluaXRp
YWxpemVBbGxvY2F0b3IoKTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogCiAgICAgc3Rh
dGljIGJvb2wgdW5kZXJNZW1vcnlQcmVzc3VyZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRBX0FM
TE9DQVRPUl9QUk9GSUxFKQorICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCk7CisjZWxzZQor
ICAgIHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCkgeyB9CisjZW5kaWYKIAotICAgIFBhc3NSZWZQ
dHI8RXhlY3V0YWJsZVBvb2w+IHBvb2xGb3JTaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG4pCi0gICAgewotICAgICAgICAvLyBUcnkgdG8gZml0IGluIHRoZSBleGlzdGluZyBz
bWFsbCBhbGxvY2F0b3IKLSAgICAgICAgQVNTRVJUKG1fc21hbGxBbGxvY2F0aW9uUG9vbCk7Ci0g
ICAgICAgIGlmIChuIDwgbV9zbWFsbEFsbG9jYXRpb25Qb29sLT5hdmFpbGFibGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBtX3NtYWxsQWxsb2NhdGlvblBvb2w7Ci0KLSAgICAgICAgLy8gSWYgdGhl
IHJlcXVlc3QgaXMgbGFyZ2UsIHdlIGp1c3QgcHJvdmlkZSBhIHVuc2hhcmVkIGFsbG9jYXRvcgot
ICAgICAgICBpZiAobiA+IEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSkKLSAgICAgICAg
ICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEsIG4pOwotCi0gICAg
ICAgIC8vIENyZWF0ZSBhIG5ldyBhbGxvY2F0b3IKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQ
b29sPiBwb29sID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NB
VE9SX0xBUkdFX0FMTE9DX1NJWkUpOwotCi0gICAgICAgIC8vIElmIHRoZSBuZXcgYWxsb2NhdG9y
IHdpbGwgcmVzdWx0IGluIG1vcmUgZnJlZSBzcGFjZSB0aGFuIGluCi0gICAgICAgIC8vIHRoZSBj
dXJyZW50IHNtYWxsIGFsbG9jYXRvciwgdGhlbiB3ZSB3aWxsIHVzZSBpdCBpbnN0ZWFkCi0gICAg
ICAgIGlmICgocG9vbC0+YXZhaWxhYmxlKCkgLSBuKSA+IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+
YXZhaWxhYmxlKCkpCi0gICAgICAgICAgICBtX3NtYWxsQWxsb2NhdGlvblBvb2wgPSBwb29sOwot
ICAgICAgICByZXR1cm4gcG9vbC5yZWxlYXNlKCk7Ci0gICAgfQorICAgIFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gYWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNpemVJ
bkJ5dGVzKTsKIAogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRp
YyB2b2lkIG1ha2VXcml0YWJsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpCkBAIC0zNDgsNTAg
KzI1Niw5IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAg
ICAgc3RhdGljIHZvaWQgcmVwcm90ZWN0UmVnaW9uKHZvaWQqLCBzaXplX3QsIFByb3RlY3Rpb25T
ZXR0aW5nKTsKICNlbmRpZgotCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX3NtYWxsQWxs
b2NhdGlvblBvb2w7CiB9OwogCi1pbmxpbmUgRXhlY3V0YWJsZVBvb2w6OkV4ZWN1dGFibGVQb29s
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90IGFsbG9j
U2l6ZSA9IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuLCBwYWdlU2l6ZSgpKTsKLSAgICBBbGxvY2F0
aW9uIG1lbSA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFtZW0uYmFzZSgpKSB7
Ci0gICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOwotICAgICAgICBt
ZW0gPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIH0KLSAgICBtX3Bvb2xzLmFwcGVuZCht
ZW0pOwotICAgIG1fZnJlZVB0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihtZW0uYmFzZSgpKTsKLSAg
ICBpZiAoIW1fZnJlZVB0cikKLSAgICAgICAgQ1JBU0goKTsgLy8gRmFpbGVkIHRvIGFsbG9jYXRl
Ci0gICAgbV9lbmQgPSBtX2ZyZWVQdHIgKyBhbGxvY1NpemU7Ci0gICAgZGVwcmVjYXRlZFR1cm5P
ZmZWZXJpZmllcigpOwotfQotCi1pbmxpbmUgdm9pZCogRXhlY3V0YWJsZVBvb2w6OnBvb2xBbGxv
Y2F0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBh
bGxvY1NpemUgPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgCi0g
ICAgQWxsb2NhdGlvbiByZXN1bHQgPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICgh
cmVzdWx0LmJhc2UoKSkgewotICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxE
YXRhKTsKLSAgICAgICAgcmVzdWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICAgICAg
aWYgKCFyZXN1bHQuYmFzZSgpKQotICAgICAgICAgICAgQ1JBU0goKTsgLy8gRmFpbGVkIHRvIGFs
bG9jYXRlCi0gICAgfQotICAgIAotICAgIEFTU0VSVChtX2VuZCA+PSBtX2ZyZWVQdHIpOwotICAg
IGlmICgoYWxsb2NTaXplIC0gbikgPiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZW5kIC0gbV9mcmVl
UHRyKSkgewotICAgICAgICAvLyBSZXBsYWNlIGFsbG9jYXRpb24gcG9vbAotICAgICAgICBtX2Zy
ZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBuOwotICAgICAgICBt
X2VuZCA9IHN0YXRpY19jYXN0PGNoYXIqPihyZXN1bHQuYmFzZSgpKSArIGFsbG9jU2l6ZTsKLSAg
ICB9Ci0KLSAgICBtX3Bvb2xzLmFwcGVuZChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuYmFz
ZSgpOwotfQotCi19Cit9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQp
ICYmIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
RXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJl
dmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsOSBAQAog
CiAjaW5jbHVkZSA8ZXJybm8uaD4KIAotI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKICNpbmNsdWRl
IDxzeXMvbW1hbi5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9BVkxUcmVl
Lmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJl
c2VydmF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgogCkBAIC00Niw0ODEgKzQ1LDEw
NSBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLSNkZWZp
bmUgVHdvUG93KG4pICgxdWxsIDw8IG4pCi0KLWNsYXNzIEFsbG9jYXRpb25UYWJsZVNpemVDbGFz
cyB7Ci1wdWJsaWM6Ci0gICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzKHNpemVfdCBzaXplLCBz
aXplX3QgYmxvY2tTaXplLCB1bnNpZ25lZCBsb2cyQmxvY2tTaXplKQotICAgICAgICA6IG1fYmxv
Y2tTaXplKGJsb2NrU2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChibG9ja1NpemUgPT0gVHdv
UG93KGxvZzJCbG9ja1NpemUpKTsKLQotICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG51bWJlciBv
ZiBibG9ja3MgbmVlZGVkIHRvIGhvbGQgc2l6ZS4KLSAgICAgICAgc2l6ZV90IGJsb2NrTWFzayA9
IGJsb2NrU2l6ZSAtIDE7Ci0gICAgICAgIG1fYmxvY2tDb3VudCA9IChzaXplICsgYmxvY2tNYXNr
KSA+PiBsb2cyQmxvY2tTaXplOwotCi0gICAgICAgIC8vIEFsaWduIHRvIHRoZSBzbWFsbGVzdCBw
b3dlciBvZiB0d28gPj0gbV9ibG9ja0NvdW50LgotICAgICAgICBtX2Jsb2NrQWxpZ25tZW50ID0g
MTsKLSAgICAgICAgd2hpbGUgKG1fYmxvY2tBbGlnbm1lbnQgPCBtX2Jsb2NrQ291bnQpCi0gICAg
ICAgICAgICBtX2Jsb2NrQWxpZ25tZW50ICs9IG1fYmxvY2tBbGlnbm1lbnQ7Ci0gICAgfQotCi0g
ICAgc2l6ZV90IGJsb2NrU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tTaXplOyB9Ci0gICAg
c2l6ZV90IGJsb2NrQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrQ291bnQ7IH0KLSAgICBz
aXplX3QgYmxvY2tBbGlnbm1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrQWxpZ25tZW50OyB9
Ci0KLSAgICBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9ibG9ja1NpemUg
KiBtX2Jsb2NrQ291bnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHNpemVfdCBtX2Jsb2NrU2l6
ZTsKLSAgICBzaXplX3QgbV9ibG9ja0NvdW50OwotICAgIHNpemVfdCBtX2Jsb2NrQWxpZ25tZW50
OwotfTsKLQotdGVtcGxhdGU8dW5zaWduZWQgbG9nMkVudHJpZXM+Ci1jbGFzcyBBbGxvY2F0aW9u
VGFibGVMZWFmIHsKLSAgICB0eXBlZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJTdWJyZWdpb25TaXplID0gMTI7IC8vIDJeMTIg
PT0gcGFnZXNpemUKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBs
b2cyU3VicmVnaW9uU2l6ZSArIGxvZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzdWJyZWdpb25TaXplID0gVHdvUG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHJlZ2lvblNpemUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBD
T01QSUxFX0FTU0VSVChlbnRyaWVzIDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRp
b25UYWJsZUxlYWZfZW50cmllc19maXRfaW5fQml0RmllbGQpOwotCi0gICAgQWxsb2NhdGlvblRh
YmxlTGVhZigpCi0gICAgICAgIDogbV9hbGxvY2F0ZWQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAg
fkFsbG9jYXRpb25UYWJsZUxlYWYoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7
Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYg
c2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA9
PSBzdWJyZWdpb25TaXplKTsKLSAgICAgICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0KLSAgICAgICAg
c2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9ja0FsaWdubWVudCgpOwotICAgICAgICBz
aXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAvLyBVc2UgdGhp
cyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVlIGJsb2Nrcy4KLSAgICAgICAgQml0Rmll
bGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCAoYWxpZ25tZW50IC0gY291bnQpOwot
Ci0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxpZ25tZW50IHNpemUuCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBpICs9IGFsaWdubWVudCkgewotICAgICAg
ICAgICAgaWYgKCEobV9hbGxvY2F0ZWQgJiBtYXNrKSkgewotICAgICAgICAgICAgICAgIG1fYWxs
b2NhdGVkIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpICsgKGFsaWdubWVudCAt
IGNvdW50KSkgPDwgbG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtYXNrIDw8PSBhbGlnbm1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vdEZvdW5k
OwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRpb24sIEFsbG9jYXRpb25UYWJs
ZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5i
bG9ja1NpemUoKSA9PSBzdWJyZWdpb25TaXplKTsKLQotICAgICAgICBzaXplX3QgZW50cnkgPSBs
b2NhdGlvbiA+PiBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6
ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBj
b3VudCkgLSAxKSA8PCBlbnRyeTsKLQotICAgICAgICBBU1NFUlQoKG1fYWxsb2NhdGVkICYgbWFz
aykgPT0gbWFzayk7Ci0gICAgICAgIG1fYWxsb2NhdGVkICY9IH5tYXNrOwotICAgIH0KLQotICAg
IGJvb2wgaXNFbXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIW1fYWxsb2NhdGVkOwotICAg
IH0KLQotICAgIGJvb2wgaXNGdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhfm1fYWxsb2Nh
dGVkOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVnaW9uU2l6ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6
ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6ZSwgc3VicmVnaW9uU2l6ZSwgbG9nMlN1YnJlZ2lv
blNpemUpOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoc2l6ZV90IHBh
cmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGluZGVudCA9IDApCi0gICAgewotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCi0gICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgICAiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlMDh4OiBbJTAxNmxseF1c
biIsIChpbnQpcGFyZW50T2Zmc2V0LCBtX2FsbG9jYXRlZCk7Ci0gICAgfQotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgQml0RmllbGQgbV9hbGxvY2F0ZWQ7Ci19OwotCi0KLXRlbXBsYXRlPGNsYXNz
IE5leHRMZXZlbD4KLWNsYXNzIExhenlBbGxvY2F0aW9uVGFibGUgewotcHVibGljOgotICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IE5leHRMZXZlbDo6bG9nMlJlZ2lv
blNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVudHJpZXMgPSBOZXh0TGV2ZWw6OmVu
dHJpZXM7Ci0KLSAgICBMYXp5QWxsb2NhdGlvblRhYmxlKCkKLSAgICAgICAgOiBtX3B0cigwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB+TGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgewotICAgICAg
ICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGUoQWxsb2Nh
dGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBpZiAoIW1fcHRy
KQotICAgICAgICAgICAgbV9wdHIgPSBuZXcgTmV4dExldmVsKCk7Ci0gICAgICAgIHJldHVybiBt
X3B0ci0+YWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoc2l6ZV90
IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIG1fcHRyLT5mcmVlKGxvY2F0aW9uLCBzaXpl
Q2xhc3MpOwotICAgICAgICBpZiAobV9wdHItPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZGVs
ZXRlIG1fcHRyOwotICAgICAgICAgICAgbV9wdHIgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9wdHI7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0Z1bGwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHRyICYmIG1fcHRy
LT5pc0Z1bGwoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIE5leHRMZXZlbDo6c2l6ZSgpOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcK
LSAgICB2b2lkIGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGluZGVudCA9
IDApCi0gICAgewotICAgICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZHVtcChw
YXJlbnRPZmZzZXQsIGluZGVudCk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGF0aWMgQWxsb2Nh
dGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBOZXh0TGV2ZWw6OmNsYXNzRm9yU2l6ZShzaXplKTsKLSAgICB9Ci0KLXByaXZh
dGU6Ci0gICAgTmV4dExldmVsKiBtX3B0cjsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIE5leHRMZXZl
bCwgdW5zaWduZWQgbG9nMkVudHJpZXM+Ci1jbGFzcyBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnkg
ewotICAgIHR5cGVkZWYgdWludDY0X3QgQml0RmllbGQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbG9nMlN1YnJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25T
aXplOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IGxvZzJTdWJy
ZWdpb25TaXplICsgbG9nMkVudHJpZXM7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1YnJl
Z2lvblNpemUgPSBUd29Qb3cobG9nMlN1YnJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgcmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyUmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGVudHJpZXMgPSBUd29Qb3cobG9nMkVudHJpZXMpOwotICAgIENPTVBJTEVf
QVNTRVJUKGVudHJpZXMgPD0gKHNpemVvZihCaXRGaWVsZCkgKiA4KSwgQWxsb2NhdGlvblRhYmxl
RGlyZWN0b3J5X2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJs
ZURpcmVjdG9yeSgpCi0gICAgICAgIDogbV9mdWxsKDApCi0gICAgICAgICwgbV9oYXNTdWJhbGxv
Y2F0aW9uKDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnko
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90
IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8PSBzdWJyZWdpb25TaXplKTsKLSAg
ICAgICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0KLSAgICAgICAgaWYgKHNpemVDbGFzcy5ibG9ja1Np
emUoKSA8IHN1YnJlZ2lvblNpemUpIHsKLSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDE7Ci0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgKytpLCBiaXQgKz0g
Yml0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnVsbCAmIGJpdCkKLSAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxvY2F0aW9uID0gbV9zdWJh
bGxvY2F0aW9uc1tpXS5hbGxvY2F0ZShzaXplQ2xhc3MpOwotICAgICAgICAgICAgICAgIGlmIChs
b2NhdGlvbiAhPSBub3RGb3VuZCkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGRp
ZG4ndCBhbHJlYWR5IGhhdmUgYSBzdWJyZWdpb24sIGl0IGRvZXMgbm93IQotICAgICAgICAgICAg
ICAgICAgICBtX2hhc1N1YmFsbG9jYXRpb24gfD0gYml0OwotICAgICAgICAgICAgICAgICAgICAv
LyBNaXJyb3IgdGhlIHN1YmFsbG9jYXRpb24ncyBmdWxsIGJpdC4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3ViYWxsb2NhdGlvbnNbaV0uaXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgICAg
ICAgICBtX2Z1bGwgfD0gYml0OwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGkgKiBzdWJy
ZWdpb25TaXplKSB8IGxvY2F0aW9uOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEEg
YmxvY2sgaXMgYWxsb2NhdGVkIGlmIGVpdGhlciBpdCBpcyBmdWxseSBhbGxvY2F0ZWQgb3IgY29u
dGFpbnMgc3ViYWxsb2NhdGlvbnMuCi0gICAgICAgIEJpdEZpZWxkIGFsbG9jYXRlZCA9IG1fZnVs
bCB8IG1faGFzU3ViYWxsb2NhdGlvbjsKLQotICAgICAgICBzaXplX3QgYWxpZ25tZW50ID0gc2l6
ZUNsYXNzLmJsb2NrQWxpZ25tZW50KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFz
cy5ibG9ja0NvdW50KCk7Ci0gICAgICAgIC8vIFVzZSB0aGlzIG1hc2sgdG8gY2hlY2sgZm9yIHNw
YW5zIG9mIGZyZWUgYmxvY2tzLgotICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNv
dW50KSAtIDEpIDw8IChhbGlnbm1lbnQgLSBjb3VudCk7Ci0KLSAgICAgICAgLy8gU3RlcCBpbiB1
bml0cyBvZiBhbGlnbm1lbnQgc2l6ZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGVudHJpZXM7IGkgKz0gYWxpZ25tZW50KSB7Ci0gICAgICAgICAgICBpZiAoIShhbGxvY2F0ZWQg
JiBtYXNrKSkgewotICAgICAgICAgICAgICAgIG1fZnVsbCB8PSBtYXNrOwotICAgICAgICAgICAg
ICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkpIDw8IGxvZzJTdWJyZWdpb25TaXpl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8PD0gYWxpZ25tZW50OwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoc2l6
ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7
Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24gPj4gbG9nMlN1YnJlZ2lvblNpemU7
Ci0KLSAgICAgICAgaWYgKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8IHN1YnJlZ2lvblNpemUpIHsK
LSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgZW50cnk7Ci0gICAgICAgICAgICBt
X3N1YmFsbG9jYXRpb25zW2VudHJ5XS5mcmVlKGxvY2F0aW9uICYgKHN1YnJlZ2lvblNpemUgLSAx
KSwgc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdWJhbGxvY2F0aW9u
IGlzIG5vdyBlbXB0eS4KLSAgICAgICAgICAgIGlmIChtX3N1YmFsbG9jYXRpb25zW2VudHJ5XS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgbV9oYXNTdWJhbGxvY2F0aW9uICY9IH5iaXQ7Ci0g
ICAgICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrLCBpdCBjbGVhcmx5IGlzbid0IGZ1bGwgYW55
IG1vcmUhCi0gICAgICAgICAgICBtX2Z1bGwgJj0gfmJpdDsKLSAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAg
ICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IGVudHJ5OwotICAg
ICAgICAgICAgQVNTRVJUKChtX2Z1bGwgJiBtYXNrKSA9PSBtYXNrKTsKLSAgICAgICAgICAgIEFT
U0VSVCghKG1faGFzU3ViYWxsb2NhdGlvbiAmIG1hc2spKTsKLSAgICAgICAgICAgIG1fZnVsbCAm
PSB+bWFzazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpCi0gICAgewot
ICAgICAgICByZXR1cm4gIShtX2Z1bGwgfCBtX2hhc1N1YmFsbG9jYXRpb24pOwotICAgIH0KLQot
ICAgIGJvb2wgaXNGdWxsKCkKLSAgICB7ICAgCi0gICAgICAgIHJldHVybiAhfm1fZnVsbDsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
Z2lvblNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBj
bGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICBpZiAoc2l6ZSA8IHN1YnJl
Z2lvblNpemUpIHsKLSAgICAgICAgICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBzaXplQ2xh
c3MgPSBOZXh0TGV2ZWw6OmNsYXNzRm9yU2l6ZShzaXplKTsKLSAgICAgICAgICAgIGlmIChzaXpl
Q2xhc3Muc2l6ZSgpIDwgTmV4dExldmVsOjpzaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IHNpemVDbGFzczsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRhYmxlU2l6
ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICB9Ci0K
LSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1
bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7Ci0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyIsIChpbnQpcGFyZW50T2Zmc2V0KTsKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSkgewotICAgICAgICAg
ICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAgICAgICAgY2hhciBjID0gbV9oYXNT
dWJhbGxvY2F0aW9uICYgYml0Ci0gICAgICAgICAgICAgICAgPyAobV9mdWxsICYgYml0ID8gJ04n
IDogJ24nKQotICAgICAgICAgICAgICAgIDogKG1fZnVsbCAmIGJpdCA/ICdGJyA6ICctJyk7Ci0g
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVjIiwgYyk7Ci0gICAgICAgIH0KLSAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJdXG4iKTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGk7
Ci0gICAgICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gcGFyZW50T2Zmc2V0IHwgKHN1YnJlZ2lvblNp
emUgKiBpKTsKLSAgICAgICAgICAgIGlmIChtX2hhc1N1YmFsbG9jYXRpb24gJiBiaXQpCi0gICAg
ICAgICAgICAgICAgbV9zdWJhbGxvY2F0aW9uc1tpXS5kdW1wKG9mZnNldCwgaW5kZW50ICsgMSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBOZXh0TGV2ZWwgbV9z
dWJhbGxvY2F0aW9uc1tlbnRyaWVzXTsKLSAgICAvLyBTdWJyZWdpb25zIGV4aXN0IGluIG9uZSBv
ZiBmb3VyIHN0YXRlczoKLSAgICAvLyAoMSkgZW1wdHkgKGJvdGggYml0cyBjbGVhcikKLSAgICAv
LyAoMikgZnVsbHkgYWxsb2NhdGVkIGFzIGEgc2luZ2xlIGFsbG9jYXRpb24gKG1fZnVsbCBzZXQp
Ci0gICAgLy8gKDMpIHBhcnRpYWxseSBhbGxvY2F0ZWQgdGhyb3VnaCBzdWJhbGxvY2F0aW9ucyAo
bV9oYXNTdWJhbGxvY2F0aW9uIHNldCkKLSAgICAvLyAoNCkgZnVsbHkgYWxsb2NhdGVkIHRocm91
Z2ggc3ViYWxsb2NhdGlvbnMgKGJvdGggYml0cyBzZXQpCi0gICAgQml0RmllbGQgbV9mdWxsOwot
ICAgIEJpdEZpZWxkIG1faGFzU3ViYWxsb2NhdGlvbjsKLX07Ci0KLQotdHlwZWRlZiBBbGxvY2F0
aW9uVGFibGVMZWFmPDY+IFBhZ2VUYWJsZXMyNTZLQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxl
RGlyZWN0b3J5PFBhZ2VUYWJsZXMyNTZLQiwgNj4gUGFnZVRhYmxlczE2TUI7Ci10eXBlZGVmIEFs
bG9jYXRpb25UYWJsZURpcmVjdG9yeTxMYXp5QWxsb2NhdGlvblRhYmxlPFBhZ2VUYWJsZXMxNk1C
PiwgMT4gUGFnZVRhYmxlczMyTUI7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxM
YXp5QWxsb2NhdGlvblRhYmxlPFBhZ2VUYWJsZXMxNk1CPiwgNj4gUGFnZVRhYmxlczFHQjsKLQog
I2lmIENQVShBUk0pCi10eXBlZGVmIFBhZ2VUYWJsZXMxNk1CIEZpeGVkVk1Qb29sUGFnZVRhYmxl
czsKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7
CiAjZWxpZiBDUFUoWDg2XzY0KQotdHlwZWRlZiBQYWdlVGFibGVzMUdCIEZpeGVkVk1Qb29sUGFn
ZVRhYmxlczsKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDEwMjQgKiAxMDI0
ICogMTAyNDsKICNlbHNlCi10eXBlZGVmIFBhZ2VUYWJsZXMzMk1CIEZpeGVkVk1Qb29sUGFnZVRh
YmxlczsKK3N0YXRpYyBjb25zdCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEw
MjQ7CiAjZW5kaWYKIAotCi1jbGFzcyBGaXhlZFZNUG9vbEFsbG9jYXRvcgoteworY2xhc3MgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiBwdWJs
aWM6Ci0gICAgRml4ZWRWTVBvb2xBbGxvY2F0b3IoKQorICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcigpCisgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxs
IGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCiAgICAgewotICAgICAgICBBU1NFUlQoUGFnZVRhYmxl
czI1NktCOjpzaXplKCkgPT0gMjU2ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVz
MTZNQjo6c2l6ZSgpID09IDE2ICogMTAyNCAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRh
YmxlczMyTUI6OnNpemUoKSA9PSAzMiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBh
Z2VUYWJsZXMxR0I6OnNpemUoKSA9PSAxMDI0ICogMTAyNCAqIDEwMjQpOwotCi0gICAgICAgIG1f
cmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhGaXhl
ZFZNUG9vbFBhZ2VUYWJsZXM6OnNpemUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBF
WEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgICAgICBtX3Jlc2VydmF0aW9uID0g
UGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRQb29sU2l6ZSwgT1NB
bGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUp
OwogI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAgIGlmICghaXNWYWxpZCgpKQorICAg
ICAgICBpZiAoIW1fcmVzZXJ2YXRpb24pCiAgICAgICAgICAgICBDUkFTSCgpOwogI2VuZGlmCisg
ICAgICAgIGlmIChtX3Jlc2VydmF0aW9uKSB7CisgICAgICAgICAgICBBU1NFUlQobV9yZXNlcnZh
dGlvbi5zaXplKCkgPT0gZml4ZWRQb29sU2l6ZSk7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVT
cGFjZShtX3Jlc2VydmF0aW9uLmJhc2UoKSwgbV9yZXNlcnZhdGlvbi5zaXplKCkpOworICAgICAg
ICB9CiAgICAgfQotIAotICAgIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jKHNpemVf
dCByZXF1ZXN0ZWRTaXplKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHJlcXVlc3RlZFNpemUpOwot
ICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JTaXpl
KHJlcXVlc3RlZFNpemUpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IHNpemVDbGFzcy5zaXplKCk7
Ci0gICAgICAgIEFTU0VSVChzaXplKTsKLQotICAgICAgICBpZiAoc2l6ZSA+PSBGaXhlZFZNUG9v
bFBhZ2VUYWJsZXM6OnNpemUoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6
QWxsb2NhdGlvbigwLCAwKTsKLSAgICAgICAgaWYgKG1fcGFnZXMuaXNGdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24oMCwgMCk7Ci0KLSAgICAgICAg
c2l6ZV90IG9mZnNldCA9IG1fcGFnZXMuYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgaWYg
KG9mZnNldCA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6
QWxsb2NhdGlvbigwLCAwKTsKLQotICAgICAgICB2b2lkKiBwb2ludGVyID0gb2Zmc2V0VG9Qb2lu
dGVyKG9mZnNldCk7Ci0gICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBvaW50ZXIsIHNpemUp
OwotICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24ocG9pbnRlciwgc2l6
ZSk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFs
bG9jYXRpb24pCisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5l
d1NwYWNlKHNpemVfdCYpCiAgICAgewotICAgICAgICB2b2lkKiBwb2ludGVyID0gYWxsb2NhdGlv
bi5iYXNlKCk7Ci0gICAgICAgIHNpemVfdCBzaXplID0gYWxsb2NhdGlvbi5zaXplKCk7Ci0gICAg
ICAgIEFTU0VSVChzaXplKTsKLQotICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBvaW50
ZXIsIHNpemUpOwotCi0gICAgICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBzaXplQ2xhc3Mg
PSBjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3Muc2l6ZSgpID09
IHNpemUpOwotICAgICAgICBtX3BhZ2VzLmZyZWUocG9pbnRlclRvT2Zmc2V0KHBvaW50ZXIpLCBz
aXplQ2xhc3MpOworICAgICAgICAvLyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBz
byBuZXcgYWxsb2NhdGlvbiBpcyBhbHdheXMgcHJvaGliaXRlZC4KKyAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlZCgpCisgICAgCisgICAgdmlydHVhbCB2b2lk
IG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gbV9yZXNl
cnZhdGlvbi5jb21taXR0ZWQoKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwg
cGFnZVNpemUoKSk7CiAgICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAg
ICAgcmV0dXJuICEhbV9yZXNlcnZhdGlvbjsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1p
dChwYWdlLCBwYWdlU2l6ZSgpKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQWxsb2NhdGlvblRh
YmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OmNsYXNzRm9yU2l6ZShzaXplKTsKLSAgICB9Ci0K
LSAgICB2b2lkKiBvZmZzZXRUb1BvaW50ZXIoc2l6ZV90IG9mZnNldCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX3Jlc2VydmF0aW9uLmJhc2UoKSkgKyBvZmZzZXQpOwotICAgIH0KLQotICAgIHNpemVfdCBw
b2ludGVyVG9PZmZzZXQodm9pZCogcG9pbnRlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVyKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKTsKLSAgICB9Ci0KICAgICBQYWdlUmVzZXJ2YXRpb24g
bV9yZXNlcnZhdGlvbjsKLSAgICBGaXhlZFZNUG9vbFBhZ2VUYWJsZXMgbV9wYWdlczsKIH07CiAK
K3N0YXRpYyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvcjsKIAotc3Rh
dGljIFNwaW5Mb2NrIHNwaW5sb2NrID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgRml4
ZWRWTVBvb2xBbGxvY2F0b3IqIGFsbG9jYXRvciA9IDA7Ci0KK3ZvaWQgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpCit7CisgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwor
ICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKK30K
IAotc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCitFeGVj
dXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYpCiB7Ci0g
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja0hvbGRlcigmc3BpbmxvY2spOwotICAgIHJldHVybiBhbGxv
Y2F0b3IgPyBhbGxvY2F0b3ItPmFsbG9jYXRlZCgpIDogMDsKLX0gICAKKyAgICBBU1NFUlQoYWxs
b2NhdG9yKTsKK30KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QK
IHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIGlmICgh
YWxsb2NhdG9yKQotICAgICAgICBhbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xBbGxvY2F0b3Io
KTsKLSAgICByZXR1cm4gYWxsb2NhdG9yLT5pc1ZhbGlkKCk7CisgICAgcmV0dXJuICEhYWxsb2Nh
dG9yLT5ieXRlc1Jlc2VydmVkKCk7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5k
ZXJNZW1vcnlQcmVzc3VyZSgpCiB7Ci0gICAgLy8gVGVjaG5pY2FsbHkgd2Ugc2hvdWxkIHRha2Ug
dGhlIHNwaW4gbG9jayBoZXJlLCBidXQgd2UgZG9uJ3QgY2FyZSBpZiB3ZSBnZXQgc3RhbGUgZGF0
YS4KLSAgICAvLyBUaGlzIGlzIG9ubHkgcmVhbGx5IGEgaGV1cmlzdGljIGFueXdheS4KLSAgICBy
ZXR1cm4gYWxsb2NhdG9yICYmIChhbGxvY2F0b3ItPmFsbG9jYXRlZCgpID4gKEZpeGVkVk1Qb29s
UGFnZVRhYmxlczo6c2l6ZSgpIC8gMikpOworICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mg
c3RhdGlzdGljcyA9IGFsbG9jYXRvci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICByZXR1cm4g
c3RhdGlzdGljcy5ieXRlc0FsbG9jYXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7
CiB9CiAKLUV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1B
bGxvYyhzaXplX3Qgc2l6ZSkKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhl
Y3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5s
b2NrKTsKLSAgICBBU1NFUlQoYWxsb2NhdG9yKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yLT5hbGxv
YyhzaXplKTsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxs
b2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgY2hhciBidWZbMjddOworICAgICAgICB0aW1lX3QgY3VycmVudFRpbWU7CisgICAgICAgIHRp
bWUoJmN1cnJlbnRUaW1lKTsKKyAgICAgICAgY3RpbWVfcigmY3VycmVudFRpbWUsIGJ1Zik7Cisg
ICAgICAgIHByaW50ZigiJXM6IEknbSBnaXZpbmcgaGVyIGFsbCBzaGUncyBnb3QsIENhcHRhaW4h
XG4iLCBidWYpOworICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsK
KyAgICAgICAgcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAg
ICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK3NpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21t
aXR0ZWRCeXRlQ291bnQoKQoreworICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVk
KCk7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoRXhlY3V0YWJsZVBv
b2w6OkFsbG9jYXRpb24mIGFsbG9jYXRpb24pIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAg
U3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBBU1NFUlQoYWxsb2Nh
dG9yKTsKLSAgICBhbGxvY2F0b3ItPmZyZWUoYWxsb2NhdGlvbik7CisgICAgYWxsb2NhdG9yLT5k
dW1wUHJvZmlsZSgpOwogfQorI2VuZGlmCiAKIH0KIAogCi0jZW5kaWYgLy8gSEFWRShBU1NFTUJM
RVIpCisjZW5kaWYgLy8gRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1NDksNyBA
QCBKSVRDb2RlIEpJVDo6cHJpdmF0ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAKICAgICBBU1NFUlQo
bV9qbXBUYWJsZS5pc0VtcHR5KCkpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBU
cmFuc2xhdGUgdlBDIG9mZnNldHMgaW50byBhZGRyZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2Rl
LCBmb3Igc3dpdGNoIHRhYmxlcy4KICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zd2l0
Y2hlcy5zaXplKCk7ICsraSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lv
biA5MzQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIyMSwyMCArMjIxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0
LnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwg
bmV3U3RydWN0dXJlLCBjYWNoZWRPZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3Qp
OwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIHZvaWQgY29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4q
IGV4ZWN1dGFibGVQb29sLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKKyAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiogZXhlY3V0YWJsZU1l
bW9yeSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAgICAgICAgIHsKICAgICAg
ICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIGpp
dC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhleGVjdXRhYmxlUG9vbCwgZ2xv
YmFsRGF0YSwgdHJhbXBvbGluZXMpOworICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlQ1RJ
TWFjaGluZVRyYW1wb2xpbmVzKGV4ZWN1dGFibGVNZW1vcnksIGdsb2JhbERhdGEsIHRyYW1wb2xp
bmVzKTsKICAgICAgICAgfQogCi0gICAgICAgIHN0YXRpYyBDb2RlUHRyIGNvbXBpbGVDVElOYXRp
dmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9v
bD4gZXhlY3V0YWJsZVBvb2wsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCisgICAgICAgIHN0YXRpYyBD
b2RlUmVmIGNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0
aXZlRnVuY3Rpb24gZnVuYykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRh
LT5jYW5Vc2VKSVQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVB0cigpOworICAgICAg
ICAgICAgICAgIHJldHVybiBDb2RlUmVmKCk7CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERh
dGEsIDApOwotICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwoZXhlY3V0YWJsZVBvb2wsIGdsb2JhbERhdGEsIGZ1bmMpOworICAgICAgICAgICAgcmV0dXJu
IGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuYyk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayog
Y29kZWJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRP
ZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CkBAIC0yNzQsOSArMjc0LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW4oU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVf
dCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24o
U3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBTdHJ1Y3R1cmVDaGFpbiosIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywg
Ym9vbCBkaXJlY3QpOwogCi0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFs
RGF0YSogZGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpOworICAgICAgICB2
b2lkIHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiosIEpTR2xvYmFsRGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAg
ICAgICAgTGFiZWwgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJv
b2wgaXNDb25zdHJ1Y3QgPSBmYWxzZSk7Ci0gICAgICAgIENvZGVQdHIgcHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBK
U0dsb2JhbERhdGEqIGRhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpOworICAgICAgICBDb2RlUmVm
IHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlv
bik7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CiAKICAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShK
dW1wKTsKQEAgLTEwMzMsNyArMTAzMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjZW5k
aWYKICAgICAgICAgV2Vha1JhbmRvbSBtX3JhbmRvbUdlbmVyYXRvcjsKLSAgICAgICAgc3RhdGlj
IENvZGVQdHIgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpOworICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKTsKICAgICB9
IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKICAgICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEyICs1NiwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdAogICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgcmV0dXJuICFtX3JlZjsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVQdHIgYWRk
cmVzc0ZvckNhbGwoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9jb2Rl
OworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IGluIGJ5dGVzIG9mICdwb2ludGVy
SW50b0NvZGUnIGludG8KQEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IC8vIGJsb2NrIG9mIGNvZGUuICBJdCBpcyBBU1NFUlRlZCB0aGF0IG5vIGNvZGVibG9jayA+NGdi
IGluIHNpemUuCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29k
ZSkKICAgICAgICAgewotICAgICAgICAgICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIGludHB0
cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkg
LSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXRpY19j
YXN0PHVuc2lnbmVkPihyZXN1bHQpKSA9PSByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpOwogICAgICAgICB9CkBAIC03NywyNCArNzcsMjQg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUhCiAgICAgICAg
IGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxG
cmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUo
bV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1l
LCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpKTsK
KyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xp
bmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2FsbEZy
YW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEp
KTsKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6
IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZGF0YUxvY2F0aW9uKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBzaXplX3Qgc2l6ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3JlZi5t
X2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9z
aXplOworICAgICAgICAgICAgQVNTRVJUKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5zaXplKCk7CiAgICAgICAgIH0KIAotICAgICAg
ICBFeGVjdXRhYmxlUG9vbCogZ2V0RXhlY3V0YWJsZVBvb2woKQorICAgICAgICBFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRhYmxlTWVtb3J5KCkKICAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0YWJsZVBvb2wuZ2V0KCk7CisgICAgICAgICAgICByZXR1
cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBKSVRUeXBlIGppdFR5cGUoKQpAQCAtMTA0LDkgKzEwNCw5IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIC8vIEhvc3QgZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUg
YSBtX2NvZGUgcG9pbnRlciBidXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkg
cmVmIHRoZSBleGVjdXRhYmxlIHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KLSAgICAg
ICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKKyAgICAgICAgc3Rh
dGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVSZWYgY29kZSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCwgSG9zdENhbGxU
aHVuayk7CisgICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAtMTE2LDggKzExNiw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKSVRDb2Rl
KHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBz
aXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRUeXBlKQotICAgICAgICAgICAgOiBtX3JlZihjb2RlLCBl
eGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgSklUQ29kZShQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnksIEpJVFR5cGUgaml0VHlwZSkKKyAgICAg
ICAgICAgIDogbV9yZWYoZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAgICwgbV9qaXRUeXBl
KGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVj
dXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJl
ICp0cmFtcG9saW5lcykKK3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyhSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4qIGV4ZWN1dGFibGVNZW1vcnksIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMp
CiB7CiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgTGFiZWwgc29mdE1vZEJl
Z2luID0gYWxpZ24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBt
YWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxs
IHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBh
bmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFi
bGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBp
bGVDY29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsK
IAogICAgIENvZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0g
ICAgKmV4ZWN1dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAgKmV4
ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJsZU1lbW9yeSgpOwogCiAgICAgdHJh
bXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1
YWxDYWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gcGF0
Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7CkBAIC0zMTIsMTAg
KzMxMiw5IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICBy
ZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwogfQogCi1KSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKK0pJVDo6
Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBuYXRpdmVDYWxsOwot
ICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7CiAKICAgICBlbWl0UHV0SW1tZWRp
YXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOwogCkBAIC00
NDcsMTIgKzQ0NiwxMCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2
CiAgICAgcmV0KCk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkg
dGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNo
aW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIGV4ZWN1dGFibGVQb29sKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhuYXRpdmVDYWxsLCBGdW5jdGlv
blB0cihmdW5jKSk7Ci0gICAgcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0KLSAgICByZXR1
cm4gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CisgICAgcmV0dXJu
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3Yo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4q
IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1
Y3R1cmUgKnRyYW1wb2xpbmVzKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRy
YW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiogZXhlY3V0YWJsZU1lbW9y
eSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9s
aW5lcykKIHsKICAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHBy
b3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0aAogICAgIExhYmVsIHN0cmluZ0xlbmd0aEJl
Z2luID0gYWxpZ24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBt
YWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxs
IHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBh
bmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFi
bGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwg
RnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBp
bGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwog
CiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAg
ICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKKyAgICAqZXhl
Y3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFt
cG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZp
cnR1YWxDYWxsTGlua0JlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdp
bik7CkBAIC0yODksOSArMjg5LDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29s
PiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKK0pJVDo6Q29kZVJl
ZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIE5hdGl2ZUZ1bmN0aW9uKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpOworICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiA5MzQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKEluc3RyCiAgICAgbV9ieXRlY29k
ZU9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CiB9CiAKLUpJVDo6Q29kZVB0
ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVy
ZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0xOTMsOCArMTkzLDggQEAg
SklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEt
PmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2Vk
Q2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KS5jb2RlKCkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7
CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTQxLDcgKzU0MSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9
IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3Bf
cHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgCkBA
IC01NTAsMTAgKzU1MCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRy
KGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNz
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAK
IHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MDYsNyArNjA1LDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJl
Z2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9m
ZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjE3LDEzICs2MTYsMTIgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsK
QEAgLTY2Niw3ICs2NjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8o
U3RyCiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAgICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAg
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBA
IC02ODQsMTMgKzY4MiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8o
U3RyCiAgICAgfQogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRo
YXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+
c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRj
aCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzIzLDcg
KzcyMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKIAogICAg
IEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChu
ZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRv
ciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtNzMxLDcgKzcyOCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgfQogICAgIH0gICAgCiAg
ICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2Vz
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9C
ZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAgICAg
CkBAIC03NDAsMTQgKzczNywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9n
bG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0
cnVjdHVyZSk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJv
dXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAg
ICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJv
dG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTc4Nyw3ICs3ODQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBA
IC03OTUsMjEgKzc5MiwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9M
aXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0
byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSBy
b3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBl
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKICAgICAK
ICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQg
YSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwor
ICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAot
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJl
bCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90
eXBlU3RydWN0dXJlKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBD
b2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVt
cEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5
cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtODU0LDcgKzg1MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVj
dG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9
IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAt
ODYyLDIyICs4NTksMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAg
ICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7
CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5k
dW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBjaGFpbik7CisgICAgcHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3Ry
dWN0dXJlLCBjaGFpbik7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTIxLDcgKzkxOCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERpcmVj
dE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1
bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVk
c1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBp
dGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewog
ICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtOTM1LDEzICs5MzIsMTMgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBzdHViUm91dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
ICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUo
KSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2Ug
LSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA5MzQ4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlND
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1KSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZh
bFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
cG9vbCkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1
bXBMaXN0IGZhaWx1cmVzOwpAQCAtNzcsOCArNzcsOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7
CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MjIsNyArMTIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Ywog
ICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJh
c2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIp
KTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVs
KG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNv
ZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTU1LDcgKzU1
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2Fs
bCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9i
eV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogCkBAIC01NjQsMTAg
KzU2NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklU
OjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MTUsNyArNjE0LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIGVtaXRGYXN0QXJpdGhJbnRU
b0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBs
aW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0
aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCk7CkBAIC02MjYsMTMgKzYyNSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRj
aEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAK
ICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJl
IGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUo
KSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGlu
IGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjczLDcgKzY3MSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9IGVsc2UKICAgICAgICAgY29tcGls
ZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAg
SnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTY5MCwxMyArNjg4LDEyIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAgfQogICAgIH0KICAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
ZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZz
ZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkp
OwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1
dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzI2LDcgKzcyMyw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNl
dChyZWdUMCwgcmVnVDAsIHN0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1Ykxpbmsp
IHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nh
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC03MzYsNyAr
NzMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIH0K
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIGlmICghbGFzdFBy
b3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwog
CkBAIC03NDUsMTQgKzc0MiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50
cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgp
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBy
b3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC03OTEsNyArNzg4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9y
PENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1f
Y2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODAxLDIwICs3OTgsMjAgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJv
dXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRp
b25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJS
b3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0
UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0UHJv
dG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgq
bV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWws
IHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBwcm90b3R5cGVT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3Ry
dWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJh
Y2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlv
bkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
cGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMs
IGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CkBAIC04NTcsNyArODU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
TGlzdAogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwg
Y2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRh
YmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMpOwogICAgIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9y
PENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1f
Y2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODY3LDIyICs4NjQsMjIgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJv
dXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRp
b25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJS
b3V0aW5lLmNvZGUoKSk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxh
c3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhh
dCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBw
cm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUsIGNoYWluKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xv
dyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENv
ZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1w
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyNSw3ICs5MjIsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2Vz
cyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykg
ewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2Fs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTk0MSwxMyAr
OTM4LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBz
dHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAg
IENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhh
biBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDggKzc1Nyw4
IEBAIEpJVFRodW5rczo6SklUVGh1bmtzKEpTR2xvYmFsRGF0YSogZ2xvYmEKICAgICBpZiAoIWds
b2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1f
ZXhlY3V0YWJsZVBvb2wsICZtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChtX2V4
ZWN1dGFibGVQb29sKTsKKyAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xv
YmFsRGF0YSwgJm1fZXhlY3V0YWJsZU1lbW9yeSwgJm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7Cisg
ICAgQVNTRVJUKCEhbV9leGVjdXRhYmxlTWVtb3J5KTsKICNpZiBDUFUoQVJNX1RIVU1CMikKICAg
ICAvLyBVbmZvcnR1bmF0ZSB0aGUgYXJtIGNvbXBpbGVyIGRvZXMgbm90IGxpa2UgdGhlIHVzZSBv
ZiBvZmZzZXRvZiBvbiBKSVRTdGFja0ZyYW1lIChzaW5jZSBpdCBjb250YWlucyBub24gUE9EIHR5
cGVzKSwKICAgICAvLyBhbmQgdGhlIE9CSkVDVF9PRkZTRVRPRiBtYWNybyBkb2VzIG5vdCBhcHBl
YXIgY29uc3RhbnRpc2ggZW5vdWdoIGZvciBpdCB0byBiZSBoYXBweSB3aXRoIGl0cyB1c2UgaW4g
Q09NUElMRV9BU1NFUlQKQEAgLTE2MDIsNyArMTYwMiw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZv
LT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBu
ZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBDb2RlTG9jYXRpb25MYWJlbCgpLCBzdHVi
SW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0
QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby0+dS5n
ZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTE2MjgsMTIgKzE2MjgsMTIgQEAgc3Rh
dGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZwogICAgIHN3aXRjaCAoc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CiAgICAg
ICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZv
LT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5n
ZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9i
YWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0
aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90
b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3Byb3RvX2xpc3Q6CkBAIC0zNTcwLDExICszNTcwLDExIEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCB0b18KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZyYW1lKSk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQogewotICAgIHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwg
Ym9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCkpOworICAgIHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50
cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkp
OwogICAgIGlmIChlbnRyeS5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBn
ZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIGVu
dHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CiAgICAgcmV0dXJuIGVu
dHJ5LmZpcnN0LT5zZWNvbmQ7CiB9CiAKQEAgLTM1ODIsNyArMzU4Miw3IEBAIE5hdGl2ZUV4ZWN1
dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0
aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFw
LT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50
cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2Jh
bERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxl
Q1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLCBmdW5jdGlvbiksIGZ1
bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2
ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2Fs
bChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQu
Z2V0KCk7CiB9CiAKQEAgLTM1OTAsOCArMzU5MCw4IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRo
dW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6
aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rp
b24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNl
Y29uZCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSA9IGdsb2JhbERhdGEt
PmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wuZ2V0
KCkpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNv
bmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEs
IGNvZGUsIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3IpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBnbG9i
YWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRhKSA6IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZigpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0
YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOwogICAgIH0KICAg
ICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVD
b25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ29uc3Ry
dWN0OyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTb2Z0TW9kdWxvKCkgeyBy
ZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVNvZnRNb2R1bG87IH0KIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
dGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2VuZXJhdG9yKTsKIAogICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9u
KTsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERh
dGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IpOwpAQCAtMzAyLDExICszMDIsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9y
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IENUSVN0dWJNYXA7CisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBDVElTdHViTWFwOwog
ICAgICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PE5hdGl2ZUZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+ID4gSG9zdEZ1bmN0aW9uU3R1
Yk1hcDsKICAgICAgICAgT3duUHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9u
U3R1Yk1hcDsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29s
OworICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVt
b3J5OwogCiAgICAgICAgIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgbV90cmFtcG9saW5lU3RydWN0dXJl
OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3BlY2lhbGl6ZWRUaHVua0pJVCA6IHB1Ymxp
YyBKU0ludGVyZmFjZUpJVCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IFRoaXNBcmd1bWVudCA9IC0xOwotICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGludCBleHBl
Y3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBw
b29sKQorICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgICAgICA6IG1fZXhwZWN0ZWRBcmdDb3Vu
dChleHBlY3RlZEFyZ0NvdW50KQogICAgICAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKLSAgICAgICAgICAgICwgbV9wb29sKHBvb2wpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAg
ICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIChpbnQpc2l6ZW9m
KFJlZ2lzdGVyKSksIFRydXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsgMSkpKTsKQEAgLTEy
MywxMyArMTIyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmaW5hbGl6ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaykK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRoaXMsIG1fcG9vbC5n
ZXQoKSk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRo
aXMpOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRp
b25MYWJlbChmYWxsYmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayht
X2NhbGxzW2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7Ci0gICAgICAgICAgICByZXR1cm4g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgICAgICAgICAgcmV0dXJuIHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXNzdW1l
cyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNlcyBmcFJlZ2lzdGVyMCBhcyB0aGUgZmlyc3Qg
YXJndW1lbnQKQEAgLTE2Myw3ICsxNjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAg
ICAgICAgIGludCBtX2V4cGVjdGVkQXJnQ291bnQ7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fcG9vbDsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVyZXM7CiAgICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI+ID4gbV9jYWxsczsKICAgICB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24g
OTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDI2ICs2MywyNiBAQCBzdGF0aWMgdm9pZCBjaGFyVG9TdHJp
bmcoU3BlY2lhbGl6ZWRUaHVuCiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhl
Y3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGppdC5y
ZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
IHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFy
TG9hZChqaXQpOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6
ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVu
a0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgLy8gbG9hZCBjaGFyIGNvZGUKICAgICBqaXQu
bG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGNo
YXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwpA
QCAtOTAsMTEgKzkwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVu
a0cKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBw
b29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFs
RGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7
CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0LmxvYWREb3VibGVBcmd1
bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBk
ZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBw
ZXIoZmxvb3IpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCk7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVt
cDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KCkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBAIC0xOTcsMTEgKzE5Nywx
MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOwor
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghVW5h
cnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkK
LSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybklu
dDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTIyMCwxMSArMjIwLDExIEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvQ29uc3RhbnQKIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5lZ2F0aXZlSGFsZkNv
bnN0YW50ID0gLTAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwg
cG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAg
aWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBq
aXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMjM5LDM3ICsy
MzksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJl
dHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91
YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVP
cFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklU
OjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIo
bG9nKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgp
KTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRv
RG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpOwogICAgIGppdC5yZXR1cm5Eb3VibGUo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgq
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFi
c1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0RvdWJsZUJp
dG9wcygpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3Vt
ZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQu
cnNoaWZ0MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMzEpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC0yODYsMTEgKzI4
NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0b3IoCiAgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhLCBwb29sKTsK
KyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWpp
dC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKIAogICAgIGppdC5sb2FkRG91YmxlKCZvbmVDb25zdGFudCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJl
dmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBj
bGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsK
KyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLSAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciAoKlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wq
KTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSos
IEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGV4cFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBv
b2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91
bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhl
Y3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcG93VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKKyAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSop
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWls
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCShyZXZpc2lvbiA5MzQ4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEV4ZWN1dGFibGVCYXNlIEJhc2U7CiAKICNpZiBF
TkFCTEUoSklUKQotICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNhbGxUaHVuaywgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb25zdHJ1Y3RUaHVu
aywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVj
dXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAg
ICAgewogICAgICAgICAgICAgaWYgKCFjYWxsVGh1bmspCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG5ldyAoYWxsb2NhdGVDZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5h
dGl2ZUV4ZWN1dGFibGUoZ2xvYmFsRGF0YSwgSklUQ29kZSgpLCBmdW5jdGlvbiwgSklUQ29kZSgp
LCBjb25zdHJ1Y3Rvcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsMTAgKzMwLDExIEBACiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGlu
Zy5oIgogCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1ZGUgImR0b2EuaCIKKyNpbmNsdWRlICJF
eGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgorI2luY2x1ZGUgImR0b2Eu
aCIKICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKQEAgLTQ5LDYgKzUwLDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2Uo
KQogewogICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIEpTR2xvYmFsRGF0YTo6
c3RvcmVWUHRycygpOworICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0
b3IoKTsKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCiAgICAgUmVnaXN0ZXJGaWxl
Ojppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24gOTM0ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xODUsNyArMTg1LDYgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFs
RGF0YVR5cAogICAgICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKICNpZiBF
TkFCTEUoQVNTRU1CTEVSKQogICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigqdGhpcykKLSAgICAs
IHJlZ2V4QWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCiAgICAgLCBsZXhlcihuZXcgTGV4ZXIodGhp
cykpCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKQEAgLTQzNiw2ICs0MzUsOSBAQCB2b2lkIEpT
R2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkKIHZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxl
RGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaW50ZXJwcmV0ZXItPmR1bXBTYW1wbGVEYXRh
KGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgogfQogCiB2b2lkIEpTR2xvYmFsRGF0YTo6cmVjb21waWxl
QWxsSlNGdW5jdGlvbnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Miw3ICsxOTIsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9yOwotICAgICAgICBFeGVj
dXRhYmxlQWxsb2NhdG9yIHJlZ2V4QWxsb2NhdG9yOwogI2VuZGlmCiAKICNpZiAhRU5BQkxFKEpJ
VCkKQEAgLTIxNSw3ICsyMTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgSW50ZXJwcmV0
ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE93blB0cjxKSVRUaHVu
a3M+IGppdFN0dWJzOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZ2V0Q1RJU3R1YihU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBn
ZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7CiAgICAgICAgIH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy91bml0L3VuaXR0ZXN0cy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3VuaXQvdW5pdHRlc3RzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy91bml0L3VuaXR0
ZXN0cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvUmVkQmxhY2tUcmVlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCit1c2luZyBu
YW1lc3BhY2UgV1RGOworCisvLyBUZXN0IHN1cHBvcnQKKworI2RlZmluZSBSVU5fU1VJVEUoZXhw
cmVzc2lvbikgZG8geyAgICAgICAgICAgICAgXAorICAgICAgICBwcmludGYoIiVzOlxuIiwgI2V4
cHJlc3Npb24pOyAgICAgICAgICAgXAorICAgICAgICAoZXhwcmVzc2lvbik7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgUlVOX1RFU1QoZXhw
cmVzc2lvbikgZG8geyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCIgICAlczog
IiwgI2V4cHJlc3Npb24pOyAgICAgICAgICAgIFwKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGV4cHJlc3Npb24pOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCJPS1xuIik7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFRFU1RfQVNT
RVJUKGV4cHJlc3Npb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIGlmICghKGV4cHJlc3Npb24pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBwcmludGYoIkZBSUw6ICVzOiVzOiVkOiBh
c3NlcnRpb24gJXMgZmFpbGVkIVxuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18s
ICNleHByZXNzaW9uKTsgXAorICAgICAgICAgICAgQ1JBU0goKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIHByaW50VmFsdWUoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBpZiAodmFsdWUpCisgICAgICAgIHByaW50ZigidHJ1ZSIpOworICAgIGVsc2UKKyAgICAgICAg
cHJpbnRmKCJmYWxzZSIpOworfQorCitzdGF0aWMgdm9pZCBwcmludFZhbHVlKGludCB2YWx1ZSkK
K3sKKyAgICBwcmludGYoIiVkIiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBwcmludFZhbHVl
KHNpemVfdCB2YWx1ZSkKK3sKKyAgICBwcmludGYoIjB4JWx4IiwgdmFsdWUpOworfQorCitzdGF0
aWMgdm9pZCBwcmludFZhbHVlKHZvaWQqIHZhbHVlKQoreworICAgIHByaW50ZigiJXAiLCB2YWx1
ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbElt
cGwoY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IGNoYXIqIGFjdHVhbFN0cmluZywgVCBhY3R1YWwsIFQgZXhwZWN0ZWQp
Cit7CisgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgeworICAgICAgICBwcmludGYoIkZBSUw6
ICVzOiVzOiVkOiBleHBlY3RlZCAlcyB0byBiZSAiLCBmaWxlTmFtZSwgZnVuY3Rpb25OYW1lLCBs
aW5lTnVtYmVyLCBhY3R1YWxTdHJpbmcpOworICAgICAgICBwcmludFZhbHVlKGV4cGVjdGVkKTsK
KyAgICAgICAgcHJpbnRmKCIgYnV0IHdhcyAiKTsKKyAgICAgICAgcHJpbnRWYWx1ZShhY3R1YWwp
OworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxJbXBsKGNvbnN0IGNo
YXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBjaGFyKiBhY3R1YWxTdHJpbmcsIFQgYWN0dWFsLCBpbnQgZXhwZWN0ZWQpCit7CisgICAg
aWYgKGFjdHVhbCAhPSAoVClleHBlY3RlZCkgeworICAgICAgICBwcmludGYoIkZBSUw6ICVzOiVz
OiVkOiBleHBlY3RlZCAlcyB0byBiZSAiLCBmaWxlTmFtZSwgZnVuY3Rpb25OYW1lLCBsaW5lTnVt
YmVyLCBhY3R1YWxTdHJpbmcpOworICAgICAgICBwcmludFZhbHVlKGV4cGVjdGVkKTsKKyAgICAg
ICAgcHJpbnRmKCIgYnV0IHdhcyAiKTsKKyAgICAgICAgcHJpbnRWYWx1ZShhY3R1YWwpOworICAg
ICAgICBwcmludGYoIlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorfQorCisjZGVmaW5l
IFRFU1RfQVNTRVJUX0VRVUFMKGFjdHVhbCwgZXhwZWN0ZWQpIGFzc2VydEVxdWFsSW1wbChfX0ZJ
TEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgI2FjdHVhbCwgYWN0dWFsLCBleHBlY3RlZCkK
KworLy8gVGVzdHMgZm9yIFJlZEJsYWNrVHJlZQorCitjbGFzcyBSZWRCbGFja1RyZWVUZXN0cyB7
Citwcml2YXRlOgorICAgIFJlZEJsYWNrVHJlZVRlc3RzKCkgeyB9CisgICAgCitwdWJsaWM6Cisg
ICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgUlVOX1RFU1QodGVzdERy
aXZlcigiIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIqeEB5IXoiKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJp
dmVyKCIrYSp4QHkheiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2EqYUBhIWEi
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IiKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3REcml2ZXIoIithK2IrYyIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigi
K2ErYitjK2QiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytkK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZl
cigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2sr
bCttK24rbytwK3ErcitzK3QrdSt2K3greSt6IikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJp
dmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYSti
K2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrZStmK2craCtpK2or
aytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oqYSpiKmMqZCplKmYqZypoKmkqaiprKmwqbSpu
Km8qcCpxKnIqcyp0KnUqdip3KngqeSp6IWEhYiFjIWQhZSFmIWchaCFpIWohayFsIW0hbiFvIXAh
cSFyIXMhdCF1IXYhdyF4IXkheiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2Qr
ZCttK3dAZEBtQHdAYUBnQHEiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIitkK2Qr
ZCtkK2QrZCtkK2QrZCtkK2YrZitmK2YrZitmK2YraCtoK2kraitrK2wrbStvK3ArcStyK3pAYUBi
QGNAZEBlQGZAZ0BoQGlAakBrQGxAbUBuQG9AcEBxQHJAc0B0QHVAdkB3QHhAeUB6IikpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgY291bnRlcjsKKyAgICAKKyAgICBz
dHJ1Y3QgUGFpciB7CisgICAgICAgIGNoYXIga2V5OworICAgICAgICB1bnNpZ25lZCB2YWx1ZTsK
KyAgICAgICAgCisgICAgICAgIFBhaXIoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFBhaXIoY2hh
ciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAg
ICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBrZXkgPT0gb3RoZXIua2V5OworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQYWlyJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGtleSA8IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgIH07
CisgICAgCisgICAgdHlwZWRlZiBWZWN0b3I8UGFpciwgMTY+IFBhaXJWZWN0b3I7CisgICAgCisg
ICAgc3RhdGljIFBhaXJWZWN0b3IgZmluZEV4YWN0KFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFy
IGtleSkKKyAgICB7CisgICAgICAgIFBhaXJWZWN0b3IgcmVzdWx0OworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5KQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXNWZWN0b3IuYXQoaW5kZXgpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5k
KCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIHZvaWQgcmVtb3ZlKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBzaXplX3QgaW5kZXgpCisg
ICAgeworICAgICAgICBhc1ZlY3Rvci5hdChpbmRleCkgPSBhc1ZlY3Rvci5sYXN0KCk7CisgICAg
ICAgIGFzVmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFBhaXJW
ZWN0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBj
aGFyIGtleSkKKyAgICB7CisgICAgICAgIGNoYXIgYmVzdEtleSA9IDA7IC8vIGFzc2lnbm1lbnQg
dG8gbWFrZSBnY2MgaGFwcHkKKyAgICAgICAgYm9vbCBmb3VuZEtleSA9IGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPj0g
a2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPCBiZXN0
S2V5IHx8ICFmb3VuZEtleSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEtleSA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGJlc3RLZXkgPSBhc1ZlY3Rvci5hdChpbmRleCkua2V5Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kS2V5
KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBm
aW5kRXhhY3QoYXNWZWN0b3IsIGJlc3RLZXkpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCBhc3NlcnRGb3VuZEFuZFJlbW92ZShQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXksIHVu
c2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gMDsgLy8gbWFrZSBjb21waWxlcnMgaGFwcHkK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChhc1ZlY3Rv
ci5hdChpbmRleCkua2V5ID09IGtleQorICAgICAgICAgICAgICAgICAgICAmJiBhc1ZlY3Rvci5h
dChpbmRleCkudmFsdWUgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9BU1NF
UlQoIWZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGluZGV4OworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
VEVTVF9BU1NFUlQoZm91bmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZW1vdmUoYXNW
ZWN0b3IsIGZvdW5kSW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGRlbGliZXJhdGVs
eSBwYXNzZXMgYSBjb3B5IG9mIHRoZSB2ZWN0b3IuCisgICAgc3RhdGljIHZvaWQgYXNzZXJ0RXF1
YWwoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBQYWlyVmVjdG9yIGFzVmVj
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpO
b2RlKiBjdXJyZW50ID0gYXNUcmVlLmZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBhc1RyZWUu
c3VjY2Vzc29yKGN1cnJlbnQpKQorICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoYXNW
ZWN0b3IsIGN1cnJlbnQtPmtleSwgY3VycmVudC0+dmFsdWUpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNp
Z25lZD4mIGFzVHJlZSwgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSwg
UGFpclZlY3RvciBmb3VuZFZhbHVlcywgY2hhciBrZXkpCisgICAgeworICAgICAgICBpZiAobm9k
ZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5LCBrZXkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2Rl
KiBwcmV2Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgbm9k
ZSA9IHByZXZOb2RlOworICAgICAgICAgICAgICAgIHByZXZOb2RlID0gYXNUcmVlLnByZWRlY2Vz
c29yKHByZXZOb2RlKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHByZXZOb2RlICYmIHByZXZOb2Rl
LT5rZXkgPT0ga2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwobm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIXByZXZOb2RlIHx8
IHByZXZOb2RlLT5rZXkgPCBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkbyB7Cisg
ICAgICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoZm91bmRWYWx1ZXMsIG5vZGUtPmtl
eSwgbm9kZS0+dmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUg
PSBhc1RyZWUuc3VjY2Vzc29yKG5vZGUpOworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFu
b2RlIHx8IG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgfSB3aGlsZSAobm9kZSAmJiBu
b2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NF
UlQoZm91bmRWYWx1ZXMuaXNFbXB0eSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGNvbnRy
b2wgc3RyaW5nIGlzIGEgbnVsbC10ZXJtaW5hdGVkIGxpc3Qgb2YgY29tbWFuZHMuIEVhY2gKKyAg
ICAvLyBjb21tYW5kIGlzIHR3byBjaGFyYWN0ZXJzLCB3aXRoIHRoZSBmaXJzdCBpZGVudGlmeWlu
ZyB0aGUgb3BlcmF0aW9uCisgICAgLy8gYW5kIHRoZSBzZWNvbmQgZ2l2aW5nIGEga2V5LiBUaGUg
Y29tbWFuZHMgYXJlOgorICAgIC8vICAreCAgQWRkIHgKKyAgICAvLyAgKnggIEZpbmQgYWxsIGVs
ZW1lbnRzIGVxdWFsIHRvIHgKKyAgICAvLyAgQHggIEZpbmQgYWxsIGVsZW1lbnRzIHRoYXQgaGF2
ZSB0aGUgc21hbGxlc3Qga2V5IHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHgKKyAg
ICAvLyAgIXggIFJlbW92ZSBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAorICAgIHN0YXRpYyB2b2lk
IHRlc3REcml2ZXIoY29uc3QgY2hhciogY29udHJvbFN0cmluZykKKyAgICB7CisgICAgICAgIFBh
aXJWZWN0b3IgYXNWZWN0b3I7CisgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4g
YXNUcmVlOworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBjaGFyKiBjdXJyZW50ID0gY29u
dHJvbFN0cmluZzsgKmN1cnJlbnQ7IGN1cnJlbnQgKz0gMikgeworICAgICAgICAgICAgY2hhciBj
b21tYW5kID0gY3VycmVudFswXTsKKyAgICAgICAgICAgIGNoYXIga2V5ID0gY3VycmVudFsxXTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKytjb3VudGVyOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBBU1NFUlQoY29tbWFuZCk7CisgICAgICAgICAgICBBU1NFUlQoa2V5KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBj
YXNlICcrJzogeworICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46
Ok5vZGUqIG5vZGUgPSBuZXcgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZTsKKyAg
ICAgICAgICAgICAgICBub2RlLT5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBhc1RyZWUuaW5zZXJ0KG5vZGUpOworICAgICAg
ICAgICAgICAgIGFzVmVjdG9yLmFwcGVuZChQYWlyKGtleSwgdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGNhc2UgJyonOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVk
Pjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5maW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZSkKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5
LCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVlLCBu
b2RlLCBmaW5kRXhhY3QoYXNWZWN0b3IsIGtleSksIGtleSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgJ0AnOiB7CisgICAgICAgICAg
ICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5m
aW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZSkgeworICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChub2RlLT5rZXkgPj0ga2V5KTsK
KyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUsIG5vZGUs
IGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChhc1ZlY3Rvciwga2V5KSwgbm9kZS0+a2V5KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQo
ZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9yLCBrZXkpLmlzRW1wdHkoKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBjYXNlICchJzogeworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5v
ZGUgPSBhc1RyZWUucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChub2RlLT5rZXksIGtl
eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3Rv
ciwgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChmaW5kRXhhY3QoYXNWZWN0b3Is
IGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAg
ICAgICAgIGFzVHJlZS5jaGVja0NvbnNpc3RlbmN5KCk7CisjZW5kaWYKKyAgICAgICAgICAgIFRF
U1RfQVNTRVJUX0VRVUFMKGFzVHJlZS5zaXplKCksIGFzVmVjdG9yLnNpemUoKSk7CisgICAgICAg
ICAgICBhc3NlcnRFcXVhbChhc1RyZWUsIGFzVmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KK307
CisKK3Vuc2lnbmVkIFJlZEJsYWNrVHJlZVRlc3RzOjpjb3VudGVyOworCisvLyBUZXN0cyBmb3Ig
TWV0YUFsbG9jYXRvcgorCitjbGFzcyBNZXRhQWxsb2NhdG9yVGVzdHMgeworcHJpdmF0ZToKKyAg
ICBNZXRhQWxsb2NhdG9yVGVzdHMoKSB7IH0KKworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJ1
blRlc3RzKCkKKyAgICB7CisgICAgICAgIFJVTl9URVNUKHRlc3ROb3RoaW5nKCkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0QWxsb2NaZXJvKCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0T25lQWxs
b2MoMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdE9uZUFsbG9jKDY0KSk7CisgICAgICAgIFJV
Tl9URVNUKHRlc3RPbmVBbGxvYyhwYWdlU2l6ZSgpKjIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVh
dEFsbG9jRnJlZSgzMiwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9j
RnJlZSg2NCwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgz
MiwgMzIsIDY0LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIs
IDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAz
MiwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIs
IDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCAz
MiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMzIs
IDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZShwYWdlU2l6ZSgpICog
MiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgcGFn
ZVNpemUoKSAqIDIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZShw
YWdlU2l6ZSgpICogMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9j
RnJlZShwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpICogMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpLCAwKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIDMyLCAxMjgpKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgNjQsIDEyOCkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDY0LCAzMiwgMTI4KSk7CisgICAgICAg
IFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFn
ZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCBw
YWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkgKiAyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RT
aW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkgKiAyKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgcGFnZVNpemUo
KSwgcGFnZVNpemUoKSAqIDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhGaWxs
QXRFbmQsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxB
dEVuZCwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZp
bGxBdEVuZCwgMzIsIDMyLCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9B
bGxvYyhGaWxsQXRFbmQsIHBhZ2VTaXplKCkgLSAzMiwgMzIsIHBhZ2VTaXplKCkgLSA2NCwgNjQs
IDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwg
MCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAz
MiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMy
LCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhFYWdlckZpbGws
IHBhZ2VTaXplKCkgLSAzMiwgMzIsIHBhZ2VTaXplKCkgLSA2NCwgNjQsIDApKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdEZpbGxIZWFwKDMyLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgp
IC8gMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZpbGxIZWFwKHBhZ2VTaXplKCksIGRlZmF1
bHRQYWdlc0luSGVhcCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RmlsbEhlYXAocGFnZVNpemUo
KSAqIDIsIGRlZmF1bHRQYWdlc0luSGVhcCAvIDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJp
Z2h0QWxsb2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdFJpZ2h0QWxsb2NhdGlvbihwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSwg
cGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RG
aXQoNjQsIDY0LCAzLCBSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVz
dEZpdCg2NCwgNjQsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdEJlc3RGaXQoNjQsIDY0LCAxMDAsIERvbnRSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0QmVzdEZpdCg5NiwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAg
IFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVjaykpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg5NiwgNjQsIDEwMCwgRG9udFJ1blNhbml0eUNo
ZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA5NiwgMywgUnVuU2FuaXR5
Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDk2LCAxMCwgRG9udFJ1
blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA5NiwgODAs
IERvbnRSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKDY0LCAz
MikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCksIDMyKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSwgcGFnZVNpemUoKSAtIDMyKSk7Cisg
ICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIDMyKSk7CisgICAgICAg
IFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKyAzMikpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpKSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkg
LSAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdl
U2l6ZSgpICogMiAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REZW1hbmRBbGxvY0NvYWxl
c2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCwgZGVmYXVsdFBhZ2VzSW5IZWFwICog
cGFnZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShw
YWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAqMiwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFn
ZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2Uo
cGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwKjIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBh
Z2VTaXplKCkpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGVudW0gU2FuaXR5Q2hlY2tN
b2RlIHsgUnVuU2FuaXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVjayB9OworICAgIAorICAgIGVu
dW0gSGVhcEdyb3d0aE1vZGUgeyBEb250R3Jvd0hlYXAsIEZvclRlc3REZW1hbmRBbGxvY0NvYWxl
c2NlLCBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2UgfTsKKyAgICAKKyAgICBzdGF0aWMg
SGVhcEdyb3d0aE1vZGUgY3VycmVudEhlYXBHcm93dGhNb2RlOworICAgIHN0YXRpYyBzaXplX3Qg
YWxsb3dBbGxvY2F0ZVBhZ2VzOworICAgIHN0YXRpYyBzaXplX3QgcmVxdWVzdGVkTnVtUGFnZXM7
CisKKyAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKCkKKyAgICAgICAgICAg
IDogTWV0YUFsbG9jYXRvcigzMikKKyAgICAgICAgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVl
U3BhY2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSwgZGVm
YXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgflNpbXBsZVRlc3RBbGxvY2F0b3IoKQorICAgICAgICB7CisgICAgICAgICAg
ICBURVNUX0FTU0VSVCghYWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAgICAgIGFsbG9jYXRv
ckRlc3Ryb3llZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwg
dm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKQorICAgICAgICB7CisgICAg
ICAgICAgICBzd2l0Y2ggKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSkgeworICAgICAgICAgICAgY2Fz
ZSBEb250R3Jvd0hlYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlOgorICAgICAg
ICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U6IHsKKyAgICAgICAgICAg
ICAgICBURVNUX0FTU0VSVChhbGxvd0FsbG9jYXRlUGFnZXMpOworICAgICAgICAgICAgICAgIFRF
U1RfQVNTRVJUKGFsbG93QWxsb2NhdGVQYWdlcyA+PSBudW1QYWdlcyk7CisgICAgICAgICAgICAg
ICAgcmVxdWVzdGVkTnVtUGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgICAgICAgICBudW1QYWdl
cyA9IGFsbG93QWxsb2NhdGVQYWdlczsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRIZWFwR3Jvd3Ro
TW9kZSA9PSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZSkKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdm9pZCogcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFw
ICsgb2Zmc2V0KSAqIHBhZ2VTaXplKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAgICAgICAgICAgY3VycmVudEhlYXBH
cm93dGhNb2RlID0gRG9udEdyb3dIZWFwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnVtUGFnZXMgKyBvZmZzZXQ7
ICsrY291bnRlcikgeworICAgICAgICAgICAgICAgICAgICBwYWdlTWFwLT5hcHBlbmQoZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVDb3VudGVyID0gMDsgYnl0
ZUNvdW50ZXIgPCBwYWdlU2l6ZSgpOyArK2J5dGVDb3VudGVyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbWVtb3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUGFnZXNJbkhlYXAgKz0gbnVt
UGFnZXM7CisgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFn
ZSh2b2lkKiBwYWdlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUgcGFnZSBzaG91bGQg
YmUgYm90aCBmcmVlIGFuZCB1bm1hcHBlZC4KKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFwYWdl
U3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkpOwor
ICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihwYWdlKTsgYWRkcmVzcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdl
KSArIHBhZ2VTaXplKCk7ICsrYWRkcmVzcykKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVCgh
Ynl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpKSk7CisgICAgICAgICAg
ICBwYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUo
KSkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUg
cGFnZSBzaG91bGQgYmUgZnJlZSBvZiBvYmplY3RzIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCBzaG91
bGQgc3RpbGwKKyAgICAgICAgICAgIC8vIGJlIG1hcHBlZC4KKyAgICAgICAgICAgIFRFU1RfQVNT
RVJUKHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6
ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAgICAgICAgICAgIFRFU1Rf
QVNTRVJUKCFieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcykpKTsKKyAg
ICAgICAgICAgIHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBw
YWdlU2l6ZSgpKSA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBiYXNlUGFnZSA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1
bHRQYWdlc0luSGVhcCA9IDEwMDsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWduZWQgYWRkaXRpb25h
bFBhZ2VzSW5IZWFwOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Ym9vbCwgMD4qIG1lbW9yeU1h
cDsKKyAgICBzdGF0aWMgVmVjdG9yPGJvb2wsIDA+KiBwYWdlTWFwOworICAgIHN0YXRpYyBib29s
IGFsbG9jYXRvckRlc3Ryb3llZDsKKyAgICAKKyAgICBzdGF0aWMgU2ltcGxlVGVzdEFsbG9jYXRv
ciogYWxsb2NhdG9yOworICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3ROb3RoaW5nKCkKKyAgICB7
CisgICAgICAgIC8vIFRlc3RzIHRoYXQgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgYW4gYWxsb2Nh
dG9yIHdvcmtzLgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgdGVhckRvd24o
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdEFsbG9jWmVybygpCisgICAgewor
ICAgICAgICAvLyBUZXN0cyB0aGF0IGFsbG9jYXRpbmcgYSB6ZXJvLWxlbmd0aCBibG9jayByZXR1
cm5zIDAgYW5kCisgICAgICAgIC8vIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZyBpbiBtZW1vcnku
CisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKDApKTsKKworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBm
aW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIGZyZWUoZmluYWwpOworCisgICAg
ICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RPbmVBbGxv
YyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoZSBtb3N0IGJhc2ljIGJl
aGF2aW9yOiBhbGxvY2F0ZSBvbmUgdGhpbmcgYW5kIGZyZWUgaXQuIEFsc28KKyAgICAgICAgLy8g
dmVyaWZpZXMgdGhhdCB0aGUgc3RhdGUgb2YgcGFnZXMgaXMgY29ycmVjdC4KKyAgICAgICAgCisg
ICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBo
YW5kbGUgPSBhbGxvY2F0ZShzaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxl
LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXpl
KTsKKyAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKGJhc2VQYWdlKSk7CisgICAgICAgIAor
ICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhh
bmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAg
ICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0UmVwZWF0QWxs
b2NGcmVlKHNpemVfdCBmaXJzdFNpemUsIC4uLikKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHJp
Z2h0LWNvYWxlc2NpbmcgYnkgcmVwZWF0ZWRseSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nLiBUaGUg
aWRlYQorICAgICAgICAvLyBpcyB0aGF0IGlmIHlvdSBhbGxvY2F0ZSBzb21ldGhpbmcgYW5kIHRo
ZW4gZnJlZSBpdCwgdGhlbiB0aGUgaGVhcCBzaG91bGQKKyAgICAgICAgLy8gbG9vayBpZGVudGlj
YWwgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIGR1ZSB0byBhIHJpZ2h0LWNv
YWxlc2NlCisgICAgICAgIC8vIG9mIHRoZSBmcmVlZCBjaHVuayBhbmQgdGhlIGFscmVhZHktZnJl
ZSBtZW1vcnksIGFuZCBzbyBzdWJzZXF1ZW50CisgICAgICAgIC8vIGFsbG9jYXRpb25zIHNob3Vs
ZCBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgCisgICAgICAgIHNl
dFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBh
bGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwor
ICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIGZpcnN0U2l6
ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGhhbmRsZSk7Cisg
ICAgICAgIAorICAgICAgICB2YV9saXN0IGFyZ0xpc3Q7CisgICAgICAgIHZhX3N0YXJ0KGFyZ0xp
c3QsIGZpcnN0U2l6ZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0ZXMgPSB2YV9h
cmcoYXJnTGlzdCwgc2l6ZV90KSkgeworICAgICAgICAgICAgaGFuZGxlID0gYWxsb2NhdGUoc2l6
ZUluQnl0ZXMpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zdGFydCgp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0
ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAg
ICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5kKGFyZ0xpc3QpOwor
ICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZv
aWQgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc2Vjb25k
U2l6ZSwgc2l6ZV90IHRoaXJkU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEFsbG9jYXRlcyBzb21l
dGhpbmcgb2Ygc2l6ZSBmaXJzdFNpemUsIHRoZW4gc29tZXRoaW5nIG9mIHNpemUgc2Vjb25kU2l6
ZSwgYW5kIHRoZW4KKyAgICAgICAgLy8gZnJlZXMgdGhlIGZpcnN0IGFsbG9jYXRpb24sIGFuZCB0
aGVuIHRoZSBzZWNvbmQsIGFuZCB0aGVuIGF0dGVtcHRzIHRvIGFsbG9jYXRlIHRoZQorICAgICAg
ICAvLyB0aGlyZCwgYXNzZXJ0aW5nIHRoYXQgaXQgYWxsb2NhdGVkIGF0IHRoZSBiYXNlIGFkZHJl
c3Mgb2YgdGhlIGhlYXAuCisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0ZXN0
IG1heSBjYXVzZSByaWdodC1hbGxvY2F0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSB0ZXN0IHRv
IGZhaWwuCisgICAgICAgIC8vIFRodXMgdGhlIGNvcnJlY3Qgd2F5IG9mIHJ1bm5pbmcgdGhpcyB0
ZXN0IGlzIHRvIGVuc3VyZSB0aGF0IHNlY29uZFNpemUgaXMKKyAgICAgICAgLy8gcGlja2VkIGlu
IHN1Y2ggYSB3YXkgdGhhdCBpdCBuZXZlciBzdHJhZGRsZXMgYSBwYWdlLgorICAgICAgICAKKyAg
ICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZp
cnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoZmlyc3RIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdEhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oZmly
c3RIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhmaXJzdEhhbmRsZSk7CisK
KyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vj
b25kU2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZEhhbmRsZS0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RT
aXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZEhhbmRsZS0+c2l6ZUluQnl0
ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGZpcnN0SGFuZGxl
KTsKKyAgICAgICAgY29uZmlybShzZWNvbmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdh
dGVybWFyayhzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRs
ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7CisgICAgICAgIGNv
bmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVl
KHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFn
ZVNpemUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZh
bHNlKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHRoaXJkSGFuZGxl
ID0gYWxsb2NhdGUodGhpcmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwodGhpcmRI
YW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNp
emUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTCh0aGlyZEhhbmRsZS0+c2l6ZUluQnl0
ZXMoKSwgdGhpcmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0odGhpcmRIYW5kbGUp
OworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayh0aGlyZEhhbmRsZSk7CisgICAgICAgIAor
ICAgICAgICBmcmVlKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7
CisgICAgfQorICAgIAorICAgIGVudW0gVGVzdEZJRk9BbGxvY01vZGUgeyBGaWxsQXRFbmQsIEVh
Z2VyRmlsbCB9OworICAgIHN0YXRpYyB2b2lkIHRlc3RGSUZPQWxsb2MoVGVzdEZJRk9BbGxvY01v
ZGUgbW9kZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHRlc3QgdGhlIHNpbXBs
ZSBjYXNlIG9mIG5vLWNvYWxlc2NlIChmcmVlaW5nIHRoZSBsZWZ0LW1vc3QKKyAgICAgICAgLy8g
Y2h1bmsgaW4gbWVtb3J5IHdoZW4gdGhlIGNodW5rIHRvIHRoZSByaWdodCBvZiBpdCBpcyBhbGxv
Y2F0ZWQpIGFuZAorICAgICAgICAvLyBmdWxseSBleGVyY2lzZSBsZWZ0LWNvYWxlc2NpbmcgYW5k
IGZ1bGwtY29hbGVzY2luZy4gSW4gRWFnZXJGaWxsCisgICAgICAgIC8vIG1vZGUsIHRoaXMgYWxz
byB0ZXN0cyBwZXJmZWN0LWZpdCBhbGxvY2F0aW9uIGFuZCBuby1jb2FsZXNjaW5nIGZyZWUuCisg
ICAgICAgIAorICAgICAgICBzZXRVcCgpOworCisgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAw
OworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5k
bGVzOworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBhcmdMaXN0OworICAgICAgICB2YV9zdGFy
dChhcmdMaXN0LCBtb2RlKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBzaXplSW5CeXRlcyA9IHZh
X2FyZyhhcmdMaXN0LCBzaXplX3QpKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBURVNUX0FTU0VS
VF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJt
YXJrKGhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGhh
bmRsZSk7CisgICAgICAgICAgICB0b3RhbFNpemUgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAgIH0K
KyAgICAgICAgdmFfZW5kKGFyZ0xpc3QpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgICAg
ICBjb25maXJtKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBz
aXplU29GYXIgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBo
YW5kbGVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgc2l6ZVNvRmFyICs9IGhhbmRs
ZXMuYXQoaW5kZXgpLT5zaXplSW5CeXRlcygpOworICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0
KGluZGV4KSk7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBFYWdlckZpbGwpIHsKKyAgICAgICAg
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplU29GYXIp
OworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAg
ICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplU29GYXIp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBw
YWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyB0b3RhbFNpemUsIHRydWUpOworICAg
ICAgICAgICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAg
ICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlcy5sYXN0KCkpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFu
ZGxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmcmVlKGhhbmRsZSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VT
aXplKCksIGJhc2VQYWdlICogcGFnZVNpemUoKSArIHNpemVTb0ZhciwgZmFsc2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc2l6ZVNvRmFyID09
IHRvdGFsU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNp
emUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNl
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChtb2RlID09IEZpbGxBdEVuZCkgeworICAgICAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWxIYW5kbGUgPSBhbGxvY2F0ZSh0b3RhbFNpemUp
OworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUtPnN0YXJ0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAg
ICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRvdGFsU2l6
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oZmluYWxIYW5kbGUpOworICAg
ICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmluYWxIYW5kbGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdEZpbGxI
ZWFwKHNpemVfdCBzaXplSW5CeXRlcywgc2l6ZV90IG51bUFsbG9jYXRpb25zKQorICAgIHsKKyAg
ICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFu
ZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAgIGhhbmRsZXMu
YXBwZW5kKGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAg
ICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VS
VCghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQor
ICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNoZWNrKTsK
KyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICB0ZWFy
RG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0UmlnaHRBbGxvY2F0aW9u
KHNpemVfdCBmaXJzdExlZnRTaXplLCBzaXplX3QgZmlyc3RSaWdodFNpemUsIHNpemVfdCBzZWNv
bmRMZWZ0U2l6ZSwgc2l6ZV90IHNlY29uZFJpZ2h0U2l6ZSkKKyAgICB7CisgICAgICAgIHNldFVw
KCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdExlZnQgPSBh
bGxvY2F0ZShmaXJzdExlZnRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmlyc3RM
ZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0UmlnaHQg
PSBhbGxvY2F0ZShmaXJzdFJpZ2h0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZp
cnN0UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZh
dWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFs
bG9jYXRvckhhbmRsZSogc2Vjb25kTGVmdCA9IGFsbG9jYXRlKHNlY29uZExlZnRTaXplKTsKKyAg
ICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kTGVmdC0+c3RhcnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RMZWZ0LT5zaXplSW5CeXRl
cygpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRSaWdo
dCA9IGFsbG9jYXRlKHNlY29uZFJpZ2h0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFM
KHNlY29uZFJpZ2h0LT5lbmQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsg
ZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkgLSBmaXJzdFJpZ2h0LT5zaXplSW5CeXRl
cygpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpcnN0TGVmdCk7CisgICAgICAgIGZyZWUo
Zmlyc3RSaWdodCk7CisgICAgICAgIGZyZWUoc2Vjb25kTGVmdCk7CisgICAgICAgIGZyZWUoc2Vj
b25kUmlnaHQpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwg
PSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7Cisg
ICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCB0ZXN0QmVzdEZpdChzaXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc3RlcCwgdW5zaWduZWQgbnVt
U2xvdHMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUpCisgICAgeworICAgICAgICBz
ZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAw
PiBoYW5kbGVzVG9GcmVlOworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+
IGhhbmRsZXM7CisgICAgICAgIFZlY3Rvcjx2b2lkKiwgMD4gbG9jYXRpb25zOworICAgICAgICAK
KyAgICAgICAgc2l6ZV90IHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAgICAgICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiB0b0ZyZWUgPSBhbGxvY2F0ZShzaXplLCBzYW5pdHlDaGVja01vZGUp
OworICAgICAgICAgICAgaWYgKCFoYW5kbGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAg
IHdoaWxlICh0b0ZyZWUtPnN0YXJ0KCkgIT0gaGFuZGxlcy5sYXN0KCktPmVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGhhbmRsZXNUb0ZyZWUuYXBwZW5kKHRvRnJlZSk7CisgICAgICAgICAg
ICAgICAgICAgIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBmcmFnZ2VyID0gYWxsb2NhdGUoMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChmcmFnZ2VyLT5zdGFydCgpLCB0b0ZyZWUtPmVuZCgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZCh0b0ZyZWUtPnN0YXJ0
KCkpOworCisgICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOworICAgICAg
ICAgICAgaGFuZGxlcy5hcHBlbmQoZnJhZ2dlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxvY2F0
aW9ucy5zaXplKCkgPT0gbnVtU2xvdHMpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlc1RvRnJlZS5zaXplKCk7ICsraW5kZXgpCisgICAg
ICAgICAgICBmcmVlKGhhbmRsZXNUb0ZyZWUuYXQoaW5kZXgpLCBzYW5pdHlDaGVja01vZGUpOwor
ICAgICAgICAKKyAgICAgICAgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGJlc3RGaXQgPSBhbGxvY2F0ZShzaXplIC0gMzIsIHNhbml0eUNo
ZWNrTW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKGJlc3RGaXQt
PnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAg
fHwgYmVzdEZpdC0+ZW5kKCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGxvY2F0aW9ucy5hdChpbmRleCkpICsgc2l6ZSkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzbWFsbCA9IGFsbG9jYXRlKDMy
LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgaWYgKGJlc3RGaXQtPnN0YXJ0KCkgPT0g
bG9jYXRpb25zLmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChz
bWFsbC0+c3RhcnQoKSwgYmVzdEZpdC0+ZW5kKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNtYWxsLT5lbmQoKSwgYmVzdEZpdC0+c3RhcnQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoYmVzdEZpdCwgc2FuaXR5Q2hlY2tN
b2RlKTsKKyAgICAgICAgICAgIGZyZWUoc21hbGwsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgp
CisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBzYW5pdHlDaGVja01vZGUpOwor
ICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpbmFs
LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdFNocmluayhzaXplX3QgZmlyc3RTaXplLCBzaXpl
X3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAg
ICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhhdCB3aWxsIGJlIHNocnVuaworICAgICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAK
KyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQgbWFrZSBzdXJlIHRoYXQgb3VyIHN0YXRlIHJlZmxl
Y3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAgIG5vdGlmeUZyZWUocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSkgKyBzZWNv
bmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBoYW5k
bGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxl
LT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNo
ZWNrKCk7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBub3Qg
ZW1wdHkuCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKGRlZmF1bHRQ
YWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRl
IHRoZSByZW1haW5kZXIgb2YgdGhlIGhlYXAuCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IHJlbWFpbmRlciA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLSBz
ZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwocmVtYWluZGVyLT5zdGFydCgp
LCBoYW5kbGUtPmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUocmVtYWluZGVyKTsKKyAg
ICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhl
IGhlYXAgaXMgZW1wdHkgYW5kIGZpbmlzaCB1cC4KKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAg
ICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShm
aW5hbCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCB0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXpl
X3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRTaXplKQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsK
KyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZh
dWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6
ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZShz
ZWNvbmRTaXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChk
ZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAor
ICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNj
ZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgIAorICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRT
aXplKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKGN1cnJlbnRIZWFwR3Jvd3RoTW9k
ZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvd0FsbG9j
YXRlUGFnZXMsIDApOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChyZXF1ZXN0ZWROdW1QYWdl
cywgKHNlY29uZFNpemUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAgICAKKyAgICAg
ICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAg
ICAgCisgICAgICAgIGZyZWUoYWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2Vz
KSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZShzaXplX3Qg
Zmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRTaXplKQorICAgIHsKKyAg
ICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxsb2NhdGUoZmlyc3RTaXpl
KSk7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUo
KSkpOworICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBh
Z2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAg
TWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwor
ICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25k
U2l6ZSkpOworICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVs
dFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAg
ICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2Nl
OworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgCisgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNp
emUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoY3VycmVudEhlYXBHcm93dGhNb2Rl
ID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG93QWxsb2Nh
dGVQYWdlcywgMCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHJlcXVlc3RlZE51bVBhZ2Vz
LCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCkpOworICAgICAgICBU
RVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICogcGFnZVNpemUoKSkp
OworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAgICAKKyAg
ICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVh
cCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKworICAgICAgICBmcmVlKGZpcnN0SGFuZGxl
KTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9B
U1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2Vz
KSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZpcnN0SGFuZGxlID0gYWxsb2Nh
dGUoZmlyc3RTaXplKTsKKyAgICAgICAgc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6
ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpcnN0SGFuZGxlLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsK
KyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2
b2lkIHNldFVwKCkKKyAgICB7CisgICAgICAgIG1lbW9yeU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwg
MD4oKTsKKyAgICAgICAgcGFnZU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2Ug
KyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAgcGFnZU1hcC0+YXBw
ZW5kKGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZUluUGFnZSA9IDA7IGJ5
dGVJblBhZ2UgPCBwYWdlU2l6ZSgpOyArK2J5dGVJblBhZ2UpCisgICAgICAgICAgICAgICAgbWVt
b3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yRGVz
dHJveWVkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUg
PSBEb250R3Jvd0hlYXA7CisgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAg
IGFkZGl0aW9uYWxQYWdlc0luSGVhcCA9IDA7CisgICAgICAgIAorICAgICAgICBhbGxvY2F0b3Ig
PSBuZXcgU2ltcGxlVGVzdEFsbG9jYXRvcigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9p
ZCB0ZWFyRG93bigpCisgICAgeworICAgICAgICBURVNUX0FTU0VSVChjdXJyZW50SGVhcEdyb3d0
aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYWxsb3dB
bGxvY2F0ZVBhZ2VzLCAwKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwocmVxdWVzdGVkTnVt
UGFnZXMsIDApOworICAgICAgICAKKyAgICAgICAgLy8gbWVtb3J5IHNob3VsZCBiZSBmcmVlLgor
ICAgICAgICBmb3IgKHVuc2lnbmVkIHBhZ2UgPSBiYXNlUGFnZTsgcGFnZSA8IGJhc2VQYWdlICsg
ZGVmYXVsdFBhZ2VzSW5IZWFwOyArK3BhZ2UpIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFw
YWdlU3RhdGUocGFnZSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlSW5QYWdlID0g
MDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAgICAgICAgICAgICAg
ICBURVNUX0FTU0VSVCghYnl0ZVN0YXRlKHBhZ2UgKiBwYWdlU2l6ZSgpICsgYnl0ZUluUGFnZSkp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGlzIGF1dG9tYXRpY2Fs
bHkgdGVzdHMgdGhhdCB0aGUgYWxsb2NhdG9yIGRpZCBub3QgbGVhaworICAgICAgICAvLyBtZW1v
cnksIHNvIGxvbmcgYXMgdGhlc2UgdGVzdHMgYXJlIHJ1bm5pbmcgd2l0aCAhZGVmaW5lZChOREVC
VUcpLgorICAgICAgICAvLyBTZWUgTWV0YUFsbG9jYXRvcjo6bV9tYWxsb2NCYWxhbmNlLgorICAg
ICAgICBkZWxldGUgYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoYWxs
b2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBtZW1vcnlNYXA7Cisg
ICAgICAgIGRlbGV0ZSBwYWdlTWFwOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTWV0YUFsbG9j
YXRvckhhbmRsZSogYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBTYW5pdHlDaGVja01vZGUg
c2FuaXR5Q2hlY2tNb2RlID0gUnVuU2FuaXR5Q2hlY2spCisgICAgeworICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKS5s
ZWFrUmVmKCk7CisgICAgICAgIFRFU1RfQVNTRVJUKGhhbmRsZSk7CisgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAK
KyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAgICB1aW50cHRyX3QgZW5kQnl0ZSA9IHN0YXJ0Qnl0
ZSArIHNpemVJbkJ5dGVzOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0
YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAg
ICAgICBURVNUX0FTU0VSVCghYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSk7CisgICAgICAgICAgICBi
eXRlU3RhdGUoY3VycmVudEJ5dGUpID0gdHJ1ZTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKHBh
Z2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlDaGVjaykKKyAgICAgICAg
ICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gaGFuZGxlOworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBmcmVlKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRs
ZSwgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9IFJ1blNhbml0eUNoZWNrKQorICAg
IHsKKyAgICAgICAgVEVTVF9BU1NFUlQoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIG5vdGlm
eUZyZWUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOworICAgICAgICBo
YW5kbGUtPmRlcmVmKCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5Q2hlY2tNb2RlID09
IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIHZvaWQgbm90aWZ5RnJlZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5
dGVzKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihzdGFydCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRC
eXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0g
c3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAg
ICAgICAgIFRFU1RfQVNTRVJUKGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkpOworICAgICAgICAgICAg
Ynl0ZVN0YXRlKGN1cnJlbnRCeXRlKSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyB2b2lkIHNhbml0eUNoZWNrKCkKKyAgICB7CisjaWZuZGVmIE5ERUJVRworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSAtIGFsbG9j
YXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWxsb2NhdG9yLT5kZWJ1Z0ZyZWVTcGFjZVNpemUoKSk7
CisjZW5kaWYKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc1Jlc2Vy
dmVkKCksIChkZWZhdWx0UGFnZXNJbkhlYXAgKyBhZGRpdGlvbmFsUGFnZXNJbkhlYXApICogcGFn
ZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9jYXRvci0+Ynl0ZXNBbGxv
Y2F0ZWQoKSwgYnl0ZXNBbGxvY2F0ZWQoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFs
bG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKSwgYnl0ZXNDb21taXR0ZWQoKSk7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyB2b2lkIGNvbmZpcm0oTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQor
ICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAgICBjb25maXJtKHN0YXJ0Qnl0ZSwgc3Rh
cnRCeXRlICsgaGFuZGxlLT5zaXplSW5CeXRlcygpLCB0cnVlKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIHZvaWQgY29uZmlybUhpZ2hXYXRlcm1hcmsoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFu
ZGxlKQorICAgIHsKKyAgICAgICAgY29uZmlybShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
aGFuZGxlLT5lbmQoKSksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6
ZSgpLCBmYWxzZSk7CisgICAgfQorICAgICAgICAgICAgICAgIAorICAgIHN0YXRpYyB2b2lkIGNv
bmZpcm0odWludHB0cl90IHN0YXJ0Qnl0ZSwgdWludHB0cl90IGVuZEJ5dGUsIGJvb2wgdmFsdWUp
CisgICAgeworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsg
Y3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChieXRlU3RhdGUoY3VycmVudEJ5dGUpLCB2YWx1ZSk7CisgICAgICAgICAg
ICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKGN1cnJl
bnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmICghdmFsdWUpIHsK
KyAgICAgICAgICAgIHVpbnRwdHJfdCBmaXJzdEZyZWVQYWdlID0gKHN0YXJ0Qnl0ZSArIHBhZ2VT
aXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7CisgICAgICAgICAgICB1aW50cHRyX3QgbGFzdEZyZWVQ
YWdlID0gKGVuZEJ5dGUgLSBwYWdlU2l6ZSgpKSAvIHBhZ2VTaXplKCk7CisgICAgICAgICAgICBm
b3IgKHVpbnRwdHJfdCBjdXJyZW50UGFnZSA9IGZpcnN0RnJlZVBhZ2U7IGN1cnJlbnRQYWdlIDw9
IGxhc3RGcmVlUGFnZTsgKytjdXJyZW50UGFnZSkKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VS
VCghcGFnZVN0YXRlKGN1cnJlbnRQYWdlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
c3RhdGljIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVz
dWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWVtb3J5
TWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtZW1vcnlNYXAtPmF0KGlu
ZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzQ29tbWl0dGVk
KCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBwYWdlTWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGlmIChwYWdlTWFwLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgcmVzdWx0Kys7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCAqIHBhZ2VTaXplKCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBib29sJiBieXRlU3RhdGUodm9pZCogYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJl
c3MpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wmIGJ5dGVTdGF0ZSh1aW50cHRyX3Qg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBieXRlSW5kZXggPSBhZGRyZXNzIC0g
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5TWFwLT5hdChieXRl
SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCYgcGFnZVN0YXRlKHVpbnRwdHJf
dCBwYWdlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHBhZ2VJbmRleCA9IHBhZ2UgLSBiYXNl
UGFnZTsKKyAgICAgICAgcmV0dXJuIHBhZ2VNYXAtPmF0KHBhZ2VJbmRleCk7CisgICAgfQorfTsK
KworTWV0YUFsbG9jYXRvclRlc3RzOjpIZWFwR3Jvd3RoTW9kZSBNZXRhQWxsb2NhdG9yVGVzdHM6
OmN1cnJlbnRIZWFwR3Jvd3RoTW9kZTsKK3NpemVfdCBNZXRhQWxsb2NhdG9yVGVzdHM6OmFsbG93
QWxsb2NhdGVQYWdlczsKK3NpemVfdCBNZXRhQWxsb2NhdG9yVGVzdHM6OnJlcXVlc3RlZE51bVBh
Z2VzOwordW5zaWduZWQgTWV0YUFsbG9jYXRvclRlc3RzOjphZGRpdGlvbmFsUGFnZXNJbkhlYXA7
CitWZWN0b3I8Ym9vbCwgMD4qIE1ldGFBbGxvY2F0b3JUZXN0czo6bWVtb3J5TWFwOworVmVjdG9y
PGJvb2wsIDA+KiBNZXRhQWxsb2NhdG9yVGVzdHM6OnBhZ2VNYXA7Citib29sIE1ldGFBbGxvY2F0
b3JUZXN0czo6YWxsb2NhdG9yRGVzdHJveWVkOworTWV0YUFsbG9jYXRvclRlc3RzOjpTaW1wbGVU
ZXN0QWxsb2NhdG9yKiBNZXRhQWxsb2NhdG9yVGVzdHM6OmFsbG9jYXRvcjsKKworLy8gUmVncmVz
c2lvbiB0ZXN0cyBmb3IgTWV0YUFsbG9jYXRvciAtIHNpbXVsYXRlcyBjYXNlcyB0aGF0IHdlJ3Zl
IHNlZW4gZmFpbCBpbiB0aGUKKy8vIHBhc3QuCisKK2NsYXNzIE1ldGFBbGxvY2F0b3I2NGJpdFJl
Z3Jlc3Npb25UZXN0cyB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3I2NGJpdFJlZ3Jlc3Np
b25UZXN0cygpIHsgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyB2b2lkIHJ1blRlc3RzKCkK
KyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgUlVOX1RFU1QocnVuVHJlZVJvb3RDb3Jy
dXB0aW9uVGVzdCgpKTsKKyNlbmRpZgorICAgIH0KKworcHJpdmF0ZToKKyNpZiBDUFUoWDg2XzY0
KQorICAgIGNsYXNzIE51bGxUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBOdWxsVGVzdEFsbG9jYXRvcigpCisgICAgICAgICAgICA6IE1l
dGFBbGxvY2F0b3IoMzIpIC8vIG1hdGNoZXMgRml4ZWRWTVBvb2xBbGxvY2F0b3IKKyAgICAgICAg
eworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
MHg0NDAzMzljMDEwMDBsbHUpLCAxMDI0ICogMTAyNCAqIDEwMjQpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKikKKyAgICAgICAgeworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lk
KikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRpYyB2b2lkIHJ1blRy
ZWVSb290Q29ycnVwdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgTnVsbFRlc3RBbGxvY2F0b3Ig
YWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAgVmVjdG9yPFJlZlB0
cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgMD4gaGFuZGxlczsKKyAgICAgICAgICAgIGhhbmRsZXMu
YXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg3MzYpKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBw
ZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgxNTUyMCkpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBl
bmQoYWxsb2NhdG9yLmFsbG9jYXRlKDEwMjQpKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5k
KGFsbG9jYXRvci5hbGxvY2F0ZSg1NzYpKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFs
bG9jYXRvci5hbGxvY2F0ZSgyOTc2KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxv
Y2F0b3IuYWxsb2NhdGUoNDgwKSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0
b3IuYWxsb2NhdGUoMjI0MCkpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9y
LmFsbG9jYXRlKDk2KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxs
b2NhdGUoMzQ4OCkpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9j
YXRlKDM4NCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTCho
YW5kbGVzLmF0KDYpLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigweDQ0MDM3OWMw
MDEwMGxsdSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlcy5hdCg2KS0+
c2l6ZUluQnl0ZXMoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PigyMjQwKSk7CisgICAgICAgICAgICBU
RVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDgpLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigweDQ0MDMzOWMwNWQ2MGxsdSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoaGFuZGxlcy5hdCg4KS0+c2l6ZUluQnl0ZXMoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PigzNDg4
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZXMuYXQoNikuY2xlYXIoKTsKKyAg
ICAgICAgICAgIGhhbmRsZXMuYXQoOCkuY2xlYXIoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRp
ZgorfTsKKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgSlNDOjppbml0aWFsaXplVGhy
ZWFkaW5nKCk7CisKKyAgICBSVU5fU1VJVEUoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKCkp
OworICAgIFJVTl9TVUlURShNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3RzKCkpOworICAgIFJV
Tl9TVUlURShNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHM6OnJ1blRlc3RzKCkpOwor
ICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZC5cbiIpOworICAgIHJldHVybiAwOworfQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICog
My4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JI
YW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKQorICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICwgbV9zdGFydChzdGFy
dCkKKyAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKGFsbG9j
YXRvcik7CisgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOworfQor
CitNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCit7CisgICAgaWYg
KCFtX2FsbG9jYXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tl
cigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgaWYgKG1fc2l6ZUluQnl0ZXMpIHsKKyAgICAg
ICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kobV9zdGFydCwgbV9zaXplSW5C
eXRlcyk7CisgICAgICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5k
bGUobV9zdGFydCwgbV9zaXplSW5CeXRlcyk7CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0
b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5l
d1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbV9hbGxvY2F0
b3IpIHsKKyAgICAgICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0
b3ItPm1fbG9jayk7CisKKyAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVw
KG5ld1NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9z
aXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKG5ld1NpemVJbkJ5dGVzID09IG1fc2l6ZUluQnl0
ZXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB1aW50cHRyX3QgZnJlZVN0YXJ0ID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbmV3U2l6ZUluQnl0ZXM7CisgICAg
c2l6ZV90IGZyZWVTaXplID0gbV9zaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOworICAgIHVp
bnRwdHJfdCBmcmVlRW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CisgICAgCisgICAgdWludHB0
cl90IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5t
X3BhZ2VTaXplIC0gMSkgJiAtbV9hbGxvY2F0b3ItPm1fcGFnZVNpemU7CisgICAgaWYgKGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKKyAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3Jl
bWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5
RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFy
dCkpOworICAgIAorICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5k
bGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIAor
ICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKK30KKworTWV0YUFsbG9jYXRvcjo6
TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpCisgICAgOiBtX2FsbG9jYXRp
b25HcmFudWxlKGFsbG9jYXRpb25HcmFudWxlKQorICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSgp
KQorICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCisg
ICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9tYWxsb2NC
YWxhbmNlKDApCisjZW5kaWYKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAg
ICAsIG1fbnVtQWxsb2NhdGlvbnMoMCkKKyAgICAsIG1fbnVtRnJlZXMoMCkKKyNlbmRpZgorewor
ICAgIG1fbG9jay5Jbml0KCk7CisgICAgCisgICAgZm9yIChtX2xvZ1BhZ2VTaXplID0gMDsgbV9s
b2dQYWdlU2l6ZSA8IDMyOyArK21fbG9nUGFnZVNpemUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHNpemVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXplKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
IDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSk7CisgICAgCisgICAgZm9yIChtX2xvZ0Fs
bG9jYXRpb25HcmFudWxlID0gMDsgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA8IDMyOyArK21fbG9n
QWxsb2NhdGlvbkdyYW51bGUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkg
PDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+
KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7Cit9
CisKK01ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKK3sKKyAgICBmb3IgKEZyZWVTcGFj
ZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9kZTspIHsKKyAgICAg
ICAgRnJlZVNwYWNlTm9kZSogbmV4dCA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5zdWNjZXNzb3Iobm9k
ZSk7CisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgICAgIGZy
ZWVGcmVlU3BhY2VOb2RlKG5vZGUpOworICAgICAgICBub2RlID0gbmV4dDsKKyAgICB9CisjaWZu
ZGVmIE5ERUJVRworICAgIEFTU0VSVCghbV9tYWxsb2NCYWxhbmNlKTsKKyNlbmRpZgorfQorCitQ
YXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNp
emVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7
CisKKyAgICBpZiAoIXNpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBz
aXplSW5CeXRlcyA9IHJvdW5kVXAoc2l6ZUluQnl0ZXMpOworICAgIAorICAgIHZvaWQqIHN0YXJ0
ID0gZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFzdGFydCkg
eworICAgICAgICBzaXplX3QgcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyA9IChzaXplSW5CeXRlcyAr
IG1fcGFnZVNpemUgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICBzaXplX3QgbnVtYmVy
T2ZQYWdlcyA9IHJlcXVlc3RlZE51bWJlck9mUGFnZXM7CisgICAgICAgIAorICAgICAgICBzdGFy
dCA9IGFsbG9jYXRlTmV3U3BhY2UobnVtYmVyT2ZQYWdlcyk7CisgICAgICAgIGlmICghc3RhcnQp
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1iZXJP
ZlBhZ2VzID49IHJlcXVlc3RlZE51bWJlck9mUGFnZXMpOworICAgICAgICAKKyAgICAgICAgc2l6
ZV90IHJvdW5kZWRVcFNpemUgPSBudW1iZXJPZlBhZ2VzIDw8IG1fbG9nUGFnZVNpemU7CisgICAg
ICAgIAorICAgICAgICBBU1NFUlQocm91bmRlZFVwU2l6ZSA+PSBzaXplSW5CeXRlcyk7CisgICAg
ICAgIAorICAgICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gcm91bmRlZFVwU2l6ZTsKKyAgICAgICAg
CisgICAgICAgIGlmIChyb3VuZGVkVXBTaXplID4gc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAg
IHZvaWQqIGZyZWVTcGFjZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIHNp
emVfdCBmcmVlU3BhY2VTaXplID0gcm91bmRlZFVwU2l6ZSAtIHNpemVJbkJ5dGVzOworICAgICAg
ICAgICAgYWRkRnJlZVNwYWNlKGZyZWVTcGFjZVN0YXJ0LCBmcmVlU3BhY2VTaXplKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBpbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0LCBzaXplSW5CeXRl
cyk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCArPSBzaXplSW5CeXRlczsKKyNpZiBFTkFCTEUoTUVU
QV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBtX251bUFsbG9jYXRpb25zKys7CisjZW5kaWYKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNp
emVJbkJ5dGVzKSk7Cit9CisKK01ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRv
cjo6Y3VycmVudFN0YXRpc3RpY3MoKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9s
b2NrKTsKKyAgICBTdGF0aXN0aWNzIHJlc3VsdDsKKyAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQg
PSBtX2J5dGVzQWxsb2NhdGVkOworICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jl
c2VydmVkOworICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCA9IG1fYnl0ZXNDb21taXR0ZWQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogTWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92
ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgRnJlZVNwYWNlTm9kZSogbm9k
ZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoc2l6ZUlu
Qnl0ZXMpOworICAgIAorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisg
ICAgQVNTRVJUKG5vZGUtPmtleSA+PSBzaXplSW5CeXRlcyk7CisgICAgCisgICAgbV9mcmVlU3Bh
Y2VTaXplTWFwLnJlbW92ZShub2RlKTsKKyAgICAKKyAgICB2b2lkKiByZXN1bHQ7CisgICAgCisg
ICAgaWYgKG5vZGUtPmtleSA9PSBzaXplSW5CeXRlcykgeworICAgICAgICAvLyBFYXN5IGNhc2U6
IHBlcmZlY3QgZml0LCBzbyBqdXN0IHJlbW92ZSB0aGUgbm9kZSBlbnRpcmVseS4KKyAgICAgICAg
cmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgIAorICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0
QWRkcmVzc01hcC5yZW1vdmUobm9kZS0+dmFsdWUpOworICAgICAgICBtX2ZyZWVTcGFjZUVuZEFk
ZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAgICAgZnJlZUZyZWVT
cGFjZU5vZGUobm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVHJ5IHRvIGJlIGEgZ29v
ZCBjaXRpemVuIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgY2h1bmsgb2YgbWVtb3J5Cisg
ICAgICAgIC8vIHN0cmFkZGxlcyBhcyBmZXcgcGFnZXMgYXMgcG9zc2libGUsIGJ1dCBvbmx5IGlu
c29mYXIgYXMgZG9pbmcgc28gd2lsbAorICAgICAgICAvLyBub3QgaW5jcmVhc2UgZnJhZ21lbnRh
dGlvbi4gVGhlIGludHVpdGlvbiBpcyB0aGF0IG1pbmltaXppbmcKKyAgICAgICAgLy8gZnJhZ21l
bnRhdGlvbiBpcyBhIHN0cmljdGx5IGhpZ2hlciBwcmlvcml0eSB0aGFuIG1pbmltaXppbmcgdGhl
IG51bWJlcgorICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNlIGluIHRoZSBsb25n
IHJ1biwgc21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCisgICAgICAgIC8vIGZld2VyIGNvbW1p
dHRlZCBwYWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KKyAgICAgICAgCisgICAg
ICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9k
ZS0+dmFsdWUpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJfdCBsYXN0UGFnZSA9
IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5IC0g
MSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlRm9y
TGVmdEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVl
KSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWludHB0cl90
IGZpcnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5IC0gc2l6ZUluQnl0ZXMpID4+IG1fbG9nUGFnZVNp
emU7CisgICAgICAgIAorICAgICAgICBpZiAobGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlvbiAtIGZp
cnN0UGFnZSArIDEgPD0gbGFzdFBhZ2UgLSBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gKyAx
KSB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBpbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSByZXR1
cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSByaWdodC4KKyAgICAgICAgICAg
IHJlc3VsdCA9IG5vZGUtPnZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUobm9kZS0+dmFsdWUpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBub2RlLT5rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBub2RlLT52
YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihub2RlLT52YWx1ZSkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVN0YXJ0QWRkcmVzc01hcC5hZGQobm9kZS0+dmFsdWUsIG5vZGUpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIHJpZ2h0IHNpemUgb2YgdGhlIHJldHVy
bmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIGxlZnQ7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSBzaXplSW5CeXRlcyk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1v
dmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5v
ZGUtPnZhbHVlKSArIG5vZGUtPmtleSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2Rl
LT5rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJl
c3NNYXAuYWRkKHJlc3VsdCwgbm9kZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVs
ZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyNpZiBFTkFC
TEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBtX251bUZyZWVzKys7CisjZW5kaWYKKyAg
ICBtX2J5dGVzQWxsb2NhdGVkIC09IHNpemVJbkJ5dGVzOworICAgIGFkZEZyZWVTcGFjZShzdGFy
dCwgc2l6ZUluQnl0ZXMpOworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNw
YWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xk
ZXIgbG9ja2VyKCZtX2xvY2spOworICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBzaXplSW5CeXRlczsK
KyAgICBhZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKworc2l6ZV90IE1ldGFB
bGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAg
ICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsg
bm9kZTsgbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5zdWNjZXNzb3Iobm9kZSkpCisgICAgICAg
IHJlc3VsdCArPSBub2RlLT5rZXk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgQ1JB
U0goKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFk
ZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIHZvaWQq
IGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihzdGFydCkgKyBzaXplSW5CeXRlcyk7CisgICAgCisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNw
YWNlTm9kZSo+OjppdGVyYXRvciBsZWZ0TmVpZ2hib3IgPSBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NN
YXAuZmluZChzdGFydCk7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+OjppdGVy
YXRvciByaWdodE5laWdoYm9yID0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZmluZChlbmQp
OworICAgIAorICAgIGlmIChsZWZ0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFw
LmVuZCgpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgc29tZXRoaW5nIHdlIGNhbiBjb2FsZXNjZSB3
aXRoIG9uIHRoZSBsZWZ0LiAgUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFuZAorICAgICAgICAv
LyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCisgICAgICAgIAorICAg
ICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkgKyBsZWZ0TmVpZ2hib3ItPnNlY29u
ZC0+a2V5KSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIEZyZWVT
cGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgIAorICAg
ICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFsdWU7CisgICAgICAgIHNpemVfdCBs
ZWZ0U2l6ZSA9IGxlZnROb2RlLT5rZXk7CisgICAgICAgIHZvaWQqIGxlZnRFbmQgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdFN0YXJ0KSAr
IGxlZnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZWZ0RW5kID09IHN0YXJ0KTsK
KyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobGVmdE5vZGUpOwor
ICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKGxlZnRFbmQpOworICAgICAg
ICAKKyAgICAgICAgLy8gTm93IGNoZWNrIGlmIHRoZXJlIGlzIGFsc28gc29tZXRoaW5nIHRvIGNv
YWxlc2NlIHdpdGggb24gdGhlIHJpZ2h0LgorICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gRnJlZWlu
ZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gIENvYWxlc2NlIGJvdGgg
bGVmdCBhbmQKKyAgICAgICAgICAgIC8vIHJpZ2h0LCB3aGlsc3QgcmVtb3ZpbmcgdGhlIHJpZ2h0
IG5laWdoYm9yIGZyb20gdGhlIG1hcHMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChyaWdodE5laWdoYm9yLT5zZWNvbmQtPnZhbHVlID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmln
aHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0
TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9k
ZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOwor
ICAgICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNpemUgKyBzaXplSW5CeXRlcyArIHJpZ2h0
U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0
QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXAucmVtb3ZlKHJpZ2h0RW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZnJlZUZyZWVTcGFjZU5vZGUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bGVmdE5vZGUtPmtleSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChsZWZ0Tm9kZSk7CisgICAgICAg
ICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJpZ2h0RW5kLCBsZWZ0Tm9kZSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVz
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxl
ZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBs
ZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYW5ub3QgY29h
bGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0
LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFy
dEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9k
ZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQg
PSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSBy
aWdodE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmln
aHRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJpZ2h0U3RhcnQgPT0g
ZW5kKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRl
cyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgcmln
aHROb2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0
YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxlc2NlIHdpdGgsIHNvIGNyZWF0ZSBhIG5ldyBm
cmVlIHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJl
ZVNwYWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBub2RlLT5rZXkgPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZh
bHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1h
cC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5h
ZGQoc3RhcnQsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFk
ZChlbmQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6
OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVz
KQoreworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oYWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAo
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpICsgc2l6ZUluQnl0ZXMgLSAxKSA+
PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBh
Z2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAgICAgICBIYXNoTWFwPHVpbnRwdHJf
dCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2Up
OworICAgICAgICBpZiAoaXRlciA9PSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpIHsKKyAgICAg
ICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQocGFnZSwgMSk7CisgICAgICAgICAgICBtX2J5
dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CisgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShy
ZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgTWV0
YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJfdCBs
YXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXplSW5C
eXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3QgcGFn
ZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhhc2hN
YXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFw
LmZpbmQocGFnZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFnZU9jY3VwYW5jeU1hcC5l
bmQoKSk7CisgICAgICAgIGlmICghLS0oaXRlci0+c2Vjb25kKSkgeworICAgICAgICAgICAgbV9w
YWdlT2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0
ZWQgLT0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2VJc0ZyZWUocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpyb3VuZFVwKHNpemVfdCBzaXplSW5CeXRlcykK
K3sKKyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fYWxsb2Nh
dGlvbkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJu
IChzaXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKSAmIC1tX2FsbG9jYXRpb25H
cmFudWxlOworfQorCitNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlKiBNZXRhQWxsb2NhdG9y
OjphbGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxvY0Jh
bGFuY2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmVlU3BhY2VOb2RlKj4o
ZmFzdE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9kZSkpKTsKK30KKwordm9pZCBNZXRhQWxsb2Nh
dG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKiBub2RlKQoreworI2lmbmRlZiBO
REVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsKKyNlbmRpZgorICAgIGZhc3RGcmVlKG5vZGUp
OworfQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIE1ldGFBbGxv
Y2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBwcmludGYoIm51bSBhbGxvY2F0aW9ucyA9ICV1
LCBudW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxvY2F0aW9ucywgbV9udW1GcmVlcyk7Cit9Cisj
ZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBD
b21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9jYXRv
cl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCisjZGVmaW5lIEVOQUJMRV9NRVRBX0FMTE9DQVRPUl9QUk9GSUxFIDAKKworY2xhc3Mg
TWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWV0YUFsbG9jYXRvcik7
CitwdWJsaWM6CisgICAgCisgICAgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51
bGUpOworICAgIAorICAgIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKKyAgICAKKyAgICBQYXNz
UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcyk7
CisgICAgCisgICAgLy8gTm9uLWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBz
dGF0aXN0aWNzLgorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNB
bGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNS
ZXNlcnZlZDsgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpIHsgcmV0dXJuIG1fYnl0ZXND
b21taXR0ZWQ7IH0KKyAgICAKKyAgICAvLyBBdG9taWMgbWV0aG9kIGZvciBnZXR0aW5nIGFsbG9j
YXRvciBzdGF0aXN0aWNzLgorICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAgICAgICAgc2l6ZV90
IGJ5dGVzQWxsb2NhdGVkOworICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAg
c2l6ZV90IGJ5dGVzQ29tbWl0dGVkOworICAgIH07CisgICAgU3RhdGlzdGljcyBjdXJyZW50U3Rh
dGlzdGljcygpOworCisgICAgLy8gQWRkIG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9y
LiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQorICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ug
d2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Igd2l0aGluIGEKKyAgICAvLyBmaXhlZCBwb29s
LgorICAgIHZvaWQgYWRkRnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcyk7CisKKyAgICAvLyBUaGlzIGlzIG1lYW50IG9ubHkgZm9yIGltcGxlbWVudGluZyB0ZXN0
cy4gTmV2ZXIgY2FsbCB0aGlzIGluIHJlbGVhc2UKKyAgICAvLyBidWlsZHMuCisgICAgc2l6ZV90
IGRlYnVnRnJlZVNwYWNlU2l6ZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAgdm9pZCBkdW1wUHJv
ZmlsZSgpIHsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSBu
ZXcgdmlydHVhbCBzcGFjZSwgYnV0IGRvbid0IGNvbW1pdC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUK
KyAgICAvLyBwYWdlcyB0aGFuIHdlIGFza2VkLCBpbiB3aGljaCBjYXNlIG51bVBhZ2VzIGlzIGNo
YW5nZWQuCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFn
ZXMpID0gMDsKKyAgICAKKyAgICAvLyBDb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSA9IDA7CisgICAgCisgICAgLy8gVW5jb21taXQgYSBw
YWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpID0gMDsK
KyAgICAKKyAgICAvLyBOT1RFOiBub25lIG9mIHRoZSBhYm92ZSBtZXRob2RzIGFyZSBjYWxsZWQg
ZHVyaW5nIGFsbG9jYXRvcgorICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBN
ZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZworICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5k
bGVzIHRoYXQgcmVmZXIgdG8gaXQuCisKK3ByaXZhdGU6CisgICAgCisgICAgZnJpZW5kIGNsYXNz
IE1ldGFBbGxvY2F0b3JIYW5kbGU7CisgICAgCisgICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8c2l6
ZV90LCB2b2lkKj4gVHJlZTsKKyAgICB0eXBlZGVmIFRyZWU6Ok5vZGUgRnJlZVNwYWNlTm9kZTsK
KyAgICAKKyAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMg
aXMgZWZmZWN0aXZlbHkKKyAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRo
YXQgaXQgZG9lcyBub3QgbWFyayB0aGUKKyAgICAvLyByZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBp
bi11c2UuCisgICAgdm9pZCogZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0
ZXMpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtZW1vcnkgZnJvbSBhbiBhbGxvY2F0
aW9uIGlzIGZyZWVkLgorICAgIHZvaWQgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhl
IGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhZGRpbmcgZnJlZSBzcGFjZTsgaXQKKyAgICAv
LyBpcyBjYWxsZWQgZnJvbSBib3RoIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSBhbmQg
ZnJvbQorICAgIC8vIGFkZEZyZXNoRnJlZVNwYWNlLgorICAgIHZvaWQgYWRkRnJlZVNwYWNlKHZv
aWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIE1hbmFnZW1lbnQg
b2YgdXNlZCBzcGFjZS4KKyAgICAKKyAgICB2b2lkIGluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9p
ZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICB2b2lkIGRlY3JlbWVudFBhZ2VP
Y2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAv
LyBVdGlsaXRpZXMuCisgICAgCisgICAgc2l6ZV90IHJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVz
KTsKKyAgICAKKyAgICBGcmVlU3BhY2VOb2RlKiBhbGxvY0ZyZWVTcGFjZU5vZGUoKTsKKyAgICB2
b2lkIGZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUqKTsKKyAgICAKKyAgICBzaXplX3Qg
bV9hbGxvY2F0aW9uR3JhbnVsZTsKKyAgICB1bnNpZ25lZCBtX2xvZ0FsbG9jYXRpb25HcmFudWxl
OworICAgIHNpemVfdCBtX3BhZ2VTaXplOworICAgIHVuc2lnbmVkIG1fbG9nUGFnZVNpemU7Cisg
ICAgCisgICAgVHJlZSBtX2ZyZWVTcGFjZVNpemVNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJl
ZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwOworICAgIEhhc2hNYXA8dm9p
ZCosIEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXA7CisgICAgSGFzaE1h
cDx1aW50cHRyX3QsIHNpemVfdD4gbV9wYWdlT2NjdXBhbmN5TWFwOworICAgIAorICAgIHNpemVf
dCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CisgICAgc2l6
ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgU3BpbkxvY2sgbV9sb2NrOworCisjaWZu
ZGVmIE5ERUJVRworICAgIHNpemVfdCBtX21hbGxvY0JhbGFuY2U7CisjZW5kaWYKKworI2lmIEVO
QUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHVuc2lnbmVkIG1fbnVtQWxsb2NhdGlv
bnM7CisgICAgdW5zaWduZWQgbV9udW1GcmVlczsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBXVEZfTWV0YUFsbG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JI
YW5kbGVfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisKKyNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTWV0YUFsbG9jYXRvcjsK
KworY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTogcHVibGljIFJlZkNvdW50ZWQ8TWV0YUFsbG9j
YXRvckhhbmRsZT4geworcHJpdmF0ZToKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxv
Y2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgICAg
IDogbV9hbGxvY2F0b3IoMCkKKyAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NFUlQoc3RhcnQpOwor
ICAgIH0KKyAgICAKK3B1YmxpYzoKKyAgICB+TWV0YUFsbG9jYXRvckhhbmRsZSgpOworICAgIAor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGNyZWF0ZVNlbGZNYW5h
Z2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUoc3RhcnQsIHNpemVJbkJ5
dGVzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQqIHN0YXJ0KCkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3N0YXJ0OworICAgIH0KKyAgICAKKyAgICB2b2lkKiBlbmQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihtX3N0YXJ0KSArIG1fc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICAgICAgCisgICAgc2l6
ZV90IHNpemVJbkJ5dGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwor
ICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsK
KyAgICAKKyAgICBib29sIGlzTWFuYWdlZCgpCisgICAgeworICAgICAgICByZXR1cm4gISFtX2Fs
bG9jYXRvcjsKKyAgICB9CisgICAgICAgIAorICAgIE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcigp
CisgICAgeworICAgICAgICBBU1NFUlQobV9hbGxvY2F0b3IpOworICAgICAgICByZXR1cm4gbV9h
bGxvY2F0b3I7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFs
bG9jYXRvcjsKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRvcjsKKyAgICB2b2lk
KiBtX3N0YXJ0OworICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworfTsKKworfQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBCYXNlZCBvbiBSZWQtQmxhY2sgdHJlZSBp
bXBsZW1lbnRhdGlvbiBieSBFbWluIE1hcnRpbmlhbgorICogLSBodHRwOi8vd3d3Lm1pdC5lZHUv
fmVtaW4vc291cmNlX2NvZGUvaW5kZXguaHRtbCAgICAgICAgIAorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUmVkQmxhY2tUcmVl
X2gKKyNkZWZpbmUgUmVkQmxhY2tUcmVlX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBU
aGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJlZSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVy
dGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Ygbm9kZXMgaW4gdGhlIHRyZWUgaXMgZW50aXJl
bHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlvdSBhcmUgaW4gcG9zc2Vzc2lvbiBvZiBhIHBv
aW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0ZQorLy8gICBpdCBmcm9tIHRoZSB0cmVlLiBU
aGUgdHJlZSB3aWxsIHN1YnNlcXVlbnRseSBubyBsb25nZXIgaGF2ZSBhCisvLyAgIHJlZmVyZW5j
ZSB0byB0aGlzIG5vZGUuCisvLyAtIFRoZSBrZXkgdHlwZSBtdXN0IGltcGxlbWVudCBvcGVyYXRv
cjwgYW5kID09LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5
cGU+CitjbGFzcyBSZWRCbGFja1RyZWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZEJs
YWNrVHJlZSk7CitwdWJsaWM6CisgICAgY2xhc3MgUmF3Tm9kZSB7CisgICAgICAgIGZyaWVuZCBj
bGFzcyBSZWRCbGFja1RyZWU7CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGVzZSBtZXRo
b2RzIHNob3VsZCBwYWNrIHRoZSBwYXJlbnQgYW5kIHJlZCBpbnRvIGEgc2luZ2xlCisgICAgICAg
IC8vIHdvcmQuIEJ1dCBkb2luZyBzbyBhcHBlYXJzIHRvIHJldmVhbCBhIGJ1ZyBpbiB0aGUgY29t
cGlsZXIuCisgICAgICAgIFJhd05vZGUqIHBhcmVudCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmF3
Tm9kZSogc2V0UGFyZW50KFJhd05vZGUqIG5ld1BhcmVudCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fcGFyZW50ID0gbmV3UGFyZW50OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIGlzUmVkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
cmVkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNldFJlZChib29sIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9yZWQgPSB2YWx1ZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogbV9sZWZ0OworICAgICAgICBSYXdOb2RlKiBt
X3JpZ2h0OworICAgICAgICBSYXdOb2RlKiBtX3BhcmVudDsKKyAgICAgICAgYm9vbCBtX3JlZDsK
KyAgICB9OworICAgIAorICAgIGNsYXNzIE5vZGU6IHB1YmxpYyBSYXdOb2RlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBWYWx1ZVR5cGUgdmFsdWU7CisgICAg
fTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUoKQorICAgIHsKKyAgICAgICAgbV9uaWxTZW50aW5l
bC5zZXRQYXJlbnQoJm1fbmlsU2VudGluZWwpOworICAgICAgICBtX25pbFNlbnRpbmVsLm1fbGVm
dCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVsLm1fcmlnaHQgPSAmbV9u
aWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50aW5lbC5zZXRSZWQoZmFsc2UpOworICAgICAg
ICAKKyAgICAgICAgbV9yb290LnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAgICAgIG1f
cm9vdC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290Lm1fcmlnaHQgPSAm
bV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290LnNldFJlZChmYWxzZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgaW5zZXJ0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpbnNlcnRIZWxw
KG5vZGUpOworCisgICAgICAgIFJhd05vZGUqIHggPSBub2RlOworICAgICAgICBSYXdOb2RlKiB5
OworICAgICAgICAKKyAgICAgICAgeC0+c2V0UmVkKHRydWUpOworICAgICAgICB3aGlsZSAoeC0+
cGFyZW50KCktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIGlmICh4LT5wYXJlbnQoKSA9PSB4LT5w
YXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAgIHkgPSB4LT5wYXJl
bnQoKS0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlzUmVkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4
ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX3JpZ2h0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5w
YXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmln
aHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICB9IAorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5ID0geC0+cGFyZW50KCktPnBhcmVu
dCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlzUmVkKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAg
ICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5w
YXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50
KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRl
KHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVu
dCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFy
ZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5w
YXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgcm9vdCgpLT5tX2xlZnQtPnNldFJlZChmYWxzZSk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgICAgICBBU1NF
UlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlbW92ZShOb2Rl
KiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAgUmF3Tm9kZSogeDsKKwor
ICAgICAgICB5ID0gKHotPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpIHx8IHotPm1fcmlnaHQgPT0g
bmlsU2VudGluZWwoKSkgPyB6IDogc3VjY2Vzc29ySW50ZXJuYWwoeik7CisgICAgICAgIHggPSB5
LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSA/IHktPm1fcmlnaHQgOiB5LT5tX2xlZnQ7CisgICAg
ICAgIGlmIChyb290KCkgPT0geC0+c2V0UGFyZW50KHktPnBhcmVudCgpKSkgeworICAgICAgICAg
ICAgcm9vdCgpLT5tX2xlZnQgPSB4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYg
KHkgPT0geS0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgICAgICB5LT5wYXJlbnQoKS0+
bV9sZWZ0ID0geDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5LT5wYXJlbnQo
KS0+bV9yaWdodCA9IHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgIT0geikgeworICAgICAg
ICAgICAgQVNTRVJUKHkgIT0gbmlsU2VudGluZWwoKSk7CisKKyAgICAgICAgICAgIGlmICgheS0+
aXNSZWQoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVGaXhVcCh4KTsKKyAgCisgICAgICAgICAg
ICB5LT5tX2xlZnQgPSB6LT5tX2xlZnQ7CisgICAgICAgICAgICB5LT5tX3JpZ2h0ID0gei0+bV9y
aWdodDsKKyAgICAgICAgICAgIHktPnNldFBhcmVudCh6LT5wYXJlbnQoKSk7CisgICAgICAgICAg
ICB5LT5zZXRSZWQoei0+aXNSZWQoKSk7CisgICAgICAgICAgICB6LT5tX2xlZnQtPnNldFBhcmVu
dCh6LT5tX3JpZ2h0LT5zZXRQYXJlbnQoeSkpOworICAgICAgICAgICAgaWYgKHogPT0gei0+cGFy
ZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgICAgICB6LT5wYXJlbnQoKS0+bV9sZWZ0ID0geTsg
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgei0+cGFyZW50KCktPm1fcmlnaHQg
PSB5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCF5LT5pc1JlZCgpKQorICAg
ICAgICAgICAgICAgIHJlbW92ZUZpeFVwKHgpOworICAgICAgICB9CisgIAorICAgICAgICBBU1NF
UlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNS
ZWQoKSk7CisKKyAgICAgICAgcmV0dXJuIHo7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZpcnN0
KCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUgPSByb290KCktPm1fbGVmdDsKKyAgICAg
ICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm1f
bGVmdDsKKyAgICAgICAgICAgIGlmIChuZXh0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGFzTm9kZShub2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBuZXh0OworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGxhc3QoKQorICAgIHsKKyAgICAgICAgUmF3
Tm9kZSogbm9kZSA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxlICh0cnVlKSB7Cisg
ICAgICAgICAgICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+bV9yaWdodDsKKyAgICAgICAgICAgIGlm
IChuZXh0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShu
b2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBuZXh0OworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIE5vZGUqIHN1Y2Nlc3NvcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSog
cmVzdWx0ID0gc3VjY2Vzc29ySW50ZXJuYWwobm9kZSk7CisgICAgICAgIGlmIChyZXN1bHQgPT0g
bmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYXNO
b2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHByZWRlY2Vzc29yKE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4ID0gbm9kZTsKKyAgICAgICAgUmF3Tm9kZSog
eTsKKworICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSAoeSA9IHgtPm1fbGVmdCkpIHsKKyAg
ICAgICAgICAgIHdoaWxlICh5LT5tX3JpZ2h0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAg
ICAgICAgeSA9IHktPm1fcmlnaHQ7CisgICAgICAgICAgICByZXR1cm4gYXNOb2RlKHkpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgeSA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAg
d2hpbGUgKHggPT0geS0+bV9sZWZ0KSB7IAorICAgICAgICAgICAgICAgIGlmICh5ID09IHJvb3Qo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgeCA9IHk7
CisgICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKHkgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIHJldHVybiBhc05vZGUoeSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgTm9kZSogZmluZEV4YWN0KGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIFJh
d05vZGUqIHggPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgaWYgKHggPT0gbmlsU2VudGluZWwo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB3aGlsZSAoIShhc05vZGUoeCktPmtl
eSA9PSBrZXkpKSB7CisgICAgICAgICAgICBpZiAoYXNOb2RlKHgpLT5rZXkgPiBrZXkpCisgICAg
ICAgICAgICAgICAgeCA9IHgtPm1fbGVmdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB4ID0geC0+bV9yaWdodDsKKyAgICAgICAgICAgIGlmICh4ID09IG5pbFNlbnRpbmVsKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFz
Tm9kZSh4KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcmVtb3ZlKGNvbnN0IEtleVR5cGUmIGtl
eSkKKyAgICB7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGZpbmRFeGFjdChrZXkpOworICAgICAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcmVt
b3ZlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZpbmRMZWFzdEdyZWF0ZXJUaGFu
T3JFcXVhbChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBSYXdOb2RlKiBjdXJy
ZW50ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIFJhd05vZGUqIGJlc3QgPSAwOworICAgICAg
ICB3aGlsZSAoY3VycmVudCAhPSBuaWxTZW50aW5lbCgpKSB7CisgICAgICAgICAgICBpZiAoYXNO
b2RlKGN1cnJlbnQpLT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUo
Y3VycmVudCk7CisgICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5rZXkgPCBrZXkpCisg
ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fcmlnaHQ7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBj
dXJyZW50ID0gY3VycmVudC0+bV9sZWZ0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBhc05vZGUoYmVzdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZpbmRHcmVh
dGVzdExlc3NUaGFuT3JFcXVhbChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBS
YXdOb2RlKiBjdXJyZW50ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIFJhd05vZGUqIGJlc3Qg
PSAwOworICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBuaWxTZW50aW5lbCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJl
dHVybiBhc05vZGUoY3VycmVudCk7CisgICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5r
ZXkgPCBrZXkpIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VycmVudDsKKyAgICAgICAgICAg
ICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9sZWZ0OworICAgICAgICAgICAgfSBlbHNlIAorICAg
ICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX3JpZ2h0OworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBhc05vZGUoYmVzdCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4g
TyhuKSBvcGVyYXRpb24uCisgICAgc2l6ZV90IHNpemUoKQorICAgIHsKKyAgICAgICAgc2l6ZV90
IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IGZpcnN0KCk7IGN1cnJl
bnQ7IGN1cnJlbnQgPSBzdWNjZXNzb3IoY3VycmVudCkpCisgICAgICAgICAgICByZXN1bHQrKzsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBP
KDEpIG9wZXJhdGlvbi4KKyAgICBib29sIGlzRW1wdHkoKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHJvb3QoKS0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCk7CisgICAgfQorICAgIAorI2lmbmRlZiBO
REVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVk
KCkpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShyb290KCktPm1fbGVmdCk7Cisg
ICAgICAgIEFTU0VSVChyb290KCktPm1fcmlnaHQgPT0gbmlsU2VudGluZWwoKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICBwcmludGYoIlRyZWUgYXQgJXA6
XG4iLCB0aGlzKTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uocm9vdCgpLT5tX2xlZnQpOworICAgICAg
ICBwcmludGYoIiAgIHJvb3Q6ICVwLCAlcCwgJXBcbiIsIHJvb3QoKS0+bV9sZWZ0LCByb290KCkt
Pm1fcmlnaHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJvb3QoKS0+cGFyZW50QW5kUmVkKSk7
CisgICAgICAgIHByaW50ZigiICAgIG5pbDogJXAsICVwLCAlcFxuIiwgbmlsU2VudGluZWwoKS0+
bV9sZWZ0LCBuaWxTZW50aW5lbCgpLT5tX3JpZ2h0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihu
aWxTZW50aW5lbCgpLT5wYXJlbnRBbmRSZWQpKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICB2b2lkIGxlZnRSb3RhdGUoUmF3Tm9kZSogeCkKKyAgICB7CisgICAgICAgIFJhd05vZGUq
IHk7CisKKyAgICAgICAgeSA9IHgtPm1fcmlnaHQ7CisgICAgICAgIHgtPm1fcmlnaHQgPSB5LT5t
X2xlZnQ7CisKKyAgICAgICAgaWYgKHktPm1fbGVmdCAhPSBuaWxTZW50aW5lbCgpKQorICAgICAg
ICAgICAgeS0+bV9sZWZ0LT5zZXRQYXJlbnQoeCk7CisgIAorICAgICAgICB5LT5zZXRQYXJlbnQo
eC0+cGFyZW50KCkpOworCisgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpCisg
ICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9sZWZ0ID0geTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgeC0+cGFyZW50KCktPm1fcmlnaHQgPSB5OworICAgICAgICB5LT5tX2xlZnQgPSB4Owor
ICAgICAgICB4LT5zZXRQYXJlbnQoeSk7CisKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgp
LT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByaWdodFJvdGF0ZShSYXdOb2RlKiB5
KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeDsKKworICAgICAgICB4ID0geS0+bV9sZWZ0Owor
ICAgICAgICB5LT5tX2xlZnQgPSB4LT5tX3JpZ2h0OworCisgICAgICAgIGlmIChuaWxTZW50aW5l
bCgpICE9IHgtPm1fcmlnaHQpCisgICAgICAgICAgICB4LT5tX3JpZ2h0LT5zZXRQYXJlbnQoeSk7
CisKKyAgICAgICAgeC0+c2V0UGFyZW50KHktPnBhcmVudCgpKTsKKyAgICAgICAgaWYgKHkgPT0g
eS0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgIHktPnBhcmVudCgpLT5tX2xlZnQgPSB4
OworICAgICAgICBlbHNlCisgICAgICAgICAgICB5LT5wYXJlbnQoKS0+bV9yaWdodCA9IHg7Cisg
ICAgICAgIHgtPm1fcmlnaHQgPSB5OworICAgICAgICB5LT5zZXRQYXJlbnQoeCk7CisKKyAgICAg
ICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBpbnNlcnRIZWxwKE5vZGUqIHopCisgICAgeworICAgICAgICBSYXdOb2RlKiB4OworICAgICAg
ICBSYXdOb2RlKiB5OworICAKKyAgICAgICAgei0+bV9sZWZ0ID0gei0+bV9yaWdodCA9IG5pbFNl
bnRpbmVsKCk7CisgICAgICAgIHkgPSByb290KCk7CisgICAgICAgIHggPSByb290KCktPm1fbGVm
dDsKKyAgICAgICAgd2hpbGUgKHggIT0gbmlsU2VudGluZWwoKSkgeworICAgICAgICAgICAgeSA9
IHg7CisgICAgICAgICAgICBpZiAoei0+a2V5IDwgYXNOb2RlKHgpLT5rZXkpCisgICAgICAgICAg
ICAgICAgeCA9IHgtPm1fbGVmdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB4
ID0geC0+bV9yaWdodDsKKyAgICAgICAgfQorICAgICAgICB6LT5zZXRQYXJlbnQoeSk7CisgICAg
ICAgIGlmICh5ID09IHJvb3QoKSB8fCB6LT5rZXkgPCBhc05vZGUoeSktPmtleSkKKyAgICAgICAg
ICAgIHktPm1fbGVmdCA9IHo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHktPm1fcmlnaHQg
PSB6OworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQor
ICAgIAorICAgIFJhd05vZGUqIHN1Y2Nlc3NvckludGVybmFsKFJhd05vZGUqIHgpCisgICAgewor
ICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICAKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkg
IT0gKHkgPSB4LT5tX3JpZ2h0KSkgeworICAgICAgICAgICAgd2hpbGUgKHktPm1fbGVmdCAhPSBu
aWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHkgPSB5LT5tX2xlZnQ7CisgICAgICAgICAg
ICByZXR1cm4geTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHkgPSB4LT5wYXJlbnQo
KTsKKyAgICAgICAgICAgIHdoaWxlICh4ID09IHktPm1fcmlnaHQpIHsKKyAgICAgICAgICAgICAg
ICB4ID0geTsKKyAgICAgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoeSA9PSByb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5p
bFNlbnRpbmVsKCk7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIHJlbW92ZUZpeFVwKFJhd05vZGUqIHgpCisgICAgeworICAgICAgICBSYXdO
b2RlKiByZWFsUm9vdCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiB3OworICAg
ICAgICAKKyAgICAgICAgd2hpbGUgKCF4LT5pc1JlZCgpICYmIHJlYWxSb290ICE9IHgpIHsKKyAg
ICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAg
ICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHctPmlzUmVk
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKDApOworICAgICAgICAgICAgICAg
ICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBsZWZ0
Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgp
LT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1f
cmlnaHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAg
ICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50
KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3
LT5tX3JpZ2h0LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5tX2xlZnQt
PnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOwor
ICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHggPSByZWFs
Um9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAgICAgICAgIGlmICh3LT5p
c1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgt
PnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlm
ICghdy0+bV9yaWdodC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5pc1JlZCgpKSB7IAorICAgICAg
ICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4
LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoIXctPm1fbGVmdC0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdy0+
bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHctPnNldFJl
ZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUodyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVk
KCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHgg
PSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgeC0+c2V0UmVkKGZhbHNlKTsKKworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNS
ZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQor
ICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKFJh
d05vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobm9kZS0+aXNSZWQoKSkgeworICAgICAg
ICAgICAgQVNTRVJUKCFub2RlLT5tX2xlZnQtPmlzUmVkKCkpOworICAgICAgICAgICAgQVNTRVJU
KCFub2RlLT5tX3JpZ2h0LT5pc1JlZCgpKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0NvbnNp
c3RlbmN5UmVjdXJzZShub2RlLT5tX2xlZnQpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVj
dXJzZShub2RlLT5tX3JpZ2h0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wUmVjdXJzZShS
YXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpbnRmKCIgICBub2RlOiAlcFxuIiwgbm9k
ZSk7CisgICAgICAgIHByaW50ZigiICAgICAgY29sb3IgPSAlc1xuIiwgbm9kZS0+aXNSZWQoKSA/
ICJyZWQiIDogImJsYWNrIik7CisgICAgICAgIHByaW50ZigiICAgICAgbGVmdCAgPSAlcFxuIiwg
bm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICByaWdodCA9ICVwXG4iLCBub2Rl
LT5tX3JpZ2h0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9sZWZ0KTsKKyAgICAgICAg
ZHVtcFJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgUmF3
Tm9kZSogcm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gJm1fcm9vdDsKKyAgICB9CisgICAg
CisgICAgUmF3Tm9kZSogbmlsU2VudGluZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX25p
bFNlbnRpbmVsOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBhc05vZGUoUmF3Tm9kZSogcmF3Tm9k
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IHJvb3QoKSk7CisgICAgICAgIEFT
U0VSVChyYXdOb2RlICE9IG5pbFNlbnRpbmVsKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Tm9kZSo+KHJhd05vZGUpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlIG1fcm9vdDsKKyAg
ICBSYXdOb2RlIG1fbmlsU2VudGluZWw7Cit9OworCit9CisKKyNlbmRpZgorCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAg
ICAgd3RmL01haW5UaHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFsbG9jYXRvci5jcHAgXAogICAg
IHd0Zi9OdWxsUHRyLmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgd3Rm
L3F0L01haW5UaHJlYWRRdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5jcHAJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIv
WWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgYmFja3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZpbmFsaXplIHRoZSBj
b2RlLgotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERhdGEsIHRoaXMsIGds
b2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVy
KCpnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0
YUxhYmVscyhsaW5rQnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZp
bmFsaXplQ29kZSgpKTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFs
bEJhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24g
OTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQgZXhlY3V0ZShjb25z
dCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0
cHV0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+
KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwg
b3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1f
cmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0
cHV0KTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgdm9pZCAqZ2V0
QWRkcigpIHsgcmV0dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAg
dm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2
aXNpb24gOTM0ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxv
QGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQg
ZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJs
ZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2Nh
dG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0
IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSBy
ZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAg
ICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVl
IHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1
dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisK
KyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOiBB
ZGRlZC4KKwogMjAxMS0wOC0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJlZmFjdG9yIEpTIG9iamVjdHMgdG8gYWxsb2NhdGUgaW4gc3RhdGlj
IGNyZWF0ZSBtZXRob2RzIHJhdGhlciB0aGFuIGNvbnN0cnVjdG9ycwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0
b3JIYW5kbGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNDgyKQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDgt
MTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0
YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAg
ICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJh
bGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVp
cmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhh
dAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0
bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBX
ZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2Vk
IGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291
bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBzaW5jZSBiZWhh
dmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorCiAyMDExLTA4LTIwICBUb20gWmFrcmFqc2Vr
ICA8dG9tekBjb2RlYXVyb3JhLm9yZz4KIAogICAgICAgICBpbnN0YW5jZW9mIEhUTUxTb3VyY2VF
bGVtZW50IEZhaWxzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYv
TWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWV0
YUFsbG9jYXRvckhhbmRsZS5oPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105409</attachid>
            <date>2011-08-26 14:34:38 -0700</date>
            <delta_ts>2011-08-26 14:45:06 -0700</delta_ts>
            <desc>work in progress - fix conflicts</desc>
            <filename>metaalloc_patch_11.diff</filename>
            <type>text/plain</type>
            <size>228424</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ0IEBA
CisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IhKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAq
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmFkZHJl
c3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c3RhcnQpOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0
RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6
CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Omdl
dENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChwcmludFZhbHVlKToKKyAgICAg
ICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6UmVkQmxh
Y2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQYWlyKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3Rz
OjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFj
dCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6cmVtb3ZlKToKKyAgICAgICAgKFJlZEJs
YWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6YXNz
ZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6dGVzdERy
aXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3Rz
Ojp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE9uZUFs
bG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RTaW1wbGVGdWxsQ29hbGVzY2UpOgor
ICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0RklGT0FsbG9jKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JU
ZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6
OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFNocmluayk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2Nl
KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6c2V0VXApOgorICAgICAgICAoTWV0YUFs
bG9jYXRvclRlc3RzOjp0ZWFyRG93bik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmFs
bG9jYXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6ZnJlZSk6CisgICAgICAgIChN
ZXRhQWxsb2NhdG9yVGVzdHM6Om5vdGlmeUZyZWUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRl
c3RzOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmNvbmZpcm0p
OgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpjb25maXJtSGlnaFdhdGVybWFyayk6Cisg
ICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6Ynl0ZXNDb21taXR0ZWQpOgorICAgICAgICAoTWV0YUFsbG9jYXRv
clRlc3RzOjpieXRlU3RhdGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpwYWdlU3Rh
dGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpNZXRhQWxs
b2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0
UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yNjRiaXRS
ZWdyZXNzaW9uVGVzdHM6OnJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QpOgorICAgICAgICAobWFp
bik6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6On5N
ZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cm91
bmRVcCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0Fs
bG9jYXRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzUmVzZXJ2ZWQpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0NvbW1pdHRlZCk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUmVkQmxhY2tUcmVlLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OnBhcmVudCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjppc1JlZCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6UmF3Tm9kZTo6c2V0UmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSZWRCbGFj
a1RyZWUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpm
aXJzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpw
cmVkZWNlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEV4YWN0KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbCk6
CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Y2hlY2tDb25z
aXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZHVtcCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6bGVmdFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6cmlnaHRSb3RhdGUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydEhlbHAp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnN1Y2Nlc3NvckludGVybmFsKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmVGaXhVcCk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6Y2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmR1bXBSZWN1cnNlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyb290KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpuaWxTZW50aW5lbCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6YXNOb2RlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKiB5YXJy
L1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmdldEFkZHIpOgorCiAyMDExLTA4
LTI2ICBDaGFvLXlpbmcgRnUgIDxmdUBtaXBzLmNvbT4KIAogICAgICAgICBGaXggTUlQUyBwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNiArNTA3LDkg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NYXRoRXh0cmFzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL05vbkNvcHlpbmdTb3J0LmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvTm9uY29weWFibGUuaCBcCkBAIC01MzksNiArNTQyLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21O
dW1iZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlclNlZWQuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9SZWZDb3VudGVkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291
bnRlZExlYWtDb3VudGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3Vu
dGVkTGVha0NvdW50ZXIuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5leHAJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDYgKzQwMiwxMiBAQCBfX1pOM1dU
RjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCiBfX1pOM1dURjEyZGV0YWNoVGhyZWFkRWoK
IF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CitfX1pO
M1dURjEzTWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCitfX1pOM1dURjEzTWV0
YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9y
OGFsbG9jYXRlRW0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQorX19aTjNXVEYxM01ldGFB
bGxvY2F0b3JEMUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckQyRXYKIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzYsNiArNDQyLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNSw2ICs1MjMsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzU3LDYgKzc1NywxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTg5Nyw2ICs5MDksMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAkJCQkxNDEyMTRCRjBBNDkxOTBFMDA0ODAyNTUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk5MzJGNUJFOTA4MjJBMUM3MDA3MzY5NzUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkxNEJENTlDNzBBM0U4RkE0MDBCQUY1OUMgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCQkwRjk2M0IyOTEzRjc2NEQxMDAwMkQ5QjIgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCSk7CiAJCQluYW1lID0gQWxsOwogCQkJcHJvZHVjdE5h
bWUgPSBBbGw7CkBAIC00OSw2ICs1MCwxMyBAQAogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQg
LyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYy
OEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyog
U2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNp
bWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsK
KwkJMEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjBBNENG
MDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBG
OTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJB
MUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRjk2M0Iy
NTEzRjc1MzMzMDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0
dGVzdHMuY3BwICovOyB9OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tU
cmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2
M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3Bw
ICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7
IH07IH07CisJCTBGOTYzQjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1
M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRh
QWxsb2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzcw
MDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2
M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyog
VmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTYyMiw2ICs2MzAsMjAgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQkwRjk2M0Ix
NDEzRjc1MzA0MDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsK
KwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gOTMyRjVCM0UwODIyQTFDNzAwNzM2OTc1OworCQkJ
cmVtb3RlSW5mbyA9IEphdmFTY3JpcHRDb3JlOworCQl9OworCQkwRjk2M0IyODEzRjc2NEQxMDAw
MkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFp
bmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUds
b2JhbElEU3RyaW5nID0gMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIyOworCQkJcmVtb3RlSW5mbyA9
IHVuaXR0ZXN0czsKKwkJfTsKIAkJMTQxMjExMzUwQTQ4Nzk2MTAwNDgwMjU1IC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJ
CWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9i
amVjdCAqLzsKQEAgLTY4MSw2ICs3MDMsMjYgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJv
eHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24g
Ki8KKwkJMEY5NjNCMUExM0Y3NTMwNDAwMDJEOUIyIC8qIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8g
PSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWRzdFBhdGggPSAiIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAx
NjsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiQ29weSBTdXBwb3J0IFNjcmlwdCI7
CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMEY5
NjNCMUMxM0Y3NTMwNDAwMDJEOUIyIC8qIEluc3RhbGwgU3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJ
CQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gODsK
KwkJCWRzdFBhdGggPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzIjsKKwkJCWRzdFN1YmZvbGRlclNw
ZWMgPSAwOworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJJbnN0YWxsIFN1cHBvcnQg
U2NyaXB0IjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOworCQl9
OwogCQk1REJCMTUxMTEzMUQwQjEzMDA1NkFEMzYgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwpAQCAtNzM0LDYgKzc3NiwxMiBAQAogCQkwQkRGRkFENDBGQzYxNzEwMDBE
NjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENyb3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyOTQ3OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxO
dW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbE51
bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjExMTNGNzUyRjcw
MDAyRDlCMiAvKiB1bml0dGVzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdW5pdHRlc3RzLmNwcDsgcGF0aCA9IHRlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVu
aXR0ZXN0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
dW5pdHRlc3RzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjk2M0Iy
NjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZXRhQWxsb2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJE
OUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
YWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzUsNiArMTM4
MywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE3MTNGNzUzMDQwMDAy
RDlCMiAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAorCQkJCTBGOTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQxMjExMUUwQTQ4NzkzQzAwNDgw
MjU1IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xMzgzLDYgKzE0NDAsNyBA
QAogCQkJCTkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJMTQxMjExMjAw
QTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFG
NTlDIC8qIHRlc3RhcGkgKi8sCisJCQkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0
ZXN0cyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTQ0OCw5ICsxNTA2LDE4IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2Vz
VGFicyA9IDA7CiAJCX07CisJCTBGOTYzQjBGMTNGNzUyQjIwMDAyRDlCMiAvKiB1bml0ICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IxMTEzRjc1
MkY3MDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gdW5pdDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4
MDI1NSAvKiB0ZXN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEY5NjNCMEYxM0Y3NTJCMjAwMDJEOUIyIC8qIHVuaXQgKi8sCiAJCQkJMTQ0MDA1MTcw
QTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFG
NTlDIC8qIHRlc3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVz
dGFwaS5qcyAqLywKQEAgLTE2NjQsNiArMTczMSwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3
NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICov
LAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywK
KwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAorCQkJ
CTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkwNkQz
NThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5
MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2Rl
ICovLApAQCAtMjI0NSw2ICsyMzE2LDkgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcg
LyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAw
NkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
Rjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY5NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1Ry
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZG
NUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjYwNyw2
ICsyNjgxLDI1IEBACiAvKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjk2M0IxMjEzRjc1MzA0MDAw
MkQ5QjIgLyogdW5pdHRlc3RzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3RzIiAqLzsK
KwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGOTYzQjE1MTNGNzUzMDQwMDAyRDlCMiAvKiBTb3Vy
Y2VzICovLAorCQkJCTBGOTYzQjE3MTNGNzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdvcmtzICovLAor
CQkJCTBGOTYzQjFBMTNGNzUzMDQwMDAyRDlCMiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAor
CQkJCTBGOTYzQjFDMTNGNzUzMDQwMDAyRDlCMiAvKiBJbnN0YWxsIFN1cHBvcnQgU2NyaXB0ICov
LAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAor
CQkJCTBGOTYzQjEzMTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAor
CQkJKTsKKwkJCW5hbWUgPSB1bml0dGVzdHM7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0
cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJ
CX07CiAJCTE0MTIxMTFGMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovID0gewogCQkJaXNh
ID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0MTIxMTM5
MEE0ODc5ODQwMDQ4MDI1NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAibWluaWRvbSIgKi87CkBAIC0yNzE3LDYgKzI4MTAsNyBAQAogCQkJCTE0MTIxMTFG
MEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2Mg
Ki8sCisJCQkJMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLywKIAkJCSk7
CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBAIC0yODMxLDYgKzI5MjUsMTQg
QEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE1MTNGNzUzMDQwMDAy
RDlCMiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNC
MjUxM0Y3NTMzMzAwMDJEOUIyIC8qIHVuaXR0ZXN0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7
CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQx
MjExMUQwQTQ4NzkzQzAwNDgwMjU1IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yODU1
LDYgKzI5NTcsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMkMxM0Y4NTNF
QzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1
MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VDMzc2MDA0MjdBNDggLyogQXJnTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTMwNjQsNiArMzE2NywxNiBAQAogLyogRW5kIFBCWFNvdXJj
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBz
ZWN0aW9uICovCisJCTBGOTYzQjEzMTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRl
bmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDkz
MkY1QjNFMDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZSAqLzsKKwkJCXRhcmdldFBy
b3h5ID0gMEY5NjNCMTQxM0Y3NTMwNDAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LzsKKwkJfTsKKwkJMEY5NjNCMjkxM0Y3NjREMTAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEY5
NjNCMTIxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLzsKKwkJCXRhcmdldFByb3h5ID0g
MEY5NjNCMjgxM0Y3NjREMTAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJ
fTsKIAkJMTQxMjExMzYwQTQ4Nzk2MTAwNDgwMjU1IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gOTMyRjVCM0Uw
ODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlICovOwpAQCAtMzEwNyw2ICszMjIwLDM4
IEBACiAvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhD
QnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMEY5NjNCMUYxM0Y3NTMwNDAwMDJEOUIy
IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0
QVBJLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUg
PSB1bml0dGVzdHM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkwRjk2M0IyMDEz
Rjc1MzA0MDAwMkQ5QjIgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJUFJPRFVDVF9OQU1FID0gdW5pdHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOwor
CQl9OworCQkwRjk2M0IyMTEzRjc1MzA0MDAwMkQ5QjIgLyogUHJvZmlsaW5nICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB1bml0dGVzdHM7CisJCQl9Owor
CQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEY5NjNCMjIxM0Y3NTMwNDAwMDJEOUIyIC8q
IFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRl
c3RBUEkueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFN
RSA9IHVuaXR0ZXN0czsKKwkJCX07CisJCQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMTQx
MjExM0EwQTQ4Nzk4NDAwNDgwMjU1IC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtMzMyMSw2ICszNDY2LDE3IEBA
CiAvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0Nv
bmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJMEY5NjNCMUUxM0Y3NTMwNDAwMDJEOUIyIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ1bml0dGVzdHMi
ICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJh
dGlvbnMgPSAoCisJCQkJMEY5NjNCMUYxM0Y3NTMwNDAwMDJEOUIyIC8qIERlYnVnICovLAorCQkJ
CTBGOTYzQjIwMTNGNzUzMDQwMDAyRDlCMiAvKiBSZWxlYXNlICovLAorCQkJCTBGOTYzQjIxMTNG
NzUzMDQwMDAyRDlCMiAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEY5NjNCMjIxM0Y3NTMwNDAwMDJE
OUIyIC8qIFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJ
fTsKIAkJMTQxMjExMzkwQTQ4Nzk4NDAwNDgwMjU1IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJtaW5pZG9tIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmln
dXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lv
biA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgInN0ZGlu
dC5oIgogI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2lu
Y2x1ZGUgPGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgpAQCAtMTI4LDE5ICsxMjksMjEgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9pbmRl
eCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgICAgIFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5kZXgpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9j
YXRvci0+YWxsb2MoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CisgICAgICAgICAgICBSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xvYmFsRGF0YS5leGVjdXRhYmxlQWxsb2Nh
dG9yLmFsbG9jYXRlKGdsb2JhbERhdGEsIG1faW5kZXgpOwogCiAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgbV9pbmRleCk7CisgICAgICAgICAgICBF
eGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LT5zdGFydCgpLCByZXN1bHQt
PnNpemVJbkJ5dGVzKCkpOwogCi0gICAgICAgICAgICByZXR1cm4gbWVtY3B5KHJlc3VsdCwgbV9i
dWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+c3RhcnQoKSwgbV9i
dWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmV3aW5kVG9MYWJlbChBc3Nl
bWJsZXJMYWJlbCBsYWJlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwyMiArNjksOCBA
QCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZlcihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgOiBtX2V4ZWN1dGFibGVQ
b29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fY29k
ZSgwKQotICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCi0gICAgICAgICwgbV9nbG9iYWxEYXRh
KCZnbG9iYWxEYXRhKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxz
ZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgbGlua0NvZGUoKTsKLSAgICB9Ci0KLSAgICBMaW5r
QnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20sIEV4
ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAgOiBtX2V4ZWN1dGFibGVQb29s
KGFsbG9jYXRvci5wb29sRm9yU2l6ZShnbG9iYWxEYXRhLCBtYXNtLT5tX2Fzc2VtYmxlci5jb2Rl
U2l6ZSgpKSkKLSAgICAgICAgLCBtX3NpemUoMCkKKyAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisgICAgICAgIDogbV9zaXplKDAp
CiAgICAgICAgICwgbV9jb2RlKDApCiAgICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKICAgICAg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCkBAIC0xODUsMTQgKzE3MSw3IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKIAotICAgICAgICByZXR1
cm4gQ29kZVJlZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBvb2wsIG1fc2l6ZSk7Ci0gICAgfQotCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluYWxpemVDb2RlQWRkZW5kdW0oKQotICAgIHsKLSAgICAg
ICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwotCi0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25M
YWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkp
OwogICAgIH0KIAogICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExhYmVsIGxhYmVsKQpAQCAtMjMy
LDE0ICsyMTEsMTkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlKTsK
ICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQotICAgICAgICBtX2NvZGUgPSBtX2Fzc2Vt
Ymxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xvYmFsRGF0YSwgbV9leGVjdXRh
YmxlUG9vbC5nZXQoKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fYXNzZW1ibGVy
LT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxEYXRhKTsKKyAgICAgICAgaWYg
KCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29k
ZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKICAgICAgICAgbV9zaXplID0gbV9hc3Nl
bWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgICAgIEFTU0VSVChtX2NvZGUpOwog
I2Vsc2UKICAgICAgICAgc2l6ZV90IGluaXRpYWxTaXplID0gbV9hc3NlbWJsZXItPm1fYXNzZW1i
bGVyLmNvZGVTaXplKCk7Ci0gICAgICAgIG1fY29kZSA9ICh1aW50OF90KiltX2V4ZWN1dGFibGVQ
b29sLT5hbGxvYygqbV9nbG9iYWxEYXRhLCBpbml0aWFsU2l6ZSk7Ci0gICAgICAgIGlmICghbV9j
b2RlKQorICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2dsb2JhbERhdGEtPmV4ZWN1dGFi
bGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fZ2xvYmFsRGF0YSwgaW5pdGlhbFNpemUpOworICAgICAg
ICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
bV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKKyAgICAgICAg
QVNTRVJUKG1fY29kZSk7CiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJs
ZShtX2NvZGUsIGluaXRpYWxTaXplKTsKICAgICAgICAgdWludDhfdCogaW5EYXRhID0gKHVpbnQ4
X3QqKW1fYXNzZW1ibGVyLT51bmxpbmtlZENvZGUoKTsKICAgICAgICAgdWludDhfdCogb3V0RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7CkBAIC0yOTcsNyArMjgxLDcg
QEAgcHJpdmF0ZToKIAogICAgICAgICBqdW1wc1RvTGluay5jbGVhcigpOwogICAgICAgICBtX3Np
emUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsKLSAgICAgICAgbV9leGVjdXRh
YmxlUG9vbC0+dHJ5U2hyaW5rKG1fY29kZSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7CisgICAgICAg
IG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RB
VElTVElDUwogICAgICAgICBkdW1wTGlua1N0YXRpc3RpY3MobV9jb2RlLCBpbml0aWFsU2l6ZSwg
bV9zaXplKTsKQEAgLTM2Niw3ICszNTAsNyBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgogICAg
IAotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKKyAgICBSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogICAgIHNpemVf
dCBtX3NpemU7CiAgICAgdm9pZCogbV9jb2RlOwogICAgIE1hY3JvQXNzZW1ibGVyKiBtX2Fzc2Vt
YmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xOTksMjIgKzE5OSw1OSBAQCBwcml2YXRlOgogLy8gcG9pbnRlciB0byB0aGUgY29k
ZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3aXRoaW4gd2hpY2ggaXQKIC8v
IHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgeworcHJpdmF0ZToK
KyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCdzIGRhbmdlcm91cyBlbm91Z2ggdGhh
dCB3ZSB3YW50IHVzZXMgb2YgaXQKKyAgICAvLyB0byBiZSBlYXN5IHRvIGZpbmQgLSBoZW5jZSB0
aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cuCisgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgICAgICA6IG1fY29k
ZVB0cihjb2RlUHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CisgICAgfQor
CiBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkKLSAgICAgICAgOiBtX3NpemUo
MCkKICAgICB7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKHZvaWQqIGNvZGUs
IFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSkK
LSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1
dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZihQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkp
CisgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpCisgICAgICAg
ICwgbV9leGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVNZW1vcnkpCisgICAgeworICAgICAgICBB
U1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7CisgICAgICAgIEFTU0VSVCht
X2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOworICAgICAgICBBU1NFUlQobV9jb2RlUHRyKTsK
KyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhl
IGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcworICAgIC8vIGFscmVhZHkgYmVpbmcga2Vw
dCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCisg
ICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb2Rl
UHRyKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJs
ZU1lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5
LmdldCgpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlUHRyOworICAgIH0KKyAgICAKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9y
eSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVt
b3J5LT5zaXplSW5CeXRlcygpOwogICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFtX2NvZGVQdHI7IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBt
X2NvZGU7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwotICAg
IHNpemVfdCBtX3NpemU7Citwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2Nv
ZGVQdHI7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1l
bW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA5MzkxMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE1OTUsOSArMTU5NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGIubV9vZmZz
ZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBleGVjdXRhYmxlQ29weShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAg
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhl
Y3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fZm9y
bWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZvaWQgcmV3
aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBtX2Zvcm1hdHRlci5yZXdpbmRU
b0xhYmVsKHJld2luZFRvKTsgfQpAQCAtMTkzOSw5ICsxOTM5LDkgQEAgcHJpdmF0ZToKICAgICAg
ICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIu
aXNBbGlnbmVkKGFsaWdubWVudCk7IH0KICAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICAg
ICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J1
ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAgICAgICAgICAg
cmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAgICAgICB9CiAK
ICAgICAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7IG1f
YnVmZmVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjk5
LDcgKzI5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAg
SklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvciA/IG93bmVyRXhl
Y3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkgOiBvd25lckV4ZWN1dGFi
bGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQotICAgICAgICBFeGVjdXRhYmxlUG9v
bCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBv
b2woKTsgfQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5
KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogI2VuZGlm
CiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWlu
OwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVmIENvZGVMb2NhdGlvbkxhYmVsIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKKyAgICB0eXBlZGVmIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91
dGluZVR5cGU7CiAKICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9s
aXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xkIGRhdGEg
b2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3Ry
dWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpA
QCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfSBwdXRCeUlk
UmVwbGFjZTsKICAgICAgICAgfSB1OwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0dWJS
b3V0aW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAg
ICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwogICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBob3RQYXRoQmVnaW47CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MjgsNyArOTI4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRy
eQogICAgIC8vIEdlbmVyYXRlIHRoZSBib2R5IG9mIHRoZSBwcm9ncmFtLgogICAgIGNvbXBpbGVC
b2R5KCk7CiAgICAgLy8gTGluawotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtC
dWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBsaW5rKGxpbmtCdWZm
ZXIpOwogICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRD
b2RlOjpERkdKSVQpOwogfQpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNv
bXBpbGVGdW5jdGlvbihKSVRDb2QKIAogCiAgICAgLy8gPT09IExpbmsgPT09Ci0gICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0
YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMpOwogICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgCiAgICAgLy8gRklYTUU6IHN3aXRj
aCB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRh
aW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcg
QEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZQogICAgIGxpbmtSZXN0
b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZh
aWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1zdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgQ29kZUxv
Y2F0aW9uTGFiZWwmIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWlu
QWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBvZmZzZXQsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2Nh
dGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJvdXRp
bmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEo
KTsKIApAQCAtMTMzLDExICsxMzMsMTEgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWlu
QWNjZXNzU3R1YgogICAgIAogICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsK
ICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwg
ZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAKICAgICBsaW5rUmVzdG9yZVNj
cmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBm
YWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CiAgICAgCi0gICAgc3R1
YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIHN0dWJS
b3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHN0YXRpYyBib29sIHRy
eUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJ
ZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpAQCAtMTc2LDE1ICsxNzYsMTQgQEAgc3RhdGljIGJvb2wg
dHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgZW1pdFJlc3Rv
cmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNj
ZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBv
b2woKSk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0KTsKICAgICAgICAgCiAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2Fz
ZXMpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgICAgIHN0dWJJbmZvLnN0dWJS
b3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRp
bmUuY29kZSgpKSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAgICAgICAgIAogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTIzMSw3ICsyMzAsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQo
RXhlY1N0YXRlKiBlCiAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHVi
SW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25l
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1Yklu
Zm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOwog
ICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmdsb2JhbERhdGEsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4pOwpAQCAtMzI0
LDcgKzMyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAg
ICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYp
IHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2Up
LCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1
Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CiAg
ICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qg
PSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMzUwLDIxICsz
NDksMjEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgICAg
ICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgp
OwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwg
JnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgCi0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgICAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAg
ICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAgICAgICAgIAogICAgICAgICBwYXRjaEJ1
ZmZlci5saW5rKHdyb25nU3RydWN0LCBsYXN0UHJvdG9CZWdpbik7CiAgICAgICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgICAgIAog
ICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtNDA4LDcgKzQwNyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlz
dChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2No
YWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8u
c3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUu
Z2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsKLSAgICAgICAgc3R1
YkluZm8uc3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgICAgICBzdHViSW5m
by5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAg
IH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID0gYWNjZXNzX2dl
dF9ieV9pZF9wcm90b19saXN0KTsKQEAgLTQxOSwxOCArNDE4LDE4IEBAIHN0YXRpYyBib29sIHRy
eUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1PUlBI
SUNfTElTVF9DQUNIRV9TSVpFKSB7CiAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlz
dC5saXN0U2l6ZSsrOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0u
c3R1YlJvdXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0g
Q29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0Jl
Z2luKTsKIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAgICAgIAotICAgICAgICBnZW5l
cmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwg
Y291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgZW50
cnlMYWJlbCk7CisgICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1
YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9u
ZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAgIAotICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFs
RGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVy
ZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5
TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYg
KGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwpAQCAtNTQ4LDE4ICs1NDcsMTcgQEAgc3RhdGljIGJvb2wgdHJ5Q2Fj
aGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAg
ICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5l
eGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmds
b2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9Eb25lKSk7CiAgICAgICAgICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpCiAg
ICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7
CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Ci0gICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7Cisg
ICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1
Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0
aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1
cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiA5MzkxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI3LDQyICsyNywxMTEgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFibGVB
bGxvY2F0b3IuaCIKIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCisj
aW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgorI2VuZGlmCisKICNpZiBFTkFCTEUoQVNT
RU1CTEVSKQogCit1c2luZyBuYW1lc3BhY2UgV1RGOworCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lm
IEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCiAKLUV4ZWN1dGFibGVQb29sOjpB
bGxvY2F0aW9uIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSkKK2NsYXNz
IERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK3B1Ymxp
YzoKKyAgICBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICAgICAgOiBNZXRhQWxsb2Nh
dG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICB7Cisg
ICAgICAgIC8vIERvbid0IHByZWFsbG9jYXRlIGFueSBtZW1vcnkgaGVyZS4KKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB+RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzZXJ2YXRpb25zLnNpemUoKTsgKytpKQorICAg
ICAgICAgICAgcmVzZXJ2YXRpb25zLmF0KGkpLmRlYWxsb2NhdGUoKTsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdl
cykKKyAgICB7CisgICAgICAgIHNpemVfdCBuZXdOdW1QYWdlcyA9ICgoKG51bVBhZ2VzICogcGFn
ZVNpemUoKSArIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSAtIDEpIC8gSklUX0FMTE9D
QVRPUl9MQVJHRV9BTExPQ19TSVpFICogSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKSAr
IHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
bmV3TnVtUGFnZXMgPj0gbnVtUGFnZXMpOworICAgICAgICAKKyAgICAgICAgbnVtUGFnZXMgPSBu
ZXdOdW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIFBhZ2VSZXNlcnZhdGlvbiByZXNlcnZhdGlv
biA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShudW1QYWdlcyAqIHBhZ2VTaXplKCksIE9TQWxs
b2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsK
KyAgICAgICAgaWYgKCFyZXNlcnZhdGlvbikKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAg
IAorICAgICAgICByZXNlcnZhdGlvbnMuYXBwZW5kKHJlc2VydmF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiByZXNlcnZhdGlvbi5iYXNlKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQorICAgIHsKKyAgICAgICAgT1NBbGxv
Y2F0b3I6OmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUs
IHRydWUpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2
b2lkKiBwYWdlKQorICAgIHsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0KHBhZ2UsIHBh
Z2VTaXplKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UGFnZVJlc2VydmF0aW9u
LCAxNj4gcmVzZXJ2YXRpb25zOworfTsKKworc3RhdGljIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0
b3IqIGFsbG9jYXRvcjsKKwordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKCkKIHsKLSAgICBQYWdlQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0gUGFnZUFsbG9jYXRp
b246OmFsbG9jYXRlKHNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJM
RV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAgIENS
QVNIKCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRpb247CisgICAgQVNTRVJUKCFhbGxvY2F0b3IpOwor
ICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiB9CiAKLXZv
aWQgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRp
b24mIGFsbG9jYXRpb24pCitFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9y
KEpTR2xvYmFsRGF0YSYpCiB7Ci0gICAgYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAgQVNT
RVJUKGFsbG9jYXRvcik7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCisKIGJvb2wgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwogfQot
ICAgIAorCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAg
ICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIENSQVNIKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKIHNpemVfdCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQogewotICAgIHJldHVybiAwOwotfSAKKyAgICByZXR1
cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOworfQogCisjaWYgRU5BQkxFKE1FVEFfQUxM
T0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkK
K3sKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7Cit9CiAjZW5kaWYKIAorI2VuZGlmIC8v
IEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCisKICNpZiBFTkFCTEUoQVNTRU1C
TEVSX1dYX0VYQ0xVU0lWRSkKIAogI2lmIE9TKFdJTkRPV1MpIHx8IE9TKFNZTUJJQU4pCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAko
cmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPHN0
ZGRlZi5oPiAvLyBmb3IgcHRyZGlmZl90CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KICNp
bmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0xMDIsMTIwICsxMDMsMjcgQEAgaW5s
aW5lIHNpemVfdCByb3VuZFVwQWxsb2NhdGlvblNpemUoc2l6ZQogCiBuYW1lc3BhY2UgSlNDIHsK
IAotY2xhc3MgRXhlY3V0YWJsZVBvb2wgOiBwdWJsaWMgUmVmQ291bnRlZDxFeGVjdXRhYmxlUG9v
bD4gewotcHVibGljOgotI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCi0g
ICAgdHlwZWRlZiBQYWdlQWxsb2NhdGlvbiBBbGxvY2F0aW9uOwotI2Vsc2UKLSAgICBjbGFzcyBB
bGxvY2F0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFsbG9jYXRpb24odm9pZCogYmFzZSwg
c2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fYmFzZShiYXNlKQotICAgICAgICAgICAgLCBt
X3NpemUoc2l6ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHZvaWQqIGJhc2UoKSB7
IHJldHVybiBtX2Jhc2U7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9iYXNlOyB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICB2b2lkKiBtX2Jhc2U7Ci0gICAgICAgIHNpemVfdCBtX3Np
emU7Ci0gICAgfTsKLSNlbmRpZgotICAgIHR5cGVkZWYgVmVjdG9yPEFsbG9jYXRpb24sIDI+IEFs
bG9jYXRpb25MaXN0OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGNy
ZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlUG9vbChnbG9iYWxEYXRhLCBuKSk7Ci0gICAg
fQotCi0gICAgdm9pZCogYWxsb2MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVQdHIgPD0gbV9lbmQpOwotCi0gICAgICAgIC8v
IFJvdW5kICduJyB1cCB0byBhIG11bHRpcGxlIG9mIHdvcmQgc2l6ZTsgaWYgYWxsIGFsbG9jYXRp
b25zIGFyZSBvZgotICAgICAgICAvLyB3b3JkIHNpemVkIHF1YW50aXRpZXMsIHRoZW4gYWxsIHN1
YnNlcXVlbnQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGlnbmVkLgotICAgICAgICBuID0gcm91bmRV
cEFsbG9jYXRpb25TaXplKG4sIHNpemVvZih2b2lkKikpOwotCi0gICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG4pIDwgKG1fZW5kIC0gbV9mcmVlUHRyKSkgewotICAgICAgICAgICAg
dm9pZCogcmVzdWx0ID0gbV9mcmVlUHRyOwotICAgICAgICAgICAgbV9mcmVlUHRyICs9IG47Ci0g
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5zdWZm
aWNpZW50IHNwYWNlIHRvIGFsbG9jYXRlIGluIHRoZSBleGlzdGluZyBwb29sCi0gICAgICAgIC8v
IHNvIHdlIG5lZWQgYWxsb2NhdGUgaW50byBhIG5ldyBwb29sCi0gICAgICAgIHJldHVybiBwb29s
QWxsb2NhdGUoZ2xvYmFsRGF0YSwgbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJ5U2hyaW5r
KHZvaWQqIGFsbG9jYXRpb24sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7
Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyBvbGRTaXplICE9
IG1fZnJlZVB0cikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmVlUHRyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pICsgcm91bmRVcEFsbG9jYXRpb25TaXplKG5ld1Np
emUsIHNpemVvZih2b2lkKikpOwotICAgIH0KLQotICAgIH5FeGVjdXRhYmxlUG9vbCgpCi0gICAg
ewotICAgICAgICBBbGxvY2F0aW9uTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9wb29scy5lbmQoKTsK
LSAgICAgICAgZm9yIChBbGxvY2F0aW9uTGlzdDo6aXRlcmF0b3IgcHRyID0gbV9wb29scy5iZWdp
bigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIEV4ZWN1dGFibGVQb29sOjpzeXN0
ZW1SZWxlYXNlKCpwdHIpOwotICAgIH0KLQotICAgIHNpemVfdCBhdmFpbGFibGUoKSBjb25zdCB7
IHJldHVybiAobV9wb29scy5zaXplKCkgPiAxKSA/IDAgOiBtX2VuZCAtIG1fZnJlZVB0cjsgfQot
Ci1wcml2YXRlOgotICAgIHN0YXRpYyBBbGxvY2F0aW9uIHN5c3RlbUFsbG9jKHNpemVfdCBuKTsK
LSAgICBzdGF0aWMgdm9pZCBzeXN0ZW1SZWxlYXNlKEFsbG9jYXRpb24mIGFsbG9jKTsKLQotICAg
IEV4ZWN1dGFibGVQb29sKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQotICAgIHZvaWQqIHBv
b2xBbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgbik7Ci0KLSAgICBjaGFyKiBtX2ZyZWVQ
dHI7Ci0gICAgY2hhciogbV9lbmQ7Ci0gICAgQWxsb2NhdGlvbkxpc3QgbV9wb29sczsKLX07Cit0
eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlOwog
CiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0aW5n
IHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVibGljOgotICAgIEV4ZWN1dGFibGVBbGxv
Y2F0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsKLSAgICAgICAgaWYgKGlzVmFs
aWQoKSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IEV4ZWN1dGFibGVQb29s
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKTsKLSNp
ZiAhRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDUkFTSCgp
OwotI2VuZGlmCi0gICAgfQorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJik7
CisgICAgCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogCiAgICAgYm9v
bCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCB1bmRlck1lbW9yeVByZXNzdXJl
KCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgc3RhdGlj
IHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUo
KSB7IH0KKyNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbEZvclNp
emUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAgIC8v
IFRyeSB0byBmaXQgaW4gdGhlIGV4aXN0aW5nIHNtYWxsIGFsbG9jYXRvcgotICAgICAgICBBU1NF
UlQobV9zbWFsbEFsbG9jYXRpb25Qb29sKTsKLSAgICAgICAgaWYgKG4gPCBtX3NtYWxsQWxsb2Nh
dGlvblBvb2wtPmF2YWlsYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxBbGxvY2F0
aW9uUG9vbDsKLQotICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBsYXJnZSwgd2UganVzdCBw
cm92aWRlIGEgdW5zaGFyZWQgYWxsb2NhdG9yCi0gICAgICAgIGlmIChuID4gSklUX0FMTE9DQVRP
Ul9MQVJHRV9BTExPQ19TSVpFKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpj
cmVhdGUoZ2xvYmFsRGF0YSwgbik7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFsbG9jYXRv
cgotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IHBvb2wgPSBFeGVjdXRhYmxlUG9vbDo6
Y3JlYXRlKGdsb2JhbERhdGEsIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSk7Ci0KLSAg
ICAgICAgLy8gSWYgdGhlIG5ldyBhbGxvY2F0b3Igd2lsbCByZXN1bHQgaW4gbW9yZSBmcmVlIHNw
YWNlIHRoYW4gaW4KLSAgICAgICAgLy8gdGhlIGN1cnJlbnQgc21hbGwgYWxsb2NhdG9yLCB0aGVu
IHdlIHdpbGwgdXNlIGl0IGluc3RlYWQKLSAgICAgICAgaWYgKChwb29sLT5hdmFpbGFibGUoKSAt
IG4pID4gbV9zbWFsbEFsbG9jYXRpb25Qb29sLT5hdmFpbGFibGUoKSkKLSAgICAgICAgICAgIG1f
c21hbGxBbGxvY2F0aW9uUG9vbCA9IHBvb2w7Ci0gICAgICAgIHJldHVybiBwb29sLnJlbGVhc2Uo
KTsKLSAgICB9CisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0
ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAjaWYgRU5BQkxFKEFTU0VN
QkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZvaWQgbWFrZVdyaXRhYmxlKHZvaWQqIHN0
YXJ0LCBzaXplX3Qgc2l6ZSkKQEAgLTM0OCw1MCArMjU2LDkgQEAgcHJpdmF0ZToKICNpZiBFTkFC
TEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCByZXByb3RlY3RSZWdp
b24odm9pZCosIHNpemVfdCwgUHJvdGVjdGlvblNldHRpbmcpOwogI2VuZGlmCi0KLSAgICBSZWZQ
dHI8RXhlY3V0YWJsZVBvb2w+IG1fc21hbGxBbGxvY2F0aW9uUG9vbDsKIH07CiAKLWlubGluZSBF
eGVjdXRhYmxlUG9vbDo6RXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXpl
KG4sIHBhZ2VTaXplKCkpOwotICAgIEFsbG9jYXRpb24gbWVtID0gc3lzdGVtQWxsb2MoYWxsb2NT
aXplKTsKLSAgICBpZiAoIW1lbS5iYXNlKCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVN
ZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1lbSA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7
Ci0gICAgfQotICAgIG1fcG9vbHMuYXBwZW5kKG1lbSk7Ci0gICAgbV9mcmVlUHRyID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KG1lbS5iYXNlKCkpOwotICAgIGlmICghbV9mcmVlUHRyKQotICAgICAgICBD
UkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAgICBtX2VuZCA9IG1fZnJlZVB0ciArIGFs
bG9jU2l6ZTsKLSAgICBkZXByZWNhdGVkVHVybk9mZlZlcmlmaWVyKCk7Ci19Ci0KLWlubGluZSB2
b2lkKiBFeGVjdXRhYmxlUG9vbDo6cG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9IHJvdW5kVXBBbGxvY2F0aW9u
U2l6ZShuLCBwYWdlU2l6ZSgpKTsKLSAgICAKLSAgICBBbGxvY2F0aW9uIHJlc3VsdCA9IHN5c3Rl
bUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFyZXN1bHQuYmFzZSgpKSB7Ci0gICAgICAgIHJl
bGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOwotICAgICAgICByZXN1bHQgPSBzeXN0
ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgICAgICBpZiAoIXJlc3VsdC5iYXNlKCkpCi0gICAgICAg
ICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAgICB9Ci0gICAgCi0gICAgQVNT
RVJUKG1fZW5kID49IG1fZnJlZVB0cik7Ci0gICAgaWYgKChhbGxvY1NpemUgLSBuKSA+IHN0YXRp
Y19jYXN0PHNpemVfdD4obV9lbmQgLSBtX2ZyZWVQdHIpKSB7Ci0gICAgICAgIC8vIFJlcGxhY2Ug
YWxsb2NhdGlvbiBwb29sCi0gICAgICAgIG1fZnJlZVB0ciA9IHN0YXRpY19jYXN0PGNoYXIqPihy
ZXN1bHQuYmFzZSgpKSArIG47Ci0gICAgICAgIG1fZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHJl
c3VsdC5iYXNlKCkpICsgYWxsb2NTaXplOwotICAgIH0KLQotICAgIG1fcG9vbHMuYXBwZW5kKHJl
c3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5iYXNlKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNl
IEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYgRU5BQkxFKEFTU0VNQkxFUikKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDEwICszMSw5IEBACiAKICNpbmNsdWRlIDxlcnJuby5oPgogCi0jaW5j
bHVkZSAiVENTcGluTG9jay5oIgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8dW5p
c3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9j
YXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3dGYv
Vk1UYWdzLmg+CiAKQEAgLTQ2LDQ4MSArNDUsMTA1IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAK
IG5hbWVzcGFjZSBKU0MgewogICAgIAotI2RlZmluZSBUd29Qb3cobikgKDF1bGwgPDwgbikKLQot
Y2xhc3MgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHsKLXB1YmxpYzoKLSAgICBBbGxvY2F0aW9u
VGFibGVTaXplQ2xhc3Moc2l6ZV90IHNpemUsIHNpemVfdCBibG9ja1NpemUsIHVuc2lnbmVkIGxv
ZzJCbG9ja1NpemUpCi0gICAgICAgIDogbV9ibG9ja1NpemUoYmxvY2tTaXplKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGJsb2NrU2l6ZSA9PSBUd29Qb3cobG9nMkJsb2NrU2l6ZSkpOwotCi0gICAg
ICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyBuZWVkZWQgdG8gaG9sZCBzaXpl
LgotICAgICAgICBzaXplX3QgYmxvY2tNYXNrID0gYmxvY2tTaXplIC0gMTsKLSAgICAgICAgbV9i
bG9ja0NvdW50ID0gKHNpemUgKyBibG9ja01hc2spID4+IGxvZzJCbG9ja1NpemU7Ci0KLSAgICAg
ICAgLy8gQWxpZ24gdG8gdGhlIHNtYWxsZXN0IHBvd2VyIG9mIHR3byA+PSBtX2Jsb2NrQ291bnQu
Ci0gICAgICAgIG1fYmxvY2tBbGlnbm1lbnQgPSAxOwotICAgICAgICB3aGlsZSAobV9ibG9ja0Fs
aWdubWVudCA8IG1fYmxvY2tDb3VudCkKLSAgICAgICAgICAgIG1fYmxvY2tBbGlnbm1lbnQgKz0g
bV9ibG9ja0FsaWdubWVudDsKLSAgICB9Ci0KLSAgICBzaXplX3QgYmxvY2tTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9ja1NpemU7IH0KLSAgICBzaXplX3QgYmxvY2tDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2tDb3VudDsgfQotICAgIHNpemVfdCBibG9ja0FsaWdubWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tBbGlnbm1lbnQ7IH0KLQotICAgIHNpemVfdCBzaXplKCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrU2l6ZSAqIG1fYmxvY2tDb3VudDsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgc2l6ZV90IG1fYmxvY2tTaXplOwotICAgIHNpemVfdCBtX2Jsb2NrQ291bnQ7
Ci0gICAgc2l6ZV90IG1fYmxvY2tBbGlnbm1lbnQ7Ci19OwotCi10ZW1wbGF0ZTx1bnNpZ25lZCBs
b2cyRW50cmllcz4KLWNsYXNzIEFsbG9jYXRpb25UYWJsZUxlYWYgewotICAgIHR5cGVkZWYgdWlu
dDY0X3QgQml0RmllbGQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9n
MlN1YnJlZ2lvblNpemUgPSAxMjsgLy8gMl4xMiA9PSBwYWdlc2l6ZQotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IGxvZzJTdWJyZWdpb25TaXplICsgbG9nMkVudHJp
ZXM7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1YnJlZ2lvblNpemUgPSBUd29Qb3cobG9n
MlN1YnJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcmVnaW9uU2l6ZSA9IFR3
b1Bvdyhsb2cyUmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVudHJpZXMg
PSBUd29Qb3cobG9nMkVudHJpZXMpOwotICAgIENPTVBJTEVfQVNTRVJUKGVudHJpZXMgPD0gKHNp
emVvZihCaXRGaWVsZCkgKiA4KSwgQWxsb2NhdGlvblRhYmxlTGVhZl9lbnRyaWVzX2ZpdF9pbl9C
aXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVMZWFmKCkKLSAgICAgICAgOiBtX2FsbG9j
YXRlZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlTGVhZigpCi0gICAg
ewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2Nh
dGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpID09IHN1YnJlZ2lvblNpemUpOwotICAgICAgICBB
U1NFUlQoIWlzRnVsbCgpKTsKLQotICAgICAgICBzaXplX3QgYWxpZ25tZW50ID0gc2l6ZUNsYXNz
LmJsb2NrQWxpZ25tZW50KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9j
a0NvdW50KCk7Ci0gICAgICAgIC8vIFVzZSB0aGlzIG1hc2sgdG8gY2hlY2sgZm9yIHNwYW5zIG9m
IGZyZWUgYmxvY2tzLgotICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAt
IDEpIDw8IChhbGlnbm1lbnQgLSBjb3VudCk7Ci0KLSAgICAgICAgLy8gU3RlcCBpbiB1bml0cyBv
ZiBhbGlnbm1lbnQgc2l6ZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJp
ZXM7IGkgKz0gYWxpZ25tZW50KSB7Ci0gICAgICAgICAgICBpZiAoIShtX2FsbG9jYXRlZCAmIG1h
c2spKSB7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWQgfD0gbWFzazsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gKGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNp
emVfdCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAg
ewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpID09IHN1YnJlZ2lvblNpemUp
OwotCi0gICAgICAgIHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25TaXpl
OwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAg
ICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IGVudHJ5OwotCi0gICAg
ICAgIEFTU0VSVCgobV9hbGxvY2F0ZWQgJiBtYXNrKSA9PSBtYXNrKTsKLSAgICAgICAgbV9hbGxv
Y2F0ZWQgJj0gfm1hc2s7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhbV9hbGxvY2F0ZWQ7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Z1bGwoKQotICAg
IHsKLSAgICAgICAgcmV0dXJuICF+bV9hbGxvY2F0ZWQ7Ci0gICAgfQotCi0gICAgc3RhdGljIHNp
emVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwotICAgIH0KLQot
ICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXplKHNpemVfdCBz
aXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXpl
LCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5E
RUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5k
ZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7
ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiUwOHg6IFslMDE2bGx4XVxuIiwgKGludClwYXJlbnRPZmZzZXQsIG1fYWxs
b2NhdGVkKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBCaXRGaWVsZCBtX2FsbG9j
YXRlZDsKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVsPgotY2xhc3MgTGF6eUFsbG9j
YXRpb25UYWJsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdp
b25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZW50cmllcyA9IE5leHRMZXZlbDo6ZW50cmllczsKLQotICAgIExhenlBbGxvY2F0aW9u
VGFibGUoKQotICAgICAgICA6IG1fcHRyKDApCi0gICAgewotICAgIH0KLQotICAgIH5MYXp5QWxs
b2NhdGlvblRhYmxlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0K
LQotICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFz
cykKLSAgICB7Ci0gICAgICAgIGlmICghbV9wdHIpCi0gICAgICAgICAgICBtX3B0ciA9IG5ldyBO
ZXh0TGV2ZWwoKTsKLSAgICAgICAgcmV0dXJuIG1fcHRyLT5hbGxvY2F0ZShzaXplQ2xhc3MpOwot
ICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRpb24sIEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAg
ICAgbV9wdHItPmZyZWUobG9jYXRpb24sIHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChtX3B0ci0+
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkZWxldGUgbV9wdHI7Ci0gICAgICAgICAgICBtX3B0
ciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICFtX3B0cjsKLSAgICB9Ci0KLSAgICBib29sIGlzRnVsbCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gbV9wdHIgJiYgbV9wdHItPmlzRnVsbCgpOwotICAgIH0KLQotICAgIHN0
YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gTmV4dExldmVsOjpzaXpl
KCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50
T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCht
X3B0cik7Ci0gICAgICAgIG1fcHRyLT5kdW1wKHBhcmVudE9mZnNldCwgaW5kZW50KTsKLSAgICB9
Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JT
aXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5leHRMZXZlbDo6Y2xhc3NG
b3JTaXplKHNpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBOZXh0TGV2ZWwqIG1fcHRyOwot
fTsKLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVsLCB1bnNpZ25lZCBsb2cyRW50cmllcz4KLWNs
YXNzIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSB7Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBCaXRG
aWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyU3VicmVnaW9u
U2l6ZSA9IE5leHRMZXZlbDo6bG9nMlJlZ2lvblNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lvblNpemUgKyBsb2cyRW50cmllczsKLQot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVn
aW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCByZWdpb25TaXplID0gVHdvUG93KGxv
ZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW50cmllcyA9IFR3b1Bv
dyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZW50cmllcyA8PSAoc2l6ZW9mKEJp
dEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVEaXJlY3RvcnlfZW50cmllc19maXRfaW5fQml0
RmllbGQpOwotCi0gICAgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICAgICAgOiBtX2Z1
bGwoMCkKLSAgICAgICAgLCBtX2hhc1N1YmFsbG9jYXRpb24oMCkKLSAgICB7Ci0gICAgfQotCi0g
ICAgfkFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNF
bXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6
ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2Nr
U2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotICAgICAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLQot
ICAgICAgICBpZiAoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDwgc3VicmVnaW9uU2l6ZSkgewotICAg
ICAgICAgICAgQml0RmllbGQgYml0ID0gMTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBlbnRyaWVzOyArK2ksIGJpdCArPSBiaXQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bV9mdWxsICYgYml0KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICBzaXplX3QgbG9jYXRpb24gPSBtX3N1YmFsbG9jYXRpb25zW2ldLmFsbG9jYXRlKHNpemVD
bGFzcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZGlkbid0IGFscmVhZHkgaGF2ZSBhIHN1YnJlZ2lv
biwgaXQgZG9lcyBub3chCi0gICAgICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlvbiB8
PSBiaXQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1pcnJvciB0aGUgc3ViYWxsb2NhdGlvbidz
IGZ1bGwgYml0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tpXS5p
c0Z1bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVsbCB8PSBiaXQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAoaSAqIHN1YnJlZ2lvblNpemUpIHwgbG9jYXRpb247Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5vdEZvdW5k
OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQSBibG9jayBpcyBhbGxvY2F0ZWQgaWYgZWl0aGVy
IGl0IGlzIGZ1bGx5IGFsbG9jYXRlZCBvciBjb250YWlucyBzdWJhbGxvY2F0aW9ucy4KLSAgICAg
ICAgQml0RmllbGQgYWxsb2NhdGVkID0gbV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uOwotCi0g
ICAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAg
ICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgLy8g
VXNlIHRoaXMgbWFzayB0byBjaGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAgICAg
IEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAtIGNv
dW50KTsKLQotICAgICAgICAvLyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQpIHsK
LSAgICAgICAgICAgIGlmICghKGFsbG9jYXRlZCAmIG1hc2spKSB7Ci0gICAgICAgICAgICAgICAg
bV9mdWxsIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpICsgKGFsaWdubWVudCAt
IGNvdW50KSkgPDwgbG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtYXNrIDw8PSBhbGlnbm1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vdEZvdW5k
OwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRpb24sIEFsbG9jYXRpb25UYWJs
ZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5i
bG9ja1NpemUoKSA8PSBzdWJyZWdpb25TaXplKTsKLQotICAgICAgICBzaXplX3QgZW50cnkgPSBs
b2NhdGlvbiA+PiBsb2cyU3VicmVnaW9uU2l6ZTsKLQotICAgICAgICBpZiAoc2l6ZUNsYXNzLmJs
b2NrU2l6ZSgpIDwgc3VicmVnaW9uU2l6ZSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0g
MXVsbCA8PCBlbnRyeTsKLSAgICAgICAgICAgIG1fc3ViYWxsb2NhdGlvbnNbZW50cnldLmZyZWUo
bG9jYXRpb24gJiAoc3VicmVnaW9uU2l6ZSAtIDEpLCBzaXplQ2xhc3MpOwotICAgICAgICAgICAg
Ly8gQ2hlY2sgaWYgdGhlIHN1YmFsbG9jYXRpb24gaXMgbm93IGVtcHR5LgotICAgICAgICAgICAg
aWYgKG1fc3ViYWxsb2NhdGlvbnNbZW50cnldLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBt
X2hhc1N1YmFsbG9jYXRpb24gJj0gfmJpdDsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gY2hl
Y2ssIGl0IGNsZWFybHkgaXNuJ3QgZnVsbCBhbnkgbW9yZSEKLSAgICAgICAgICAgIG1fZnVsbCAm
PSB+Yml0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6
ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwg
PDwgY291bnQpIC0gMSkgPDwgZW50cnk7Ci0gICAgICAgICAgICBBU1NFUlQoKG1fZnVsbCAmIG1h
c2spID09IG1hc2spOwotICAgICAgICAgICAgQVNTRVJUKCEobV9oYXNTdWJhbGxvY2F0aW9uICYg
bWFzaykpOwotICAgICAgICAgICAgbV9mdWxsICY9IH5tYXNrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKG1fZnVsbCB8IG1f
aGFzU3ViYWxsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Z1bGwoKQotICAgIHsgICAK
LSAgICAgICAgcmV0dXJuICF+bV9mdWxsOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3Qgc2l6
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVnaW9uU2l6ZTsKLSAgICB9Ci0KLSAgICBzdGF0
aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChzaXplIDwgc3VicmVnaW9uU2l6ZSkgewotICAgICAgICAgICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IE5leHRMZXZlbDo6Y2xhc3NGb3JTaXpl
KHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemVDbGFzcy5zaXplKCkgPCBOZXh0TGV2ZWw6OnNp
emUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZUNsYXNzOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6ZSwgc3VicmVnaW9uU2l6ZSwg
bG9nMlN1YnJlZ2lvblNpemUpOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1
bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGluZGVudCA9IDApCi0gICAgewot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCi0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlMDh4
OiBbIiwgKGludClwYXJlbnRPZmZzZXQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgZW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGk7
Ci0gICAgICAgICAgICBjaGFyIGMgPSBtX2hhc1N1YmFsbG9jYXRpb24gJiBiaXQKLSAgICAgICAg
ICAgICAgICA/IChtX2Z1bGwgJiBiaXQgPyAnTicgOiAnbicpCi0gICAgICAgICAgICAgICAgOiAo
bV9mdWxsICYgYml0ID8gJ0YnIDogJy0nKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
JWMiLCBjKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOwotCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAgICAg
ICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIHNpemVfdCBvZmZzZXQg
PSBwYXJlbnRPZmZzZXQgfCAoc3VicmVnaW9uU2l6ZSAqIGkpOwotICAgICAgICAgICAgaWYgKG1f
aGFzU3ViYWxsb2NhdGlvbiAmIGJpdCkKLSAgICAgICAgICAgICAgICBtX3N1YmFsbG9jYXRpb25z
W2ldLmR1bXAob2Zmc2V0LCBpbmRlbnQgKyAxKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgot
Ci1wcml2YXRlOgotICAgIE5leHRMZXZlbCBtX3N1YmFsbG9jYXRpb25zW2VudHJpZXNdOwotICAg
IC8vIFN1YnJlZ2lvbnMgZXhpc3QgaW4gb25lIG9mIGZvdXIgc3RhdGVzOgotICAgIC8vICgxKSBl
bXB0eSAoYm90aCBiaXRzIGNsZWFyKQotICAgIC8vICgyKSBmdWxseSBhbGxvY2F0ZWQgYXMgYSBz
aW5nbGUgYWxsb2NhdGlvbiAobV9mdWxsIHNldCkKLSAgICAvLyAoMykgcGFydGlhbGx5IGFsbG9j
YXRlZCB0aHJvdWdoIHN1YmFsbG9jYXRpb25zIChtX2hhc1N1YmFsbG9jYXRpb24gc2V0KQotICAg
IC8vICg0KSBmdWxseSBhbGxvY2F0ZWQgdGhyb3VnaCBzdWJhbGxvY2F0aW9ucyAoYm90aCBiaXRz
IHNldCkKLSAgICBCaXRGaWVsZCBtX2Z1bGw7Ci0gICAgQml0RmllbGQgbV9oYXNTdWJhbGxvY2F0
aW9uOwotfTsKLQotCi10eXBlZGVmIEFsbG9jYXRpb25UYWJsZUxlYWY8Nj4gUGFnZVRhYmxlczI1
NktCOwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8UGFnZVRhYmxlczI1NktCLCA2
PiBQYWdlVGFibGVzMTZNQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PExhenlB
bGxvY2F0aW9uVGFibGU8UGFnZVRhYmxlczE2TUI+LCAxPiBQYWdlVGFibGVzMzJNQjsKLXR5cGVk
ZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PExhenlBbGxvY2F0aW9uVGFibGU8UGFnZVRhYmxl
czE2TUI+LCA2PiBQYWdlVGFibGVzMUdCOwotCiAjaWYgQ1BVKEFSTSkKLXR5cGVkZWYgUGFnZVRh
YmxlczE2TUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGljIGNvbnN0IHNpemVfdCBmaXhl
ZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShYODZfNjQpCi10eXBlZGVm
IFBhZ2VUYWJsZXMxR0IgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGljIGNvbnN0IHNpemVf
dCBmaXhlZFBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UKLXR5cGVkZWYgUGFn
ZVRhYmxlczMyTUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGljIGNvbnN0IHNpemVfdCBm
aXhlZFBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgogCi0KLWNsYXNzIEZpeGVk
Vk1Qb29sQWxsb2NhdG9yCi17CitjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6
IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICBGaXhlZFZNUG9vbEFsbG9jYXRv
cigpCisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICAgICAgOiBNZXRh
QWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKICAg
ICB7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMjU2S0I6OnNpemUoKSA9PSAyNTYgKiAxMDI0
KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMxNk1COjpzaXplKCkgPT0gMTYgKiAxMDI0ICog
MTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMzJNQjo6c2l6ZSgpID09IDMyICogMTAy
NCAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczFHQjo6c2l6ZSgpID09IDEwMjQg
KiAxMDI0ICogMTAyNCk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlv
bjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6c2l6ZSgpLCBP
U0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1
ZSk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVXaXRo
R3VhcmRQYWdlcyhmaXhlZFBvb2xTaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVY
RUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CiAjaWYgIUVOQUJMRShJTlRFUlBSRVRFUikK
LSAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIGlmICghbV9yZXNlcnZhdGlvbikKICAg
ICAgICAgICAgIENSQVNIKCk7CiAjZW5kaWYKKyAgICAgICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSBmaXhlZFBvb2xTaXpl
KTsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKG1fcmVzZXJ2YXRpb24uYmFzZSgpLCBt
X3Jlc2VydmF0aW9uLnNpemUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gCi0gICAgRXhlY3V0YWJs
ZVBvb2w6OkFsbG9jYXRpb24gYWxsb2Moc2l6ZV90IHJlcXVlc3RlZFNpemUpCi0gICAgewotICAg
ICAgICBBU1NFUlQocmVxdWVzdGVkU2l6ZSk7Ci0gICAgICAgIEFsbG9jYXRpb25UYWJsZVNpemVD
bGFzcyBzaXplQ2xhc3MgPSBjbGFzc0ZvclNpemUocmVxdWVzdGVkU2l6ZSk7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gc2l6ZUNsYXNzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHNpemUpOwotCi0g
ICAgICAgIGlmIChzaXplID49IEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6c2l6ZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotICAgICAgICBp
ZiAobV9wYWdlcy5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6
QWxsb2NhdGlvbigwLCAwKTsKLQotICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbV9wYWdlcy5hbGxv
Y2F0ZShzaXplQ2xhc3MpOwotICAgICAgICBpZiAob2Zmc2V0ID09IG5vdEZvdW5kKQotICAgICAg
ICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAgICAg
IHZvaWQqIHBvaW50ZXIgPSBvZmZzZXRUb1BvaW50ZXIob2Zmc2V0KTsKLSAgICAgICAgbV9yZXNl
cnZhdGlvbi5jb21taXQocG9pbnRlciwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiBFeGVjdXRhYmxl
UG9vbDo6QWxsb2NhdGlvbihwb2ludGVyLCBzaXplKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZyZWUo
RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2NhdGlvbikKKyAgICAKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JikKICAgICB7Ci0gICAg
ICAgIHZvaWQqIHBvaW50ZXIgPSBhbGxvY2F0aW9uLmJhc2UoKTsKLSAgICAgICAgc2l6ZV90IHNp
emUgPSBhbGxvY2F0aW9uLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHNpemUpOwotCi0gICAgICAg
IG1fcmVzZXJ2YXRpb24uZGVjb21taXQocG9pbnRlciwgc2l6ZSk7Ci0KLSAgICAgICAgQWxsb2Nh
dGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShzaXplKTsKLSAgICAg
ICAgQVNTRVJUKHNpemVDbGFzcy5zaXplKCkgPT0gc2l6ZSk7Ci0gICAgICAgIG1fcGFnZXMuZnJl
ZShwb2ludGVyVG9PZmZzZXQocG9pbnRlciksIHNpemVDbGFzcyk7CisgICAgICAgIC8vIFdlJ3Jl
IG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBw
cm9oaWJpdGVkLgorICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2Nh
dGVkKCkKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkK
ICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jlc2VydmF0aW9uLmNvbW1pdHRlZCgpOworICAgICAg
ICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsKICAgICB9Ci0KLSAgICBi
b29sIGlzVmFsaWQoKSBjb25zdAorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNG
cmVlKHZvaWQqIHBhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX3Jlc2VydmF0aW9uOwor
ICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkpOwogICAgIH0K
IAogcHJpdmF0ZToKLSAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXplKHNp
emVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6
Y2xhc3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotICAgIHZvaWQqIG9mZnNldFRvUG9pbnRlcihz
aXplX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSArIG9m
ZnNldCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBvaW50ZXJUb09mZnNldCh2b2lkKiBwb2ludGVy
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50
ZXIpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpOwot
ICAgIH0KLQogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0aW9uOwotICAgIEZpeGVkVk1Q
b29sUGFnZVRhYmxlcyBtX3BhZ2VzOwogfTsKIAorc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvciogYWxsb2NhdG9yOwogCi1zdGF0aWMgU3BpbkxvY2sgc3BpbmxvY2sgPSBTUElO
TE9DS19JTklUSUFMSVpFUjsKLXN0YXRpYyBGaXhlZFZNUG9vbEFsbG9jYXRvciogYWxsb2NhdG9y
ID0gMDsKLQordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCkK
K3sKKyAgICBBU1NFUlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Q
b29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworfQogCi1zaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVB
bGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9sZGVy
KCZzcGlubG9jayk7Ci0gICAgcmV0dXJuIGFsbG9jYXRvciA/IGFsbG9jYXRvci0+YWxsb2NhdGVk
KCkgOiAwOwotfSAgIAorICAgIEFTU0VSVChhbGxvY2F0b3IpOworfQogCiBib29sIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tf
aG9sZGVyKCZzcGlubG9jayk7Ci0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFsbG9jYXRv
ciA9IG5ldyBGaXhlZFZNUG9vbEFsbG9jYXRvcigpOwotICAgIHJldHVybiBhbGxvY2F0b3ItPmlz
VmFsaWQoKTsKKyAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKIH0KIAog
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKLSAgICAv
LyBUZWNobmljYWxseSB3ZSBzaG91bGQgdGFrZSB0aGUgc3BpbiBsb2NrIGhlcmUsIGJ1dCB3ZSBk
b24ndCBjYXJlIGlmIHdlIGdldCBzdGFsZSBkYXRhLgotICAgIC8vIFRoaXMgaXMgb25seSByZWFs
bHkgYSBoZXVyaXN0aWMgYW55d2F5LgotICAgIHJldHVybiBhbGxvY2F0b3IgJiYgKGFsbG9jYXRv
ci0+YWxsb2NhdGVkKCkgPiAoRml4ZWRWTVBvb2xQYWdlVGFibGVzOjpzaXplKCkgLyAyKSk7Cisg
ICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJy
ZW50U3RhdGlzdGljcygpOworICAgIHJldHVybiBzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVkID4g
c3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkIC8gMjsKIH0KIAotRXhlY3V0YWJsZVBvb2w6OkFsbG9j
YXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNpemVfdCBzaXplKQorUGFzc1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAgICBTcGlu
TG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3Ip
OwotICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jKHNpemUpOworICAgIFJlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVz
KTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBjaGFyIGJ1ZlsyN107CisgICAgICAgIHRp
bWVfdCBjdXJyZW50VGltZTsKKyAgICAgICAgdGltZSgmY3VycmVudFRpbWUpOworICAgICAgICBj
dGltZV9yKCZjdXJyZW50VGltZSwgYnVmKTsKKyAgICAgICAgcHJpbnRmKCIlczogSSdtIGdpdmlu
ZyBoZXIgYWxsIHNoZSdzIGdvdCwgQ2FwdGFpbiFcbiIsIGJ1Zik7CisgICAgICAgIHJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworc2l6
ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisgICAgcmV0
dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9v
bDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikg
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigm
c3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJlZShh
bGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9CisjZW5kaWYKIAog
fQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VU
QUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0
YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFk
ZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwg
Y2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRyYW1wb2xpbmVT
dHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFj
aGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5LCBUcmFtcG9saW5lU3RydWN0dXJlICp0
cmFtcG9saW5lcykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5V
c2VKSVQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBKSVQgaml0KGds
b2JhbERhdGEsIDApOwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRy
YW1wb2xpbmVzKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7CisgICAg
ICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZXhlY3V0YWJs
ZU1lbW9yeSwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMpOwogICAgICAgICB9CiAKLSAgICAgICAg
c3RhdGljIENvZGVQdHIgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgTmF0aXZlRnVu
Y3Rpb24gZnVuYykKKyAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVSZWYoKTsK
ICAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICByZXR1cm4g
aml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChleGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0
YSwgZnVuYyk7CisgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lk
IHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZv
KiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiwg
Y29uc3QgUHJvcGVydHlTbG90Jiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CiAgICAgICAgIHZvaWQgcHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVy
ZSosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCk7CiAKLSAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBv
b2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBUcmFtcG9saW5lU3RydWN0
dXJlICp0cmFtcG9saW5lcyk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5l
VHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KiwgSlNHbG9iYWxEYXRh
KiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKLSAg
ICAgICAgQ29kZVB0ciBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVj
dXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgTmF0aXZlRnVu
Y3Rpb24gZnVuYyk7CisgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsK
IAogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNlbmRpZgogICAgICAgICBXZWFrUmFuZG9tIG1fcmFu
ZG9tR2VuZXJhdG9yOwotICAgICAgICBzdGF0aWMgQ29kZVB0ciBzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCk7
CisgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpOwogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIAogICAg
IGlubGluZSB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTM5
MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTIgKzU2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgb3Bl
cmF0b3IgISgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9j
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gIW1fcmVmOwogICAg
ICAgICB9CiAKICAgICAgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX3JlZi5tX2NvZGU7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYu
Y29kZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRo
ZSBvZmZzZXQgaW4gYnl0ZXMgb2YgJ3BvaW50ZXJJbnRvQ29kZScgaW50bwpAQCAtNjksNyArNjks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYmxvY2sgb2YgY29kZS4gIEl0IGlzIEFT
U0VSVGVkIHRoYXQgbm8gY29kZWJsb2NrID40Z2IgaW4gc2l6ZS4KICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
bnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0Nv
ZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYubV9jb2RlLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICAgICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkpID09IHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7
CiAgICAgICAgIH0KQEAgLTc3LDI0ICs3NywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gRXhlY3V0ZSB0aGUgY29kZSEKICAgICAgICAgaW5saW5lIEpTVmFsdWUgZXhlY3V0ZShSZWdp
c3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1ZhbHVlOjpkZWNvZGUoY3RpVHJhbXBvbGluZShtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU1ZhbHVlOjpkZWNvZGUoY3RpVHJhbXBvbGluZShtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA/IGpzTnVsbCgpIDogcmVzdWx0OwogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCogc3RhcnQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9j
b2RlLmRhdGFMb2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKS5kYXRh
TG9jYXRpb24oKTsKICAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplKCkKICAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
LSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX3NpemU7CisgICAgICAgICAgICBBU1NFUlQobV9y
ZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVm
LnNpemUoKTsKICAgICAgICAgfQogCi0gICAgICAgIEV4ZWN1dGFibGVQb29sKiBnZXRFeGVjdXRh
YmxlUG9vbCgpCisgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGdldEV4ZWN1dGFibGVN
ZW1vcnkoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVjdXRhYmxl
UG9vbC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpJVFR5cGUgaml0VHlwZSgpCkBAIC0xMDQs
OSArMTA0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gSG9zdCBmdW5jdGlvbnMg
YXJlIGEgYml0IHNwZWNpYWw7IHRoZXkgaGF2ZSBhIG1fY29kZSBwb2ludGVyIGJ1dCB0aGV5CiAg
ICAgICAgIC8vIGRvIG5vdCBpbmRpdmlkdWxseSByZWYgdGhlIGV4ZWN1dGFibGUgcG9vbCBjb250
YWluaW5nIHRoZSB0cmFtcG9saW5lLgotICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rp
b24oQ29kZVB0ciBjb2RlKQorICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29k
ZVJlZiBjb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRh
dGFMb2NhdGlvbigpLCAwLCAwLCBIb3N0Q2FsbFRodW5rKTsKKyAgICAgICAgICAgIHJldHVybiBK
SVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBj
bGVhcigpCkBAIC0xMTYsOCArMTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVj
dXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplLCBKSVRUeXBlIGppdFR5cGUp
Ci0gICAgICAgICAgICA6IG1fcmVmKGNvZGUsIGV4ZWN1dGFibGVQb29sLCBzaXplKQorICAgICAg
ICBKSVRDb2RlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1l
bW9yeSwgSklUVHlwZSBqaXRUeXBlKQorICAgICAgICAgICAgOiBtX3JlZihleGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQordm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiogZXhlY3V0YWJsZU1lbW9yeSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFt
cG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKIHsKICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZU
X01PRFVMTykKICAgICBMYWJlbCBzb2Z0TW9kQmVnaW4gPSBhbGlnbigpOwpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBDYWxs
IHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdf
ZmFpbHVyZUNhc2VzMyk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNv
cHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBN
YWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2Vz
MkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKQEAgLTE2
Myw3ICsxNjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNjb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENv
ZGUubV9leGVjdXRhYmxlUG9vbDsKKyAgICAqZXhlY3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5l
eGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGwgPSBw
YXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENhbGxCZWdpbik7CiAgICAgdHJhbXBvbGlu
ZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVh
bENvbnN0cnVjdEJlZ2luKTsKQEAgLTMxMiwxMCArMzEyLDkgQEAgSklUOjpMYWJlbCBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAK
LUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
YykKIHsKICAgICBDYWxsIG5hdGl2ZUNhbGw7Ci0gICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5rID0g
YWxpZ24oKTsKIAogICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcigwLCBSZWdp
c3RlckZpbGU6OkNvZGVCbG9jayk7CiAKQEAgLTQ0NywxMiArNDQ2LDEwIEBAIEpJVDo6Q29kZVB0
ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICByZXQoKTsKIAogICAgIC8vIEFsbCB0
cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5k
IHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgZXhlY3V0YWJsZVBvb2wpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1
ZmZlci5saW5rKG5hdGl2ZUNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmMpKTsKLSAgICBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGUoKTsKLQotICAgIHJldHVybiBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQo
bmF0aXZlQ2FsbFRodW5rKTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBV
U0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCit2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogewogICAgIC8vICgyKSBUaGUgc2Vj
b25kIGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcgbGVu
Z3RoCiAgICAgTGFiZWwgc3RyaW5nTGVuZ3RoQmVnaW4gPSBhbGlnbigpOwpAQCAtMTUyLDcgKzE1
Miw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBDYWxs
IHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdf
ZmFpbHVyZUNhc2VzMyk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNv
cHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBN
YWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxp
bmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2Vz
MkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKQEAgLTE2
Myw3ICsxNjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNvbnN0cnVjdCwgRnVuY3Rpb25QdHIoY3Rp
X29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAKICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29k
ZS5tX2V4ZWN1dGFibGVQb29sOworICAgICpleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4
ZWN1dGFibGVNZW1vcnkoKTsKIAogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsg
PSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENhbGxMaW5rQmVnaW4pOwogICAgIHRy
YW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluayA9IHBhdGNoQnVmZmVyLnRyYW1wb2xp
bmVBdCh2aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2luKTsKQEAgLTI4OSw5ICsyODksOSBAQCBKSVQ6
OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAgICAgcmV0dXJuIG5hdGl2ZUNh
bGxUaHVuazsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVD
YWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IE5hdGl2ZUZ1bmN0aW9uKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAg
cmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgcmV0dXJu
IENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDkzOTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tZXRo
b2RfY2hlY2soSW5zdHIKICAgICBtX2J5dGVjb2RlT2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2J5X2lkKTsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitK
SVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBm
YWlsdXJlczsKQEAgLTE5Myw4ICsxOTMsOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAg
aml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEs
ICZqaXQsIHBvb2wpOwotICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2Nv
ZGU7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAg
cmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMzIsNyAr
MjMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1
bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJy
YXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAg
ICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0
dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1
YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgSnVtcCBmYWlsZWQg
PSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9n
ZXRfYnlfdmFsKSk7CkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlJZFRyYW5zaXRpbwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xp
bmUoKTsKICAgICBDYWxsIGZhaWx1cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKICAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGws
IEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlf
b3BfcHV0X2J5X2lkX2ZhaWwpKTsKICAgICAKQEAgLTU1MCwxMCArNTUwLDkgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9u
X3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJl
bCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
bV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5l
KHJldHVybkFkZHJlc3MsIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2Fs
bGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZv
LT5zdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYo
Q29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcykKQEAgLTYwNiw3ICs2MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
YXRjaEdldEFycmF5TGVuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcp
LCByZWdUMSk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAgICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAg
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBA
IC02MTcsMTMgKzYxNiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5
TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAg
Ly8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxl
dGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVu
dHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgp
KSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAt
IGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjY2LDcgKzY2NCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAKICAgICBKdW1wIHN1Y2Nlc3Mg
PSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICAvLyBVc2UgdGhlIHBh
dGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3Jp
Z2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VC
ZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hP
ZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTY4NCwxMyArNjgyLDEyIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9CiAKICAgICAvLyBUcmFjayB0
aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsK
KyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
ICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGlu
IHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNo
T2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAK
ICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJl
IGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9wcm90b19saXN0KSk7CkBAIC03MjMsNyArNzIwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFNlbGZMaXN0KAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2Rl
QmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9y
IChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8p
CkBAIC03MzEsNyArNzI4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZM
aXN0KAogICAgICAgICB9CiAgICAgfSAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0
aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBj
YXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChw
b2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUu
Y29kZSgpKTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdp
biA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZz
ZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKICAgICAKQEAgLTc0MCwxNCArNzM3LDE0IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJl
dHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZv
cm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJ
ZFB1dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAKICAg
ICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlciht
X2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRy
eUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVu
dEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1
cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNp
emVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNzg3LDcgKzc4NCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAKICAgICBK
dW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVl
ZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsK
ICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTc5NSwyMSArNzkyLDIxIEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgfQogICAgIH0KICAgICAv
LyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFj
ayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVy
ZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNh
c2VzMiwgbGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVj
dHVyZSk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOwogICAgIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFi
ZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5k
ZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
c2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTQsNyArODUx
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgSnVt
cCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRz
U3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAg
ICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC04NjIsMjIgKzg1OSwyMiBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8g
VXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1
Y2tldHNPZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJl
dHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZv
cm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJ
ZFB1dFJlc3VsdCkpOwogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVs
LCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsKICAgICAKICAgICAv
LyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0
aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJ
ZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxh
YmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZz
ZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CkBAIC05MjEsNyArOTE4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
KFN0cgogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwg
cmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBA
IC05MzUsMTMgKzkzMiwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4o
U3RyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2lu
LmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAg
Ly8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxl
dGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVu
dHJ5TGFiZWw7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgIAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vz
cy5jcHAJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJ
VDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3Ry
aW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAg
ICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC03Nyw4ICs3
Nyw4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQu
bW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgcG9vbCk7Ci0gICAgcmV0
dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0KTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwog
ICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90
U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0
cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9i
YWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOworICAgIGVt
aXROYWtlZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0
cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBi
cmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRz
dCwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChv
cF9nZXRfYnlfdmFsKSk7CkBAIC01NTUsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1w
b2xpbmUoKTsKICAgICBDYWxsIGZhaWx1cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5j
dGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1
dF9ieV9pZF9mYWlsKSk7CiAKQEAgLTU2NCwxMCArNTY0LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNb
MF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2Mp
KTsKICAgICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFk
ZHJlc3MsIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFt
cG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91
dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVz
cykKQEAgLTYxNSw3ICs2MTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFy
cmF5TGVuCiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwog
ICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBV
c2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0
byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
c2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTYyNiwxMyArNjI1LDEyIEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhh
dmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFu
Y2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50
IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0
dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBA
IC02NzMsNyArNjcxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0
cgogICAgIH0gZWxzZQogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0
LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+
ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzKTsKIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0
aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4K
ICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwp
OwpAQCAtNjkwLDEzICs2ODgsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFBy
b3RvKFN0cgogICAgICAgICB9CiAgICAgfQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUg
Y3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRp
b25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsK
LSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03
MjYsNyArNzIzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAog
ICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgc3RydWN0dXJlLCBj
YWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxs
UmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxz
LmVuZCgpOyArK2l0ZXIpIHsKQEAgLTczNiw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZv
cm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNs
b3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0g
cG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5l
OworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3Rv
QmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNo
T2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAKQEAgLTc0NSwxNCArNzQyLDE0IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJl
dHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZv
cm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vz
cywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJ
ZFB1dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBv
bHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRh
LCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUpOwog
CiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUg
aG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1w
TG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNl
dEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwg
ZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2Rl
TG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJl
bnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBz
aXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc5MSw3ICs3ODgs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAKICAgICBKdW1w
IHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1
YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04
MDEsMjAgKzc5OCwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0
CiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJl
bCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nl
c3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwg
cGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1
cmUpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Q29kZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Ns
b3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
Q29kZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJ
ZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg1Nyw3ICs4NTQsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIGNvbXBpbGVHZXREaXJl
Y3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3Vj
Y2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1
YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04
NjcsMjIgKzg2NCwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0
CiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJl
bCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMt
Pmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKIAogICAgIHBhdGNo
QnVmZmVyLmxpbmsoYnVja2V0c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24g
c3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQg
d2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5s
aW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9m
ZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFi
ZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1
YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIFRyYWNrIHRo
ZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4K
LSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFi
ZWwsIHN0cnVjdHVyZSwgY2hhaW4pOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpA
QCAtOTI1LDcgKzkyMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihT
dHIKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNh
Y2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJs
ZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlz
KTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxS
ZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMu
ZW5kKCk7ICsraXRlcikgewpAQCAtOTQxLDEzICs5MzgsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJl
c3VsdCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFi
ZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJS
b3V0aW5lOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFj
ayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChw
YXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdl
IGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3Rp
X29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9G
dW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZp
c2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NTcsOCArNzU3LDggQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNH
bG9iYWxEYXRhKiBnbG9iYQogICAgIGlmICghZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRv
ci5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hp
bmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCAmbV9leGVjdXRhYmxlUG9vbCwgJm1fdHJhbXBvbGlu
ZVN0cnVjdHVyZSk7Ci0gICAgQVNTRVJUKG1fZXhlY3V0YWJsZVBvb2wpOworICAgIEpJVDo6Y29t
cGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCAmbV9leGVjdXRhYmxlTWVtb3J5
LCAmbV90cmFtcG9saW5lU3RydWN0dXJlKTsKKyAgICBBU1NFUlQoISFtX2V4ZWN1dGFibGVNZW1v
cnkpOwogI2lmIENQVShBUk1fVEhVTUIyKQogICAgIC8vIFVuZm9ydHVuYXRlIHRoZSBhcm0gY29t
cGlsZXIgZG9lcyBub3QgbGlrZSB0aGUgdXNlIG9mIG9mZnNldG9mIG9uIEpJVFN0YWNrRnJhbWUg
KHNpbmNlIGl0IGNvbnRhaW5zIG5vbiBQT0QgdHlwZXMpLAogICAgIC8vIGFuZCB0aGUgT0JKRUNU
X09GRlNFVE9GIG1hY3JvIGRvZXMgbm90IGFwcGVhciBjb25zdGFudGlzaCBlbm91Z2ggZm9yIGl0
IHRvIGJlIGhhcHB5IHdpdGggaXRzIHVzZSBpbiBDT01QSUxFX0FTU0VSVApAQCAtMTYwOCw3ICsx
NjA4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAg
ICAgIGlmIChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsK
ICAgICAgICAgICAgIEFTU0VSVCghc3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIENvZGVMb2NhdGlvbkxhYmVsKCksIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0
ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERh
dGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
KCksIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwog
ICAgICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LCAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0
OwpAQCAtMTYzNCwxMiArMTYzNCwxMiBAQCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KiBnCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2Ug
YWNjZXNzX2dldF9ieV9pZF9wcm90bzoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9
IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0
dWJJbmZvLT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RT
dHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1
cmUuZ2V0KCkpOwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25M
YWJlbCgpOworICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlw
ZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRf
YnlfaWRfY2hhaW46CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1v
cnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1
YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdl
dCgpLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1Yklu
Zm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKQEAgLTM1
NzIsMTEgKzM1NzIsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRv
XwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUo
KS50b09iamVjdChjYWxsRnJhbWUpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRo
dW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgc3Rk
OjpwYWlyPENUSVN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5h
ZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgc3RkOjpwYWlyPENU
SVN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJh
dG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LnNlY29uZCkKLSAg
ICAgICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhLCBtX2V4ZWN1
dGFibGVQb29sLmdldCgpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRv
cihnbG9iYWxEYXRhKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKIH0KIApAQCAt
MzU4NCw3ICszNTg0LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rp
bwogewogICAgIHN0ZDo6cGFpcjxIb3N0RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4g
ZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVF
eGVjdXRhYmxlPigpKTsKICAgICBpZiAoISplbnRyeS5maXJzdC0+c2Vjb25kKQotICAgICAgICBl
bnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3Jl
YXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIG1f
ZXhlY3V0YWJsZVBvb2wsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgp
LCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+
c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxE
YXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVu
Y3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0
aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAg
ICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KIApAQCAtMzU5Miw4ICszNTky
LDggQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0
ZDo6cGFpcjxIb3N0RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hv
c3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigp
KTsKICAgICBpZiAoISplbnRyeS5maXJzdC0+c2Vjb25kKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjb2RlID0gZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xv
YmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIo
KTsKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4
ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgY29kZSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNv
bnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJh
dG9yKGdsb2JhbERhdGEpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIGVudHJ5
LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUo
Kmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rp
b25Bc0NvbnN0cnVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25k
LmdldCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNp
b24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI5NCw3ICsyOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBv
bGluZVN0cnVjdHVyZS5jdGlOYXRpdmVDb25zdHJ1Y3Q7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGN0aVNvZnRNb2R1bG8oKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUu
Y3RpU29mdE1vZHVsbzsgfQogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTdHVi
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIoSlNHbG9iYWxEYXRhKiwgVGh1bmtH
ZW5lcmF0b3IpOwogCiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIo
SlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICBOYXRpdmVFeGVjdXRhYmxl
KiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dl
bmVyYXRvcik7CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBjbGVhckhvc3RGdW5jdGlvblN0dWJzKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gQ1RJ
U3R1Yk1hcDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY+IENUSVN0dWJNYXA7CiAgICAgICAgIENUSVN0dWJNYXAgbV9jdGlTdHVi
TWFwOwogICAgICAgICB0eXBlZGVmIEhhc2hNYXA8TmF0aXZlRnVuY3Rpb24sIFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4gPiBIb3N0RnVuY3Rpb25TdHViTWFwOwogICAgICAgICBPd25QdHI8SG9zdEZ1
bmN0aW9uU3R1Yk1hcD4gbV9ob3N0RnVuY3Rpb25TdHViTWFwOwotICAgICAgICBSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7CisgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CiAKICAgICAgICAgVHJhbXBvbGluZVN0
cnVjdHVyZSBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmU7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiA5Mzkx
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFz
cyBTcGVjaWFsaXplZFRodW5rSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBwdWJs
aWM6CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAgICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCisgICAgICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAg
ICAgICAgICAgIDogbV9leHBlY3RlZEFyZ0NvdW50KGV4cGVjdGVkQXJnQ291bnQpCiAgICAgICAg
ICAgICAsIG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAgICAgLCBtX3Bvb2wocG9v
bCkKICAgICAgICAgewogICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBl
Y3RlZCBudW1iZXIgb2YgYXJndW1lbnRzCiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChi
cmFuY2gzMihOb3RFcXVhbCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxl
OjpBcmd1bWVudENvdW50ICogKGludClzaXplb2YoUmVnaXN0ZXIpKSwgVHJ1c3RlZEltbTMyKGV4
cGVjdGVkQXJnQ291bnQgKyAxKSkpOwpAQCAtMTIzLDEzICsxMjIsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZmluYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgZmFsbGJhY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoZ2xvYmFsRGF0YSwgdGhpcywgbV9wb29sLmdldCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZl
ci5saW5rKG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAg
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0u
c2Vjb25kKTsKLSAgICAgICAgICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5t
X2NvZGU7CisgICAgICAgICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1
c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudApAQCAtMTYzLDcgKzE2Miw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgaW50IG1fZXhwZWN0ZWRBcmdDb3Vu
dDsKICAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Ci0gICAgICAgIFJlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gbV9wb29sOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
bV9mYWlsdXJlczsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4g
PiBtX2NhbGxzOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjYgKzYz
LDI2IEBAIHN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQu
YXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0
KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBv
b2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIHN0
cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0
YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgY2hhclRvU3RyaW5n
KGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJl
dHVybkpTQ2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRh
LCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAg
ICAvLyBsb2FkIGNoYXIgY29kZQogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC05MCwxMSArOTAsMTEgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUo
Kmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
c3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0
aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KSk7CiAKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJs
ZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJl
Z1QwKTsKQEAgLTE3OCwxMiArMTc4LDEyIEBAIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxv
Zyk7CiBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihmbG9vcik7CiBkZWZpbmVVbmFyeURvdWJs
ZU9wV3JhcHBlcihjZWlsKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBw
b29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdy
YXBwZXIoZmxvb3IpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJl
dHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3Vt
ZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQu
cmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAu
bGluaygmaml0KTsKQEAgLTE5NywxMSArMTk3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBm
bG9vclRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKSB8fCAh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAg
ICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBu
b25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwpAQCAtMjIwLDExICsyMjAsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVpl
cm9Db25zdGFudAogc3RhdGljIGNvbnN0IGRvdWJsZSBvbmVDb25zdGFudCA9IDEuMDsKIHN0YXRp
YyBjb25zdCBkb3VibGUgbmVnYXRpdmVIYWxmQ29uc3RhbnQgPSAtMC41OwogICAgIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGpz
Um91bmQpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9u
SW50SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CkBAIC0yMzksMzcgKzIzOSwzNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgcm91bmRUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAoIVVuYXJ5RG91Ymxl
T3BXcmFwcGVyKGV4cCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpOwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEs
IHBvb2wpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7Cisg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQu
c3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNh
bGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQucmV0
dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBqaXQu
ZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAg
ICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERh
dGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1l
bnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIo
bG9nKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qw
KTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1Ro
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBv
b2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERh
dGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRG91YmxlQml0b3BzKCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50
SnVtcDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yc2hpZnQzMihTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QxKTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBhYnNUaHVua0dlbmVyYXRvcigKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRh
LCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
RXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KDIsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDIsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQot
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0Lmxv
YWREb3VibGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAg
ICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwy
MCArMzEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiAg
ICAgY2xhc3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0gICAg
Y2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyOworICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjsKIAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyICgqVGh1bmtHZW5lcmF0
b3IpKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9v
bCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWls
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0
YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0
b3IpKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBv
d1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDkzOTEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYg
RXhlY3V0YWJsZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBO
YXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3Rv
cikKKyAgICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0
aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2
ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWNhbGxU
aHVuaykKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IChhbGxvY2F0ZUNlbGw8TmF0aXZlRXhl
Y3V0YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgTmF0aXZlRXhlY3V0YWJsZShnbG9iYWxEYXRhLCBK
SVRDb2RlKCksIGZ1bmN0aW9uLCBKSVRDb2RlKCksIGNvbnN0cnVjdG9yKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcu
Y3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
aXRpYWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTIgQEAK
ICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAKICNpbmNsdWRlICJIZWFwLmgiCi0j
aW5jbHVkZSAiZHRvYS5oIgorI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNs
dWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSAiZHRvYS5o
IgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4K
IApAQCAtNTMsNiArNTQsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplVGhyZWFkaW5nT25jZSgp
CiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUoKTsKICNlbmRpZgogICAgIEpT
R2xvYmFsRGF0YTo6c3RvcmVWUHRycygpOworICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRp
YWxpemVBbGxvY2F0b3IoKTsKICNpZiBFTkFCTEUoSlNDX01VTFRJUExFX1RIUkVBRFMpCiAgICAg
UmVnaXN0ZXJGaWxlOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkocmV2aXNpb24g
OTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDYgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2Jh
bERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgZW1wdHlMaXN0KG5ldyBNYXJrZWRBcmd1bWVudEJ1
ZmZlcikKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICwgZXhlY3V0YWJsZUFsbG9jYXRvcigq
dGhpcykKLSAgICAsIHJlZ2V4QWxsb2NhdG9yKCp0aGlzKQogI2VuZGlmCiAgICAgLCBsZXhlcihu
ZXcgTGV4ZXIodGhpcykpCiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKQEAgLTQ0MCw2ICs0Mzks
OSBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkKIHZvaWQgSlNHbG9iYWxEYXRh
OjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgaW50ZXJwcmV0ZXItPmR1
bXBTYW1wbGVEYXRhKGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJMRVIpCisgICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgogfQogCiB2b2lkIEpTR2xvYmFsRGF0
YTo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5
Myw3ICsxOTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAjaWYgRU5BQkxFKEFTU0VN
QkxFUikKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVjdXRhYmxlQWxsb2NhdG9yOwot
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIHJlZ2V4QWxsb2NhdG9yOwogI2VuZGlmCiAKICNp
ZiAhRU5BQkxFKEpJVCkKQEAgLTIxNiw3ICsyMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJMRShKSVQpCiAgICAgICAgIE93
blB0cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Z2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKICAgICAgICAg
ewogICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHViKHRoaXMsIGdlbmVyYXRvcik7
CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy91bml0L3VuaXR0
ZXN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3VuaXQv
dW5pdHRlc3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy91bml0L3VuaXR0ZXN0cy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTE2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3Iu
aD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCisvLyBUZXN0IHN1cHBvcnQKKworI2RlZmluZSBS
VU5fU1VJVEUoZXhwcmVzc2lvbikgZG8geyAgICAgICAgICAgICAgXAorICAgICAgICBwcmludGYo
IiVzOlxuIiwgI2V4cHJlc3Npb24pOyAgICAgICAgICAgXAorICAgICAgICAoZXhwcmVzc2lvbik7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUg
UlVOX1RFU1QoZXhwcmVzc2lvbikgZG8geyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJp
bnRmKCIgICAlczogIiwgI2V4cHJlc3Npb24pOyAgICAgICAgICAgIFwKKyAgICAgICAgZmZsdXNo
KHN0ZG91dCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGV4cHJlc3Np
b24pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCJPS1xu
Iik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVm
aW5lIFRFU1RfQVNTRVJUKGV4cHJlc3Npb24pIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIGlmICghKGV4cHJlc3Npb24pKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBwcmludGYoIkZBSUw6
ICVzOiVzOiVkOiBhc3NlcnRpb24gJXMgZmFpbGVkIVxuIiwgX19GSUxFX18sIF9fRlVOQ1RJT05f
XywgX19MSU5FX18sICNleHByZXNzaW9uKTsgXAorICAgICAgICAgICAgQ1JBU0goKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKK3N0YXRpYyB2b2lkIHByaW50VmFsdWUoYm9vbCB2
YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUpCisgICAgICAgIHByaW50ZigidHJ1ZSIpOworICAgIGVs
c2UKKyAgICAgICAgcHJpbnRmKCJmYWxzZSIpOworfQorCitzdGF0aWMgdm9pZCBwcmludFZhbHVl
KGludCB2YWx1ZSkKK3sKKyAgICBwcmludGYoIiVkIiwgdmFsdWUpOworfQorCitzdGF0aWMgdm9p
ZCBwcmludFZhbHVlKHNpemVfdCB2YWx1ZSkKK3sKKyAgICBwcmludGYoIjB4JWx4IiwgdmFsdWUp
OworfQorCitzdGF0aWMgdm9pZCBwcmludFZhbHVlKHZvaWQqIHZhbHVlKQoreworICAgIHByaW50
ZigiJXAiLCB2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBh
c3NlcnRFcXVhbEltcGwoY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGFjdHVhbFN0cmluZywgVCBhY3R1YWws
IFQgZXhwZWN0ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPSBleHBlY3RlZCkgeworICAgICAgICBw
cmludGYoIkZBSUw6ICVzOiVzOiVkOiBleHBlY3RlZCAlcyB0byBiZSAiLCBmaWxlTmFtZSwgZnVu
Y3Rpb25OYW1lLCBsaW5lTnVtYmVyLCBhY3R1YWxTdHJpbmcpOworICAgICAgICBwcmludFZhbHVl
KGV4cGVjdGVkKTsKKyAgICAgICAgcHJpbnRmKCIgYnV0IHdhcyAiKTsKKyAgICAgICAgcHJpbnRW
YWx1ZShhY3R1YWwpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIENSQVNIKCk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxJ
bXBsKGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGludCBs
aW5lTnVtYmVyLCBjb25zdCBjaGFyKiBhY3R1YWxTdHJpbmcsIFQgYWN0dWFsLCBpbnQgZXhwZWN0
ZWQpCit7CisgICAgaWYgKGFjdHVhbCAhPSAoVClleHBlY3RlZCkgeworICAgICAgICBwcmludGYo
IkZBSUw6ICVzOiVzOiVkOiBleHBlY3RlZCAlcyB0byBiZSAiLCBmaWxlTmFtZSwgZnVuY3Rpb25O
YW1lLCBsaW5lTnVtYmVyLCBhY3R1YWxTdHJpbmcpOworICAgICAgICBwcmludFZhbHVlKGV4cGVj
dGVkKTsKKyAgICAgICAgcHJpbnRmKCIgYnV0IHdhcyAiKTsKKyAgICAgICAgcHJpbnRWYWx1ZShh
Y3R1YWwpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQor
fQorCisjZGVmaW5lIFRFU1RfQVNTRVJUX0VRVUFMKGFjdHVhbCwgZXhwZWN0ZWQpIGFzc2VydEVx
dWFsSW1wbChfX0ZJTEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgI2FjdHVhbCwgYWN0dWFs
LCBleHBlY3RlZCkKKworLy8gVGVzdHMgZm9yIFJlZEJsYWNrVHJlZQorCitjbGFzcyBSZWRCbGFj
a1RyZWVUZXN0cyB7Citwcml2YXRlOgorICAgIFJlZEJsYWNrVHJlZVRlc3RzKCkgeyB9CisgICAg
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgUlVO
X1RFU1QodGVzdERyaXZlcigiIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIqeEB5
IXoiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithIikpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0RHJpdmVyKCIrYSp4QHkheiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZl
cigiK2EqYUBhIWEiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IiKSk7Cisg
ICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYyIpKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdERyaXZlcigiK2ErYitjK2QiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIith
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCIpKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Ur
ZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6IikpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
ZStmK2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oqYSpiKmMqZCplKmYqZypo
KmkqaiprKmwqbSpuKm8qcCpxKnIqcyp0KnUqdip3KngqeSp6IWEhYiFjIWQhZSFmIWchaCFpIWoh
ayFsIW0hbiFvIXAhcSFyIXMhdCF1IXYhdyF4IXkheiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dERyaXZlcigiK2QrZCttK3dAZEBtQHdAYUBnQHEiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RE
cml2ZXIoIitkK2QrZCtkK2QrZCtkK2QrZCtkK2YrZitmK2YrZitmK2YraCtoK2kraitrK2wrbStv
K3ArcStyK3pAYUBiQGNAZEBlQGZAZ0BoQGlAakBrQGxAbUBuQG9AcEBxQHJAc0B0QHVAdkB3QHhA
eUB6IikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgY291bnRlcjsK
KyAgICAKKyAgICBzdHJ1Y3QgUGFpciB7CisgICAgICAgIGNoYXIga2V5OworICAgICAgICB1bnNp
Z25lZCB2YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFBhaXIoKSB7IH0KKyAgICAgICAgCisgICAg
ICAgIFBhaXIoY2hhciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5
KQorICAgICAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrZXkgPT0gb3RoZXIua2V5OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQYWlyJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleSA8IG90aGVyLmtleTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBWZWN0b3I8UGFpciwgMTY+IFBhaXJWZWN0
b3I7CisgICAgCisgICAgc3RhdGljIFBhaXJWZWN0b3IgZmluZEV4YWN0KFBhaXJWZWN0b3ImIGFz
VmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIFBhaXJWZWN0b3IgcmVzdWx0OworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNp
emUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkg
PT0ga2V5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXNWZWN0b3IuYXQoaW5kZXgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigp
LCByZXN1bHQuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgcmVtb3ZlKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBzaXpl
X3QgaW5kZXgpCisgICAgeworICAgICAgICBhc1ZlY3Rvci5hdChpbmRleCkgPSBhc1ZlY3Rvci5s
YXN0KCk7CisgICAgICAgIGFzVmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIFBhaXJWZWN0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKFBhaXJWZWN0b3Im
IGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIGNoYXIgYmVzdEtleSA9IDA7IC8v
IGFzc2lnbm1lbnQgdG8gbWFrZSBnY2MgaGFwcHkKKyAgICAgICAgYm9vbCBmb3VuZEtleSA9IGZh
bHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGFz
VmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGlu
ZGV4KS5rZXkgPj0ga2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4
KS5rZXkgPCBiZXN0S2V5IHx8ICFmb3VuZEtleSkgeworICAgICAgICAgICAgICAgICAgICBmb3Vu
ZEtleSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJlc3RLZXkgPSBhc1ZlY3Rvci5hdChp
bmRleCkua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBp
ZiAoIWZvdW5kS2V5KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAg
ICAgIHJldHVybiBmaW5kRXhhY3QoYXNWZWN0b3IsIGJlc3RLZXkpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCBhc3NlcnRGb3VuZEFuZFJlbW92ZShQYWlyVmVjdG9yJiBhc1ZlY3Rvciwg
Y2hhciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQg
PSBmYWxzZTsKKyAgICAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gMDsgLy8gbWFrZSBjb21w
aWxlcnMgaGFwcHkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAg
IGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID09IGtleQorICAgICAgICAgICAgICAgICAgICAm
JiBhc1ZlY3Rvci5hdChpbmRleCkudmFsdWUgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgVEVTVF9BU1NFUlQoIWZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9
IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVEVTVF9BU1NFUlQoZm91bmQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICByZW1vdmUoYXNWZWN0b3IsIGZvdW5kSW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlz
IGRlbGliZXJhdGVseSBwYXNzZXMgYSBjb3B5IG9mIHRoZSB2ZWN0b3IuCisgICAgc3RhdGljIHZv
aWQgYXNzZXJ0RXF1YWwoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBQYWly
VmVjdG9yIGFzVmVjdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChSZWRCbGFja1RyZWU8Y2hhciwg
dW5zaWduZWQ+OjpOb2RlKiBjdXJyZW50ID0gYXNUcmVlLmZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBhc1RyZWUuc3VjY2Vzc29yKGN1cnJlbnQpKQorICAgICAgICAgICAgYXNzZXJ0Rm91bmRB
bmRSZW1vdmUoYXNWZWN0b3IsIGN1cnJlbnQtPmtleSwgY3VycmVudC0+dmFsdWUpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KFJlZEJsYWNrVHJl
ZTxjaGFyLCB1bnNpZ25lZD4mIGFzVHJlZSwgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6
Tm9kZSogbm9kZSwgUGFpclZlY3RvciBmb3VuZFZhbHVlcywgY2hhciBrZXkpCisgICAgeworICAg
ICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5
LCBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5z
aWduZWQ+OjpOb2RlKiBwcmV2Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBkbyB7CisgICAgICAg
ICAgICAgICAgbm9kZSA9IHByZXZOb2RlOworICAgICAgICAgICAgICAgIHByZXZOb2RlID0gYXNU
cmVlLnByZWRlY2Vzc29yKHByZXZOb2RlKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHByZXZOb2Rl
ICYmIHByZXZOb2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlQo
IXByZXZOb2RlIHx8IHByZXZOb2RlLT5rZXkgPCBrZXkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoZm91bmRWYWx1
ZXMsIG5vZGUtPmtleSwgbm9kZS0+dmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG5vZGUgPSBhc1RyZWUuc3VjY2Vzc29yKG5vZGUpOworICAgICAgICAgICAgICAgIFRF
U1RfQVNTRVJUKCFub2RlIHx8IG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgfSB3aGls
ZSAobm9kZSAmJiBub2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVEVTVF9BU1NFUlQoZm91bmRWYWx1ZXMuaXNFbXB0eSgpKTsKKyAgICB9CisgICAgCisgICAg
Ly8gVGhlIGNvbnRyb2wgc3RyaW5nIGlzIGEgbnVsbC10ZXJtaW5hdGVkIGxpc3Qgb2YgY29tbWFu
ZHMuIEVhY2gKKyAgICAvLyBjb21tYW5kIGlzIHR3byBjaGFyYWN0ZXJzLCB3aXRoIHRoZSBmaXJz
dCBpZGVudGlmeWluZyB0aGUgb3BlcmF0aW9uCisgICAgLy8gYW5kIHRoZSBzZWNvbmQgZ2l2aW5n
IGEga2V5LiBUaGUgY29tbWFuZHMgYXJlOgorICAgIC8vICAreCAgQWRkIHgKKyAgICAvLyAgKngg
IEZpbmQgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgKKyAgICAvLyAgQHggIEZpbmQgYWxsIGVsZW1l
bnRzIHRoYXQgaGF2ZSB0aGUgc21hbGxlc3Qga2V5IHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVx
dWFsIHRvIHgKKyAgICAvLyAgIXggIFJlbW92ZSBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAorICAg
IHN0YXRpYyB2b2lkIHRlc3REcml2ZXIoY29uc3QgY2hhciogY29udHJvbFN0cmluZykKKyAgICB7
CisgICAgICAgIFBhaXJWZWN0b3IgYXNWZWN0b3I7CisgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFy
LCB1bnNpZ25lZD4gYXNUcmVlOworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBjaGFyKiBj
dXJyZW50ID0gY29udHJvbFN0cmluZzsgKmN1cnJlbnQ7IGN1cnJlbnQgKz0gMikgeworICAgICAg
ICAgICAgY2hhciBjb21tYW5kID0gY3VycmVudFswXTsKKyAgICAgICAgICAgIGNoYXIga2V5ID0g
Y3VycmVudFsxXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKytjb3VudGVyOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoY29tbWFuZCk7CisgICAgICAgICAgICBBU1NF
UlQoa2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7Cisg
ICAgICAgICAgICBjYXNlICcrJzogeworICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFy
LCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBuZXcgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVk
Pjo6Tm9kZTsKKyAgICAgICAgICAgICAgICBub2RlLT5rZXkgPSBrZXk7CisgICAgICAgICAgICAg
ICAgbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBhc1RyZWUuaW5zZXJ0KG5v
ZGUpOworICAgICAgICAgICAgICAgIGFzVmVjdG9yLmFwcGVuZChQYWlyKGtleSwgdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNhc2UgJyonOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNo
YXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5maW5kRXhhY3Qoa2V5KTsKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwobm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JL
ZXkoYXNUcmVlLCBub2RlLCBmaW5kRXhhY3QoYXNWZWN0b3IsIGtleSksIGtleSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgJ0AnOiB7
CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9k
ZSA9IGFzVHJlZS5maW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoa2V5KTsKKyAgICAgICAgICAg
ICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChub2RlLT5r
ZXkgPj0ga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShh
c1RyZWUsIG5vZGUsIGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChhc1ZlY3Rvciwga2V5KSwg
bm9kZS0+a2V5KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
VEVTVF9BU1NFUlQoZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9yLCBrZXkpLmlz
RW1wdHkoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlICchJzogeworICAgICAgICAgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25l
ZD46Ok5vZGUqIG5vZGUgPSBhc1RyZWUucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChu
b2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJl
bW92ZShhc1ZlY3Rvciwgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChmaW5kRXhh
Y3QoYXNWZWN0b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgICAgIGFzVHJlZS5jaGVja0NvbnNpc3RlbmN5KCk7CisjZW5kaWYKKyAg
ICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFzVHJlZS5zaXplKCksIGFzVmVjdG9yLnNpemUo
KSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbChhc1RyZWUsIGFzVmVjdG9yKTsKKyAgICAgICAg
fQorICAgIH0KK307CisKK3Vuc2lnbmVkIFJlZEJsYWNrVHJlZVRlc3RzOjpjb3VudGVyOworCisv
LyBUZXN0cyBmb3IgTWV0YUFsbG9jYXRvcgorCitjbGFzcyBNZXRhQWxsb2NhdG9yVGVzdHMgewor
cHJpdmF0ZToKKyAgICBNZXRhQWxsb2NhdG9yVGVzdHMoKSB7IH0KKworcHVibGljOgorICAgIHN0
YXRpYyB2b2lkIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIFJVTl9URVNUKHRlc3ROb3RoaW5n
KCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QWxsb2NaZXJvKCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0T25lQWxsb2MoMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdE9uZUFsbG9jKDY0KSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3RPbmVBbGxvYyhwYWdlU2l6ZSgpKjIpKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVh
dEFsbG9jRnJlZSgzMiwgMzIsIDY0LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRB
bGxvY0ZyZWUoMzIsIDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxs
b2NGcmVlKDY0LCAzMiwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9j
RnJlZSgzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0Zy
ZWUoMzIsIDY0LCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVl
KDY0LCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZShw
YWdlU2l6ZSgpICogMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9j
RnJlZSgzMiwgcGFnZVNpemUoKSAqIDIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVh
dEFsbG9jRnJlZShwYWdlU2l6ZSgpICogMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dFJlcGVhdEFsbG9jRnJlZShwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpICogMiwgMCkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgp
LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIDMyLCAx
MjgpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgNjQsIDEy
OCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDY0LCAzMiwgMTI4
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXpl
KCkgLSAzMiwgcGFnZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENv
YWxlc2NlKDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkgKiAyKSk7CisgICAgICAgIFJV
Tl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkg
KiAyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUo
KSwgcGFnZVNpemUoKSwgcGFnZVNpemUoKSAqIDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJ
Rk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklG
T0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIHBhZ2VTaXplKCkgLSAzMiwgMzIsIHBhZ2VTaXpl
KCkgLSA2NCwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhFYWdlckZp
bGwsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEVhZ2VyRmls
bCwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEVhZ2Vy
RmlsbCwgMzIsIDMyLCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxv
YyhFYWdlckZpbGwsIHBhZ2VTaXplKCkgLSAzMiwgMzIsIHBhZ2VTaXplKCkgLSA2NCwgNjQsIDAp
KTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZpbGxIZWFwKDMyLCBkZWZhdWx0UGFnZXNJbkhlYXAg
KiBwYWdlU2l6ZSgpIC8gMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZpbGxIZWFwKHBhZ2VT
aXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RmlsbEhl
YXAocGFnZVNpemUoKSAqIDIsIGRlZmF1bHRQYWdlc0luSGVhcCAvIDIpKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdFJpZ2h0QWxsb2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJpZ2h0QWxsb2NhdGlvbihwYWdlU2l6ZSgpIC8gNCwg
cGFnZVNpemUoKSwgcGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdEJlc3RGaXQoNjQsIDY0LCAzLCBSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoNjQsIDY0LCAxMDAsIERvbnRSdW5TYW5pdHlDaGVjaykp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg5NiwgNjQsIDMsIFJ1blNhbml0eUNoZWNr
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwgMTAsIERvbnRSdW5TYW5p
dHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg5NiwgNjQsIDEwMCwgRG9u
dFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA5Niwg
MywgUnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDk2
LCAxMCwgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0
KDk2LCA5NiwgODAsIERvbnRSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
U2hyaW5rKDY0LCAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCks
IDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSwgcGFnZVNpemUo
KSAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIDMy
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXpl
KCkgKyAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBw
YWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIs
IHBhZ2VTaXplKCkgLSAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXpl
KCkgKiAyLCBwYWdlU2l6ZSgpICogMiAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REZW1h
bmRBbGxvY0NvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCwgZGVmYXVsdFBh
Z2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RGVtYW5kQWxs
b2NDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAqMiwgZGVmYXVsdFBhZ2Vz
SW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RGVtYW5kQWxsb2NE
b250Q29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwKjIsIGRlZmF1bHRQYWdl
c0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGVudW0g
U2FuaXR5Q2hlY2tNb2RlIHsgUnVuU2FuaXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVjayB9Owor
ICAgIAorICAgIGVudW0gSGVhcEdyb3d0aE1vZGUgeyBEb250R3Jvd0hlYXAsIEZvclRlc3REZW1h
bmRBbGxvY0NvYWxlc2NlLCBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2UgfTsKKyAgICAK
KyAgICBzdGF0aWMgSGVhcEdyb3d0aE1vZGUgY3VycmVudEhlYXBHcm93dGhNb2RlOworICAgIHN0
YXRpYyBzaXplX3QgYWxsb3dBbGxvY2F0ZVBhZ2VzOworICAgIHN0YXRpYyBzaXplX3QgcmVxdWVz
dGVkTnVtUGFnZXM7CisKKyAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0
YUFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKCkK
KyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikKKyAgICAgICAgeworICAgICAgICAgICAg
YWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdl
U2l6ZSgpKSwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZpcnR1YWwgflNpbXBsZVRlc3RBbGxvY2F0b3IoKQorICAgICAgICB7
CisgICAgICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAg
ICAgIGFsbG9jYXRvckRlc3Ryb3llZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSkgeworICAg
ICAgICAgICAgY2FzZSBEb250R3Jvd0hlYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0NvYWxl
c2NlOgorICAgICAgICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U6IHsK
KyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChhbGxvd0FsbG9jYXRlUGFnZXMpOworICAgICAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKGFsbG93QWxsb2NhdGVQYWdlcyA+PSBudW1QYWdlcyk7Cisg
ICAgICAgICAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgICAg
ICAgICBudW1QYWdlcyA9IGFsbG93QWxsb2NhdGVQYWdlczsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKGN1cnJl
bnRIZWFwR3Jvd3RoTW9kZSA9PSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZSkKKyAgICAgICAg
ICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIG9mZnNldCA9IDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
dm9pZCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVs
dFBhZ2VzSW5IZWFwICsgb2Zmc2V0KSAqIHBhZ2VTaXplKCkpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAgICAgICAgICAg
Y3VycmVudEhlYXBHcm93dGhNb2RlID0gRG9udEdyb3dIZWFwOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnVtUGFn
ZXMgKyBvZmZzZXQ7ICsrY291bnRlcikgeworICAgICAgICAgICAgICAgICAgICBwYWdlTWFwLT5h
cHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVDb3Vu
dGVyID0gMDsgYnl0ZUNvdW50ZXIgPCBwYWdlU2l6ZSgpOyArK2J5dGVDb3VudGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbWVtb3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUGFnZXNJ
bkhlYXAgKz0gbnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUg
cGFnZSBzaG91bGQgYmUgYm90aCBmcmVlIGFuZCB1bm1hcHBlZC4KKyAgICAgICAgICAgIFRFU1Rf
QVNTRVJUKCFwYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFn
ZVNpemUoKSkpOworICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKTsgYWRkcmVzcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihwYWdlKSArIHBhZ2VTaXplKCk7ICsrYWRkcmVzcykKKyAgICAgICAgICAgICAgICBU
RVNUX0FTU0VSVCghYnl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpKSk7
CisgICAgICAgICAgICBwYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2Up
IC8gcGFnZVNpemUoKSkgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0
dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyB0aGUgcGFnZSBzaG91bGQgYmUgZnJlZSBvZiBvYmplY3RzIGF0IHRoaXMgcG9pbnQs
IGJ1dCBpdCBzaG91bGQgc3RpbGwKKyAgICAgICAgICAgIC8vIGJlIG1hcHBlZC4KKyAgICAgICAg
ICAgIFRFU1RfQVNTRVJUKHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFn
ZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAgICAg
ICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRk
cmVzcykpKTsKKyAgICAgICAgICAgIHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IGZhbHNlOworICAgICAgICB9CisgICAgfTsKKworICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBiYXNlUGFnZSA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGRlZmF1bHRQYWdlc0luSGVhcCA9IDEwMDsKKyAgICAKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgYWRkaXRpb25hbFBhZ2VzSW5IZWFwOworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8Ym9vbCwg
MD4qIG1lbW9yeU1hcDsKKyAgICBzdGF0aWMgVmVjdG9yPGJvb2wsIDA+KiBwYWdlTWFwOworICAg
IHN0YXRpYyBib29sIGFsbG9jYXRvckRlc3Ryb3llZDsKKyAgICAKKyAgICBzdGF0aWMgU2ltcGxl
VGVzdEFsbG9jYXRvciogYWxsb2NhdG9yOworICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3ROb3Ro
aW5nKCkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoYXQgY3JlYXRpbmcgYW5kIGRlc3Ryb3lp
bmcgYW4gYWxsb2NhdG9yIHdvcmtzLgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAg
ICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdEFsbG9jWmVy
bygpCisgICAgeworICAgICAgICAvLyBUZXN0cyB0aGF0IGFsbG9jYXRpbmcgYSB6ZXJvLWxlbmd0
aCBibG9jayByZXR1cm5zIDAgYW5kCisgICAgICAgIC8vIGRvZXMgbm90IGNoYW5nZSBhbnl0aGlu
ZyBpbiBtZW1vcnkuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKDApKTsKKworICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXpl
KCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIGZyZWUoZmlu
YWwpOworCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IHRlc3RPbmVBbGxvYyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoZSBt
b3N0IGJhc2ljIGJlaGF2aW9yOiBhbGxvY2F0ZSBvbmUgdGhpbmcgYW5kIGZyZWUgaXQuIEFsc28K
KyAgICAgICAgLy8gdmVyaWZpZXMgdGhhdCB0aGUgc3RhdGUgb2YgcGFnZXMgaXMgY29ycmVjdC4K
KyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5C
eXRlcygpLCBzaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKGJhc2VQYWdlKSk7
CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdo
V2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAg
ICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0
ZXN0UmVwZWF0QWxsb2NGcmVlKHNpemVfdCBmaXJzdFNpemUsIC4uLikKKyAgICB7CisgICAgICAg
IC8vIFRlc3RzIHJpZ2h0LWNvYWxlc2NpbmcgYnkgcmVwZWF0ZWRseSBhbGxvY2F0aW5nIGFuZCBm
cmVlaW5nLiBUaGUgaWRlYQorICAgICAgICAvLyBpcyB0aGF0IGlmIHlvdSBhbGxvY2F0ZSBzb21l
dGhpbmcgYW5kIHRoZW4gZnJlZSBpdCwgdGhlbiB0aGUgaGVhcCBzaG91bGQKKyAgICAgICAgLy8g
bG9vayBpZGVudGljYWwgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRoZSBhbGxvY2F0aW9uIGR1ZSB0
byBhIHJpZ2h0LWNvYWxlc2NlCisgICAgICAgIC8vIG9mIHRoZSBmcmVlZCBjaHVuayBhbmQgdGhl
IGFscmVhZHktZnJlZSBtZW1vcnksIGFuZCBzbyBzdWJzZXF1ZW50CisgICAgICAgIC8vIGFsbG9j
YXRpb25zIHNob3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAg
CisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVB
TChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFn
ZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVz
KCksIGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAg
ICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVl
KGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICB2YV9saXN0IGFyZ0xpc3Q7CisgICAgICAgIHZh
X3N0YXJ0KGFyZ0xpc3QsIGZpcnN0U2l6ZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUlu
Qnl0ZXMgPSB2YV9hcmcoYXJnTGlzdCwgc2l6ZV90KSkgeworICAgICAgICAgICAgaGFuZGxlID0g
YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFu
ZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMo
KSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25maXJtKGhhbmRs
ZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5k
KGFyZ0xpc3QpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBz
aXplX3Qgc2Vjb25kU2l6ZSwgc2l6ZV90IHRoaXJkU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEFs
bG9jYXRlcyBzb21ldGhpbmcgb2Ygc2l6ZSBmaXJzdFNpemUsIHRoZW4gc29tZXRoaW5nIG9mIHNp
emUgc2Vjb25kU2l6ZSwgYW5kIHRoZW4KKyAgICAgICAgLy8gZnJlZXMgdGhlIGZpcnN0IGFsbG9j
YXRpb24sIGFuZCB0aGVuIHRoZSBzZWNvbmQsIGFuZCB0aGVuIGF0dGVtcHRzIHRvIGFsbG9jYXRl
IHRoZQorICAgICAgICAvLyB0aGlyZCwgYXNzZXJ0aW5nIHRoYXQgaXQgYWxsb2NhdGVkIGF0IHRo
ZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGhlYXAuCisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRo
YXQgdGhpcyB0ZXN0IG1heSBjYXVzZSByaWdodC1hbGxvY2F0aW9uLCB3aGljaCB3aWxsIGNhdXNl
IHRoZSB0ZXN0IHRvIGZhaWwuCisgICAgICAgIC8vIFRodXMgdGhlIGNvcnJlY3Qgd2F5IG9mIHJ1
bm5pbmcgdGhpcyB0ZXN0IGlzIHRvIGVuc3VyZSB0aGF0IHNlY29uZFNpemUgaXMKKyAgICAgICAg
Ly8gcGlja2VkIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBuZXZlciBzdHJhZGRsZXMgYSBwYWdlLgor
ICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwoZmlyc3RIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChm
aXJzdEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAg
IGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhmaXJz
dEhhbmRsZSk7CisKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxlID0g
YWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZEhh
bmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6
ZSgpICsgZmlyc3RTaXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZEhhbmRs
ZS0+c2l6ZUluQnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJt
KGZpcnN0SGFuZGxlKTsKKyAgICAgICAgY29uZmlybShzZWNvbmRIYW5kbGUpOworICAgICAgICBj
b25maXJtSGlnaFdhdGVybWFyayhzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJl
ZShmaXJzdEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7
CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAor
ICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGJh
c2VQYWdlICogcGFnZVNpemUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBh
Z2VTaXplKCksIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IHRoaXJkSGFuZGxlID0gYWxsb2NhdGUodGhpcmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwodGhpcmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQ
YWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTCh0aGlyZEhhbmRs
ZS0+c2l6ZUluQnl0ZXMoKSwgdGhpcmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0o
dGhpcmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayh0aGlyZEhhbmRsZSk7
CisgICAgICAgIAorICAgICAgICBmcmVlKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIGVudW0gVGVzdEZJRk9BbGxvY01vZGUgeyBG
aWxsQXRFbmQsIEVhZ2VyRmlsbCB9OworICAgIHN0YXRpYyB2b2lkIHRlc3RGSUZPQWxsb2MoVGVz
dEZJRk9BbGxvY01vZGUgbW9kZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHRl
c3QgdGhlIHNpbXBsZSBjYXNlIG9mIG5vLWNvYWxlc2NlIChmcmVlaW5nIHRoZSBsZWZ0LW1vc3QK
KyAgICAgICAgLy8gY2h1bmsgaW4gbWVtb3J5IHdoZW4gdGhlIGNodW5rIHRvIHRoZSByaWdodCBv
ZiBpdCBpcyBhbGxvY2F0ZWQpIGFuZAorICAgICAgICAvLyBmdWxseSBleGVyY2lzZSBsZWZ0LWNv
YWxlc2NpbmcgYW5kIGZ1bGwtY29hbGVzY2luZy4gSW4gRWFnZXJGaWxsCisgICAgICAgIC8vIG1v
ZGUsIHRoaXMgYWxzbyB0ZXN0cyBwZXJmZWN0LWZpdCBhbGxvY2F0aW9uIGFuZCBuby1jb2FsZXNj
aW5nIGZyZWUuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworCisgICAgICAgIHNpemVfdCB0
b3RhbFNpemUgPSAwOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5k
bGUqLCAwPiBoYW5kbGVzOworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBhcmdMaXN0OworICAg
ICAgICB2YV9zdGFydChhcmdMaXN0LCBtb2RlKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBzaXpl
SW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBzaXplX3QpKSB7CisgICAgICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSkpOworICAgICAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgICAgIGNvbmZp
cm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRs
ZXMuYXBwZW5kKGhhbmRsZSk7CisgICAgICAgICAgICB0b3RhbFNpemUgKz0gc2l6ZUluQnl0ZXM7
CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5kKGFyZ0xpc3QpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlcy5zaXplKCk7ICsraW5kZXgp
CisgICAgICAgICAgICBjb25maXJtKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAgCisgICAg
ICAgIHNpemVfdCBzaXplU29GYXIgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCBoYW5kbGVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgc2l6ZVNv
RmFyICs9IGhhbmRsZXMuYXQoaW5kZXgpLT5zaXplSW5CeXRlcygpOworICAgICAgICAgICAgZnJl
ZShoYW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBFYWdlckZpbGwp
IHsKKyAgICAgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0
ZShzaXplU29GYXIpOworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+
c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7
CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygp
LCBzaXplU29GYXIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmZpcm0o
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyB0b3RhbFNpemUs
IHRydWUpOworICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGhhbmRsZXMuc2l6ZSgpIC0gMSkK
KyAgICAgICAgICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlcy5sYXN0KCkp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY29uZmlybUhpZ2hX
YXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmcmVl
KGhhbmRsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29uZmlybShiYXNl
UGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQYWdlICogcGFnZVNpemUoKSArIHNpemVTb0ZhciwgZmFs
c2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
c2l6ZVNvRmFyID09IHRvdGFsU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGJhc2VQ
YWdlICogcGFnZVNpemUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VT
aXplKCksIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtb2RlID09IEZpbGxBdEVuZCkg
eworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWxIYW5kbGUgPSBhbGxvY2F0
ZSh0b3RhbFNpemUpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUt
PnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkp
OworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWxIYW5kbGUtPnNpemVJbkJ5dGVz
KCksIHRvdGFsU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oZmluYWxI
YW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmluYWxIYW5kbGUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZv
aWQgdGVzdEZpbGxIZWFwKHNpemVfdCBzaXplSW5CeXRlcywgc2l6ZV90IG51bUFsbG9jYXRpb25z
KQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIFZlY3RvcjxNZXRh
QWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAg
ICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5Q2hl
Y2spKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAg
ICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOworICAgICAg
ICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25z
OyArK2luZGV4KQorICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNh
bml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAor
ICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0Umln
aHRBbGxvY2F0aW9uKHNpemVfdCBmaXJzdExlZnRTaXplLCBzaXplX3QgZmlyc3RSaWdodFNpemUs
IHNpemVfdCBzZWNvbmRMZWZ0U2l6ZSwgc2l6ZV90IHNlY29uZFJpZ2h0U2l6ZSkKKyAgICB7Cisg
ICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBm
aXJzdExlZnQgPSBhbGxvY2F0ZShmaXJzdExlZnRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoZmlyc3RMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGZpcnN0UmlnaHQgPSBhbGxvY2F0ZShmaXJzdFJpZ2h0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGZpcnN0UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFz
ZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kTGVmdCA9IGFsbG9jYXRlKHNlY29uZExl
ZnRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kTGVmdC0+c3RhcnQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RMZWZ0
LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBzZWNvbmRSaWdodCA9IGFsbG9jYXRlKHNlY29uZFJpZ2h0U2l6ZSk7CisgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKHNlY29uZFJpZ2h0LT5lbmQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
KGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkgLSBmaXJzdFJpZ2h0
LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpcnN0TGVmdCk7Cisg
ICAgICAgIGZyZWUoZmlyc3RSaWdodCk7CisgICAgICAgIGZyZWUoc2Vjb25kTGVmdCk7CisgICAg
ICAgIGZyZWUoc2Vjb25kUmlnaHQpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsK
KyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJl
ZShmaW5hbCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB0ZXN0QmVzdEZpdChzaXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc3RlcCwg
dW5zaWduZWQgbnVtU2xvdHMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUpCisgICAg
eworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0
b3JIYW5kbGUqLCAwPiBoYW5kbGVzVG9GcmVlOworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRv
ckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAgICAgIFZlY3Rvcjx2b2lkKiwgMD4gbG9jYXRpb25z
OworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiB0b0ZyZWUgPSBhbGxvY2F0ZShzaXplLCBzYW5p
dHlDaGVja01vZGUpOworICAgICAgICAgICAgaWYgKCFoYW5kbGVzLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIHdoaWxlICh0b0ZyZWUtPnN0YXJ0KCkgIT0gaGFuZGxlcy5sYXN0KCktPmVu
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXNUb0ZyZWUuYXBwZW5kKHRvRnJlZSk7
CisgICAgICAgICAgICAgICAgICAgIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNhbml0eUNoZWNr
TW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBmcmFnZ2VyID0gYWxsb2NhdGUoMzIsIHNhbml0eUNoZWNrTW9k
ZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmcmFnZ2VyLT5zdGFydCgpLCB0b0Zy
ZWUtPmVuZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZCh0
b0ZyZWUtPnN0YXJ0KCkpOworCisgICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0Zy
ZWUpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoZnJhZ2dlcik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QVNTRVJUKGxvY2F0aW9ucy5zaXplKCkgPT0gbnVtU2xvdHMpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlc1RvRnJlZS5zaXplKCk7ICsr
aW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXNUb0ZyZWUuYXQoaW5kZXgpLCBzYW5pdHlD
aGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGJlc3RGaXQgPSBhbGxvY2F0ZShzaXplIC0g
MzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRFU1RfQVNT
RVJUKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KQorICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgYmVzdEZpdC0+ZW5kKCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxvY2F0aW9ucy5hdChpbmRleCkpICsgc2l6ZSkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzbWFsbCA9
IGFsbG9jYXRlKDMyLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgaWYgKGJlc3RGaXQt
PnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBURVNUX0FT
U0VSVF9FUVVBTChzbWFsbC0+c3RhcnQoKSwgYmVzdEZpdC0+ZW5kKCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNtYWxsLT5lbmQoKSwgYmVz
dEZpdC0+c3RhcnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoYmVzdEZpdCwg
c2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIGZyZWUoc21hbGwsIHNhbml0eUNoZWNrTW9k
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xv
dHM7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBzYW5pdHlD
aGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwg
PSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpLCBzYW5pdHlDaGVja01v
ZGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAg
ICBmcmVlKGZpbmFsLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgdGVhckRv
d24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdFNocmluayhzaXplX3QgZmly
c3RTaXplLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIHNldFVwKCk7CisgICAg
ICAgIAorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhhdCB3aWxsIGJlIHNocnVuawor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUp
OworICAgICAgICAKKyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQgbWFrZSBzdXJlIHRoYXQgb3Vy
IHN0YXRlIHJlZmxlY3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAgIG5vdGlmeUZyZWUocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3Rh
cnQoKSkgKyBzZWNvbmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25kU2l6ZSk7CisgICAgICAgIAor
ICAgICAgICBoYW5kbGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAg
ICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
aGVhcCBpcyBub3QgZW1wdHkuCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9j
YXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEFsbG9jYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIGhlYXAuCisgICAgICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIHJlbWFpbmRlciA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBh
Z2VTaXplKCkgLSBzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwocmVtYWlu
ZGVyLT5zdGFydCgpLCBoYW5kbGUtPmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUocmVt
YWluZGVyKTsKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXNz
ZXJ0IHRoYXQgdGhlIGhlYXAgaXMgZW1wdHkgYW5kIGZpbmlzaCB1cC4KKyAgICAgICAgTWV0YUFs
bG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdl
U2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAg
ICAgICAgZnJlZShmaW5hbCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShzaXplX3QgZmly
c3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRTaXplKQorICAgIHsKKyAgICAg
ICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFs
bG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7Cisg
ICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9j
YXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9y
LT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3It
PmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7
CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5k
QWxsb2NDb2FsZXNjZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7Cisg
ICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxv
Y2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKGN1cnJlbnRI
ZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBURVNUX0FTU0VSVF9FUVVB
TChhbGxvd0FsbG9jYXRlUGFnZXMsIDApOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChyZXF1
ZXN0ZWROdW1QYWdlcywgKHNlY29uZFNpemUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgp
KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFn
ZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAg
ICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFu
ZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVh
cCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3du
KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3REZW1hbmRBbGxvY0RvbnRDb2Fs
ZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRTaXpl
KQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxsb2Nh
dGUoZmlyc3RTaXplKSk7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0
ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAg
ICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShm
aXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxs
b2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxv
Y2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAg
ICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9j
RG9udENvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKKyAg
ICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9IGFsbG9j
YXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoY3VycmVudEhl
YXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFM
KGFsbG93QWxsb2NhdGVQYWdlcywgMCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHJlcXVl
c3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCkp
OworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICog
cGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOwor
ICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKworICAgICAgICBmcmVl
KGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAg
ICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVh
cCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZpcnN0SGFu
ZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgc2Vjb25kSGFuZGxlID0gYWxsb2Nh
dGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpcnN0SGFuZGxlLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAqIHBh
Z2VTaXplKCkpKTsKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vj
b25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyB2b2lkIHNldFVwKCkKKyAgICB7CisgICAgICAgIG1lbW9yeU1hcCA9IG5ldyBW
ZWN0b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAgcGFnZU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwgMD4o
KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdl
IDwgYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAg
cGFnZU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZUlu
UGFnZSA9IDA7IGJ5dGVJblBhZ2UgPCBwYWdlU2l6ZSgpOyArK2J5dGVJblBhZ2UpCisgICAgICAg
ICAgICAgICAgbWVtb3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
YWxsb2NhdG9yRGVzdHJveWVkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVh
cEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7CisgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9
IDA7CisgICAgICAgIGFkZGl0aW9uYWxQYWdlc0luSGVhcCA9IDA7CisgICAgICAgIAorICAgICAg
ICBhbGxvY2F0b3IgPSBuZXcgU2ltcGxlVGVzdEFsbG9jYXRvcigpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCB0ZWFyRG93bigpCisgICAgeworICAgICAgICBURVNUX0FTU0VSVChjdXJy
ZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoYWxsb3dBbGxvY2F0ZVBhZ2VzLCAwKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
cmVxdWVzdGVkTnVtUGFnZXMsIDApOworICAgICAgICAKKyAgICAgICAgLy8gbWVtb3J5IHNob3Vs
ZCBiZSBmcmVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBhZ2UgPSBiYXNlUGFnZTsgcGFnZSA8
IGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwOyArK3BhZ2UpIHsKKyAgICAgICAgICAgIFRF
U1RfQVNTRVJUKCFwYWdlU3RhdGUocGFnZSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBi
eXRlSW5QYWdlID0gMDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAg
ICAgICAgICAgICAgICBURVNUX0FTU0VSVCghYnl0ZVN0YXRlKHBhZ2UgKiBwYWdlU2l6ZSgpICsg
Ynl0ZUluUGFnZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGlz
IGF1dG9tYXRpY2FsbHkgdGVzdHMgdGhhdCB0aGUgYWxsb2NhdG9yIGRpZCBub3QgbGVhaworICAg
ICAgICAvLyBtZW1vcnksIHNvIGxvbmcgYXMgdGhlc2UgdGVzdHMgYXJlIHJ1bm5pbmcgd2l0aCAh
ZGVmaW5lZChOREVCVUcpLgorICAgICAgICAvLyBTZWUgTWV0YUFsbG9jYXRvcjo6bV9tYWxsb2NC
YWxhbmNlLgorICAgICAgICBkZWxldGUgYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgVEVT
VF9BU1NFUlQoYWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBt
ZW1vcnlNYXA7CisgICAgICAgIGRlbGV0ZSBwYWdlTWFwOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgTWV0YUFsbG9jYXRvckhhbmRsZSogYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzLCBTYW5p
dHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlID0gUnVuU2FuaXR5Q2hlY2spCisgICAgeworICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNp
emVJbkJ5dGVzKS5sZWFrUmVmKCk7CisgICAgICAgIFRFU1RfQVNTRVJUKGhhbmRsZSk7CisgICAg
ICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMp
OworICAgICAgICAKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAgICB1aW50cHRyX3QgZW5kQnl0
ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJbkJ5dGVzOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJy
ZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRl
KSB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCghYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSk7Cisg
ICAgICAgICAgICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gdHJ1ZTsKKyAgICAgICAgICAgIFRF
U1RfQVNTRVJUKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlDaGVj
aykKKyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
aGFuZGxlOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBmcmVlKE1ldGFBbGxvY2F0b3JI
YW5kbGUqIGhhbmRsZSwgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9IFJ1blNhbml0
eUNoZWNrKQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoaGFuZGxlKTsKKyAgICAgICAgCisg
ICAgICAgIG5vdGlmeUZyZWUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkp
OworICAgICAgICBoYW5kbGUtPmRlcmVmKCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5
Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgbm90aWZ5RnJlZSh2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRC
eXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1
cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5
dGUpIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkpOwor
ICAgICAgICAgICAgYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHNhbml0eUNoZWNrKCkKKyAgICB7CisjaWZuZGVm
IE5ERUJVRworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2
ZWQoKSAtIGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWxsb2NhdG9yLT5kZWJ1Z0ZyZWVT
cGFjZVNpemUoKSk7CisjZW5kaWYKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYWxsb2NhdG9y
LT5ieXRlc1Jlc2VydmVkKCksIChkZWZhdWx0UGFnZXNJbkhlYXAgKyBhZGRpdGlvbmFsUGFnZXNJ
bkhlYXApICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9jYXRv
ci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYnl0ZXNBbGxvY2F0ZWQoKSk7CisgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKSwgYnl0ZXNDb21taXR0ZWQoKSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGNvbmZpcm0oTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAgICBjb25maXJtKHN0
YXJ0Qnl0ZSwgc3RhcnRCeXRlICsgaGFuZGxlLT5zaXplSW5CeXRlcygpLCB0cnVlKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgY29uZmlybUhpZ2hXYXRlcm1hcmsoTWV0YUFsbG9jYXRv
ckhhbmRsZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgY29uZmlybShyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oaGFuZGxlLT5lbmQoKSksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVh
cCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgfQorICAgICAgICAgICAgICAgIAorICAgIHN0
YXRpYyB2b2lkIGNvbmZpcm0odWludHB0cl90IHN0YXJ0Qnl0ZSwgdWludHB0cl90IGVuZEJ5dGUs
IGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9
IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAg
ICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChieXRlU3RhdGUoY3VycmVudEJ5dGUpLCB2YWx1ZSk7
CisgICAgICAgICAgICBpZiAodmFsdWUpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFn
ZVN0YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlm
ICghdmFsdWUpIHsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBmaXJzdEZyZWVQYWdlID0gKHN0YXJ0
Qnl0ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7CisgICAgICAgICAgICB1aW50cHRy
X3QgbGFzdEZyZWVQYWdlID0gKGVuZEJ5dGUgLSBwYWdlU2l6ZSgpKSAvIHBhZ2VTaXplKCk7Cisg
ICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50UGFnZSA9IGZpcnN0RnJlZVBhZ2U7IGN1
cnJlbnRQYWdlIDw9IGxhc3RGcmVlUGFnZTsgKytjdXJyZW50UGFnZSkKKyAgICAgICAgICAgICAg
ICBURVNUX0FTU0VSVCghcGFnZVN0YXRlKGN1cnJlbnRQYWdlKSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgc3RhdGljIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpCisgICAgeworICAgICAg
ICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbWVtb3J5TWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtZW1v
cnlNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJ5
dGVzQ29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBwYWdlTWFwLT5zaXplKCk7ICsraW5k
ZXgpIHsKKyAgICAgICAgICAgIGlmIChwYWdlTWFwLT5hdChpbmRleCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCAqIHBhZ2VTaXpl
KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29sJiBieXRlU3RhdGUodm9pZCogYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHJldHVybiBieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGFkZHJlc3MpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wmIGJ5dGVTdGF0
ZSh1aW50cHRyX3QgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBieXRlSW5kZXgg
PSBhZGRyZXNzIC0gYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5
TWFwLT5hdChieXRlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCYgcGFnZVN0
YXRlKHVpbnRwdHJfdCBwYWdlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHBhZ2VJbmRleCA9
IHBhZ2UgLSBiYXNlUGFnZTsKKyAgICAgICAgcmV0dXJuIHBhZ2VNYXAtPmF0KHBhZ2VJbmRleCk7
CisgICAgfQorfTsKKworTWV0YUFsbG9jYXRvclRlc3RzOjpIZWFwR3Jvd3RoTW9kZSBNZXRhQWxs
b2NhdG9yVGVzdHM6OmN1cnJlbnRIZWFwR3Jvd3RoTW9kZTsKK3NpemVfdCBNZXRhQWxsb2NhdG9y
VGVzdHM6OmFsbG93QWxsb2NhdGVQYWdlczsKK3NpemVfdCBNZXRhQWxsb2NhdG9yVGVzdHM6OnJl
cXVlc3RlZE51bVBhZ2VzOwordW5zaWduZWQgTWV0YUFsbG9jYXRvclRlc3RzOjphZGRpdGlvbmFs
UGFnZXNJbkhlYXA7CitWZWN0b3I8Ym9vbCwgMD4qIE1ldGFBbGxvY2F0b3JUZXN0czo6bWVtb3J5
TWFwOworVmVjdG9yPGJvb2wsIDA+KiBNZXRhQWxsb2NhdG9yVGVzdHM6OnBhZ2VNYXA7Citib29s
IE1ldGFBbGxvY2F0b3JUZXN0czo6YWxsb2NhdG9yRGVzdHJveWVkOworTWV0YUFsbG9jYXRvclRl
c3RzOjpTaW1wbGVUZXN0QWxsb2NhdG9yKiBNZXRhQWxsb2NhdG9yVGVzdHM6OmFsbG9jYXRvcjsK
KworLy8gUmVncmVzc2lvbiB0ZXN0cyBmb3IgTWV0YUFsbG9jYXRvciAtIHNpbXVsYXRlcyBjYXNl
cyB0aGF0IHdlJ3ZlIHNlZW4gZmFpbCBpbiB0aGUKKy8vIHBhc3QuCisKK2NsYXNzIE1ldGFBbGxv
Y2F0b3I2NGJpdFJlZ3Jlc3Npb25UZXN0cyB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3I2
NGJpdFJlZ3Jlc3Npb25UZXN0cygpIHsgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyB2b2lk
IHJ1blRlc3RzKCkKKyAgICB7CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgUlVOX1RFU1QocnVu
VHJlZVJvb3RDb3JydXB0aW9uVGVzdCgpKTsKKyNlbmRpZgorICAgIH0KKworcHJpdmF0ZToKKyNp
ZiBDUFUoWDg2XzY0KQorICAgIGNsYXNzIE51bGxUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFs
bG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBOdWxsVGVzdEFsbG9jYXRvcigpCisgICAg
ICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIG1hdGNoZXMgRml4ZWRWTVBvb2xBbGxvY2F0
b3IKKyAgICAgICAgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oMHg0NDAzMzljMDEwMDBsbHUpLCAxMDI0ICogMTAyNCAqIDEwMjQpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uo
c2l6ZV90JikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKikKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFn
ZUlzRnJlZSh2b2lkKikKKyAgICAgICAgeworICAgICAgICB9CisgICAgfTsKKworICAgIHN0YXRp
YyB2b2lkIHJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QoKQorICAgIHsKKyAgICAgICAgTnVsbFRl
c3RBbGxvY2F0b3IgYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgeworICAgICAgICAgICAg
VmVjdG9yPFJlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiwgMD4gaGFuZGxlczsKKyAgICAgICAg
ICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg3MzYpKTsKKyAgICAgICAgICAg
IGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgxNTUyMCkpOworICAgICAgICAgICAg
aGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDEwMjQpKTsKKyAgICAgICAgICAgIGhh
bmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg1NzYpKTsKKyAgICAgICAgICAgIGhhbmRs
ZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgyOTc2KSk7CisgICAgICAgICAgICBoYW5kbGVz
LmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoNDgwKSk7CisgICAgICAgICAgICBoYW5kbGVzLmFw
cGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMjI0MCkpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBl
bmQoYWxsb2NhdG9yLmFsbG9jYXRlKDk2KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChh
bGxvY2F0b3IuYWxsb2NhdGUoMzQ4OCkpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxs
b2NhdG9yLmFsbG9jYXRlKDM4NCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBURVNUX0FT
U0VSVF9FUVVBTChoYW5kbGVzLmF0KDYpLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigweDQ0MDM3OWMwMDEwMGxsdSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFu
ZGxlcy5hdCg2KS0+c2l6ZUluQnl0ZXMoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PigyMjQwKSk7Cisg
ICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDgpLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPigweDQ0MDMzOWMwNWQ2MGxsdSkpOworICAgICAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwoaGFuZGxlcy5hdCg4KS0+c2l6ZUluQnl0ZXMoKSwgc3RhdGljX2Nhc3Q8
c2l6ZV90PigzNDg4KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZXMuYXQoNiku
Y2xlYXIoKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXQoOCkuY2xlYXIoKTsKKyAgICAgICAgfQor
ICAgIH0KKyNlbmRpZgorfTsKKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgSlNDOjpp
bml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAgICBSVU5fU1VJVEUoUmVkQmxhY2tUcmVlVGVzdHM6
OnJ1blRlc3RzKCkpOworICAgIFJVTl9TVUlURShNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3Rz
KCkpOworICAgIFJVTl9TVUlURShNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHM6OnJ1
blRlc3RzKCkpOworICAgIHByaW50ZigiQWxsIHRlc3RzIHBhc3NlZC5cbiIpOworICAgIHJldHVy
biAwOworfQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2Nh
dG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1l
dGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwg
c2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICwg
bV9zdGFydChzdGFydCkKKyAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCit7CisgICAg
QVNTRVJUKGFsbG9jYXRvcik7CisgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc2l6ZUlu
Qnl0ZXMpOworfQorCitNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgp
Cit7CisgICAgaWYgKCFtX2FsbG9jYXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgaWYgKG1fc2l6ZUluQnl0
ZXMpIHsKKyAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kobV9zdGFy
dCwgbV9zaXplSW5CeXRlcyk7CisgICAgICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9t
UmVsZWFzZWRIYW5kbGUobV9zdGFydCwgbV9zaXplSW5CeXRlcyk7CisgICAgfQorfQorCit2b2lk
IE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCit7Cisg
ICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlm
ICghbV9hbGxvY2F0b3IpIHsKKyAgICAgICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVz
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tl
cigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisKKyAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2Nh
dG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBBU1NFUlQobmV3U2l6ZUlu
Qnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKG5ld1NpemVJbkJ5dGVzID09
IG1fc2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB1aW50cHRyX3QgZnJl
ZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbmV3U2l6ZUlu
Qnl0ZXM7CisgICAgc2l6ZV90IGZyZWVTaXplID0gbV9zaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5
dGVzOworICAgIHVpbnRwdHJfdCBmcmVlRW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CisgICAg
CisgICAgdWludHB0cl90IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1f
YWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSkgJiAtbV9hbGxvY2F0b3ItPm1fcGFnZVNpemU7Cisg
ICAgaWYgKGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKKyAgICAgICAgbV9hbGxv
Y2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmly
c3RDb21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFn
ZSAtIGZyZWVTdGFydCkpOworICAgIAorICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9t
UmVsZWFzZWRIYW5kbGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnJlZVN0YXJ0KSwgZnJlZVNp
emUpOworICAgIAorICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKK30KKworTWV0
YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpCisgICAg
OiBtX2FsbG9jYXRpb25HcmFudWxlKGFsbG9jYXRpb25HcmFudWxlKQorICAgICwgbV9wYWdlU2l6
ZShwYWdlU2l6ZSgpKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9ieXRlc1Jl
c2VydmVkKDApCisgICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCisjaWZuZGVmIE5ERUJVRworICAg
ICwgbV9tYWxsb2NCYWxhbmNlKDApCisjZW5kaWYKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1Jf
UFJPRklMRSkKKyAgICAsIG1fbnVtQWxsb2NhdGlvbnMoMCkKKyAgICAsIG1fbnVtRnJlZXMoMCkK
KyNlbmRpZgoreworICAgIG1fbG9jay5Jbml0KCk7CisgICAgCisgICAgZm9yIChtX2xvZ1BhZ2VT
aXplID0gMDsgbV9sb2dQYWdlU2l6ZSA8IDMyOyArK21fbG9nUGFnZVNpemUpIHsKKyAgICAgICAg
aWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXpl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxzaXplX3Q+KDEpIDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSk7CisgICAgCisgICAg
Zm9yIChtX2xvZ0FsbG9jYXRpb25HcmFudWxlID0gMDsgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA8
IDMyOyArK21fbG9nQWxsb2NhdGlvbkdyYW51bGUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFu
dWxlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9u
R3JhbnVsZSk7Cit9CisKK01ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKK3sKKyAgICBm
b3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsgbm9k
ZTspIHsKKyAgICAgICAgRnJlZVNwYWNlTm9kZSogbmV4dCA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5z
dWNjZXNzb3Iobm9kZSk7CisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7
CisgICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOworICAgICAgICBub2RlID0gbmV4dDsK
KyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVCghbV9tYWxsb2NCYWxhbmNlKTsKKyNl
bmRpZgorfQorCitQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6
OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fbG9jayk7CisKKyAgICBpZiAoIXNpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBzaXplSW5CeXRlcyA9IHJvdW5kVXAoc2l6ZUluQnl0ZXMpOworICAgIAorICAg
IHZvaWQqIHN0YXJ0ID0gZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplSW5CeXRlcyk7CisgICAg
aWYgKCFzdGFydCkgeworICAgICAgICBzaXplX3QgcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyA9IChz
aXplSW5CeXRlcyArIG1fcGFnZVNpemUgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICBz
aXplX3QgbnVtYmVyT2ZQYWdlcyA9IHJlcXVlc3RlZE51bWJlck9mUGFnZXM7CisgICAgICAgIAor
ICAgICAgICBzdGFydCA9IGFsbG9jYXRlTmV3U3BhY2UobnVtYmVyT2ZQYWdlcyk7CisgICAgICAg
IGlmICghc3RhcnQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChudW1iZXJPZlBhZ2VzID49IHJlcXVlc3RlZE51bWJlck9mUGFnZXMpOworICAgICAgICAK
KyAgICAgICAgc2l6ZV90IHJvdW5kZWRVcFNpemUgPSBudW1iZXJPZlBhZ2VzIDw8IG1fbG9nUGFn
ZVNpemU7CisgICAgICAgIAorICAgICAgICBBU1NFUlQocm91bmRlZFVwU2l6ZSA+PSBzaXplSW5C
eXRlcyk7CisgICAgICAgIAorICAgICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gcm91bmRlZFVwU2l6
ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb3VuZGVkVXBTaXplID4gc2l6ZUluQnl0ZXMpIHsK
KyAgICAgICAgICAgIHZvaWQqIGZyZWVTcGFjZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAg
ICAgICAgICAgIHNpemVfdCBmcmVlU3BhY2VTaXplID0gcm91bmRlZFVwU2l6ZSAtIHNpemVJbkJ5
dGVzOworICAgICAgICAgICAgYWRkRnJlZVNwYWNlKGZyZWVTcGFjZVN0YXJ0LCBmcmVlU3BhY2VT
aXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0
LCBzaXplSW5CeXRlcyk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCArPSBzaXplSW5CeXRlczsKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBtX251bUFsbG9jYXRpb25zKys7
CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhp
cywgc3RhcnQsIHNpemVJbkJ5dGVzKSk7Cit9CisKK01ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mg
TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQoreworICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9sb2NrKTsKKyAgICBTdGF0aXN0aWNzIHJlc3VsdDsKKyAgICByZXN1bHQuYnl0
ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOworICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVk
ID0gbV9ieXRlc1Jlc2VydmVkOworICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCA9IG1fYnl0ZXND
b21taXR0ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogTWV0YUFsbG9jYXRvcjo6
ZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgRnJlZVNw
YWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwoc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgQVNTRVJUKG5vZGUtPmtleSA+PSBzaXplSW5CeXRlcyk7CisgICAgCisg
ICAgbV9mcmVlU3BhY2VTaXplTWFwLnJlbW92ZShub2RlKTsKKyAgICAKKyAgICB2b2lkKiByZXN1
bHQ7CisgICAgCisgICAgaWYgKG5vZGUtPmtleSA9PSBzaXplSW5CeXRlcykgeworICAgICAgICAv
LyBFYXN5IGNhc2U6IHBlcmZlY3QgZml0LCBzbyBqdXN0IHJlbW92ZSB0aGUgbm9kZSBlbnRpcmVs
eS4KKyAgICAgICAgcmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgIAorICAgICAgICBtX2Zy
ZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUobm9kZS0+dmFsdWUpOworICAgICAgICBtX2Zy
ZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAg
ICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVHJ5
IHRvIGJlIGEgZ29vZCBjaXRpemVuIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgY2h1bmsg
b2YgbWVtb3J5CisgICAgICAgIC8vIHN0cmFkZGxlcyBhcyBmZXcgcGFnZXMgYXMgcG9zc2libGUs
IGJ1dCBvbmx5IGluc29mYXIgYXMgZG9pbmcgc28gd2lsbAorICAgICAgICAvLyBub3QgaW5jcmVh
c2UgZnJhZ21lbnRhdGlvbi4gVGhlIGludHVpdGlvbiBpcyB0aGF0IG1pbmltaXppbmcKKyAgICAg
ICAgLy8gZnJhZ21lbnRhdGlvbiBpcyBhIHN0cmljdGx5IGhpZ2hlciBwcmlvcml0eSB0aGFuIG1p
bmltaXppbmcgdGhlIG51bWJlcgorICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNl
IGluIHRoZSBsb25nIHJ1biwgc21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCisgICAgICAgIC8v
IGZld2VyIGNvbW1pdHRlZCBwYWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KKyAg
ICAgICAgCisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4obm9kZS0+dmFsdWUpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJf
dCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsg
bm9kZS0+a2V5IC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICAgICAgdWludHB0cl90
IGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAg
ICAgdWludHB0cl90IGZpcnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5IC0gc2l6ZUluQnl0ZXMpID4+
IG1fbG9nUGFnZVNpemU7CisgICAgICAgIAorICAgICAgICBpZiAobGFzdFBhZ2VGb3JMZWZ0QWxs
b2NhdGlvbiAtIGZpcnN0UGFnZSArIDEgPD0gbGFzdFBhZ2UgLSBmaXJzdFBhZ2VGb3JSaWdodEFs
bG9jYXRpb24gKyAxKSB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBpbiB0aGUgbGVmdCBzaWRl
IG9mIHRoZSByZXR1cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSByaWdodC4K
KyAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUtPnZhbHVlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUobm9kZS0+dmFsdWUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAg
ICAgICBub2RlLT52YWx1ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQobm9kZS0+dmFsdWUsIG5vZGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIHJpZ2h0IHNpemUg
b2YgdGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIGxlZnQ7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSBz
aXplSW5CeXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBub2RlLT5rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVT
cGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJlc3VsdCwgbm9kZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVl
U3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykK
K3sKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBtX251bUZyZWVzKys7
CisjZW5kaWYKKyAgICBtX2J5dGVzQWxsb2NhdGVkIC09IHNpemVJbkJ5dGVzOworICAgIGFkZEZy
ZWVTcGFjZShzdGFydCwgc2l6ZUluQnl0ZXMpOworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFk
ZEZyZXNoRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAg
U3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIG1fYnl0ZXNSZXNlcnZlZCArPSBz
aXplSW5CeXRlczsKKyAgICBhZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKwor
c2l6ZV90IE1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSgpCit7CisjaWZuZGVmIE5E
RUJVRworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBzaXplX3QgcmVz
dWx0ID0gMDsKKyAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVN
YXAuZmlyc3QoKTsgbm9kZTsgbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5zdWNjZXNzb3Iobm9k
ZSkpCisgICAgICAgIHJlc3VsdCArPSBub2RlLT5rZXk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNl
bHNlCisgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCit2b2lkIE1ldGFB
bGxvY2F0b3I6OmFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQor
eworICAgIHZvaWQqIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7CisgICAgCisgICAgSGFzaE1hcDx2
b2lkKiwgRnJlZVNwYWNlTm9kZSo+OjppdGVyYXRvciBsZWZ0TmVpZ2hib3IgPSBtX2ZyZWVTcGFj
ZUVuZEFkZHJlc3NNYXAuZmluZChzdGFydCk7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNl
Tm9kZSo+OjppdGVyYXRvciByaWdodE5laWdoYm9yID0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NN
YXAuZmluZChlbmQpOworICAgIAorICAgIGlmIChsZWZ0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VF
bmRBZGRyZXNzTWFwLmVuZCgpKSB7CisgICAgICAgIC8vIFdlIGhhdmUgc29tZXRoaW5nIHdlIGNh
biBjb2FsZXNjZSB3aXRoIG9uIHRoZSBsZWZ0LiAgUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFu
ZAorICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCisg
ICAgICAgIAorICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkgKyBsZWZ0TmVp
Z2hib3ItPnNlY29uZC0+a2V5KSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgCisg
ICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7Cisg
ICAgICAgIAorICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFsdWU7CisgICAg
ICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5rZXk7CisgICAgICAgIHZvaWQqIGxlZnRF
bmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bGVmdFN0YXJ0KSArIGxlZnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZWZ0RW5k
ID09IHN0YXJ0KTsKKyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUo
bGVmdE5vZGUpOworICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKGxlZnRF
bmQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGNoZWNrIGlmIHRoZXJlIGlzIGFsc28gc29t
ZXRoaW5nIHRvIGNvYWxlc2NlIHdpdGggb24gdGhlIHJpZ2h0LgorICAgICAgICBpZiAocmlnaHRO
ZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAg
ICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gIENv
YWxlc2NlIGJvdGggbGVmdCBhbmQKKyAgICAgICAgICAgIC8vIHJpZ2h0LCB3aGlsc3QgcmVtb3Zp
bmcgdGhlIHJpZ2h0IG5laWdoYm9yIGZyb20gdGhlIG1hcHMuCisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT5zZWNvbmQtPnZhbHVlID09IHJpZ2h0TmVpZ2hi
b3ItPmZpcnN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmln
aHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRT
dGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6
ZSA9IHJpZ2h0Tm9kZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkg
KyByaWdodFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFy
dCA9PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNpemUgKyBzaXplSW5C
eXRlcyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2Zy
ZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICBt
X2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJpZ2h0RW5kKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbGVmdE5vZGUtPmtleSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChsZWZ0Tm9k
ZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJpZ2h0RW5kLCBs
ZWZ0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5ICs9
IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVN
YXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01h
cC5hZGQoZW5kLCBsZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBDYW5ub3QgY29hbGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNj
ZSB3aXRoIHJpZ2h0LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9m
cmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5v
ZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZvaWQq
IHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVfdCBy
aWdodFNpemUgPSByaWdodE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0
U3RhcnQpICsgcmlnaHRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJp
Z2h0U3RhcnQgPT0gZW5kKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQsIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkg
KyBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAg
ICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOworICAg
ICAgICAgICAgcmlnaHROb2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0Tm9kZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxlc2NlIHdpdGgsIHNvIGNy
ZWF0ZSBhIG5ldyBmcmVlIHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5rZXkgPSBzaXplSW5CeXRlczsKKyAgICAgICAg
ICAgIG5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJl
ZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0
QWRkcmVzc01hcC5hZGQoc3RhcnQsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRB
ZGRyZXNzTWFwLmFkZChlbmQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1l
dGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90
IHNpemVJbkJ5dGVzKQoreworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1aW50cHRyX3Qg
bGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpICsgc2l6ZUlu
Qnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZvciAodWludHB0cl90IHBh
Z2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAgICAgICBIYXNo
TWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1h
cC5maW5kKHBhZ2UpOworICAgICAgICBpZiAoaXRlciA9PSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5k
KCkpIHsKKyAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQocGFnZSwgMSk7CisgICAg
ICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CisgICAgICAgICAgICBub3Rp
ZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICB9Cit9
CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRy
ZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAg
IHVpbnRwdHJfdCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVz
cykgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1
aW50cHRyX3QgcGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7Cisg
ICAgICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdl
T2NjdXBhbmN5TWFwLmZpbmQocGFnZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFnZU9j
Y3VwYW5jeU1hcC5lbmQoKSk7CisgICAgICAgIGlmICghLS0oaXRlci0+c2Vjb25kKSkgeworICAg
ICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIG1f
Ynl0ZXNDb21taXR0ZWQgLT0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2VJc0Zy
ZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpyb3VuZFVwKHNpemVfdCBz
aXplSW5CeXRlcykKK3sKKyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgo
KSAtIG1fYWxsb2NhdGlvbkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisgICAgICAgIENSQVNIKCk7
CisgICAgcmV0dXJuIChzaXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKSAmIC1t
X2FsbG9jYXRpb25HcmFudWxlOworfQorCitNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlKiBN
ZXRhQWxsb2NhdG9yOjphbGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAg
ICBtX21hbGxvY0JhbGFuY2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmVl
U3BhY2VOb2RlKj4oZmFzdE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9kZSkpKTsKK30KKwordm9p
ZCBNZXRhQWxsb2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKiBub2RlKQor
eworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsKKyNlbmRpZgorICAgIGZh
c3RGcmVlKG5vZGUpOworfQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2
b2lkIE1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBwcmludGYoIm51bSBhbGxv
Y2F0aW9ucyA9ICV1LCBudW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxvY2F0aW9ucywgbV9udW1G
cmVlcyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisg
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JfaAorI2RlZmluZSBXVEZf
TWV0YUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+Cisj
aW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UQ1NwaW5Mb2NrLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIEVOQUJMRV9NRVRBX0FMTE9DQVRPUl9QUk9GSUxF
IDAKKworY2xhc3MgTWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWV0
YUFsbG9jYXRvcik7CitwdWJsaWM6CisgICAgCisgICAgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxs
b2NhdGlvbkdyYW51bGUpOworICAgIAorICAgIHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKKyAg
ICAKKyAgICBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBz
aXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTm9uLWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5n
IGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0
dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZCgpIHsgcmV0
dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpIHsgcmV0
dXJuIG1fYnl0ZXNDb21taXR0ZWQ7IH0KKyAgICAKKyAgICAvLyBBdG9taWMgbWV0aG9kIGZvciBn
ZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAg
ICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkOworICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZl
ZDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkOworICAgIH07CisgICAgU3RhdGlzdGlj
cyBjdXJyZW50U3RhdGlzdGljcygpOworCisgICAgLy8gQWRkIG1vcmUgZnJlZSBzcGFjZSB0byB0
aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQorICAgIC8vIHRoZSBjb25zdHJ1
Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Igd2l0aGluIGEKKyAgICAv
LyBmaXhlZCBwb29sLgorICAgIHZvaWQgYWRkRnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNp
emVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBUaGlzIGlzIG1lYW50IG9ubHkgZm9yIGltcGxl
bWVudGluZyB0ZXN0cy4gTmV2ZXIgY2FsbCB0aGlzIGluIHJlbGVhc2UKKyAgICAvLyBidWlsZHMu
CisgICAgc2l6ZV90IGRlYnVnRnJlZVNwYWNlU2l6ZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRB
X0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICAKKyAgICAv
LyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFjZSwgYnV0IGRvbid0IGNvbW1pdC4gVGhpcyBtYXkg
cmV0dXJuIG1vcmUKKyAgICAvLyBwYWdlcyB0aGFuIHdlIGFza2VkLCBpbiB3aGljaCBjYXNlIG51
bVBhZ2VzIGlzIGNoYW5nZWQuCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNp
emVfdCYgbnVtUGFnZXMpID0gMDsKKyAgICAKKyAgICAvLyBDb21taXQgYSBwYWdlLgorICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSA9IDA7CisgICAgCisgICAgLy8g
VW5jb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQq
IHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBOT1RFOiBub25lIG9mIHRoZSBhYm92ZSBtZXRob2Rz
IGFyZSBjYWxsZWQgZHVyaW5nIGFsbG9jYXRvcgorICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0
IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZworICAgIC8vIGFzIHRo
ZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCisKK3ByaXZhdGU6CisgICAgCisgICAg
ZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CisgICAgCisgICAgdHlwZWRlZiBSZWRC
bGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJlZTsKKyAgICB0eXBlZGVmIFRyZWU6Ok5vZGUgRnJl
ZVNwYWNlTm9kZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxv
Y2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlv
biwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKKyAgICAvLyByZXR1cm5lZCBzcGFj
ZSBhcyBiZWluZyBpbi11c2UuCisgICAgdm9pZCogZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXpl
X3Qgc2l6ZUluQnl0ZXMpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBtZW1vcnkgZnJv
bSBhbiBhbGxvY2F0aW9uIGlzIGZyZWVkLgorICAgIHZvaWQgYWRkRnJlZVNwYWNlRnJvbVJlbGVh
c2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8v
IFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhZGRpbmcgZnJlZSBzcGFj
ZTsgaXQKKyAgICAvLyBpcyBjYWxsZWQgZnJvbSBib3RoIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNl
ZEhhbmRsZSBhbmQgZnJvbQorICAgIC8vIGFkZEZyZXNoRnJlZVNwYWNlLgorICAgIHZvaWQgYWRk
RnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8v
IE1hbmFnZW1lbnQgb2YgdXNlZCBzcGFjZS4KKyAgICAKKyAgICB2b2lkIGluY3JlbWVudFBhZ2VP
Y2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICB2b2lkIGRl
Y3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsK
KyAgICAKKyAgICAvLyBVdGlsaXRpZXMuCisgICAgCisgICAgc2l6ZV90IHJvdW5kVXAoc2l6ZV90
IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBGcmVlU3BhY2VOb2RlKiBhbGxvY0ZyZWVTcGFjZU5v
ZGUoKTsKKyAgICB2b2lkIGZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUqKTsKKyAgICAK
KyAgICBzaXplX3QgbV9hbGxvY2F0aW9uR3JhbnVsZTsKKyAgICB1bnNpZ25lZCBtX2xvZ0FsbG9j
YXRpb25HcmFudWxlOworICAgIHNpemVfdCBtX3BhZ2VTaXplOworICAgIHVuc2lnbmVkIG1fbG9n
UGFnZVNpemU7CisgICAgCisgICAgVHJlZSBtX2ZyZWVTcGFjZVNpemVNYXA7CisgICAgSGFzaE1h
cDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwOworICAg
IEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXA7
CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD4gbV9wYWdlT2NjdXBhbmN5TWFwOworICAg
IAorICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2
ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAgU3BpbkxvY2sgbV9s
b2NrOworCisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX21hbGxvY0JhbGFuY2U7CisjZW5k
aWYKKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHVuc2lnbmVkIG1f
bnVtQWxsb2NhdGlvbnM7CisgICAgdW5zaWduZWQgbV9udW1GcmVlczsKKyNlbmRpZgorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBXVEZfTWV0YUFsbG9jYXRvcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX01l
dGFBbGxvY2F0b3JIYW5kbGVfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisK
KyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgTWV0
YUFsbG9jYXRvcjsKKworY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTogcHVibGljIFJlZkNvdW50
ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4geworcHJpdmF0ZToKKyAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAg
ICAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMpCisgICAgICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAgICAgLCBtX3N0YXJ0KHN0YXJ0KQor
ICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICBBU1NF
UlQoc3RhcnQpOworICAgIH0KKyAgICAKK3B1YmxpYzoKKyAgICB+TWV0YUFsbG9jYXRvckhhbmRs
ZSgpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGNy
ZWF0ZVNlbGZNYW5hZ2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisg
ICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUoc3Rh
cnQsIHNpemVJbkJ5dGVzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQqIHN0YXJ0KCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3N0YXJ0OworICAgIH0KKyAgICAKKyAgICB2b2lkKiBlbmQoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihtX3N0YXJ0KSArIG1fc2l6ZUluQnl0ZXMpOworICAgIH0KKyAgICAg
ICAgCisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Np
emVJbkJ5dGVzOworICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBzaHJpbmsoc2l6ZV90IG5ld1Np
emVJbkJ5dGVzKTsKKyAgICAKKyAgICBib29sIGlzTWFuYWdlZCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gISFtX2FsbG9jYXRvcjsKKyAgICB9CisgICAgICAgIAorICAgIE1ldGFBbGxvY2F0b3Iq
IGFsbG9jYXRvcigpCisgICAgeworICAgICAgICBBU1NFUlQobV9hbGxvY2F0b3IpOworICAgICAg
ICByZXR1cm4gbV9hbGxvY2F0b3I7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgTWV0YUFsbG9jYXRvcjsKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9yKiBtX2FsbG9jYXRv
cjsKKyAgICB2b2lkKiBtX3N0YXJ0OworICAgIHNpemVfdCBtX3NpemVJbkJ5dGVzOworfTsKKwor
fQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBCYXNlZCBvbiBSZWQt
QmxhY2sgdHJlZSBpbXBsZW1lbnRhdGlvbiBieSBFbWluIE1hcnRpbmlhbgorICogLSBodHRwOi8v
d3d3Lm1pdC5lZHUvfmVtaW4vc291cmNlX2NvZGUvaW5kZXguaHRtbCAgICAgICAgIAorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
UmVkQmxhY2tUcmVlX2gKKyNkZWZpbmUgUmVkQmxhY2tUcmVlX2gKKworI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCisvLyBUaGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJlZSB3aXRoIHRoZSBmb2xs
b3dpbmcgcHJvcGVydGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Ygbm9kZXMgaW4gdGhlIHRy
ZWUgaXMgZW50aXJlbHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlvdSBhcmUgaW4gcG9zc2Vz
c2lvbiBvZiBhIHBvaW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0ZQorLy8gICBpdCBmcm9t
IHRoZSB0cmVlLiBUaGUgdHJlZSB3aWxsIHN1YnNlcXVlbnRseSBubyBsb25nZXIgaGF2ZSBhCisv
LyAgIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUuCisvLyAtIFRoZSBrZXkgdHlwZSBtdXN0IGltcGxl
bWVudCBvcGVyYXRvcjwgYW5kID09LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBl
bmFtZSBWYWx1ZVR5cGU+CitjbGFzcyBSZWRCbGFja1RyZWUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFJlZEJsYWNrVHJlZSk7CitwdWJsaWM6CisgICAgY2xhc3MgUmF3Tm9kZSB7CisgICAg
ICAgIGZyaWVuZCBjbGFzcyBSZWRCbGFja1RyZWU7CisgICAgICAgIAorICAgICAgICAvLyBOT1RF
OiB0aGVzZSBtZXRob2RzIHNob3VsZCBwYWNrIHRoZSBwYXJlbnQgYW5kIHJlZCBpbnRvIGEgc2lu
Z2xlCisgICAgICAgIC8vIHdvcmQuIEJ1dCBkb2luZyBzbyBhcHBlYXJzIHRvIHJldmVhbCBhIGJ1
ZyBpbiB0aGUgY29tcGlsZXIuCisgICAgICAgIFJhd05vZGUqIHBhcmVudCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgUmF3Tm9kZSogc2V0UGFyZW50KFJhd05vZGUqIG5ld1BhcmVudCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50ID0gbmV3UGFyZW50OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGlzUmVkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fcmVkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNldFJl
ZChib29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9yZWQgPSB2YWx1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogbV9sZWZ0OworICAgICAg
ICBSYXdOb2RlKiBtX3JpZ2h0OworICAgICAgICBSYXdOb2RlKiBtX3BhcmVudDsKKyAgICAgICAg
Ym9vbCBtX3JlZDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIE5vZGU6IHB1YmxpYyBSYXdOb2Rl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBWYWx1ZVR5cGUg
dmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUoKQorICAgIHsKKyAgICAgICAg
bV9uaWxTZW50aW5lbC5zZXRQYXJlbnQoJm1fbmlsU2VudGluZWwpOworICAgICAgICBtX25pbFNl
bnRpbmVsLm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVsLm1f
cmlnaHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50aW5lbC5zZXRSZWQoZmFs
c2UpOworICAgICAgICAKKyAgICAgICAgbV9yb290LnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7
CisgICAgICAgIG1fcm9vdC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290
Lm1fcmlnaHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290LnNldFJlZChmYWxzZSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAg
ICBpbnNlcnRIZWxwKG5vZGUpOworCisgICAgICAgIFJhd05vZGUqIHggPSBub2RlOworICAgICAg
ICBSYXdOb2RlKiB5OworICAgICAgICAKKyAgICAgICAgeC0+c2V0UmVkKHRydWUpOworICAgICAg
ICB3aGlsZSAoeC0+cGFyZW50KCktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIGlmICh4LT5wYXJl
bnQoKSA9PSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAg
IHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYg
KHktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAg
ICAgICAgICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX3JpZ2h0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAg
ICAgICB9IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5ID0geC0+cGFy
ZW50KCktPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlzUmVkKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4
ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJpZ2h0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5w
YXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVm
dFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIH0gCisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdCgpLT5tX2xlZnQtPnNldFJlZChmYWxz
ZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOwor
ICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIE5vZGUq
IHJlbW92ZShOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAgUmF3
Tm9kZSogeDsKKworICAgICAgICB5ID0gKHotPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpIHx8IHot
Pm1fcmlnaHQgPT0gbmlsU2VudGluZWwoKSkgPyB6IDogc3VjY2Vzc29ySW50ZXJuYWwoeik7Cisg
ICAgICAgIHggPSB5LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSA/IHktPm1fcmlnaHQgOiB5LT5t
X2xlZnQ7CisgICAgICAgIGlmIChyb290KCkgPT0geC0+c2V0UGFyZW50KHktPnBhcmVudCgpKSkg
eworICAgICAgICAgICAgcm9vdCgpLT5tX2xlZnQgPSB4OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHkgPT0geS0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgICAgICB5
LT5wYXJlbnQoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB5LT5wYXJlbnQoKS0+bV9yaWdodCA9IHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgIT0g
eikgeworICAgICAgICAgICAgQVNTRVJUKHkgIT0gbmlsU2VudGluZWwoKSk7CisKKyAgICAgICAg
ICAgIGlmICgheS0+aXNSZWQoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVGaXhVcCh4KTsKKyAg
CisgICAgICAgICAgICB5LT5tX2xlZnQgPSB6LT5tX2xlZnQ7CisgICAgICAgICAgICB5LT5tX3Jp
Z2h0ID0gei0+bV9yaWdodDsKKyAgICAgICAgICAgIHktPnNldFBhcmVudCh6LT5wYXJlbnQoKSk7
CisgICAgICAgICAgICB5LT5zZXRSZWQoei0+aXNSZWQoKSk7CisgICAgICAgICAgICB6LT5tX2xl
ZnQtPnNldFBhcmVudCh6LT5tX3JpZ2h0LT5zZXRQYXJlbnQoeSkpOworICAgICAgICAgICAgaWYg
KHogPT0gei0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgICAgICB6LT5wYXJlbnQoKS0+
bV9sZWZ0ID0geTsgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgei0+cGFyZW50
KCktPm1fcmlnaHQgPSB5OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCF5LT5p
c1JlZCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZpeFVwKHgpOworICAgICAgICB9CisgIAor
ICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2Vu
dGluZWwoKS0+aXNSZWQoKSk7CisKKyAgICAgICAgcmV0dXJuIHo7CisgICAgfQorICAgIAorICAg
IE5vZGUqIGZpcnN0KCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUgPSByb290KCktPm1f
bGVmdDsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmF3Tm9kZSogbmV4
dCA9IG5vZGUtPm1fbGVmdDsKKyAgICAgICAgICAgIGlmIChuZXh0ID09IG5pbFNlbnRpbmVsKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShub2RlKTsKKyAgICAgICAgICAgIG5vZGUg
PSBuZXh0OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIE5vZGUqIGxhc3QoKQorICAgIHsK
KyAgICAgICAgUmF3Tm9kZSogbm9kZSA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBpZiAobm9k
ZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxl
ICh0cnVlKSB7CisgICAgICAgICAgICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+bV9yaWdodDsKKyAg
ICAgICAgICAgIGlmIChuZXh0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFzTm9kZShub2RlKTsKKyAgICAgICAgICAgIG5vZGUgPSBuZXh0OworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIE5vZGUqIHN1Y2Nlc3NvcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgUmF3Tm9kZSogcmVzdWx0ID0gc3VjY2Vzc29ySW50ZXJuYWwobm9kZSk7CisgICAgICAgIGlm
IChyZXN1bHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gYXNOb2RlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHByZWRlY2Vz
c29yKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4ID0gbm9kZTsKKyAgICAg
ICAgUmF3Tm9kZSogeTsKKworICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSAoeSA9IHgtPm1f
bGVmdCkpIHsKKyAgICAgICAgICAgIHdoaWxlICh5LT5tX3JpZ2h0ICE9IG5pbFNlbnRpbmVsKCkp
CisgICAgICAgICAgICAgICAgeSA9IHktPm1fcmlnaHQ7CisgICAgICAgICAgICByZXR1cm4gYXNO
b2RlKHkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgeSA9IHgtPnBhcmVudCgpOwor
ICAgICAgICAgICAgd2hpbGUgKHggPT0geS0+bV9sZWZ0KSB7IAorICAgICAgICAgICAgICAgIGlm
ICh5ID09IHJvb3QoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICAgICAgeCA9IHk7CisgICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHkgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBhc05vZGUoeSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgTm9kZSogZmluZEV4YWN0KGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIHggPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgaWYgKHggPT0g
bmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB3aGlsZSAoIShh
c05vZGUoeCktPmtleSA9PSBrZXkpKSB7CisgICAgICAgICAgICBpZiAoYXNOb2RlKHgpLT5rZXkg
PiBrZXkpCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fbGVmdDsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB4ID0geC0+bV9yaWdodDsKKyAgICAgICAgICAgIGlmICh4ID09IG5p
bFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIGFzTm9kZSh4KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcmVtb3ZlKGNvbnN0
IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIE5vZGUqIHJlc3VsdCA9IGZpbmRFeGFjdChr
ZXkpOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gcmVtb3ZlKHJlc3VsdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZpbmRMZWFz
dEdyZWF0ZXJUaGFuT3JFcXVhbChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBS
YXdOb2RlKiBjdXJyZW50ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIFJhd05vZGUqIGJlc3Qg
PSAwOworICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBuaWxTZW50aW5lbCgpKSB7CisgICAgICAg
ICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJl
dHVybiBhc05vZGUoY3VycmVudCk7CisgICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5r
ZXkgPCBrZXkpCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fcmlnaHQ7Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VycmVudDsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9sZWZ0OworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoYmVzdCk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIGZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAg
eworICAgICAgICBSYXdOb2RlKiBjdXJyZW50ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIFJh
d05vZGUqIGJlc3QgPSAwOworICAgICAgICB3aGlsZSAoY3VycmVudCAhPSBuaWxTZW50aW5lbCgp
KSB7CisgICAgICAgICAgICBpZiAoYXNOb2RlKGN1cnJlbnQpLT5rZXkgPT0ga2V5KQorICAgICAg
ICAgICAgICAgIHJldHVybiBhc05vZGUoY3VycmVudCk7CisgICAgICAgICAgICBpZiAoYXNOb2Rl
KGN1cnJlbnQpLT5rZXkgPCBrZXkpIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VycmVudDsK
KyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9sZWZ0OworICAgICAgICAgICAg
fSBlbHNlIAorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX3JpZ2h0OworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoYmVzdCk7CisgICAgfQorICAgIAorICAgIC8v
IFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24uCisgICAgc2l6ZV90IHNpemUoKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IGZp
cnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBzdWNjZXNzb3IoY3VycmVudCkpCisgICAgICAgICAg
ICByZXN1bHQrKzsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBpcyBhbiBPKDEpIG9wZXJhdGlvbi4KKyAgICBib29sIGlzRW1wdHkoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHJvb3QoKS0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCk7CisgICAgfQorICAg
IAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIW5pbFNlbnRp
bmVsKCktPmlzUmVkKCkpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShyb290KCkt
Pm1fbGVmdCk7CisgICAgICAgIEFTU0VSVChyb290KCktPm1fcmlnaHQgPT0gbmlsU2VudGluZWwo
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICBwcmludGYo
IlRyZWUgYXQgJXA6XG4iLCB0aGlzKTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uocm9vdCgpLT5tX2xl
ZnQpOworICAgICAgICBwcmludGYoIiAgIHJvb3Q6ICVwLCAlcCwgJXBcbiIsIHJvb3QoKS0+bV9s
ZWZ0LCByb290KCktPm1fcmlnaHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJvb3QoKS0+cGFy
ZW50QW5kUmVkKSk7CisgICAgICAgIHByaW50ZigiICAgIG5pbDogJXAsICVwLCAlcFxuIiwgbmls
U2VudGluZWwoKS0+bV9sZWZ0LCBuaWxTZW50aW5lbCgpLT5tX3JpZ2h0LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihuaWxTZW50aW5lbCgpLT5wYXJlbnRBbmRSZWQpKTsKKyAgICB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICB2b2lkIGxlZnRSb3RhdGUoUmF3Tm9kZSogeCkKKyAgICB7CisgICAg
ICAgIFJhd05vZGUqIHk7CisKKyAgICAgICAgeSA9IHgtPm1fcmlnaHQ7CisgICAgICAgIHgtPm1f
cmlnaHQgPSB5LT5tX2xlZnQ7CisKKyAgICAgICAgaWYgKHktPm1fbGVmdCAhPSBuaWxTZW50aW5l
bCgpKQorICAgICAgICAgICAgeS0+bV9sZWZ0LT5zZXRQYXJlbnQoeCk7CisgIAorICAgICAgICB5
LT5zZXRQYXJlbnQoeC0+cGFyZW50KCkpOworCisgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgp
LT5tX2xlZnQpCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9sZWZ0ID0geTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeC0+cGFyZW50KCktPm1fcmlnaHQgPSB5OworICAgICAgICB5LT5t
X2xlZnQgPSB4OworICAgICAgICB4LT5zZXRQYXJlbnQoeSk7CisKKyAgICAgICAgQVNTRVJUKCFu
aWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCByaWdodFJvdGF0
ZShSYXdOb2RlKiB5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeDsKKworICAgICAgICB4ID0g
eS0+bV9sZWZ0OworICAgICAgICB5LT5tX2xlZnQgPSB4LT5tX3JpZ2h0OworCisgICAgICAgIGlm
IChuaWxTZW50aW5lbCgpICE9IHgtPm1fcmlnaHQpCisgICAgICAgICAgICB4LT5tX3JpZ2h0LT5z
ZXRQYXJlbnQoeSk7CisKKyAgICAgICAgeC0+c2V0UGFyZW50KHktPnBhcmVudCgpKTsKKyAgICAg
ICAgaWYgKHkgPT0geS0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgIHktPnBhcmVudCgp
LT5tX2xlZnQgPSB4OworICAgICAgICBlbHNlCisgICAgICAgICAgICB5LT5wYXJlbnQoKS0+bV9y
aWdodCA9IHg7CisgICAgICAgIHgtPm1fcmlnaHQgPSB5OworICAgICAgICB5LT5zZXRQYXJlbnQo
eCk7CisKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBpbnNlcnRIZWxwKE5vZGUqIHopCisgICAgeworICAgICAgICBSYXdOb2Rl
KiB4OworICAgICAgICBSYXdOb2RlKiB5OworICAKKyAgICAgICAgei0+bV9sZWZ0ID0gei0+bV9y
aWdodCA9IG5pbFNlbnRpbmVsKCk7CisgICAgICAgIHkgPSByb290KCk7CisgICAgICAgIHggPSBy
b290KCktPm1fbGVmdDsKKyAgICAgICAgd2hpbGUgKHggIT0gbmlsU2VudGluZWwoKSkgeworICAg
ICAgICAgICAgeSA9IHg7CisgICAgICAgICAgICBpZiAoei0+a2V5IDwgYXNOb2RlKHgpLT5rZXkp
CisgICAgICAgICAgICAgICAgeCA9IHgtPm1fbGVmdDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB4ID0geC0+bV9yaWdodDsKKyAgICAgICAgfQorICAgICAgICB6LT5zZXRQYXJl
bnQoeSk7CisgICAgICAgIGlmICh5ID09IHJvb3QoKSB8fCB6LT5rZXkgPCBhc05vZGUoeSktPmtl
eSkKKyAgICAgICAgICAgIHktPm1fbGVmdCA9IHo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHktPm1fcmlnaHQgPSB6OworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQo
KSk7CisgICAgfQorICAgIAorICAgIFJhd05vZGUqIHN1Y2Nlc3NvckludGVybmFsKFJhd05vZGUq
IHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICAKKyAgICAgICAgaWYgKG5p
bFNlbnRpbmVsKCkgIT0gKHkgPSB4LT5tX3JpZ2h0KSkgeworICAgICAgICAgICAgd2hpbGUgKHkt
Pm1fbGVmdCAhPSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHkgPSB5LT5tX2xlZnQ7
CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHkg
PSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIHdoaWxlICh4ID09IHktPm1fcmlnaHQpIHsKKyAg
ICAgICAgICAgICAgICB4ID0geTsKKyAgICAgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeSA9PSByb290KCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG5pbFNlbnRpbmVsKCk7CisgICAgICAgICAgICByZXR1cm4geTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZUZpeFVwKFJhd05vZGUqIHgpCisgICAgewor
ICAgICAgICBSYXdOb2RlKiByZWFsUm9vdCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdO
b2RlKiB3OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF4LT5pc1JlZCgpICYmIHJlYWxSb290
ICE9IHgpIHsKKyAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAg
ICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAg
aWYgKHctPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKDApOworICAg
ICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9
IHgtPnBhcmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBpZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAg
ICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4
ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB3LT5tX2xlZnQtPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5z
ZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh3KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCkt
PmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNl
KTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAgICAg
ICAgIGlmICh3LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5pc1JlZCgp
KSB7IAorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXctPm1fbGVmdC0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUo
dyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFy
ZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVk
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgeC0+c2V0UmVkKGZhbHNlKTsKKworICAgICAgICBBU1NFUlQo
IXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQo
KSk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVu
Y3lSZWN1cnNlKFJhd05vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZSA9PSBuaWxT
ZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobm9kZS0+aXNSZWQo
KSkgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX2xlZnQtPmlzUmVkKCkpOworICAgICAg
ICAgICAgQVNTRVJUKCFub2RlLT5tX3JpZ2h0LT5pc1JlZCgpKTsKKyAgICAgICAgfQorICAgICAg
ICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX2xlZnQpOworICAgICAgICBjaGVja0Nv
bnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX3JpZ2h0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dW1wUmVjdXJzZShSYXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmls
U2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpbnRmKCIgICBub2Rl
OiAlcFxuIiwgbm9kZSk7CisgICAgICAgIHByaW50ZigiICAgICAgY29sb3IgPSAlc1xuIiwgbm9k
ZS0+aXNSZWQoKSA/ICJyZWQiIDogImJsYWNrIik7CisgICAgICAgIHByaW50ZigiICAgICAgbGVm
dCAgPSAlcFxuIiwgbm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICByaWdodCA9
ICVwXG4iLCBub2RlLT5tX3JpZ2h0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9sZWZ0
KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7CisgICAgfQorI2VuZGlmCisg
ICAgCisgICAgUmF3Tm9kZSogcm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gJm1fcm9vdDsK
KyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogbmlsU2VudGluZWwoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICZtX25pbFNlbnRpbmVsOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBhc05vZGUoUmF3
Tm9kZSogcmF3Tm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IHJvb3QoKSk7
CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IG5pbFNlbnRpbmVsKCkpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Tm9kZSo+KHJhd05vZGUpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2Rl
IG1fcm9vdDsKKyAgICBSYXdOb2RlIG1fbmlsU2VudGluZWw7Cit9OworCit9CisKKyNlbmRpZgor
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJKHJldmlzaW9uIDkzOTEwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2
ICsxNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAgICB3dGYv
TUQ1LmNwcCBcCiAgICAgd3RmL01haW5UaHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFsbG9jYXRv
ci5jcHAgXAogICAgIHd0Zi9OdWxsUHRyLmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291cmNlLmNw
cCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgYmFja3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZp
bmFsaXplIHRoZSBjb2RlLgotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERh
dGEsIHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdT
dGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChs
aW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNr
KG1fc2hvdWxkRmFsbEJhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFy
ckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
aAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklU
LmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQg
ZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5n
dGgsIGludCogb3V0cHV0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
WWFyckpJVENvZGU+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3Rh
cnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFy
ckpJVENvZGU+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgb3V0cHV0KTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0g
ICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpOyB9CisgICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0No
YW5nZUxvZwkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0
b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mg
b2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUg
YmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5j
ZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBw
ZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9z
ZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9E
UmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVu
Y2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAg
ICBoYW5kbGUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oOiBBZGRlZC4KKwogMjAxMS0wOC0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5l
bmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIEpTIG9iamVjdHMgdG8gYWxsb2Nh
dGUgaW4gc3RhdGljIGNyZWF0ZSBtZXRob2RzIHJhdGhlciB0aGFuIGNvbnN0cnVjdG9ycwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2Nh
dG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTEwKQor
KysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAg
ICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5k
aXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEg
YmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisg
ICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1l
bW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwg
bm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBB
VkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAg
ICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSBy
ZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LCBzaW5jZSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIEZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorCiAyMDExLTA4LTI2ICBO
ZWQgSG9sYnJvb2sgIDxuaG9sYnJvb2tAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRlclRleHQ6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgc2hvdWxkIG1lYXN1cmUgd29yZHMgd2l0
aCB0cmFpbGluZyBzcGFjZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFu
ZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29y
ZS9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105411</attachid>
            <date>2011-08-26 14:45:06 -0700</date>
            <delta_ts>2011-08-30 14:01:17 -0700</delta_ts>
            <desc>work in progress - fix more style</desc>
            <filename>metaalloc_patch_12.diff</filename>
            <type>text/plain</type>
            <size>228307</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ0IEBA
CisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IhKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAq
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmFkZHJl
c3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c3RhcnQpOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0
RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6
CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Omdl
dENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChwcmludFZhbHVlKToKKyAgICAg
ICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6UmVkQmxh
Y2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQYWlyKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3Rz
OjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFj
dCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6cmVtb3ZlKToKKyAgICAgICAgKFJlZEJs
YWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6YXNz
ZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6dGVzdERy
aXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3Rz
Ojp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE9uZUFs
bG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RTaW1wbGVGdWxsQ29hbGVzY2UpOgor
ICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0RklGT0FsbG9jKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JU
ZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6
OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFNocmluayk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2Nl
KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6c2V0VXApOgorICAgICAgICAoTWV0YUFs
bG9jYXRvclRlc3RzOjp0ZWFyRG93bik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmFs
bG9jYXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6ZnJlZSk6CisgICAgICAgIChN
ZXRhQWxsb2NhdG9yVGVzdHM6Om5vdGlmeUZyZWUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRl
c3RzOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmNvbmZpcm0p
OgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpjb25maXJtSGlnaFdhdGVybWFyayk6Cisg
ICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6Ynl0ZXNDb21taXR0ZWQpOgorICAgICAgICAoTWV0YUFsbG9jYXRv
clRlc3RzOjpieXRlU3RhdGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpwYWdlU3Rh
dGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpNZXRhQWxs
b2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0
UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yNjRiaXRS
ZWdyZXNzaW9uVGVzdHM6OnJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QpOgorICAgICAgICAobWFp
bik6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6On5N
ZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cm91
bmRVcCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0Fs
bG9jYXRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzUmVzZXJ2ZWQpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0NvbW1pdHRlZCk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUmVkQmxhY2tUcmVlLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OnBhcmVudCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjppc1JlZCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6UmF3Tm9kZTo6c2V0UmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSZWRCbGFj
a1RyZWUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpm
aXJzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpw
cmVkZWNlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEV4YWN0KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbCk6
CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Y2hlY2tDb25z
aXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZHVtcCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6bGVmdFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6cmlnaHRSb3RhdGUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydEhlbHAp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnN1Y2Nlc3NvckludGVybmFsKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmVGaXhVcCk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6Y2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmR1bXBSZWN1cnNlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyb290KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpuaWxTZW50aW5lbCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6YXNOb2RlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKiB5YXJy
L1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmdldEFkZHIpOgorCiAyMDExLTA4
LTI2ICBDaGFvLXlpbmcgRnUgIDxmdUBtaXBzLmNvbT4KIAogICAgICAgICBGaXggTUlQUyBwYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5nIGNvcHkpCkBAIC01MDcsNiArNTA3LDkg
QEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NYXRoRXh0cmFzLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRh
QWxsb2NhdG9yLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL05vbkNvcHlpbmdTb3J0LmggXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvTm9uY29weWFibGUuaCBcCkBAIC01MzksNiArNTQyLDcgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21O
dW1iZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlclNlZWQuaCBcCisJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9SZWZDb3VudGVkLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291
bnRlZExlYWtDb3VudGVyLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3Vu
dGVkTGVha0NvdW50ZXIuaCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5leHAJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtNDAyLDYgKzQwMiwxMiBAQCBfX1pOM1dU
RjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9FUzBfUEtjCiBfX1pOM1dURjEyZGV0YWNoVGhyZWFkRWoK
IF9fWk4zV1RGMTJpc01haW5UaHJlYWRFdgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CitfX1pO
M1dURjEzTWV0YUFsbG9jYXRvcjE3YWRkRnJlc2hGcmVlU3BhY2VFUHZtCitfX1pOM1dURjEzTWV0
YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9y
OGFsbG9jYXRlRW0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQorX19aTjNXVEYxM01ldGFB
bGxvY2F0b3JEMUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckQyRXYKIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzYsNiArNDQyLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNSw2ICs1MjMsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzU3LDYgKzc1NywxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTg5Nyw2ICs5MDksMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDYgKzI3LDcgQEAKIAkJCQkxNDEyMTRCRjBBNDkxOTBFMDA0ODAyNTUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk5MzJGNUJFOTA4MjJBMUM3MDA3MzY5NzUgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQkxNEJENTlDNzBBM0U4RkE0MDBCQUY1OUMgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJCQkwRjk2M0IyOTEzRjc2NEQxMDAwMkQ5QjIgLyogUEJY
VGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCSk7CiAJCQluYW1lID0gQWxsOwogCQkJcHJvZHVjdE5h
bWUgPSBBbGw7CkBAIC00OSw2ICs1MCwxMyBAQAogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQg
LyogT3duRmFzdE1hbGxvY1B0ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEJERkZBRDEwRkM2MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYy
OEEyOTExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyog
U2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJCTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNp
bWFsTnVtYmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsK
KwkJMEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBp
biBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjBBNENG
MDRCM0IzRTcwMDhBRTk1MiAvKiBDb3JlRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBG
OTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJh
bWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJB
MUM3MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRjk2M0Iy
NTEzRjc1MzMzMDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0
dGVzdHMuY3BwICovOyB9OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tU
cmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2
M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3Bw
ICovOyBzZXR0aW5ncyA9IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7
IH07IH07CisJCTBGOTYzQjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1
M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRh
QWxsb2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzcw
MDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcw
MDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2
M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyog
VmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTYyMiw2ICs2MzAsMjAgQEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAq
LwogCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQkwRjk2M0Ix
NDEzRjc1MzA0MDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsK
KwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gOTMyRjVCM0UwODIyQTFDNzAwNzM2OTc1OworCQkJ
cmVtb3RlSW5mbyA9IEphdmFTY3JpcHRDb3JlOworCQl9OworCQkwRjk2M0IyODEzRjc2NEQxMDAw
MkQ5QjIgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFp
bmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFB
QzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUds
b2JhbElEU3RyaW5nID0gMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIyOworCQkJcmVtb3RlSW5mbyA9
IHVuaXR0ZXN0czsKKwkJfTsKIAkJMTQxMjExMzUwQTQ4Nzk2MTAwNDgwMjU1IC8qIFBCWENvbnRh
aW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJ
CWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9i
amVjdCAqLzsKQEAgLTY4MSw2ICs3MDMsMjYgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJv
eHkgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24g
Ki8KKwkJMEY5NjNCMUExM0Y3NTMwNDAwMDJEOUIyIC8qIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8g
PSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNr
ID0gMjE0NzQ4MzY0NzsKKwkJCWRzdFBhdGggPSAiIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAx
NjsKKwkJCWZpbGVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSAiQ29weSBTdXBwb3J0IFNjcmlwdCI7
CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMEY5
NjNCMUMxM0Y3NTMwNDAwMDJEOUIyIC8qIEluc3RhbGwgU3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJ
CQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gODsK
KwkJCWRzdFBhdGggPSAiJChTWVNURU1fTElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrL1ZlcnNpb25zL0EvUmVzb3VyY2VzIjsKKwkJCWRzdFN1YmZvbGRlclNw
ZWMgPSAwOworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJbmFtZSA9ICJJbnN0YWxsIFN1cHBvcnQg
U2NyaXB0IjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOworCQl9
OwogCQk1REJCMTUxMTEzMUQwQjEzMDA1NkFEMzYgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9
IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwpAQCAtNzM0LDYgKzc3NiwxMiBAQAogCQkwQkRGRkFENDBGQzYxNzEwMDBE
NjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZDb3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENyb3NzVGhyZWFkUmVmQ291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyOTQ3OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxO
dW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbE51
bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjExMTNGNzUyRjcw
MDAyRDlCMiAvKiB1bml0dGVzdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gdW5pdHRlc3RzLmNwcDsgcGF0aCA9IHRlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVu
aXR0ZXN0cyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0g
dW5pdHRlc3RzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjk2M0Iy
NjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBNZXRhQWxsb2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
NzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJE
OUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBW
YWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzUsNiArMTM4
MywxNSBAQAogLyogRW5kIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE3MTNGNzUzMDQwMDAy
RDlCMiAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAorCQkJCTBGOTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQxMjExMUUwQTQ4NzkzQzAwNDgw
MjU1IC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0xMzgzLDYgKzE0NDAsNyBA
QAogCQkJCTkzMkY1QkUxMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJMTQxMjExMjAw
QTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFG
NTlDIC8qIHRlc3RhcGkgKi8sCisJCQkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0
ZXN0cyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMTQ0OCw5ICsxNTA2LDE4IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2Vz
VGFicyA9IDA7CiAJCX07CisJCTBGOTYzQjBGMTNGNzUyQjIwMDAyRDlCMiAvKiB1bml0ICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IxMTEzRjc1
MkY3MDAwMkQ5QjIgLyogdW5pdHRlc3RzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gdW5pdDsK
KwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4
MDI1NSAvKiB0ZXN0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEY5NjNCMEYxM0Y3NTJCMjAwMDJEOUIyIC8qIHVuaXQgKi8sCiAJCQkJMTQ0MDA1MTcw
QTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFG
NTlDIC8qIHRlc3RhcGkuYyAqLywKIAkJCQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVz
dGFwaS5qcyAqLywKQEAgLTE2NjQsNiArMTczMSwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3
NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICov
LAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywK
KwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAorCQkJ
CTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkwNkQz
NThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5
MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2Rl
ICovLApAQCAtMjI0NSw2ICsyMzE2LDkgQEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcg
LyogQVJNQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAw
NkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
Rjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY5NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1Ry
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzgxNTBBMTQwNDNCRjUwMENGQTYwMyAvKiBXcml0
ZUJhcnJpZXJTdXBwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNzBFMTZG
NUNEMDBCMzQ0NjAgLyogQXJyYXlQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjYwNyw2
ICsyNjgxLDI1IEBACiAvKiBFbmQgUEJYSGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAv
KiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQgc2VjdGlvbiAqLworCQkwRjk2M0IxMjEzRjc1MzA0MDAw
MkQ5QjIgLyogdW5pdHRlc3RzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3RzIiAqLzsK
KwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGOTYzQjE1MTNGNzUzMDQwMDAyRDlCMiAvKiBTb3Vy
Y2VzICovLAorCQkJCTBGOTYzQjE3MTNGNzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdvcmtzICovLAor
CQkJCTBGOTYzQjFBMTNGNzUzMDQwMDAyRDlCMiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAor
CQkJCTBGOTYzQjFDMTNGNzUzMDQwMDAyRDlCMiAvKiBJbnN0YWxsIFN1cHBvcnQgU2NyaXB0ICov
LAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAor
CQkJCTBGOTYzQjEzMTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAor
CQkJKTsKKwkJCW5hbWUgPSB1bml0dGVzdHM7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJ
CQlwcm9kdWN0UmVmZXJlbmNlID0gMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0
cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJ
CX07CiAJCTE0MTIxMTFGMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovID0gewogCQkJaXNh
ID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0MTIxMTM5
MEE0ODc5ODQwMDQ4MDI1NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2
ZVRhcmdldCAibWluaWRvbSIgKi87CkBAIC0yNzE3LDYgKzI4MTAsNyBAQAogCQkJCTE0MTIxMTFG
MEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2Mg
Ki8sCisJCQkJMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLywKIAkJCSk7
CiAJCX07CiAvKiBFbmQgUEJYUHJvamVjdCBzZWN0aW9uICovCkBAIC0yODMxLDYgKzI5MjUsMTQg
QEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCTBGOTYzQjE1MTNGNzUzMDQwMDAy
RDlCMiAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNC
MjUxM0Y3NTMzMzAwMDJEOUIyIC8qIHVuaXR0ZXN0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7
CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQx
MjExMUQwQTQ4NzkzQzAwNDgwMjU1IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yODU1
LDYgKzI5NTcsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFj
dGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMkMxM0Y4NTNF
QzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1
MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VDMzc2MDA0MjdBNDggLyogQXJnTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTMwNjQsNiArMzE2NywxNiBAQAogLyogRW5kIFBCWFNvdXJj
ZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBz
ZWN0aW9uICovCisJCTBGOTYzQjEzMTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRl
bmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDkz
MkY1QjNFMDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZSAqLzsKKwkJCXRhcmdldFBy
b3h5ID0gMEY5NjNCMTQxM0Y3NTMwNDAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAq
LzsKKwkJfTsKKwkJMEY5NjNCMjkxM0Y3NjREMTAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEY5
NjNCMTIxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLzsKKwkJCXRhcmdldFByb3h5ID0g
MEY5NjNCMjgxM0Y3NjREMTAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJ
fTsKIAkJMTQxMjExMzYwQTQ4Nzk2MTAwNDgwMjU1IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gOTMyRjVCM0Uw
ODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlICovOwpAQCAtMzEwNyw2ICszMjIwLDM4
IEBACiAvKiBFbmQgUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhD
QnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KKwkJMEY5NjNCMUYxM0Y3NTMwNDAwMDJEOUIy
IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0
QVBJLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUg
PSB1bml0dGVzdHM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkwRjk2M0IyMDEz
Rjc1MzA0MDAwMkQ5QjIgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJUFJPRFVDVF9OQU1FID0gdW5pdHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOwor
CQl9OworCQkwRjk2M0IyMTEzRjc1MzA0MDAwMkQ5QjIgLyogUHJvZmlsaW5nICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB1bml0dGVzdHM7CisJCQl9Owor
CQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEY5NjNCMjIxM0Y3NTMwNDAwMDJEOUIyIC8q
IFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJh
c2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRl
c3RBUEkueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFN
RSA9IHVuaXR0ZXN0czsKKwkJCX07CisJCQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMTQx
MjExM0EwQTQ4Nzk4NDAwNDgwMjU1IC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENv
bmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewpAQCAtMzMyMSw2ICszNDY2LDE3IEBA
CiAvKiBFbmQgWENCdWlsZENvbmZpZ3VyYXRpb24gc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0Nv
bmZpZ3VyYXRpb25MaXN0IHNlY3Rpb24gKi8KKwkJMEY5NjNCMUUxM0Y3NTMwNDAwMDJEOUIyIC8q
IEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ1bml0dGVzdHMi
ICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJh
dGlvbnMgPSAoCisJCQkJMEY5NjNCMUYxM0Y3NTMwNDAwMDJEOUIyIC8qIERlYnVnICovLAorCQkJ
CTBGOTYzQjIwMTNGNzUzMDQwMDAyRDlCMiAvKiBSZWxlYXNlICovLAorCQkJCTBGOTYzQjIxMTNG
NzUzMDQwMDAyRDlCMiAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEY5NjNCMjIxM0Y3NTMwNDAwMDJE
OUIyIC8qIFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zp
c2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJ
fTsKIAkJMTQxMjExMzkwQTQ4Nzk4NDAwNDgwMjU1IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlz
dCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJtaW5pZG9tIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmln
dXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lv
biA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVm
ZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCiAKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIK
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5o
PgpAQCAtMTI4LDE5ICsxMjksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gQXNzZW1ibGVyTGFiZWwobV9pbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkKiBl
eGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBh
bGxvY2F0b3IpCisgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhl
Y3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoIW1faW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
ICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2MoZ2xvYmFsRGF0YSwgbV9pbmRleCk7
CisgICAgICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xv
YmFsRGF0YS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKGdsb2JhbERhdGEsIG1faW5kZXgp
OwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
IAotICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwg
bV9pbmRleCk7CisgICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUo
cmVzdWx0LT5zdGFydCgpLCByZXN1bHQtPnNpemVJbkJ5dGVzKCkpOwogCi0gICAgICAgICAgICBy
ZXR1cm4gbWVtY3B5KHJlc3VsdCwgbV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgbWVt
Y3B5KHJlc3VsdC0+c3RhcnQoKSwgbV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAg
IHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCBsYWJlbCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiA5MzkxMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC02OSwyMiArNjksOCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBw
dWJsaWM6Ci0gICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNz
ZW1ibGVyKiBtYXNtLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCkK
LSAgICAgICAgOiBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1f
c2l6ZSgwKQotICAgICAgICAsIG1fY29kZSgwKQotICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20p
Ci0gICAgICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQotI2lmbmRlZiBOREVCVUcKLSAg
ICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgbGlua0Nv
ZGUoKTsKLSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
TWFjcm9Bc3NlbWJsZXIqIG1hc20sIEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKLSAg
ICAgICAgOiBtX2V4ZWN1dGFibGVQb29sKGFsbG9jYXRvci5wb29sRm9yU2l6ZShnbG9iYWxEYXRh
LCBtYXNtLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpKSkKLSAgICAgICAgLCBtX3NpemUoMCkKKyAg
ICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1h
c20pCisgICAgICAgIDogbV9zaXplKDApCiAgICAgICAgICwgbV9jb2RlKDApCiAgICAgICAgICwg
bV9hc3NlbWJsZXIobWFzbSkKICAgICAgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCkBA
IC0xODUsMTQgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHBlcmZvcm1GaW5hbGl6
YXRpb24oKTsKIAotICAgICAgICByZXR1cm4gQ29kZVJlZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBv
b2wsIG1fc2l6ZSk7Ci0gICAgfQotCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluYWxpemVDb2Rl
QWRkZW5kdW0oKQotICAgIHsKLSAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwotCi0gICAg
ICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29k
ZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOwogICAgIH0KIAogICAgIENvZGVQdHIgdHJhbXBvbGlu
ZUF0KExhYmVsIGxhYmVsKQpAQCAtMjMyLDE0ICsyMTEsMTkgQEAgcHJpdmF0ZToKICAgICB7CiAg
ICAgICAgIEFTU0VSVCghbV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQot
ICAgICAgICBtX2NvZGUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHko
Km1fZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIG1fZXhlY3V0
YWJsZU1lbW9yeSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9n
bG9iYWxEYXRhKTsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIG1fY29kZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsK
ICAgICAgICAgbV9zaXplID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAg
ICAgICAgIEFTU0VSVChtX2NvZGUpOwogI2Vsc2UKICAgICAgICAgc2l6ZV90IGluaXRpYWxTaXpl
ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7Ci0gICAgICAgIG1fY29kZSA9
ICh1aW50OF90KiltX2V4ZWN1dGFibGVQb29sLT5hbGxvYygqbV9nbG9iYWxEYXRhLCBpbml0aWFs
U2l6ZSk7Ci0gICAgICAgIGlmICghbV9jb2RlKQorICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkg
PSBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fZ2xvYmFsRGF0
YSwgaW5pdGlhbFNpemUpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1l
bW9yeS0+c3RhcnQoKTsKKyAgICAgICAgQVNTRVJUKG1fY29kZSk7CiAgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShtX2NvZGUsIGluaXRpYWxTaXplKTsKICAgICAgICAg
dWludDhfdCogaW5EYXRhID0gKHVpbnQ4X3QqKW1fYXNzZW1ibGVyLT51bmxpbmtlZENvZGUoKTsK
ICAgICAgICAgdWludDhfdCogb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1f
Y29kZSk7CkBAIC0yOTcsNyArMjgxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBqdW1wc1RvTGlu
ay5jbGVhcigpOwogICAgICAgICBtX3NpemUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVh
ZFB0cjsKLSAgICAgICAgbV9leGVjdXRhYmxlUG9vbC0+dHJ5U2hyaW5rKG1fY29kZSwgaW5pdGlh
bFNpemUsIG1fc2l6ZSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6
ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwogICAgICAgICBkdW1wTGlua1N0YXRpc3Rp
Y3MobV9jb2RlLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKQEAgLTM2Niw3ICszNTAsNyBAQCBwcml2
YXRlOgogICAgIH0KICNlbmRpZgogICAgIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9l
eGVjdXRhYmxlUG9vbDsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVj
dXRhYmxlTWVtb3J5OwogICAgIHNpemVfdCBtX3NpemU7CiAgICAgdm9pZCogbV9jb2RlOwogICAg
IE1hY3JvQXNzZW1ibGVyKiBtX2Fzc2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNp
b24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMjIgKzE5OSw1OSBAQCBwcml2YXRl
OgogLy8gcG9pbnRlciB0byB0aGUgY29kZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wg
ZnJvbSB3aXRoaW4gd2hpY2ggaXQKIC8vIHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgeworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBp
dCdzIGRhbmdlcm91cyBlbm91Z2ggdGhhdCB3ZSB3YW50IHVzZXMgb2YgaXQKKyAgICAvLyB0byBi
ZSBlYXN5IHRvIGZpbmQgLSBoZW5jZSB0aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cuCisg
ICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b2RlUHRyKQorICAgICAgICA6IG1fY29kZVB0cihjb2RlUHRyKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fY29kZVB0cik7CisgICAgfQorCiBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmKCkKLSAgICAgICAgOiBtX3NpemUoMCkKICAgICB7CiAgICAgfQogCi0gICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1
dGFibGVQb29sLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAg
LCBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZShzaXpl
KQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVN
ZW1vcnktPnN0YXJ0KCkpCisgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVN
ZW1vcnkpCisgICAgeworICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFn
ZWQoKSk7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOworICAg
ICAgICBBU1NFUlQobV9jb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgb25s
eSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcwor
ICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMu
IFR5cGljYWxseSB0aGlzIG1lYW5zCisgICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgor
ICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJs
ZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5LmdldCgpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2Rl
UHRyOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgeworICAgICAg
ICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5LT5zaXplSW5CeXRlcygpOwogICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvZGVQdHI7IH0KIAotICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29s
PiBtX2V4ZWN1dGFibGVQb29sOwotICAgIHNpemVfdCBtX3NpemU7Citwcml2YXRlOgorICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGVQdHI7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5o
CShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2
QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTUsOSArMTU5NSw5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGIubV9vZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAg
ICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFi
bGVQb29sKiBhbGxvY2F0b3IpCisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewotICAgICAg
ICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9y
KTsKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEp
OwogICAgIH0KIAogICAgIHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRU
bykgeyBtX2Zvcm1hdHRlci5yZXdpbmRUb0xhYmVsKHJld2luZFRvKTsgfQpAQCAtMTkzOSw5ICsx
OTM5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkg
Y29uc3QgeyByZXR1cm4gbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCk7IH0KICAgICAgICAg
dm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogCi0gICAgICAg
IHZvaWQqIGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIGFsbG9jYXRvcikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBh
bGxvY2F0b3IpOworICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGds
b2JhbERhdGEpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2Vt
YmxlckxhYmVsIHJld2luZFRvKSB7IG1fYnVmZmVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAj
aWYgRU5BQkxFKEpJVCkKICAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1f
aXNDb25zdHJ1Y3RvciA/IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29u
c3RydWN0KCkgOiBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsg
fQotICAgICAgICBFeGVjdXRhYmxlUG9vbCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRK
SVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBvb2woKTsgfQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVNZW1vcnkoKTsgfQogI2VuZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3du
ZXJFeGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShy
ZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVm
IENvZGVMb2NhdGlvbkxhYmVsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0
aW5lVHlwZTsKKyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGU7CiAKICAgICAvLyBTdHJ1Y3R1cmUgdXNl
ZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBp
bnN0cnVjdGlvbiB0byBob2xkIGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAg
c3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNp
b24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgfSBwdXRCeUlkUmVwbGFjZTsKICAgICAgICAgfSB1OwogCi0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIHN0dWJSb3V0aW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxv
Y2F0aW9uOwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW47CiAgICAgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MjgsNyArOTI4LDcgQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAgIC8vIEdlbmVyYXRlIHRoZSBib2R5IG9mIHRo
ZSBwcm9ncmFtLgogICAgIGNvbXBpbGVCb2R5KCk7CiAgICAgLy8gTGluawotICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFi
bGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzKTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwogICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVm
ZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQpOwogfQpAQCAtOTg2LDcgKzk4Niw3
IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKIAogCiAgICAgLy8g
PT09IExpbmsgPT09Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGxpbmsobGlua0J1ZmZlcik7CiAg
ICAgCiAgICAgLy8gRklYTUU6IHN3aXRjaCB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5
IGNoZWNrIG92ZXIgdG8gREZHT3BlcnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5
MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNo
KExpbmtCdWZmZQogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVz
dG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxs
VG9TbG93Q2FzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NT
dHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1
cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFi
ZWwgc2xvd0Nhc2VMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwmIHN0dWJSb3V0aW5lKQorc3RhdGlj
IHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVj
dHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291
bnQsIHNpemVfdCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJl
bCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKIApAQCAtMTMzLDExICsxMzMsMTEgQEAgc3RhdGlj
IHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgIAogICAgIGVtaXRSZXN0b3Jl
U2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2Vz
cywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFibGVQb29s
KCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsK
ICAgICAKICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nh
c2VMYWJlbCk7CiAgICAgCi0gICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGVBZGRlbmR1bSgpOworICAgIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCk7CiB9CiAKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgYmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFBy
b3BlcnR5U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpAQCAtMTc2LDE1
ICsxNzYsMTQgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAg
ICAgICAKICAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVT
Y3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAg
ICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQs
IGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgCiAgICAgICAgIGxpbmtSZXN0
b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7
Ci0gICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgc3R1
YkluZm8uc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAg
CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKKyAg
ICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1
bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIzMSw3ICsyMzAsNyBAQCBzdGF0
aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgZ2VuZXJhdGVQcm90b0No
YWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZz
ZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJS
b3V0aW5lKTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5z
dHViUm91dGluZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25H
ZXRCeUlkUHJvdG9CdWlsZExpc3QpOwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hh
aW4oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwg
cHJvdG90eXBlQ2hhaW4pOwpAQCAtMzI0LDcgKzMyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxk
R2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9
PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHVi
Um91dGluZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBu
ZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxp
c3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1
Y3R1cmVMaXN0OwpAQCAtMzUwLDIxICszNDksMjEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRC
eUlETGlzdChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
c3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBv
b2woKSk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0KTsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0
aW5lOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2Nh
dGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5z
dHViUm91dGluZS5jb2RlKCkpOwogICAgICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAg
ICAgICAgIAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBsYXN0UHJvdG9C
ZWdpbik7CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAg
ICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAotICAg
ICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2Jh
bERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVy
ZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIGVudHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAKICAg
ICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDA4LDcgKzQwNyw3IEBAIHN0YXRpYyBib29s
IHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlw
ZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJbmZv
LnN0dWJSb3V0aW5lKTsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENo
YWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNo
YWluLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25M
YWJlbCgpOworICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZigpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhp
Y1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzdHViSW5m
by5hY2Nlc3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0KTsKQEAgLTQxOSwxOCAr
NDE4LDE4IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBp
ZiAobGlzdEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKSB7CiAgICAgICAgIHN0
dWJJbmZvLnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOwogICAgICAgICAKLSAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAg
ICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBlbnRyeUxhYmVsOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7
CiAgICAgICAgIAotICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0
dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0Rv
bmUpLCBsYXN0UHJvdG9CZWdpbiwgZW50cnlMYWJlbCk7CisgICAgICAgIGdlbmVyYXRlUHJvdG9D
aGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zm
c2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7
CiAgICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdElu
ZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5
TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRp
b25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkp
OwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NB
Q0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTQ4LDE4ICs1NDcs
MTcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgICAgICBpZiAo
bmVlZFRvUmVzdG9yZVNjcmF0Y2gpCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgICAgICAgICBzdHViSW5mby5zdHVi
Um91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICAg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJ
ZEZ1bmN0aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1
YkluZm8uaW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4pOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuY3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQyICsyNywxMTEgQEAK
IAogI2luY2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKIAorI2lmIEVOQUJMRShFWEVDVVRB
QkxFX0FMTE9DQVRPUl9ERU1BTkQpCisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgor
I2VuZGlmCisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCit1c2luZyBuYW1lc3BhY2UgV1RGOwor
CiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1B
TkQpCiAKLUV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1B
bGxvYyhzaXplX3Qgc2l6ZSkKK2NsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6IHB1Ymxp
YyBNZXRhQWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlv
bnMgdG8gMzIgYnl0ZXMKKyAgICB7CisgICAgICAgIC8vIERvbid0IHByZWFsbG9jYXRlIGFueSBt
ZW1vcnkgaGVyZS4KKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+RGVtYW5kRXhlY3V0YWJsZUFs
bG9jYXRvcigpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzZXJ2
YXRpb25zLnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVzZXJ2YXRpb25zLmF0KGkpLmRlYWxs
b2NhdGUoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRl
TmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykKKyAgICB7CisgICAgICAgIHNpemVfdCBuZXdOdW1Q
YWdlcyA9ICgoKG51bVBhZ2VzICogcGFnZVNpemUoKSArIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxM
T0NfU0laRSAtIDEpIC8gSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFICogSklUX0FMTE9D
QVRPUl9MQVJHRV9BTExPQ19TSVpFKSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQobmV3TnVtUGFnZXMgPj0gbnVtUGFnZXMpOworICAgICAg
ICAKKyAgICAgICAgbnVtUGFnZXMgPSBuZXdOdW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIFBh
Z2VSZXNlcnZhdGlvbiByZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShudW1Q
YWdlcyAqIHBhZ2VTaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJM
RV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgaWYgKCFyZXNlcnZhdGlvbikKKyAgICAg
ICAgICAgIENSQVNIKCk7CisgICAgICAgIAorICAgICAgICByZXNlcnZhdGlvbnMuYXBwZW5kKHJl
c2VydmF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXNlcnZhdGlvbi5iYXNlKCk7
CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdl
KQorICAgIHsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpLCBF
WEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKQorICAgIHsKKyAgICAgICAgT1NBbGxv
Y2F0b3I6OmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8UGFnZVJlc2VydmF0aW9uLCAxNj4gcmVzZXJ2YXRpb25zOworfTsKKworc3RhdGlj
IERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKwordm9pZCBFeGVjdXRhYmxl
QWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCkKIHsKLSAgICBQYWdlQWxsb2NhdGlvbiBh
bGxvY2F0aW9uID0gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlKHNpemUsIE9TQWxsb2NhdG9yOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKLSAgICBpZiAo
IWFsbG9jYXRpb24pCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRpb247Cisg
ICAgQVNTRVJUKCFhbGxvY2F0b3IpOworICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRh
YmxlQWxsb2NhdG9yKCk7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2Uo
RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24mIGFsbG9jYXRpb24pCitFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYpCiB7Ci0gICAgYWxsb2NhdGlv
bi5kZWFsbG9jYXRlKCk7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7CiB9CiAKIGJvb2wgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0g
ICAgCisKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQotICAgIAorCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNp
emVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
cmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisK
IHNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQogewotICAg
IHJldHVybiAwOwotfSAKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOwor
fQogCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7
Cit9CiAjZW5kaWYKIAorI2VuZGlmIC8vIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1B
TkQpCisKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKIAogI2lmIE9TKFdJTkRP
V1MpIHx8IE9TKFNZTUJJQU4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBmb3IgcHRyZGlmZl90CiAjaW5jbHVk
ZSA8bGltaXRzPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01l
dGFBbGxvY2F0b3JIYW5kbGUuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KICNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBA
IC0xMDIsMTIwICsxMDMsMjcgQEAgaW5saW5lIHNpemVfdCByb3VuZFVwQWxsb2NhdGlvblNpemUo
c2l6ZQogCiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgRXhlY3V0YWJsZVBvb2wgOiBwdWJsaWMg
UmVmQ291bnRlZDxFeGVjdXRhYmxlUG9vbD4gewotcHVibGljOgotI2lmIEVOQUJMRShFWEVDVVRB
QkxFX0FMTE9DQVRPUl9ERU1BTkQpCi0gICAgdHlwZWRlZiBQYWdlQWxsb2NhdGlvbiBBbGxvY2F0
aW9uOwotI2Vsc2UKLSAgICBjbGFzcyBBbGxvY2F0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IEFsbG9jYXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fYmFz
ZShiYXNlKQotICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAgICAgewotICAgICAgICB9
Ci0gICAgICAgIHZvaWQqIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICAgICAgc2l6ZV90
IHNpemUoKSB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiAhbV9iYXNlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkKiBtX2Jh
c2U7Ci0gICAgICAgIHNpemVfdCBtX3NpemU7Ci0gICAgfTsKLSNlbmRpZgotICAgIHR5cGVkZWYg
VmVjdG9yPEFsbG9jYXRpb24sIDI+IEFsbG9jYXRpb25MaXN0OwotCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBuKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlUG9v
bChnbG9iYWxEYXRhLCBuKSk7Ci0gICAgfQotCi0gICAgdm9pZCogYWxsb2MoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVQdHIg
PD0gbV9lbmQpOwotCi0gICAgICAgIC8vIFJvdW5kICduJyB1cCB0byBhIG11bHRpcGxlIG9mIHdv
cmQgc2l6ZTsgaWYgYWxsIGFsbG9jYXRpb25zIGFyZSBvZgotICAgICAgICAvLyB3b3JkIHNpemVk
IHF1YW50aXRpZXMsIHRoZW4gYWxsIHN1YnNlcXVlbnQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGln
bmVkLgotICAgICAgICBuID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHNpemVvZih2b2lkKikp
OwotCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG4pIDwgKG1fZW5kIC0gbV9m
cmVlUHRyKSkgewotICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlUHRyOwotICAgICAg
ICAgICAgbV9mcmVlUHRyICs9IG47Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAg
ICB9Ci0KLSAgICAgICAgLy8gSW5zdWZmaWNpZW50IHNwYWNlIHRvIGFsbG9jYXRlIGluIHRoZSBl
eGlzdGluZyBwb29sCi0gICAgICAgIC8vIHNvIHdlIG5lZWQgYWxsb2NhdGUgaW50byBhIG5ldyBw
b29sCi0gICAgICAgIHJldHVybiBwb29sQWxsb2NhdGUoZ2xvYmFsRGF0YSwgbik7Ci0gICAgfQot
ICAgIAotICAgIHZvaWQgdHJ5U2hyaW5rKHZvaWQqIGFsbG9jYXRpb24sIHNpemVfdCBvbGRTaXpl
LCBzaXplX3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxjaGFyKj4o
YWxsb2NhdGlvbikgKyBvbGRTaXplICE9IG1fZnJlZVB0cikKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgbV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pICsgcm91
bmRVcEFsbG9jYXRpb25TaXplKG5ld1NpemUsIHNpemVvZih2b2lkKikpOwotICAgIH0KLQotICAg
IH5FeGVjdXRhYmxlUG9vbCgpCi0gICAgewotICAgICAgICBBbGxvY2F0aW9uTGlzdDo6aXRlcmF0
b3IgZW5kID0gbV9wb29scy5lbmQoKTsKLSAgICAgICAgZm9yIChBbGxvY2F0aW9uTGlzdDo6aXRl
cmF0b3IgcHRyID0gbV9wb29scy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
ICAgIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKCpwdHIpOwotICAgIH0KLQotICAgIHNp
emVfdCBhdmFpbGFibGUoKSBjb25zdCB7IHJldHVybiAobV9wb29scy5zaXplKCkgPiAxKSA/IDAg
OiBtX2VuZCAtIG1fZnJlZVB0cjsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBBbGxvY2F0aW9u
IHN5c3RlbUFsbG9jKHNpemVfdCBuKTsKLSAgICBzdGF0aWMgdm9pZCBzeXN0ZW1SZWxlYXNlKEFs
bG9jYXRpb24mIGFsbG9jKTsKLQotICAgIEV4ZWN1dGFibGVQb29sKEpTR2xvYmFsRGF0YSYsIHNp
emVfdCBuKTsKLQotICAgIHZvaWQqIHBvb2xBbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qg
bik7Ci0KLSAgICBjaGFyKiBtX2ZyZWVQdHI7Ci0gICAgY2hhciogbV9lbmQ7Ci0gICAgQWxsb2Nh
dGlvbkxpc3QgbV9wb29sczsKLX07Cit0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlOwogCiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAg
ICBlbnVtIFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVi
bGljOgotICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQot
ICAgIHsKLSAgICAgICAgaWYgKGlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0
aW9uUG9vbCA9IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRP
Ul9MQVJHRV9BTExPQ19TSVpFKTsKLSNpZiAhRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgfQorICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3IoSlNHbG9iYWxEYXRhJik7CisgICAgCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6
ZUFsbG9jYXRvcigpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICBzdGF0aWMg
Ym9vbCB1bmRlck1lbW9yeVByZXNzdXJlKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NB
VE9SX1BST0ZJTEUpCisgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAg
c3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KKyNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gcG9vbEZvclNpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXpl
X3QgbikKLSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBmaXQgaW4gdGhlIGV4aXN0aW5nIHNtYWxs
IGFsbG9jYXRvcgotICAgICAgICBBU1NFUlQobV9zbWFsbEFsbG9jYXRpb25Qb29sKTsKLSAgICAg
ICAgaWYgKG4gPCBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIG1fc21hbGxBbGxvY2F0aW9uUG9vbDsKLQotICAgICAgICAvLyBJZiB0aGUgcmVx
dWVzdCBpcyBsYXJnZSwgd2UganVzdCBwcm92aWRlIGEgdW5zaGFyZWQgYWxsb2NhdG9yCi0gICAg
ICAgIGlmIChuID4gSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKQotICAgICAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbik7Ci0KLSAgICAgICAg
Ly8gQ3JlYXRlIGEgbmV3IGFsbG9jYXRvcgotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
IHBvb2wgPSBFeGVjdXRhYmxlUG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEsIEpJVF9BTExPQ0FUT1Jf
TEFSR0VfQUxMT0NfU0laRSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG5ldyBhbGxvY2F0b3Igd2ls
bCByZXN1bHQgaW4gbW9yZSBmcmVlIHNwYWNlIHRoYW4gaW4KLSAgICAgICAgLy8gdGhlIGN1cnJl
bnQgc21hbGwgYWxsb2NhdG9yLCB0aGVuIHdlIHdpbGwgdXNlIGl0IGluc3RlYWQKLSAgICAgICAg
aWYgKChwb29sLT5hdmFpbGFibGUoKSAtIG4pID4gbV9zbWFsbEFsbG9jYXRpb25Qb29sLT5hdmFp
bGFibGUoKSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IHBvb2w7Ci0gICAg
ICAgIHJldHVybiBwb29sLnJlbGVhc2UoKTsKLSAgICB9CisgICAgUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBhbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0
ZXMpOwogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZv
aWQgbWFrZVdyaXRhYmxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKQEAgLTM0OCw1MCArMjU2
LDkgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBz
dGF0aWMgdm9pZCByZXByb3RlY3RSZWdpb24odm9pZCosIHNpemVfdCwgUHJvdGVjdGlvblNldHRp
bmcpOwogI2VuZGlmCi0KLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fc21hbGxBbGxvY2F0
aW9uUG9vbDsKIH07CiAKLWlubGluZSBFeGVjdXRhYmxlUG9vbDo6RXhlY3V0YWJsZVBvb2woSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXpl
ID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIEFsbG9jYXRpb24g
bWVtID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIW1lbS5iYXNlKCkpIHsKLSAg
ICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1lbSA9
IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgfQotICAgIG1fcG9vbHMuYXBwZW5kKG1lbSk7
Ci0gICAgbV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1lbS5iYXNlKCkpOwotICAgIGlm
ICghbV9mcmVlUHRyKQotICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAg
ICBtX2VuZCA9IG1fZnJlZVB0ciArIGFsbG9jU2l6ZTsKLSAgICBkZXByZWNhdGVkVHVybk9mZlZl
cmlmaWVyKCk7Ci19Ci0KLWlubGluZSB2b2lkKiBFeGVjdXRhYmxlUG9vbDo6cG9vbEFsbG9jYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90IGFsbG9j
U2l6ZSA9IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuLCBwYWdlU2l6ZSgpKTsKLSAgICAKLSAgICBB
bGxvY2F0aW9uIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFyZXN1
bHQuYmFzZSgpKSB7Ci0gICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEp
OwotICAgICAgICByZXN1bHQgPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgICAgICBpZiAo
IXJlc3VsdC5iYXNlKCkpCi0gICAgICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2Nh
dGUKLSAgICB9Ci0gICAgCi0gICAgQVNTRVJUKG1fZW5kID49IG1fZnJlZVB0cik7Ci0gICAgaWYg
KChhbGxvY1NpemUgLSBuKSA+IHN0YXRpY19jYXN0PHNpemVfdD4obV9lbmQgLSBtX2ZyZWVQdHIp
KSB7Ci0gICAgICAgIC8vIFJlcGxhY2UgYWxsb2NhdGlvbiBwb29sCi0gICAgICAgIG1fZnJlZVB0
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihyZXN1bHQuYmFzZSgpKSArIG47Ci0gICAgICAgIG1fZW5k
ID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgYWxsb2NTaXplOwotICAgIH0K
LQotICAgIG1fcG9vbHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5iYXNlKCk7
Ci19Ci0KLX0KK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYg
RU5BQkxFKEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNp
b24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3JGaXhlZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSw5IEBACiAKICNp
bmNsdWRlIDxlcnJuby5oPgogCi0jaW5jbHVkZSAiVENTcGluTG9jay5oIgogI2luY2x1ZGUgPHN5
cy9tbWFuLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4K
KyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2
YXRpb24uaD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CiAKQEAgLTQ2LDQ4MSArNDUsMTA1IEBA
IHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotI2RlZmluZSBU
d29Qb3cobikgKDF1bGwgPDwgbikKLQotY2xhc3MgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHsK
LXB1YmxpYzoKLSAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6ZV90IHNpemUsIHNpemVf
dCBibG9ja1NpemUsIHVuc2lnbmVkIGxvZzJCbG9ja1NpemUpCi0gICAgICAgIDogbV9ibG9ja1Np
emUoYmxvY2tTaXplKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrU2l6ZSA9PSBUd29Qb3co
bG9nMkJsb2NrU2l6ZSkpOwotCi0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJs
b2NrcyBuZWVkZWQgdG8gaG9sZCBzaXplLgotICAgICAgICBzaXplX3QgYmxvY2tNYXNrID0gYmxv
Y2tTaXplIC0gMTsKLSAgICAgICAgbV9ibG9ja0NvdW50ID0gKHNpemUgKyBibG9ja01hc2spID4+
IGxvZzJCbG9ja1NpemU7Ci0KLSAgICAgICAgLy8gQWxpZ24gdG8gdGhlIHNtYWxsZXN0IHBvd2Vy
IG9mIHR3byA+PSBtX2Jsb2NrQ291bnQuCi0gICAgICAgIG1fYmxvY2tBbGlnbm1lbnQgPSAxOwot
ICAgICAgICB3aGlsZSAobV9ibG9ja0FsaWdubWVudCA8IG1fYmxvY2tDb3VudCkKLSAgICAgICAg
ICAgIG1fYmxvY2tBbGlnbm1lbnQgKz0gbV9ibG9ja0FsaWdubWVudDsKLSAgICB9Ci0KLSAgICBz
aXplX3QgYmxvY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja1NpemU7IH0KLSAgICBzaXpl
X3QgYmxvY2tDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tDb3VudDsgfQotICAgIHNpemVf
dCBibG9ja0FsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tBbGlnbm1lbnQ7IH0KLQot
ICAgIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrU2l6ZSAqIG1f
YmxvY2tDb3VudDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fYmxvY2tTaXplOwot
ICAgIHNpemVfdCBtX2Jsb2NrQ291bnQ7Ci0gICAgc2l6ZV90IG1fYmxvY2tBbGlnbm1lbnQ7Ci19
OwotCi10ZW1wbGF0ZTx1bnNpZ25lZCBsb2cyRW50cmllcz4KLWNsYXNzIEFsbG9jYXRpb25UYWJs
ZUxlYWYgewotICAgIHR5cGVkZWYgdWludDY0X3QgQml0RmllbGQ7Ci0KLXB1YmxpYzoKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlN1YnJlZ2lvblNpemUgPSAxMjsgLy8gMl4xMiA9PSBw
YWdlc2l6ZQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IGxvZzJT
dWJyZWdpb25TaXplICsgbG9nMkVudHJpZXM7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1
YnJlZ2lvblNpemUgPSBUd29Qb3cobG9nMlN1YnJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25z
dCBzaXplX3QgcmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyUmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGVudHJpZXMgPSBUd29Qb3cobG9nMkVudHJpZXMpOwotICAgIENPTVBJ
TEVfQVNTRVJUKGVudHJpZXMgPD0gKHNpemVvZihCaXRGaWVsZCkgKiA4KSwgQWxsb2NhdGlvblRh
YmxlTGVhZl9lbnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVM
ZWFmKCkKLSAgICAgICAgOiBtX2FsbG9jYXRlZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+QWxs
b2NhdGlvblRhYmxlTGVhZigpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAg
ICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXpl
Q2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpID09IHN1
YnJlZ2lvblNpemUpOwotICAgICAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLQotICAgICAgICBzaXpl
X3QgYWxpZ25tZW50ID0gc2l6ZUNsYXNzLmJsb2NrQWxpZ25tZW50KCk7Ci0gICAgICAgIHNpemVf
dCBjb3VudCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAgIC8vIFVzZSB0aGlzIG1h
c2sgdG8gY2hlY2sgZm9yIHNwYW5zIG9mIGZyZWUgYmxvY2tzLgotICAgICAgICBCaXRGaWVsZCBt
YXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IChhbGlnbm1lbnQgLSBjb3VudCk7Ci0KLSAg
ICAgICAgLy8gU3RlcCBpbiB1bml0cyBvZiBhbGlnbm1lbnQgc2l6ZS4KLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7IGkgKz0gYWxpZ25tZW50KSB7Ci0gICAgICAgICAg
ICBpZiAoIShtX2FsbG9jYXRlZCAmIG1hc2spKSB7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0
ZWQgfD0gbWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGkgKyAoYWxpZ25tZW50IC0gY291
bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1h
c2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0g
ICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6
ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2Nr
U2l6ZSgpID09IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAgIHNpemVfdCBlbnRyeSA9IGxvY2F0
aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xh
c3MuYmxvY2tDb3VudCgpOwotICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50
KSAtIDEpIDw8IGVudHJ5OwotCi0gICAgICAgIEFTU0VSVCgobV9hbGxvY2F0ZWQgJiBtYXNrKSA9
PSBtYXNrKTsKLSAgICAgICAgbV9hbGxvY2F0ZWQgJj0gfm1hc2s7Ci0gICAgfQotCi0gICAgYm9v
bCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9hbGxvY2F0ZWQ7Ci0gICAgfQot
Ci0gICAgYm9vbCBpc0Z1bGwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICF+bV9hbGxvY2F0ZWQ7
Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biByZWdpb25TaXplOwotICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xh
c3MgY2xhc3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFsbG9j
YXRpb25UYWJsZVNpemVDbGFzcyhzaXplLCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6
ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50
T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiICAgICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwOHg6IFslMDE2bGx4XVxuIiwg
KGludClwYXJlbnRPZmZzZXQsIG1fYWxsb2NhdGVkKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBCaXRGaWVsZCBtX2FsbG9jYXRlZDsKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgTmV4
dExldmVsPgotY2xhc3MgTGF6eUFsbG9jYXRpb25UYWJsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6
ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW50cmllcyA9IE5leHRMZXZlbDo6ZW50cmll
czsKLQotICAgIExhenlBbGxvY2F0aW9uVGFibGUoKQotICAgICAgICA6IG1fcHRyKDApCi0gICAg
ewotICAgIH0KLQotICAgIH5MYXp5QWxsb2NhdGlvblRhYmxlKCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9u
VGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIGlmICghbV9wdHIpCi0g
ICAgICAgICAgICBtX3B0ciA9IG5ldyBOZXh0TGV2ZWwoKTsKLSAgICAgICAgcmV0dXJuIG1fcHRy
LT5hbGxvY2F0ZShzaXplQ2xhc3MpOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9j
YXRpb24sIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmZyZWUobG9jYXRpb24sIHNpemVDbGFz
cyk7Ci0gICAgICAgIGlmIChtX3B0ci0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkZWxldGUg
bV9wdHI7Ci0gICAgICAgICAgICBtX3B0ciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBi
b29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3B0cjsKLSAgICB9Ci0KLSAg
ICBib29sIGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wdHIgJiYgbV9wdHItPmlz
RnVsbCgpOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gTmV4dExldmVsOjpzaXplKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAg
IHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIG1fcHRyLT5kdW1wKHBhcmVu
dE9mZnNldCwgaW5kZW50KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBBbGxvY2F0aW9u
VGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIE5leHRMZXZlbDo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBOZXh0TGV2ZWwqIG1fcHRyOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVsLCB1
bnNpZ25lZCBsb2cyRW50cmllcz4KLWNsYXNzIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSB7Ci0g
ICAgdHlwZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IE5leHRMZXZlbDo6bG9nMlJlZ2lvblNpemU7
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lv
blNpemUgKyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9u
U2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCByZWdpb25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NF
UlQoZW50cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVEaXJl
Y3RvcnlfZW50cmllc19maXRfaW5fQml0RmllbGQpOwotCi0gICAgQWxsb2NhdGlvblRhYmxlRGly
ZWN0b3J5KCkKLSAgICAgICAgOiBtX2Z1bGwoMCkKLSAgICAgICAgLCBtX2hhc1N1YmFsbG9jYXRp
b24oMCkKLSAgICB7Ci0gICAgfQotCi0gICAgfkFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSgpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxs
b2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAg
ICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotICAgICAg
ICBBU1NFUlQoIWlzRnVsbCgpKTsKLQotICAgICAgICBpZiAoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgp
IDwgc3VicmVnaW9uU2l6ZSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMTsKLSAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2ksIGJpdCArPSBiaXQp
IHsKLSAgICAgICAgICAgICAgICBpZiAobV9mdWxsICYgYml0KQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzaXplX3QgbG9jYXRpb24gPSBtX3N1YmFsbG9j
YXRpb25zW2ldLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0
aW9uICE9IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZGlkbid0
IGFscmVhZHkgaGF2ZSBhIHN1YnJlZ2lvbiwgaXQgZG9lcyBub3chCi0gICAgICAgICAgICAgICAg
ICAgIG1faGFzU3ViYWxsb2NhdGlvbiB8PSBiaXQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1p
cnJvciB0aGUgc3ViYWxsb2NhdGlvbidzIGZ1bGwgYml0LgotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9zdWJhbGxvY2F0aW9uc1tpXS5pc0Z1bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1fZnVsbCB8PSBiaXQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSAqIHN1YnJlZ2lv
blNpemUpIHwgbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQSBibG9j
ayBpcyBhbGxvY2F0ZWQgaWYgZWl0aGVyIGl0IGlzIGZ1bGx5IGFsbG9jYXRlZCBvciBjb250YWlu
cyBzdWJhbGxvY2F0aW9ucy4KLSAgICAgICAgQml0RmllbGQgYWxsb2NhdGVkID0gbV9mdWxsIHwg
bV9oYXNTdWJhbGxvY2F0aW9uOwotCi0gICAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzaXplQ2xh
c3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJs
b2NrQ291bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBjaGVjayBmb3Igc3BhbnMg
b2YgZnJlZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQp
IC0gMSkgPDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAvLyBTdGVwIGluIHVuaXRz
IG9mIGFsaWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50
cmllczsgaSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICghKGFsbG9jYXRlZCAmIG1h
c2spKSB7Ci0gICAgICAgICAgICAgICAgbV9mdWxsIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIChpICsgKGFsaWdubWVudCAtIGNvdW50KSkgPDwgbG9nMlN1YnJlZ2lvblNpemU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXNrIDw8PSBhbGlnbm1lbnQ7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3Qg
bG9jYXRpb24sIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8PSBzdWJyZWdpb25TaXplKTsKLQot
ICAgICAgICBzaXplX3QgZW50cnkgPSBsb2NhdGlvbiA+PiBsb2cyU3VicmVnaW9uU2l6ZTsKLQot
ICAgICAgICBpZiAoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDwgc3VicmVnaW9uU2l6ZSkgewotICAg
ICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBlbnRyeTsKLSAgICAgICAgICAgIG1fc3Vi
YWxsb2NhdGlvbnNbZW50cnldLmZyZWUobG9jYXRpb24gJiAoc3VicmVnaW9uU2l6ZSAtIDEpLCBz
aXplQ2xhc3MpOwotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN1YmFsbG9jYXRpb24gaXMg
bm93IGVtcHR5LgotICAgICAgICAgICAgaWYgKG1fc3ViYWxsb2NhdGlvbnNbZW50cnldLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICBtX2hhc1N1YmFsbG9jYXRpb24gJj0gfmJpdDsKLSAgICAg
ICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2ssIGl0IGNsZWFybHkgaXNuJ3QgZnVsbCBhbnkgbW9y
ZSEKLSAgICAgICAgICAgIG1fZnVsbCAmPSB+Yml0OwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgICAg
IEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkgPDwgZW50cnk7Ci0gICAgICAg
ICAgICBBU1NFUlQoKG1fZnVsbCAmIG1hc2spID09IG1hc2spOwotICAgICAgICAgICAgQVNTRVJU
KCEobV9oYXNTdWJhbGxvY2F0aW9uICYgbWFzaykpOwotICAgICAgICAgICAgbV9mdWxsICY9IH5t
YXNrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAhKG1fZnVsbCB8IG1faGFzU3ViYWxsb2NhdGlvbik7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0Z1bGwoKQotICAgIHsgICAKLSAgICAgICAgcmV0dXJuICF+bV9mdWxsOwotICAgIH0K
LQotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVnaW9u
U2l6ZTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNz
Rm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgc3VicmVnaW9u
U2l6ZSkgewotICAgICAgICAgICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9
IE5leHRMZXZlbDo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemVDbGFz
cy5zaXplKCkgPCBOZXh0TGV2ZWw6OnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6
ZUNsYXNzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uVGFibGVTaXplQ2xh
c3Moc2l6ZSwgc3VicmVnaW9uU2l6ZSwgbG9nMlN1YnJlZ2lvblNpemUpOwotICAgIH0KLQotI2lm
bmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2ln
bmVkIGluZGVudCA9IDApCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5kZW50OyArK2kpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlMDh4OiBbIiwgKGludClwYXJlbnRPZmZzZXQpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBC
aXRGaWVsZCBiaXQgPSAxdWxsIDw8IGk7Ci0gICAgICAgICAgICBjaGFyIGMgPSBtX2hhc1N1YmFs
bG9jYXRpb24gJiBiaXQKLSAgICAgICAgICAgICAgICA/IChtX2Z1bGwgJiBiaXQgPyAnTicgOiAn
bicpCi0gICAgICAgICAgICAgICAgOiAobV9mdWxsICYgYml0ID8gJ0YnIDogJy0nKTsKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWMiLCBjKTsKLSAgICAgICAgfQotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIl1cbiIpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
bnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgaTsKLSAg
ICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSBwYXJlbnRPZmZzZXQgfCAoc3VicmVnaW9uU2l6ZSAq
IGkpOwotICAgICAgICAgICAgaWYgKG1faGFzU3ViYWxsb2NhdGlvbiAmIGJpdCkKLSAgICAgICAg
ICAgICAgICBtX3N1YmFsbG9jYXRpb25zW2ldLmR1bXAob2Zmc2V0LCBpbmRlbnQgKyAxKTsKLSAg
ICAgICAgfQotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIE5leHRMZXZlbCBtX3N1YmFs
bG9jYXRpb25zW2VudHJpZXNdOwotICAgIC8vIFN1YnJlZ2lvbnMgZXhpc3QgaW4gb25lIG9mIGZv
dXIgc3RhdGVzOgotICAgIC8vICgxKSBlbXB0eSAoYm90aCBiaXRzIGNsZWFyKQotICAgIC8vICgy
KSBmdWxseSBhbGxvY2F0ZWQgYXMgYSBzaW5nbGUgYWxsb2NhdGlvbiAobV9mdWxsIHNldCkKLSAg
ICAvLyAoMykgcGFydGlhbGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9jYXRpb25zIChtX2hh
c1N1YmFsbG9jYXRpb24gc2V0KQotICAgIC8vICg0KSBmdWxseSBhbGxvY2F0ZWQgdGhyb3VnaCBz
dWJhbGxvY2F0aW9ucyAoYm90aCBiaXRzIHNldCkKLSAgICBCaXRGaWVsZCBtX2Z1bGw7Ci0gICAg
Qml0RmllbGQgbV9oYXNTdWJhbGxvY2F0aW9uOwotfTsKLQotCi10eXBlZGVmIEFsbG9jYXRpb25U
YWJsZUxlYWY8Nj4gUGFnZVRhYmxlczI1NktCOwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJl
Y3Rvcnk8UGFnZVRhYmxlczI1NktCLCA2PiBQYWdlVGFibGVzMTZNQjsKLXR5cGVkZWYgQWxsb2Nh
dGlvblRhYmxlRGlyZWN0b3J5PExhenlBbGxvY2F0aW9uVGFibGU8UGFnZVRhYmxlczE2TUI+LCAx
PiBQYWdlVGFibGVzMzJNQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PExhenlB
bGxvY2F0aW9uVGFibGU8UGFnZVRhYmxlczE2TUI+LCA2PiBQYWdlVGFibGVzMUdCOwotCiAjaWYg
Q1BVKEFSTSkKLXR5cGVkZWYgUGFnZVRhYmxlczE2TUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOwor
c3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNl
bGlmIENQVShYODZfNjQpCi10eXBlZGVmIFBhZ2VUYWJsZXMxR0IgRml4ZWRWTVBvb2xQYWdlVGFi
bGVzOworc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAx
MDI0OwogI2Vsc2UKLXR5cGVkZWYgUGFnZVRhYmxlczMyTUIgRml4ZWRWTVBvb2xQYWdlVGFibGVz
Oworc3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsK
ICNlbmRpZgogCi0KLWNsYXNzIEZpeGVkVk1Qb29sQWxsb2NhdG9yCi17CitjbGFzcyBGaXhlZFZN
UG9vbEV4ZWN1dGFibGVBbGxvY2F0b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoK
LSAgICBGaXhlZFZNUG9vbEFsbG9jYXRvcigpCisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yKCkKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxs
b2NhdGlvbnMgdG8gMzIgYnl0ZXMKICAgICB7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMjU2
S0I6OnNpemUoKSA9PSAyNTYgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMxNk1C
OjpzaXplKCkgPT0gMTYgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVz
MzJNQjo6c2l6ZSgpID09IDMyICogMTAyNCAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRh
YmxlczFHQjo6c2l6ZSgpID09IDEwMjQgKiAxMDI0ICogMTAyNCk7Ci0KLSAgICAgICAgbV9yZXNl
cnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKEZpeGVkVk1Q
b29sUGFnZVRhYmxlczo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNV
VEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdl
UmVzZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhmaXhlZFBvb2xTaXplLCBPU0FsbG9j
YXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CiAj
aWYgIUVOQUJMRShJTlRFUlBSRVRFUikKLSAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAg
IGlmICghbV9yZXNlcnZhdGlvbikKICAgICAgICAgICAgIENSQVNIKCk7CiAjZW5kaWYKKyAgICAg
ICAgaWYgKG1fcmVzZXJ2YXRpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9u
LnNpemUoKSA9PSBmaXhlZFBvb2xTaXplKTsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNl
KG1fcmVzZXJ2YXRpb24uYmFzZSgpLCBtX3Jlc2VydmF0aW9uLnNpemUoKSk7CisgICAgICAgIH0K
ICAgICB9Ci0gCi0gICAgRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2Moc2l6ZV90IHJl
cXVlc3RlZFNpemUpCi0gICAgewotICAgICAgICBBU1NFUlQocmVxdWVzdGVkU2l6ZSk7Ci0gICAg
ICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBzaXplQ2xhc3MgPSBjbGFzc0ZvclNpemUocmVx
dWVzdGVkU2l6ZSk7Ci0gICAgICAgIHNpemVfdCBzaXplID0gc2l6ZUNsYXNzLnNpemUoKTsKLSAg
ICAgICAgQVNTRVJUKHNpemUpOwotCi0gICAgICAgIGlmIChzaXplID49IEZpeGVkVk1Qb29sUGFn
ZVRhYmxlczo6c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxv
Y2F0aW9uKDAsIDApOwotICAgICAgICBpZiAobV9wYWdlcy5pc0Z1bGwoKSkKLSAgICAgICAgICAg
IHJldHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbigwLCAwKTsKLQotICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gbV9wYWdlcy5hbGxvY2F0ZShzaXplQ2xhc3MpOwotICAgICAgICBpZiAob2Zm
c2V0ID09IG5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxv
Y2F0aW9uKDAsIDApOwotCi0gICAgICAgIHZvaWQqIHBvaW50ZXIgPSBvZmZzZXRUb1BvaW50ZXIo
b2Zmc2V0KTsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocG9pbnRlciwgc2l6ZSk7Ci0g
ICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbihwb2ludGVyLCBzaXplKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2Nh
dGlvbikKKyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3Bh
Y2Uoc2l6ZV90JikKICAgICB7Ci0gICAgICAgIHZvaWQqIHBvaW50ZXIgPSBhbGxvY2F0aW9uLmJh
c2UoKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBhbGxvY2F0aW9uLnNpemUoKTsKLSAgICAgICAg
QVNTRVJUKHNpemUpOwotCi0gICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocG9pbnRlciwg
c2l6ZSk7Ci0KLSAgICAgICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNs
YXNzRm9yU2l6ZShzaXplKTsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5zaXplKCkgPT0gc2l6
ZSk7Ci0gICAgICAgIG1fcGFnZXMuZnJlZShwb2ludGVyVG9PZmZzZXQocG9pbnRlciksIHNpemVD
bGFzcyk7CisgICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5l
dyBhbGxvY2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorICAgICAgICByZXR1cm4gMDsKICAg
ICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGVkKCkKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jlc2VydmF0
aW9uLmNvbW1pdHRlZCgpOworICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdl
U2l6ZSgpKTsKICAgICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCiAgICAgewotICAgICAgICBy
ZXR1cm4gISFtX3Jlc2VydmF0aW9uOworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBh
Z2UsIHBhZ2VTaXplKCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBBbGxvY2F0aW9uVGFibGVT
aXplQ2xhc3MgY2xhc3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotICAg
IHZvaWQqIG9mZnNldFRvUG9pbnRlcihzaXplX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1f
cmVzZXJ2YXRpb24uYmFzZSgpKSArIG9mZnNldCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBvaW50
ZXJUb09mZnNldCh2b2lkKiBwb2ludGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9yZXNlcnZhdGlvbi5iYXNlKCkpOwotICAgIH0KLQogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jl
c2VydmF0aW9uOwotICAgIEZpeGVkVk1Qb29sUGFnZVRhYmxlcyBtX3BhZ2VzOwogfTsKIAorc3Rh
dGljIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOwogCi1zdGF0aWMg
U3BpbkxvY2sgc3BpbmxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKLXN0YXRpYyBGaXhlZFZN
UG9vbEFsbG9jYXRvciogYWxsb2NhdG9yID0gMDsKLQordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9y
Ojppbml0aWFsaXplQWxsb2NhdG9yKCkKK3sKKyAgICBBU1NFUlQoIWFsbG9jYXRvcik7CisgICAg
YWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworfQogCi1z
aXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKK0V4ZWN1dGFi
bGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBT
cGluTG9ja0hvbGRlciBsb2NrSG9sZGVyKCZzcGlubG9jayk7Ci0gICAgcmV0dXJuIGFsbG9jYXRv
ciA/IGFsbG9jYXRvci0+YWxsb2NhdGVkKCkgOiAwOwotfSAgIAorICAgIEFTU0VSVChhbGxvY2F0
b3IpOworfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewot
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAgaWYgKCFhbGxv
Y2F0b3IpCi0gICAgICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEFsbG9jYXRvcigpOwot
ICAgIHJldHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKKyAgICByZXR1cm4gISFhbGxvY2F0b3It
PmJ5dGVzUmVzZXJ2ZWQoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1l
bW9yeVByZXNzdXJlKCkKIHsKLSAgICAvLyBUZWNobmljYWxseSB3ZSBzaG91bGQgdGFrZSB0aGUg
c3BpbiBsb2NrIGhlcmUsIGJ1dCB3ZSBkb24ndCBjYXJlIGlmIHdlIGdldCBzdGFsZSBkYXRhLgot
ICAgIC8vIFRoaXMgaXMgb25seSByZWFsbHkgYSBoZXVyaXN0aWMgYW55d2F5LgotICAgIHJldHVy
biBhbGxvY2F0b3IgJiYgKGFsbG9jYXRvci0+YWxsb2NhdGVkKCkgPiAoRml4ZWRWTVBvb2xQYWdl
VGFibGVzOjpzaXplKCkgLyAyKSk7CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0
aXN0aWNzID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIHJldHVybiBzdGF0
aXN0aWNzLmJ5dGVzQWxsb2NhdGVkID4gc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkIC8gMjsKIH0K
IAotRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9j
KHNpemVfdCBzaXplKQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRh
YmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBz
aXplSW5CeXRlcykKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2sp
OwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jKHNp
emUpOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBj
aGFyIGJ1ZlsyN107CisgICAgICAgIHRpbWVfdCBjdXJyZW50VGltZTsKKyAgICAgICAgdGltZSgm
Y3VycmVudFRpbWUpOworICAgICAgICBjdGltZV9yKCZjdXJyZW50VGltZSwgYnVmKTsKKyAgICAg
ICAgcHJpbnRmKCIlczogSSdtIGdpdmluZyBoZXIgYWxsIHNoZSdzIGdvdCwgQ2FwdGFpbiFcbiIs
IGJ1Zik7CisgICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAg
ICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKK30KKworc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRl
ZEJ5dGVDb3VudCgpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsK
IH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6
QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJ
TEUpCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGlu
TG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3Ip
OwotICAgIGFsbG9jYXRvci0+ZnJlZShhbGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQ
cm9maWxlKCk7CiB9CisjZW5kaWYKIAogfQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikK
KyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEpJ
VENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2pt
cFRhYmxlLmlzRW1wdHkoKSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5z
bGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZv
ciBzd2l0Y2ggdGFibGVzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVz
LnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDkz
OTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjIxLDIwICsyMjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJp
dmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdT
dHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xp
bmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhl
Y3V0YWJsZVBvb2wsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5
LCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxE
YXRhLCB0cmFtcG9saW5lcyk7CisgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvbGluZXMoZXhlY3V0YWJsZU1lbW9yeSwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMp
OwogICAgICAgICB9CiAKLSAgICAgICAgc3RhdGljIENvZGVQdHIgY29tcGlsZUNUSU5hdGl2ZUNh
bGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBl
eGVjdXRhYmxlUG9vbCwgTmF0aXZlRnVuY3Rpb24gZnVuYykKKyAgICAgICAgc3RhdGljIENvZGVS
ZWYgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVG
dW5jdGlvbiBmdW5jKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNh
blVzZUpJVCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIENvZGVSZWYoKTsKICAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwg
MCk7Ci0gICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChl
eGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgZnVuYyk7CisgICAgICAgICAgICByZXR1cm4gaml0
LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKICAgICAgICAg
fQogCiAgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2Rl
YmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNl
dCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihT
dHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNv
dW50LCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgUHJvcGVydHlTbG90Jiwgc2l6ZV90IGNhY2hl
ZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSk7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1
Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZz
ZXQsIFN0cnVjdHVyZUNoYWluKiwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29s
IGRpcmVjdCk7CiAKLSAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRh
KiBkYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcyk7CisgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+KiwgSlNHbG9iYWxEYXRhKiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAg
ICBMYWJlbCBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBp
c0NvbnN0cnVjdCA9IGZhbHNlKTsKLSAgICAgICAgQ29kZVB0ciBwcml2YXRlQ29tcGlsZUNUSU5h
dGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xv
YmFsRGF0YSogZGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYyk7CisgICAgICAgIENvZGVSZWYgcHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsK
ICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRk
cmVzc1B0ciByZXR1cm5BZGRyZXNzKTsKIAogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXAp
OwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNlbmRpZgog
ICAgICAgICBXZWFrUmFuZG9tIG1fcmFuZG9tR2VuZXJhdG9yOwotICAgICAgICBzdGF0aWMgQ29k
ZVB0ciBzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBFeGVjdXRhYmxlUG9vbCogcG9vbCk7CisgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKICAgICB9IEpJVF9DTEFTU19BTElH
Tk1FTlQ7CiAKICAgICBpbmxpbmUgdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDEyICs1NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAg
ICAgICBib29sIG9wZXJhdG9yICEoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gIW1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJu
ICFtX3JlZjsKICAgICAgICAgfQogCiAgICAgICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9jb2RlOworICAgICAgICAgICAg
cmV0dXJuIG1fcmVmLmNvZGUoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rp
b24gcmV0dXJucyB0aGUgb2Zmc2V0IGluIGJ5dGVzIG9mICdwb2ludGVySW50b0NvZGUnIGludG8K
QEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGJsb2NrIG9mIGNv
ZGUuICBJdCBpcyBBU1NFUlRlZCB0aGF0IG5vIGNvZGVibG9jayA+NGdiIGluIHNpemUuCiAgICAg
ICAgIHVuc2lnbmVkIG9mZnNldE9mKHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKICAgICAgICAgewot
ICAgICAgICAgICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
cG9pbnRlckludG9Db2RlKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIGludHB0cl90IHJlc3VsdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9j
YXN0PGludHB0cl90PihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAg
ICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihy
ZXN1bHQpKSA9PSByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihyZXN1bHQpOwogICAgICAgICB9CkBAIC03NywyNCArNzcsMjQgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUhCiAgICAgICAgIGlubGluZSBKU1ZhbHVl
IGV4ZWN1dGUoUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1l
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYubV9jb2RlLmV4
ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6
ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIEpT
VmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxl
cjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpKTsKICAgICAgICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fcmVmLm1fY29kZS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jl
Zi5jb2RlKCkuZGF0YUxvY2F0aW9uKCk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3Qgc2l6
ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3JlZi5tX2NvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9zaXplOworICAgICAgICAg
ICAgQVNTRVJUKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAg
IHJldHVybiBtX3JlZi5zaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBFeGVjdXRhYmxlUG9v
bCogZ2V0RXhlY3V0YWJsZVBvb2woKQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBn
ZXRFeGVjdXRhYmxlTWVtb3J5KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVm
Lm1fZXhlY3V0YWJsZVBvb2wuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuZXhlY3V0
YWJsZU1lbW9yeSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKSVRUeXBlIGppdFR5
cGUoKQpAQCAtMTA0LDkgKzEwNCw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIEhv
c3QgZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRl
ciBidXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRh
YmxlIHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KLSAgICAgICAgc3RhdGljIEpJVENv
ZGUgSG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKKyAgICAgICAgc3RhdGljIEpJVENvZGUgSG9z
dEZ1bmN0aW9uKENvZGVSZWYgY29kZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJ
VENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCwgSG9zdENhbGxUaHVuayk7CisgICAgICAg
ICAgICByZXR1cm4gSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKTsKICAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQgY2xlYXIoKQpAQCAtMTE2LDggKzExNiw4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSwgSklU
VHlwZSBqaXRUeXBlKQotICAgICAgICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxlUG9vbCwg
c2l6ZSkKKyAgICAgICAgSklUQ29kZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IGV4ZWN1dGFibGVNZW1vcnksIEpJVFR5cGUgaml0VHlwZSkKKyAgICAgICAgICAgIDogbV9yZWYo
ZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAg
ICAgIHsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hp
bmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykK
K3ZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4qIGV4ZWN1dGFibGVNZW1vcnksIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiB7CiAjaWYgRU5BQkxF
KEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgTGFiZWwgc29mdE1vZEJlZ2luID0gYWxpZ24oKTsK
QEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2
ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNv
bnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2lu
dGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5n
X2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19m
YWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFj
aGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDY29uc3RydWN0LCBG
dW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKIAogICAgIENvZGVSZWYg
ZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1dGFibGVQ
b29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAgKmV4ZWN1dGFibGVNZW1vcnkg
PSBmaW5hbENvZGUuZXhlY3V0YWJsZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZp
cnR1YWxDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOwog
ICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBv
bGluZUF0KHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7CkBAIC0zMTIsMTAgKzMxMiw5IEBAIEpJVDo6
TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2Fs
bFRodW5rOwogfQogCi1KSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKK0pJVDo6Q29kZVJlZiBKSVQ6OnBy
aXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2
ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBuYXRpdmVDYWxsOwotICAgIExhYmVsIG5hdGl2
ZUNhbGxUaHVuayA9IGFsaWduKCk7CiAKICAgICBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVI
ZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxvY2spOwogCkBAIC00NDcsMTIgKzQ0NiwxMCBA
QCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgcmV0KCk7CiAK
ICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsg
dXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIGV4ZWN1dGFibGVQ
b29sKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
CiAgICAgcGF0Y2hCdWZmZXIubGluayhuYXRpdmVDYWxsLCBGdW5jdGlvblB0cihmdW5jKSk7Ci0g
ICAgcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0KLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIu
dHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJ
TWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29s
LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xp
bmVzKQordm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiogZXhlY3V0YWJsZU1lbW9yeSwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKIHsKICAgICAv
LyAoMikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBm
b3Igc3RyaW5nIGxlbmd0aAogICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0gYWxpZ24oKTsK
QEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2
ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNv
bnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2lu
dGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5n
X2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19m
YWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFj
aGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDb25zdHJ1Y3QsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29kZVJlZiBm
aW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBv
b2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKKyAgICAqZXhlY3V0YWJsZU1lbW9yeSA9
IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmly
dHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsTGlua0Jl
Z2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSBwYXRjaEJ1
ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7CkBAIC0yODksOSAr
Mjg5LDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJl
dHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0
aW9uKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgp
OworICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21v
dihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lv
biA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbWV0aG9kX2NoZWNrKEluc3RyCiAgICAgbV9ieXRlY29kZU9mZnNldCArPSBPUENP
REVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0xOTMsOCArMTkzLDggQEAgSklUOjpDb2RlUHRyIEpJ
VDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwg
cmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCpnbG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCkubV9jb2RlOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEs
ICZqaXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKElu
c3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIp
OyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90
RXF1YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJp
bmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3Ry
aW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERh
dGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpOwogICAg
IEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09E
RV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVu
Y2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVD
YWxsKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVj
dF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgCkBAIC01NTAsMTAgKzU1MCw5
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlf
aWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAg
IHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJS
b3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRj
aEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MDYsNyArNjA1LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSwgcmVnVDEpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93
Q2FzZUNhbGwpOwpAQCAtNjE3LDEzICs2MTYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkp
OwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVs
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJS
b3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9y
ZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgog
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY2Niw3ICs2NjQs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgCiAgICAg
SnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAg
Ly8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJh
Y2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxh
YmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02ODQsMTMgKzY4Miwx
MiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgfQogCiAg
ICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBk
ZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9
IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93
IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29k
ZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29k
ZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25j
ZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRy
KGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzIzLDcgKzcyMCw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKIAogICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7
CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxs
cy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAg
aWYgKGl0ZXItPnRvKQpAQCAtNzMxLDcgKzcyOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgfQogICAgIH0gICAgCiAgICAgLy8gVXNlIHRoZSBw
YXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAg
bGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAgICAgCkBAIC03NDAsMTQgKzcz
NywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8g
T24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQg
aXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYg
c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVy
ZSk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFj
ayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChw
YXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1
YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJl
cywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJv
dG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAg
LTc4Nyw3ICs3ODQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0
CiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQ
b29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7
CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29y
ZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQo
KTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC03OTUsMjEgKzc5Miwy
MSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgICAgIH0K
ICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBs
YXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNj
ZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxs
IHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFi
ZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1
YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHByb3RvdHlwZVN0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCks
IG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBw
cm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsK
ICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGlu
IHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNo
T2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBp
bnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNo
YWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0
eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpA
QCAtODU0LDcgKzg1MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxp
c3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9v
bCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
ICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtODYyLDIyICs4NTksMjIg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICB9CiAg
ICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVy
ZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgCiAgICAgcGF0Y2hC
dWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8g
T24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQg
aXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBl
bnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2Rl
UmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAg
Ly8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxl
dGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBjaGFpbik7CisgICAgcHJvdG90eXBlU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7
CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBp
biB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVt
cCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0
Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXpl
X3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtOTIxLDcgKzkxOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09i
amVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1
bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAg
ICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5i
ZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYg
KGl0ZXItPnRvKQpAQCAtOTM1LDEzICs5MzIsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkp
OwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVs
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91
dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBi
YWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRp
b25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0
KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAg
IC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28g
dG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2Fs
bGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lk
X3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1
MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNW
QUxVRTY0KQogCi1KSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29k
ZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVz
OwpAQCAtNzcsOCArNzcsOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgp
OwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIHBv
b2wpOwotICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAgcmV0dXJuIHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
dmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjIsNyArMTIyLDcgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9uQ2Vs
bCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sK
ICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCks
IFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFr
ZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0
b3IpKTsKKyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+
Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIEp1
bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1
YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9Q
Q09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZl
cmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNp
dmVDYWxsKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWls
dXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFp
bCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogCkBAIC01NjQsMTAgKzU2NCw5IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNp
dGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBv
bGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRT
ZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpCkBAIC02MTUsNyArNjE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVn
VDIsIHJlZ1QwKTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMp
OwogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJl
IGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MjYs
MTMgKzYyNSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0
aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIu
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsK
KyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
IAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBj
dGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJy
YXlfZmFpbCkpOwpAQCAtNjczLDcgKzY3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRQcm90byhTdHIKICAgICB9IGVsc2UKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNl
dChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywg
bV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0
aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBj
YXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJ
bmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlk
U2xvd0Nhc2VDYWxsKTsKQEAgLTY5MCwxMyArNjg4LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAgfQogICAgIH0KICAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlf
b3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1
bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9f
bGlzdCkpOwpAQCAtNzI2LDcgKzcyMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCgKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDAs
IHN0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9y
IChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC03MzYsNyArNzMzLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIH0KIAogICAgIC8vIFVzZSB0
aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAx
XS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENv
ZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAg
ICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwogCkBAIC03NDUsMTQgKzc0
MiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8g
T24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQg
aXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRj
aE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0g
ICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2Jh
bERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0
dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Km1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwg
c3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZz
ZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVy
ZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHBy
b3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBA
IC03OTEsNyArNzg4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlz
dAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAg
IGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+Ojpp
dGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsr
aXRlcikgewpAQCAtODAxLDIwICs3OTgsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFByb3RvTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5
cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7
CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAg
ICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAKICAg
ICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBw
b2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0
KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgcHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBt
X2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgcHJv
dG90eXBlU3RydWN0dXJlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKIAogICAg
IC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBw
YXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0
aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRC
eUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5
TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5k
ZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwg
c2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTcsNyArODU0
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsK
ICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAg
IGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+Ojpp
dGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsr
aXRlcikgewpAQCAtODY3LDIyICs4NjQsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5
cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7
CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsK
IAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBh
dCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRP
ZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAg
ICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhd
LnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWlu
KTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4g
dGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hP
ZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwg
Q29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90
IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTkyNSw3ICs5MjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmpl
Y3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3Ig
KFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRl
ciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTk0MSwxMyArOTM4LDEzIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNl
dEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8g
c2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAg
IENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5q
dW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7
CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDggKzc1Nyw4IEBAIEpJVFRodW5rczo6
SklUVGh1bmtzKEpTR2xvYmFsRGF0YSogZ2xvYmEKICAgICBpZiAoIWdsb2JhbERhdGEtPmV4ZWN1
dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKSVQ6OmNv
bXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1fZXhlY3V0YWJsZVBvb2ws
ICZtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChtX2V4ZWN1dGFibGVQb29sKTsK
KyAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1fZXhl
Y3V0YWJsZU1lbW9yeSwgJm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7CisgICAgQVNTRVJUKCEhbV9l
eGVjdXRhYmxlTWVtb3J5KTsKICNpZiBDUFUoQVJNX1RIVU1CMikKICAgICAvLyBVbmZvcnR1bmF0
ZSB0aGUgYXJtIGNvbXBpbGVyIGRvZXMgbm90IGxpa2UgdGhlIHVzZSBvZiBvZmZzZXRvZiBvbiBK
SVRTdGFja0ZyYW1lIChzaW5jZSBpdCBjb250YWlucyBub24gUE9EIHR5cGVzKSwKICAgICAvLyBh
bmQgdGhlIE9CSkVDVF9PRkZTRVRPRiBtYWNybyBkb2VzIG5vdCBhcHBlYXIgY29uc3RhbnRpc2gg
ZW5vdWdoIGZvciBpdCB0byBiZSBoYXBweSB3aXRoIGl0cyB1c2UgaW4gQ09NUElMRV9BU1NFUlQK
QEAgLTE2MDgsNyArMTYwOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF8KIAogICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9zZWxmKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7
Ci0gICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBDb2RlTG9jYXRpb25MYWJlbCgpLCBzdHViSW5mby0+dS5nZXRCeUlk
U2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZy
YW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZigpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Qu
c3RydWN0dXJlTGlzdDsKQEAgLTE2MzQsMTIgKzE2MzQsMTIgQEAgc3RhdGljIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogZwogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUp
IHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0
cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERh
dGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90
by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJv
dG90eXBlU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
Q29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3Rv
TGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0
ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwg
c3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVj
dFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsK
LSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAg
ICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAg
ICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVM
aXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3Rv
X2xpc3Q6CkBAIC0zNTcyLDExICszNTcyLDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCB0b18KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0YWNrRnJhbWUuYXJn
c1swXS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZyYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpj
dGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQogewotICAgIHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBt
X2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAg
IHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJN
YXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAgIGlmIChlbnRy
eS5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFs
RGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNv
bmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNv
bmQ7CiB9CiAKQEAgLTM1ODQsNyArMzU4NCw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5r
czo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRl
cmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24s
IFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29u
ZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4
ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChn
bG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBjdGlOYXRp
dmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAg
ZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBm
dW5jdGlvbiksIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0
cnVjdG9yKSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKQEAg
LTM1OTIsOCArMzU5Miw4IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0
aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+
IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZl
RXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkgewotICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8g
Z2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wuZ2V0KCkpIDogTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyKCk7Ci0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxE
YXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9u
LCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VK
SVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRhKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwor
ICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0
YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBj
YWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOwogICAgIH0KICAgICByZXR1cm4gZW50cnku
Zmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmgJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoKSB7IHJl
dHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ29uc3RydWN0OyB9CiAgICAgICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTb2Z0TW9kdWxvKCkgeyByZXR1cm4gbV90cmFtcG9s
aW5lU3RydWN0dXJlLmN0aVNvZnRNb2R1bG87IH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFs
RGF0YSosIFRodW5rR2VuZXJhdG9yKTsKIAogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0
RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgTmF0
aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5j
dGlvbiwgVGh1bmtHZW5lcmF0b3IpOwpAQCAtMzAyLDExICszMDIsMTEgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHI+IENUSVN0dWJNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVy
YXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBDVElTdHViTWFwOwogICAgICAgICBDVElTdHVi
TWFwIG1fY3RpU3R1Yk1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUZ1bmN0aW9u
LCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+ID4gSG9zdEZ1bmN0aW9uU3R1Yk1hcDsKICAgICAgICAg
T3duUHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKLSAgICAg
ICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOworICAgICAgICBSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogCiAgICAgICAg
IFRyYW1wb2xpbmVTdHJ1Y3R1cmUgbV90cmFtcG9saW5lU3RydWN0dXJlOwogICAgIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAko
cmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVk
VGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgU3BlY2lhbGl6ZWRUaHVua0pJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJ
VCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IFRoaXNBcmd1bWVudCA9
IC0xOwotICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorICAgICAgICBT
cGVjaWFsaXplZFRodW5rSklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiAgICAgICAgICAgICA6IG1fZXhwZWN0ZWRBcmdDb3VudChleHBlY3RlZEFyZ0Nv
dW50KQogICAgICAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAg
ICwgbV9wb29sKHBvb2wpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2Ug
aGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgICAgICAgICAgbV9mYWls
dXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIs
IFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIChpbnQpc2l6ZW9mKFJlZ2lzdGVyKSksIFRy
dXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsgMSkpKTsKQEAgLTEyMywxMyArMTIyLDEzIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0KCk7CiAgICAgICAgIH0KICAgICAgICAg
Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmaW5hbGl6ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaykKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQogICAgICAgICB7Ci0gICAgICAgICAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRoaXMsIG1fcG9vbC5nZXQoKSk7CisgICAgICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRoaXMpOwogICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxsYmFj
aykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgp
OyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZpcnN0
LCBtX2NhbGxzW2ldLnNlY29uZCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCkubV9jb2RlOworICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSB0YXJn
ZXQgZnVuY3Rpb24gdXNlcyBmcFJlZ2lzdGVyMCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKQEAgLTE2
Myw3ICsxNjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludCBtX2V4
cGVjdGVkQXJnQ291bnQ7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAg
ICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fcG9vbDsKICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXBMaXN0IG1fZmFpbHVyZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwg
RnVuY3Rpb25QdHI+ID4gbV9jYWxsczsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gOTM5MTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzLDI2ICs2MywyNiBAQCBzdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRU
aHVuCiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBv
b2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJB
dFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAg
IGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEp
OwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAg
IHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2Rl
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
cG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xv
YmFsRGF0YSk7CiAgICAgLy8gbG9hZCBjaGFyIGNvZGUKICAgICBqaXQubG9hZEludDMyQXJndW1l
bnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGNoYXJUb1N0cmluZyhqaXQs
IGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwpAQCAtOTAsMTEgKzkwLDEx
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0cKICAgICByZXR1cm4g
aml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7Cisg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQu
c3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAg
aml0LnNxcnREb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6ZnBSZWdUMCk7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBkZWZpbmVVbmFyeURvdWJs
ZU9wV3JhcHBlcihsb2cpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpOwogZGVm
aW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCk7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBm
bG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwg
Z2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFs
RGF0YSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVu
YXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
KQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5s
b2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVt
cCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAg
ICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBAIC0xOTcsMTEgKzE5NywxMSBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgq
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
ZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBw
ZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
b25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTIyMCwxMSArMjIwLDExIEBAIHN0YXRpYyBjb25zdCBkb3Vi
bGUgbmVnYXRpdmVaZXJvQ29uc3RhbnQKIHN0YXRpYyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQg
PSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5lZ2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsK
ICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0g
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJs
ZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMjM5LDM3ICsyMzksMzcgQEAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxp
emUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYg
KCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgx
LCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAp
OwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7
CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvZ1RodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSkKLSAgICAgICAg
cmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Ci0gICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkK
LSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9h
ZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlKFVuYXJ5RG91
YmxlT3BXcmFwcGVyKGxvZykpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1
dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0RvdWJsZUJpdG9wcygpKQotICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucnNoaWZ0MzIoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQCBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
IAogICAgIGppdC5sb2FkRG91YmxlKCZvbmVDb25zdGFudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
ZnBSZWdUMSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5r
SklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDkzOTEwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMjAgKzMxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWN1
dGFibGVQb29sOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBOYXRpdmVFeGVj
dXRhYmxlOwotICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKKyAgICBjbGFzcyBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY7CiAKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciAo
KlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckF0VGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwg
RXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29s
Kik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29y
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0
YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiwgRXhlY3V0YWJsZVBvb2wqKTsKKyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAo
KlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
cm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKIH0KICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB0eXBlZGVmIEV4ZWN1dGFibGVCYXNlIEJhc2U7CiAKICNpZiBFTkFCTEUoSklUKQotICAg
ICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5r
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVj
dFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKCFjYWxsVGh1bmspCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoYWxsb2NhdGVD
ZWxsPE5hdGl2ZUV4ZWN1dGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIE5hdGl2ZUV4ZWN1dGFibGUo
Z2xvYmFsRGF0YSwgSklUQ29kZSgpLCBmdW5jdGlvbiwgSklUQ29kZSgpLCBjb25zdHJ1Y3Rvcik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjks
MTIgKzI5LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRo
cmVhZGluZy5oIgogCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUg
IkhlYXAuaCIKLSNpbmNsdWRlICJkdG9hLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUg
IldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDx3dGYvRGF0ZU1h
dGguaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTUzLDYgKzU0LDcgQEAgc3Rh
dGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2UoKQogICAgIFdyaXRlQmFycmllckNvdW50
ZXJzOjppbml0aWFsaXplKCk7CiAjZW5kaWYKICAgICBKU0dsb2JhbERhdGE6OnN0b3JlVlB0cnMo
KTsKKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCk7CiAjaWYg
RU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQogICAgIFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6
ZVRocmVhZGluZygpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2
LDcgKzE4Niw2IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAg
ICAsIGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAjaWYgRU5BQkxFKEFTU0VN
QkxFUikKICAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCi0gICAgLCByZWdleEFsbG9j
YXRvcigqdGhpcykKICNlbmRpZgogICAgICwgbGV4ZXIobmV3IExleGVyKHRoaXMpKQogICAgICwg
cGFyc2VyKG5ldyBQYXJzZXIpCkBAIC00NDAsNiArNDM5LDkgQEAgdm9pZCBKU0dsb2JhbERhdGE6
OnN0b3BTYW1wbGluZygpCiB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0
YXRlKiBleGVjKQogewogICAgIGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0YShleGVjKTsKKyNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxl
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rp
b25zKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0
YS5oCShyZXZpc2lvbiA5MzkxMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9jYXRvcjsKLSAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvciByZWdleEFsbG9jYXRvcjsKICNlbmRpZgogCiAjaWYgIUVOQUJMRShKSVQpCkBAIC0yMTYs
NyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnBy
ZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRTdHVi
czsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0
b3IgZ2VuZXJhdG9yKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihU
aHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBq
aXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3IpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdW5pdC91bml0dGVzdHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy91bml0L3VuaXR0ZXN0cy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvdW5pdC91bml0dGVzdHMuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJs
YWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdU
RjsKKworLy8gVGVzdCBzdXBwb3J0CisKKyNkZWZpbmUgUlVOX1NVSVRFKGV4cHJlc3Npb24pIGRv
IHsgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCIlczpcbiIsICNleHByZXNzaW9uKTsg
ICAgICAgICAgIFwKKyAgICAgICAgKGV4cHJlc3Npb24pOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJVTl9URVNUKGV4cHJlc3Npb24pIGRv
IHsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHByaW50ZigiICAgJXM6ICIsICNleHByZXNz
aW9uKTsgICAgICAgICAgICBcCisgICAgICAgIGZmbHVzaChzdGRvdXQpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIChleHByZXNzaW9uKTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIHByaW50ZigiT0tcbiIpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBURVNUX0FTU0VSVChleHByZXNz
aW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBp
ZiAoIShleHByZXNzaW9uKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgcHJpbnRmKCJGQUlMOiAlczolczolZDogYXNzZXJ0aW9uICVz
IGZhaWxlZCFcbiIsIF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjZXhwcmVzc2lv
bik7IFwKKyAgICAgICAgICAgIENSQVNIKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgw
KQorCitzdGF0aWMgdm9pZCBwcmludFZhbHVlKGJvb2wgdmFsdWUpCit7CisgICAgaWYgKHZhbHVl
KQorICAgICAgICBwcmludGYoInRydWUiKTsKKyAgICBlbHNlCisgICAgICAgIHByaW50ZigiZmFs
c2UiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRWYWx1ZShpbnQgdmFsdWUpCit7CisgICAgcHJp
bnRmKCIlZCIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRWYWx1ZShzaXplX3QgdmFs
dWUpCit7CisgICAgcHJpbnRmKCIweCVseCIsIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQgcHJp
bnRWYWx1ZSh2b2lkKiB2YWx1ZSkKK3sKKyAgICBwcmludGYoIiVwIiwgdmFsdWUpOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorc3RhdGljIHZvaWQgYXNzZXJ0RXF1YWxJbXBsKGNvbnN0IGNo
YXIqIGZpbGVOYW1lLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBjaGFyKiBhY3R1YWxTdHJpbmcsIFQgYWN0dWFsLCBUIGV4cGVjdGVkKQoreworICAgIGlm
IChhY3R1YWwgIT0gZXhwZWN0ZWQpIHsKKyAgICAgICAgcHJpbnRmKCJGQUlMOiAlczolczolZDog
ZXhwZWN0ZWQgJXMgdG8gYmUgIiwgZmlsZU5hbWUsIGZ1bmN0aW9uTmFtZSwgbGluZU51bWJlciwg
YWN0dWFsU3RyaW5nKTsKKyAgICAgICAgcHJpbnRWYWx1ZShleHBlY3RlZCk7CisgICAgICAgIHBy
aW50ZigiIGJ1dCB3YXMgIik7CisgICAgICAgIHByaW50VmFsdWUoYWN0dWFsKTsKKyAgICAgICAg
cHJpbnRmKCJcbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK3N0YXRpYyB2b2lkIGFzc2VydEVxdWFsSW1wbChjb25zdCBjaGFyKiBmaWxlTmFt
ZSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciog
YWN0dWFsU3RyaW5nLCBUIGFjdHVhbCwgaW50IGV4cGVjdGVkKQoreworICAgIGlmIChhY3R1YWwg
IT0gKFQpZXhwZWN0ZWQpIHsKKyAgICAgICAgcHJpbnRmKCJGQUlMOiAlczolczolZDogZXhwZWN0
ZWQgJXMgdG8gYmUgIiwgZmlsZU5hbWUsIGZ1bmN0aW9uTmFtZSwgbGluZU51bWJlciwgYWN0dWFs
U3RyaW5nKTsKKyAgICAgICAgcHJpbnRWYWx1ZShleHBlY3RlZCk7CisgICAgICAgIHByaW50Zigi
IGJ1dCB3YXMgIik7CisgICAgICAgIHByaW50VmFsdWUoYWN0dWFsKTsKKyAgICAgICAgcHJpbnRm
KCJcbiIpOworICAgICAgICBDUkFTSCgpOworICAgIH0KK30KKworI2RlZmluZSBURVNUX0FTU0VS
VF9FUVVBTChhY3R1YWwsIGV4cGVjdGVkKSBhc3NlcnRFcXVhbEltcGwoX19GSUxFX18sIF9fRlVO
Q1RJT05fXywgX19MSU5FX18sICNhY3R1YWwsIGFjdHVhbCwgZXhwZWN0ZWQpCisKKy8vIFRlc3Rz
IGZvciBSZWRCbGFja1RyZWUKKworY2xhc3MgUmVkQmxhY2tUcmVlVGVzdHMgeworcHJpdmF0ZToK
KyAgICBSZWRCbGFja1RyZWVUZXN0cygpIHsgfQorICAgIAorcHVibGljOgorICAgIHN0YXRpYyB2
b2lkIHJ1blRlc3RzKCkKKyAgICB7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIiIpKTsK
KyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiKnhAeSF6IikpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0RHJpdmVyKCIrYSIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2EqeEB5
IXoiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithKmFAYSFhIikpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJp
dmVyKCIrYStiK2MiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytkIikp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28rcCtx
K3Ircyt0K3Urdit4K3kreiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24rbytw
K3ErcitzK3QrdSt2K3greSt6KmEqYipjKmQqZSpmKmcqaCppKmoqaypsKm0qbipvKnAqcSpyKnMq
dCp1KnYqdyp4KnkqeiFhIWIhYyFkIWUhZiFnIWghaSFqIWshbCFtIW4hbyFwIXEhciFzIXQhdSF2
IXcheCF5IXoiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIitkK2QrbSt3QGRAbUB3
QGFAZ0BxIikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrZCtkK2QrZCtkK2QrZCtk
K2QrZCtmK2YrZitmK2YrZitmK2graCtpK2oraytsK20rbytwK3Ercit6QGFAYkBjQGRAZUBmQGdA
aEBpQGpAa0BsQG1AbkBvQHBAcUByQHNAdEB1QHZAd0B4QHlAeiIpKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIHVuc2lnbmVkIGNvdW50ZXI7CisgICAgCisgICAgc3RydWN0IFBhaXIg
eworICAgICAgICBjaGFyIGtleTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWU7CisgICAgICAgIAor
ICAgICAgICBQYWlyKCkgeyB9CisgICAgICAgIAorICAgICAgICBQYWlyKGNoYXIga2V5LCB1bnNp
Z25lZCB2YWx1ZSkKKyAgICAgICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgICAgICwgdmFsdWUo
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFBhaXImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4ga2V5ID09IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9v
bCBvcGVyYXRvcjwoY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBrZXkgPCBvdGhlci5rZXk7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAg
IHR5cGVkZWYgVmVjdG9yPFBhaXIsIDE2PiBQYWlyVmVjdG9yOworICAgIAorICAgIHN0YXRpYyBQ
YWlyVmVjdG9yIGZpbmRFeGFjdChQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXkpCisgICAg
eworICAgICAgICBQYWlyVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAg
ICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID09IGtleSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGFzVmVjdG9yLmF0KGluZGV4KSk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwgcmVzdWx0LmVuZCgpKTsKKyAgICAg
ICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IHJlbW92ZShQYWlyVmVjdG9yJiBhc1ZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAg
ICAgYXNWZWN0b3IuYXQoaW5kZXgpID0gYXNWZWN0b3IubGFzdCgpOworICAgICAgICBhc1ZlY3Rv
ci5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBQYWlyVmVjdG9yIGZpbmRM
ZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXkpCisg
ICAgeworICAgICAgICBjaGFyIGJlc3RLZXkgPSAwOyAvLyBhc3NpZ25tZW50IHRvIG1ha2UgZ2Nj
IGhhcHB5CisgICAgICAgIGJvb2wgZm91bmRLZXkgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID49IGtleSkgeworICAg
ICAgICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5IDwgYmVzdEtleSB8fCAhZm91
bmRLZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRLZXkgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICBiZXN0S2V5ID0gYXNWZWN0b3IuYXQoaW5kZXgpLmtleTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBhaXJW
ZWN0b3IgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgaWYgKCFmb3VuZEtleSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmluZEV4YWN0KGFz
VmVjdG9yLCBiZXN0S2V5KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgYXNzZXJ0Rm91
bmRBbmRSZW1vdmUoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5LCB1bnNpZ25lZCB2YWx1
ZSkKKyAgICB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBz
aXplX3QgZm91bmRJbmRleCA9IDA7IC8vIG1ha2UgY29tcGlsZXJzIGhhcHB5CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgp
LmtleSA9PSBrZXkKKyAgICAgICAgICAgICAgICAgICAgJiYgYXNWZWN0b3IuYXQoaW5kZXgpLnZh
bHVlID09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFmb3VuZCk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRFU1RfQVNTRVJU
KGZvdW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVtb3ZlKGFzVmVjdG9yLCBmb3Vu
ZEluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgcGFzc2VzIGEg
Y29weSBvZiB0aGUgdmVjdG9yLgorICAgIHN0YXRpYyB2b2lkIGFzc2VydEVxdWFsKFJlZEJsYWNr
VHJlZTxjaGFyLCB1bnNpZ25lZD4mIGFzVHJlZSwgUGFpclZlY3RvciBhc1ZlY3RvcikKKyAgICB7
CisgICAgICAgIGZvciAoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogY3VycmVu
dCA9IGFzVHJlZS5maXJzdCgpOyBjdXJyZW50OyBjdXJyZW50ID0gYXNUcmVlLnN1Y2Nlc3Nvcihj
dXJyZW50KSkKKyAgICAgICAgICAgIGFzc2VydEZvdW5kQW5kUmVtb3ZlKGFzVmVjdG9yLCBjdXJy
ZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQg
YXNzZXJ0U2FtZVZhbHVlc0ZvcktleShSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+JiBhc1Ry
ZWUsIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUsIFBhaXJWZWN0b3Ig
Zm91bmRWYWx1ZXMsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAg
ICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogcHJldk5vZGUg
PSBub2RlOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIG5vZGUgPSBwcmV2Tm9k
ZTsKKyAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IGFzVHJlZS5wcmVkZWNlc3NvcihwcmV2Tm9k
ZSk7CisgICAgICAgICAgICB9IHdoaWxlIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS0+a2V5ID09IGtl
eSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKG5vZGUtPmtl
eSwga2V5KTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFwcmV2Tm9kZSB8fCBwcmV2Tm9kZS0+
a2V5IDwga2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG8geworICAgICAgICAgICAg
ICAgIGFzc2VydEZvdW5kQW5kUmVtb3ZlKGZvdW5kVmFsdWVzLCBub2RlLT5rZXksIG5vZGUtPnZh
bHVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBub2RlID0gYXNUcmVlLnN1
Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVCghbm9kZSB8fCBub2Rl
LT5rZXkgPj0ga2V5KTsKKyAgICAgICAgICAgIH0gd2hpbGUgKG5vZGUgJiYgbm9kZS0+a2V5ID09
IGtleSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKGZvdW5kVmFs
dWVzLmlzRW1wdHkoKSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBjb250cm9sIHN0cmluZyBp
cyBhIG51bGwtdGVybWluYXRlZCBsaXN0IG9mIGNvbW1hbmRzLiBFYWNoCisgICAgLy8gY29tbWFu
ZCBpcyB0d28gY2hhcmFjdGVycywgd2l0aCB0aGUgZmlyc3QgaWRlbnRpZnlpbmcgdGhlIG9wZXJh
dGlvbgorICAgIC8vIGFuZCB0aGUgc2Vjb25kIGdpdmluZyBhIGtleS4gVGhlIGNvbW1hbmRzIGFy
ZToKKyAgICAvLyAgK3ggIEFkZCB4CisgICAgLy8gICp4ICBGaW5kIGFsbCBlbGVtZW50cyBlcXVh
bCB0byB4CisgICAgLy8gIEB4ICBGaW5kIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgdGhlIHNtYWxs
ZXN0IGtleSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB4CisgICAgLy8gICF4ICBS
ZW1vdmUgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgKKyAgICBzdGF0aWMgdm9pZCB0ZXN0RHJpdmVy
KGNvbnN0IGNoYXIqIGNvbnRyb2xTdHJpbmcpCisgICAgeworICAgICAgICBQYWlyVmVjdG9yIGFz
VmVjdG9yOworICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+IGFzVHJlZTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAoY29uc3QgY2hhciogY3VycmVudCA9IGNvbnRyb2xTdHJpbmc7
ICpjdXJyZW50OyBjdXJyZW50ICs9IDIpIHsKKyAgICAgICAgICAgIGNoYXIgY29tbWFuZCA9IGN1
cnJlbnRbMF07CisgICAgICAgICAgICBjaGFyIGtleSA9IGN1cnJlbnRbMV07CisgICAgICAgICAg
ICB1bnNpZ25lZCB2YWx1ZSA9ICsrY291bnRlcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QVNTRVJUKGNvbW1hbmQpOworICAgICAgICAgICAgQVNTRVJUKGtleSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgICAgICAgY2FzZSAnKyc6IHsK
KyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2Rl
ID0gbmV3IFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGU7CisgICAgICAgICAgICAg
ICAgbm9kZS0+a2V5ID0ga2V5OworICAgICAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gdmFsdWU7
CisgICAgICAgICAgICAgICAgYXNUcmVlLmluc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBh
c1ZlY3Rvci5hcHBlbmQoUGFpcihrZXksIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICcqJzog
eworICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5v
ZGUgPSBhc1RyZWUuZmluZEV4YWN0KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpCisg
ICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAg
ICAgICAgICAgICAgICBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZEV4
YWN0KGFzVmVjdG9yLCBrZXkpLCBrZXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBjYXNlICdAJzogeworICAgICAgICAgICAgICAgIFJlZEJs
YWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBhc1RyZWUuZmluZExlYXN0R3Jl
YXRlclRoYW5PckVxdWFsKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQobm9kZS0+a2V5ID49IGtleSk7CisgICAgICAgICAg
ICAgICAgICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVlLCBub2RlLCBmaW5kTGVhc3RH
cmVhdGVyVGhhbk9yRXF1YWwoYXNWZWN0b3IsIGtleSksIG5vZGUtPmtleSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKGZpbmRMZWFzdEdy
ZWF0ZXJUaGFuT3JFcXVhbChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Y2FzZSAnISc6IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAg
ICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVl
LnJlbW92ZShrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwobm9kZS0+a2V5LCBrZXkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoYXNWZWN0b3IsIG5vZGUtPmtl
eSwgbm9kZS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoZmluZEV4YWN0KGFzVmVjdG9yLCBrZXkpLmlzRW1w
dHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAgICBhc1Ry
ZWUuY2hlY2tDb25zaXN0ZW5jeSgpOworI2VuZGlmCisgICAgICAgICAgICBURVNUX0FTU0VSVF9F
UVVBTChhc1RyZWUuc2l6ZSgpLCBhc1ZlY3Rvci5zaXplKCkpOworICAgICAgICAgICAgYXNzZXJ0
RXF1YWwoYXNUcmVlLCBhc1ZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9Cit9OworCit1bnNpZ25l
ZCBSZWRCbGFja1RyZWVUZXN0czo6Y291bnRlcjsKKworLy8gVGVzdHMgZm9yIE1ldGFBbGxvY2F0
b3IKKworY2xhc3MgTWV0YUFsbG9jYXRvclRlc3RzIHsKK3ByaXZhdGU6CisgICAgTWV0YUFsbG9j
YXRvclRlc3RzKCkgeyB9CisKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBydW5UZXN0cygpCisg
ICAgeworICAgICAgICBSVU5fVEVTVCh0ZXN0Tm90aGluZygpKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdEFsbG9jWmVybygpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdE9uZUFsbG9jKDMyKSk7Cisg
ICAgICAgIFJVTl9URVNUKHRlc3RPbmVBbGxvYyg2NCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
T25lQWxsb2MocGFnZVNpemUoKSoyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxv
Y0ZyZWUoMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUo
MzIsIDY0LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMy
LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCA2NCwg
MCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgNjQsIDAp
KTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDY0LCAwKSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCAzMiwgMCkpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgMzIsIDApKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDMyLCAwKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUocGFnZVNpemUoKSAqIDIsIDMyLCAwKSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIHBhZ2VTaXplKCkgKiAy
LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUocGFnZVNpemUoKSAq
IDIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUocGFnZVNp
emUoKSwgcGFnZVNpemUoKSAqIDIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVhdEFs
bG9jRnJlZShwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSwgMCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCAzMiwgMTI4KSk7CisgICAgICAgIFJVTl9URVNU
KHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIDY0LCAxMjgpKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSg2NCwgMzIsIDEyOCkpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgcGFnZVNpemUoKSAt
IDMyLCBwYWdlU2l6ZSgpICogMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENv
YWxlc2NlKHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpICogMikpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHBhZ2VTaXplKCksIHBhZ2VTaXplKCksIHBhZ2VTaXpl
KCkgKiAyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwg
MzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAz
MiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMy
LCAzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0
RW5kLCBwYWdlU2l6ZSgpIC0gMzIsIDMyLCBwYWdlU2l6ZSgpIC0gNjQsIDY0LCAwKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDApKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwgMzIsIDApKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwgMzIsIDMyLCAw
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxsLCBwYWdlU2l6ZSgp
IC0gMzIsIDMyLCBwYWdlU2l6ZSgpIC0gNjQsIDY0LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RGaWxsSGVhcCgzMiwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSAvIDMyKSk7Cisg
ICAgICAgIFJVTl9URVNUKHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhl
YXApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEZpbGxIZWFwKHBhZ2VTaXplKCkgKiAyLCBkZWZh
dWx0UGFnZXNJbkhlYXAgLyAyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSaWdodEFsbG9jYXRp
b24oMzIsIHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RSaWdodEFsbG9jYXRpb24ocGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCksIHBhZ2VTaXplKCkg
LyA0LCBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDY0LCA2NCwg
MywgUnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoNjQsIDY0
LCAxMCwgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0
KDY0LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dEJlc3RGaXQoOTYsIDY0LCAzLCBSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0QmVzdEZpdCg5NiwgNjQsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdEJlc3RGaXQoOTYsIDY0LCAxMDAsIERvbnRSdW5TYW5pdHlDaGVjaykpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg5NiwgOTYsIDMsIFJ1blNhbml0eUNoZWNrKSk7Cisg
ICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA5NiwgMTAsIERvbnRSdW5TYW5pdHlDaGVj
aykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg5NiwgOTYsIDgwLCBEb250UnVuU2Fu
aXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayg2NCwgMzIpKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgpLCAzMikpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgLSAzMikpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCAzMikpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpICsgMzIpKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSkpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpIC0gMzIpKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSAqIDIg
LSAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShwYWdlU2l6
ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFnZVNpemUoKSwg
ZGVmYXVsdFBhZ2VzSW5IZWFwKjIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgUlVOX1RFU1QodGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlKHBhZ2VTaXplKCks
IGRlZmF1bHRQYWdlc0luSGVhcCoyLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBlbnVtIFNhbml0eUNoZWNrTW9kZSB7IFJ1blNh
bml0eUNoZWNrLCBEb250UnVuU2FuaXR5Q2hlY2sgfTsKKyAgICAKKyAgICBlbnVtIEhlYXBHcm93
dGhNb2RlIHsgRG9udEdyb3dIZWFwLCBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZSwgRm9yVGVz
dERlbWFuZEFsbG9jRG9udENvYWxlc2NlIH07CisgICAgCisgICAgc3RhdGljIEhlYXBHcm93dGhN
b2RlIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZTsKKyAgICBzdGF0aWMgc2l6ZV90IGFsbG93QWxsb2Nh
dGVQYWdlczsKKyAgICBzdGF0aWMgc2l6ZV90IHJlcXVlc3RlZE51bVBhZ2VzOworCisgICAgY2xh
c3MgU2ltcGxlVGVzdEFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgU2ltcGxlVGVzdEFsbG9jYXRvcigpCisgICAgICAgICAgICA6IE1ldGFBbGxv
Y2F0b3IoMzIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSksIGRlZmF1bHRQYWdlc0lu
SGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFs
IH5TaW1wbGVUZXN0QWxsb2NhdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgVEVTVF9BU1NF
UlQoIWFsbG9jYXRvckRlc3Ryb3llZCk7CisgICAgICAgICAgICBhbGxvY2F0b3JEZXN0cm95ZWQg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9j
YXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykKKyAgICAgICAgeworICAgICAgICAgICAgc3dp
dGNoIChjdXJyZW50SGVhcEdyb3d0aE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRG9udEdyb3dI
ZWFwOgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZToKKyAgICAgICAgICAgIGNhc2Ug
Rm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlOiB7CisgICAgICAgICAgICAgICAgVEVTVF9B
U1NFUlQoYWxsb3dBbGxvY2F0ZVBhZ2VzKTsKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChh
bGxvd0FsbG9jYXRlUGFnZXMgPj0gbnVtUGFnZXMpOworICAgICAgICAgICAgICAgIHJlcXVlc3Rl
ZE51bVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgICAgICAgICAgbnVtUGFnZXMgPSBhbGxvd0Fs
bG9jYXRlUGFnZXM7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0OworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRm9y
VGVzdERlbWFuZEFsbG9jQ29hbGVzY2UpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIG9mZnNldCkg
KiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhbGxvd0Fs
bG9jYXRlUGFnZXMgPSAwOworICAgICAgICAgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9
IERvbnRHcm93SGVhcDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBjb3VudGVyID0gMDsgY291bnRlciA8IG51bVBhZ2VzICsgb2Zmc2V0OyArK2NvdW50ZXIp
IHsKKyAgICAgICAgICAgICAgICAgICAgcGFnZU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlQ291bnRlciA9IDA7IGJ5dGVDb3VudGVyIDwg
cGFnZVNpemUoKTsgKytieXRlQ291bnRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9y
eU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgYWRkaXRpb25hbFBhZ2VzSW5IZWFwICs9IG51bVBhZ2VzOworICAg
ICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFT
SCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFn
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJlIGJvdGggZnJl
ZSBhbmQgdW5tYXBwZWQuCisgICAgICAgICAgICBURVNUX0FTU0VSVCghcGFnZVN0YXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAg
IGZvciAodWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFn
ZSk7IGFkZHJlc3MgPCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6
ZSgpOyArK2FkZHJlc3MpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIWJ5dGVTdGF0ZShy
ZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSkpOworICAgICAgICAgICAgcGFnZVN0YXRl
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0Zy
ZWUodm9pZCogcGFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxk
IGJlIGZyZWUgb2Ygb2JqZWN0cyBhdCB0aGlzIHBvaW50LCBidXQgaXQgc2hvdWxkIHN0aWxsCisg
ICAgICAgICAgICAvLyBiZSBtYXBwZWQuCisgICAgICAgICAgICBURVNUX0FTU0VSVChwYWdlU3Rh
dGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkpOworICAg
ICAgICAgICAgZm9yICh1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihwYWdlKTsgYWRkcmVzcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAr
IHBhZ2VTaXplKCk7ICsrYWRkcmVzcykKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVCghYnl0
ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpKSk7CisgICAgICAgICAgICBw
YWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
YmFzZVBhZ2UgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0UGFnZXNJbkhl
YXAgPSAxMDA7CisgICAgCisgICAgc3RhdGljIHVuc2lnbmVkIGFkZGl0aW9uYWxQYWdlc0luSGVh
cDsKKyAgICAKKyAgICBzdGF0aWMgVmVjdG9yPGJvb2wsIDA+KiBtZW1vcnlNYXA7CisgICAgc3Rh
dGljIFZlY3Rvcjxib29sLCAwPiogcGFnZU1hcDsKKyAgICBzdGF0aWMgYm9vbCBhbGxvY2F0b3JE
ZXN0cm95ZWQ7CisgICAgCisgICAgc3RhdGljIFNpbXBsZVRlc3RBbGxvY2F0b3IqIGFsbG9jYXRv
cjsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0Tm90aGluZygpCisgICAgeworICAgICAgICAv
LyBUZXN0cyB0aGF0IGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIGFuIGFsbG9jYXRvciB3b3Jrcy4K
KyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RBbGxvY1plcm8oKQorICAgIHsKKyAgICAgICAgLy8g
VGVzdHMgdGhhdCBhbGxvY2F0aW5nIGEgemVyby1sZW5ndGggYmxvY2sgcmV0dXJucyAwIGFuZAor
ICAgICAgICAvLyBkb2VzIG5vdCBjaGFuZ2UgYW55dGhpbmcgaW4gbWVtb3J5LgorICAgICAgICAK
KyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghYWxsb2NhdG9yLT5h
bGxvY2F0ZSgwKSk7CisKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxv
Y2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICBmcmVlKGZpbmFsKTsKKworICAgICAgICB0ZWFyRG93
bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0T25lQWxsb2Moc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICAvLyBUZXN0cyB0aGUgbW9zdCBiYXNpYyBiZWhhdmlvcjogYWxs
b2NhdGUgb25lIHRoaW5nIGFuZCBmcmVlIGl0LiBBbHNvCisgICAgICAgIC8vIHZlcmlmaWVzIHRo
YXQgdGhlIHN0YXRlIG9mIHBhZ2VzIGlzIGNvcnJlY3QuCisgICAgICAgIAorICAgICAgICBzZXRV
cCgpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxs
b2NhdGUoc2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAg
IFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZSk7CisgICAgICAg
IFRFU1RfQVNTRVJUKHBhZ2VTdGF0ZShiYXNlUGFnZSkpOworICAgICAgICAKKyAgICAgICAgY29u
ZmlybShoYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAg
ICAgICAKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24o
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdFJlcGVhdEFsbG9jRnJlZShzaXpl
X3QgZmlyc3RTaXplLCAuLi4pCisgICAgeworICAgICAgICAvLyBUZXN0cyByaWdodC1jb2FsZXNj
aW5nIGJ5IHJlcGVhdGVkbHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZy4gVGhlIGlkZWEKKyAgICAg
ICAgLy8gaXMgdGhhdCBpZiB5b3UgYWxsb2NhdGUgc29tZXRoaW5nIGFuZCB0aGVuIGZyZWUgaXQs
IHRoZW4gdGhlIGhlYXAgc2hvdWxkCisgICAgICAgIC8vIGxvb2sgaWRlbnRpY2FsIHRvIHdoYXQg
aXQgd2FzIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBkdWUgdG8gYSByaWdodC1jb2FsZXNjZQorICAg
ICAgICAvLyBvZiB0aGUgZnJlZWQgY2h1bmsgYW5kIHRoZSBhbHJlYWR5LWZyZWUgbWVtb3J5LCBh
bmQgc28gc3Vic2VxdWVudAorICAgICAgICAvLyBhbGxvY2F0aW9ucyBzaG91bGQgYmVoYXZlIHRo
ZSBzYW1lIGFzIHRoZSBmaXJzdCBvbmUuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAg
ICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmly
c3RTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgVEVT
VF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBmaXJzdFNpemUpOworICAgICAg
ICAKKyAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFy
ayhoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAg
ICAgICAgdmFfbGlzdCBhcmdMaXN0OworICAgICAgICB2YV9zdGFydChhcmdMaXN0LCBmaXJzdFNp
emUpOworICAgICAgICB3aGlsZSAoc2l6ZV90IHNpemVJbkJ5dGVzID0gdmFfYXJnKGFyZ0xpc3Qs
IHNpemVfdCkpIHsKKyAgICAgICAgICAgIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICAgICAgY29uZmly
bUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZSho
YW5kbGUpOworICAgICAgICB9CisgICAgICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICAgICAgCisg
ICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RTaW1w
bGVGdWxsQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUsIHNpemVf
dCB0aGlyZFNpemUpCisgICAgeworICAgICAgICAvLyBBbGxvY2F0ZXMgc29tZXRoaW5nIG9mIHNp
emUgZmlyc3RTaXplLCB0aGVuIHNvbWV0aGluZyBvZiBzaXplIHNlY29uZFNpemUsIGFuZCB0aGVu
CisgICAgICAgIC8vIGZyZWVzIHRoZSBmaXJzdCBhbGxvY2F0aW9uLCBhbmQgdGhlbiB0aGUgc2Vj
b25kLCBhbmQgdGhlbiBhdHRlbXB0cyB0byBhbGxvY2F0ZSB0aGUKKyAgICAgICAgLy8gdGhpcmQs
IGFzc2VydGluZyB0aGF0IGl0IGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBo
ZWFwLgorICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdGVzdCBtYXkgY2F1c2Ug
cmlnaHQtYWxsb2NhdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgdGVzdCB0byBmYWlsLgorICAg
ICAgICAvLyBUaHVzIHRoZSBjb3JyZWN0IHdheSBvZiBydW5uaW5nIHRoaXMgdGVzdCBpcyB0byBl
bnN1cmUgdGhhdCBzZWNvbmRTaXplIGlzCisgICAgICAgIC8vIHBpY2tlZCBpbiBzdWNoIGEgd2F5
IHRoYXQgaXQgbmV2ZXIgc3RyYWRkbGVzIGEgcGFnZS4KKyAgICAgICAgCisgICAgICAgIHNldFVw
KCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9
IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpcnN0SGFu
ZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmlyc3RIYW5kbGUtPnNpemVJbkJ5dGVz
KCksIGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGZpcnN0SGFuZGxlKTsK
KyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmlyc3RIYW5kbGUpOworCisgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOwor
ICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIGZpcnN0U2l6ZSkpOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNlY29u
ZFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShmaXJzdEhhbmRsZSk7CisgICAgICAg
IGNvbmZpcm0oc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vj
b25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgY29uZmlybShzZWNvbmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdh
dGVybWFyayhzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShzZWNvbmRIYW5k
bGUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChi
YXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAg
ICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiB0aGlyZEhhbmRsZSA9IGFsbG9jYXRl
KHRoaXJkU2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHRoaXJkSGFuZGxlLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAg
ICAgICAgVEVTVF9BU1NFUlRfRVFVQUwodGhpcmRIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRoaXJk
U2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHRoaXJkSGFuZGxlKTsKKyAgICAgICAg
Y29uZmlybUhpZ2hXYXRlcm1hcmsodGhpcmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJl
ZSh0aGlyZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAg
ICAKKyAgICBlbnVtIFRlc3RGSUZPQWxsb2NNb2RlIHsgRmlsbEF0RW5kLCBFYWdlckZpbGwgfTsK
KyAgICBzdGF0aWMgdm9pZCB0ZXN0RklGT0FsbG9jKFRlc3RGSUZPQWxsb2NNb2RlIG1vZGUsIC4u
LikKKyAgICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCB0ZXN0IHRoZSBzaW1wbGUgY2FzZSBvZiBu
by1jb2FsZXNjZSAoZnJlZWluZyB0aGUgbGVmdC1tb3N0CisgICAgICAgIC8vIGNodW5rIGluIG1l
bW9yeSB3aGVuIHRoZSBjaHVuayB0byB0aGUgcmlnaHQgb2YgaXQgaXMgYWxsb2NhdGVkKSBhbmQK
KyAgICAgICAgLy8gZnVsbHkgZXhlcmNpc2UgbGVmdC1jb2FsZXNjaW5nIGFuZCBmdWxsLWNvYWxl
c2NpbmcuIEluIEVhZ2VyRmlsbAorICAgICAgICAvLyBtb2RlLCB0aGlzIGFsc28gdGVzdHMgcGVy
ZmVjdC1maXQgYWxsb2NhdGlvbiBhbmQgbm8tY29hbGVzY2luZyBmcmVlLgorICAgICAgICAKKyAg
ICAgICAgc2V0VXAoKTsKKworICAgICAgICBzaXplX3QgdG90YWxTaXplID0gMDsKKyAgICAgICAg
CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAg
ICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICAgICAgdmFfc3RhcnQoYXJnTGlzdCwg
bW9kZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0ZXMgPSB2YV9hcmcoYXJnTGlz
dCwgc2l6ZV90KSkgeworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0g
YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFu
ZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXpl
KCkgKyB0b3RhbFNpemUpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBj
b25maXJtKGhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChoYW5kbGUpOworICAg
ICAgICAgICAgdG90YWxTaXplICs9IHNpemVJbkJ5dGVzOworICAgICAgICB9CisgICAgICAgIHZh
X2VuZChhcmdMaXN0KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICAgICAgY29uZmlybSho
YW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc2l6ZVNvRmFyID0g
MDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlcy5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHNpemVTb0ZhciArPSBoYW5kbGVzLmF0KGluZGV4
KS0+c2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlcy5hdChpbmRleCkpOwor
ICAgICAgICAgICAgaWYgKG1vZGUgPT0gRWFnZXJGaWxsKSB7CisgICAgICAgICAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6ZVNvRmFyKTsKKyAgICAgICAg
ICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZVNvRmFyKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwg
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplLCB0cnVlKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5kZXggPCBoYW5kbGVzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGNv
bmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZXMubGFzdCgpKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBiYXNl
UGFnZSAqIHBhZ2VTaXplKCkgKyBzaXplU29GYXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHNpemVTb0ZhciA9PSB0b3RhbFNpemUp
OworICAgICAgICAKKyAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChiYXNl
UGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgICAg
IAorICAgICAgICBpZiAobW9kZSA9PSBGaWxsQXRFbmQpIHsKKyAgICAgICAgICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGZpbmFsSGFuZGxlID0gYWxsb2NhdGUodG90YWxTaXplKTsKKyAgICAgICAg
ICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGZpbmFsSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0b3RhbFNpemUpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBjb25maXJtKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgICAgIGNv
bmZpcm1IaWdoV2F0ZXJtYXJrKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZnJlZShmaW5hbEhhbmRsZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHRlYXJE
b3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RGaWxsSGVhcChzaXplX3Qg
c2l6ZUluQnl0ZXMsIHNpemVfdCBudW1BbGxvY2F0aW9ucykKKyAgICB7CisgICAgICAgIHNldFVw
KCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhh
bmRsZXM7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwg
bnVtQWxsb2NhdGlvbnM7ICsraW5kZXgpCisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxv
Y2F0ZShzaXplSW5CeXRlcywgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIAorICAgICAg
ICBzYW5pdHlDaGVjaygpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRv
ci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90
IGluZGV4ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAg
IGZyZWUoaGFuZGxlcy5hdChpbmRleCksIERvbnRSdW5TYW5pdHlDaGVjayk7CisgICAgICAgIAor
ICAgICAgICBzYW5pdHlDaGVjaygpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdFJpZ2h0QWxsb2NhdGlvbihzaXplX3QgZmly
c3RMZWZ0U2l6ZSwgc2l6ZV90IGZpcnN0UmlnaHRTaXplLCBzaXplX3Qgc2Vjb25kTGVmdFNpemUs
IHNpemVfdCBzZWNvbmRSaWdodFNpemUpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAg
ICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RMZWZ0ID0gYWxsb2NhdGUoZmly
c3RMZWZ0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpcnN0TGVmdC0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdFJpZ2h0ID0gYWxsb2NhdGUo
Zmlyc3RSaWdodFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdFJpZ2h0LT5l
bmQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5I
ZWFwKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUqIHNlY29uZExlZnQgPSBhbGxvY2F0ZShzZWNvbmRMZWZ0U2l6ZSk7CisgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKHNlY29uZExlZnQtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGJhc2VQYWdlICogcGFnZVNpemUoKSArIGZpcnN0TGVmdC0+c2l6ZUluQnl0ZXMoKSkpOworICAg
ICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kUmlnaHQgPSBhbGxvY2F0
ZShzZWNvbmRSaWdodFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRSaWdo
dC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdl
c0luSGVhcCkgKiBwYWdlU2l6ZSgpIC0gZmlyc3RSaWdodC0+c2l6ZUluQnl0ZXMoKSkpOworICAg
ICAgICAKKyAgICAgICAgZnJlZShmaXJzdExlZnQpOworICAgICAgICBmcmVlKGZpcnN0UmlnaHQp
OworICAgICAgICBmcmVlKHNlY29uZExlZnQpOworICAgICAgICBmcmVlKHNlY29uZFJpZ2h0KTsK
KyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUo
ZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VR
VUFMKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBh
Z2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmluYWwpOworICAgICAgICAKKyAg
ICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdEJlc3RG
aXQoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHN0ZXAsIHVuc2lnbmVkIG51bVNsb3RzLCBTYW5p
dHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlKQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAg
ICAgICAgCisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlc1Rv
RnJlZTsKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOwor
ICAgICAgICBWZWN0b3I8dm9pZCosIDA+IGxvY2F0aW9uczsKKyAgICAgICAgCisgICAgICAgIHNp
emVfdCBzaXplID0gZmlyc3RTaXplOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBudW1TbG90czsgKytpbmRleCkgeworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogdG9GcmVlID0gYWxsb2NhdGUoc2l6ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAg
ICAgIGlmICghaGFuZGxlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodG9G
cmVlLT5zdGFydCgpICE9IGhhbmRsZXMubGFzdCgpLT5lbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOworICAgICAgICAgICAgICAgICAgICB0
b0ZyZWUgPSBhbGxvY2F0ZShzaXplLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZnJh
Z2dlciA9IGFsbG9jYXRlKDMyLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgVEVTVF9B
U1NFUlRfRVFVQUwoZnJhZ2dlci0+c3RhcnQoKSwgdG9GcmVlLT5lbmQoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQodG9GcmVlLT5zdGFydCgpKTsKKworICAg
ICAgICAgICAgaGFuZGxlc1RvRnJlZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAgIGhhbmRs
ZXMuYXBwZW5kKGZyYWdnZXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplICs9IHN0
ZXA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsb2NhdGlvbnMuc2l6ZSgp
ID09IG51bVNsb3RzKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IGhhbmRsZXNUb0ZyZWUuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICAgICAgZnJl
ZShoYW5kbGVzVG9GcmVlLmF0KGluZGV4KSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgCisg
ICAgICAgIHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBiZXN0Rml0ID0gYWxsb2NhdGUoc2l6ZSAtIDMyLCBzYW5pdHlDaGVja01vZGUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBURVNUX0FTU0VSVChiZXN0Rml0LT5zdGFydCgpID09
IGxvY2F0aW9ucy5hdChpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJlc3RGaXQt
PmVuZCgpID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihsb2NhdGlvbnMuYXQoaW5kZXgpKSArIHNpemUpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc21hbGwgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hl
Y2tNb2RlKTsKKyAgICAgICAgICAgIGlmIChiZXN0Rml0LT5zdGFydCgpID09IGxvY2F0aW9ucy5h
dChpbmRleCkpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc21hbGwtPnN0YXJ0
KCksIGJlc3RGaXQtPmVuZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBU
RVNUX0FTU0VSVF9FUVVBTChzbWFsbC0+ZW5kKCksIGJlc3RGaXQtPnN0YXJ0KCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBmcmVlKGJlc3RGaXQsIHNhbml0eUNoZWNrTW9kZSk7CisgICAg
ICAgICAgICBmcmVlKHNtYWxsLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBzaXplICs9IHN0ZXA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KQorICAgICAgICAg
ICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgCisg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2Vz
SW5IZWFwICogcGFnZVNpemUoKSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCwgc2FuaXR5Q2hl
Y2tNb2RlKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyB2b2lkIHRlc3RTaHJpbmsoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNp
emUpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgLy8gQWxsb2Nh
dGUgdGhlIHRoaW5nIHRoYXQgd2lsbCBiZSBzaHJ1bmsKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFNocmluayBpdCwgYW5kIG1ha2Ugc3VyZSB0aGF0IG91ciBzdGF0ZSByZWZsZWN0cyB0aGUgc2hy
aW5rYWdlLgorICAgICAgICBub3RpZnlGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpICsgc2Vjb25kU2l6ZSksIGZp
cnN0U2l6ZSAtIHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgaGFuZGxlLT5zaHJpbmso
c2Vjb25kU2l6ZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6ZUluQnl0
ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBzYW5pdHlDaGVjaygpOworICAg
ICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgbm90IGVtcHR5LgorICAg
ICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAg
KiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgcmVtYWlu
ZGVyIG9mIHRoZSBoZWFwLgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiByZW1haW5kZXIg
PSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC0gc2Vjb25kU2l6ZSk7
CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHJlbWFpbmRlci0+c3RhcnQoKSwgaGFuZGxlLT5l
bmQoKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKHJlbWFpbmRlcik7CisgICAgICAgIGZyZWUo
aGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIGVt
cHR5IGFuZCBmaW5pc2ggdXAuCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0g
YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNl
UGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmluYWwpOworICAg
ICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQg
dGVzdERlbWFuZEFsbG9jQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IG51bVBhZ2Vz
LCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAor
ICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5I
ZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFs
bG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAg
ICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkp
OworICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgY3Vy
cmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U7CisgICAgICAg
IGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgTWV0YUFs
bG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBURVNUX0FTU0VSVChjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdy
b3dIZWFwKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYWxsb3dBbGxvY2F0ZVBhZ2VzLCAw
KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwocmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRT
aXplICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJU
X0VRVUFMKHNlY29uZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJh
c2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0gMDsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmly
c3RIYW5kbGUpOworICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAg
ICBmcmVlKGFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6
ZSgpKSk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCB0ZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwg
c2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIHNldFVw
KCk7CisgICAgICAgIAorICAgICAgICBmcmVlKGFsbG9jYXRlKGZpcnN0U2l6ZSkpOworICAgICAg
ICBmcmVlKGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCAr
IG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisg
ICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAg
ICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVh
cCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRI
ZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZTsKKyAgICAgICAg
YWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAg
ICAgCisgICAgICAgIFRFU1RfQVNTRVJUKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jv
d0hlYXApOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvd0FsbG9jYXRlUGFnZXMsIDAp
OworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChyZXF1ZXN0ZWROdW1QYWdlcywgKHNlY29uZFNp
emUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFz
ZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
CisgICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0gMDsKKyAgICAgICAgCisgICAgICAgIFRFU1Rf
QVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdl
cykgKiBwYWdlU2l6ZSgpKSk7CisKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAg
IGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxv
Y2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6
ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6
ZSk7CisgICAgICAgIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VR
VUFMKHNlY29uZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQ
YWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwICsgMSkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIGZy
ZWUoZmlyc3RIYW5kbGUpOworICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAor
ICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBzZXRVcCgp
CisgICAgeworICAgICAgICBtZW1vcnlNYXAgPSBuZXcgVmVjdG9yPGJvb2wsIDA+KCk7CisgICAg
ICAgIHBhZ2VNYXAgPSBuZXcgVmVjdG9yPGJvb2wsIDA+KCk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIHBhZ2UgPSBiYXNlUGFnZTsgcGFnZSA8IGJhc2VQYWdlICsgZGVmYXVsdFBh
Z2VzSW5IZWFwOyArK3BhZ2UpIHsKKyAgICAgICAgICAgIHBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwg
cGFnZVNpemUoKTsgKytieXRlSW5QYWdlKQorICAgICAgICAgICAgICAgIG1lbW9yeU1hcC0+YXBw
ZW5kKGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGFsbG9jYXRvckRlc3Ryb3llZCA9IGZh
bHNlOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRG9udEdyb3dI
ZWFwOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSAwOworICAgICAgICBhZGRpdGlvbmFs
UGFnZXNJbkhlYXAgPSAwOworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yID0gbmV3IFNpbXBs
ZVRlc3RBbGxvY2F0b3IoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVhckRvd24o
KQorICAgIHsKKyAgICAgICAgVEVTVF9BU1NFUlQoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERv
bnRHcm93SGVhcCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG93QWxsb2NhdGVQYWdl
cywgMCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHJlcXVlc3RlZE51bVBhZ2VzLCAwKTsK
KyAgICAgICAgCisgICAgICAgIC8vIG1lbW9yeSBzaG91bGQgYmUgZnJlZS4KKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBwYWdlID0gYmFzZVBhZ2U7IHBhZ2UgPCBiYXNlUGFnZSArIGRlZmF1bHRQYWdl
c0luSGVhcDsgKytwYWdlKSB7CisgICAgICAgICAgICBURVNUX0FTU0VSVCghcGFnZVN0YXRlKHBh
Z2UpKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZUluUGFnZSA9IDA7IGJ5dGVJblBh
Z2UgPCBwYWdlU2l6ZSgpOyArK2J5dGVJblBhZ2UpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NF
UlQoIWJ5dGVTdGF0ZShwYWdlICogcGFnZVNpemUoKSArIGJ5dGVJblBhZ2UpKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgLy8gTk9URTogdGhpcyBhdXRvbWF0aWNhbGx5IHRlc3RzIHRo
YXQgdGhlIGFsbG9jYXRvciBkaWQgbm90IGxlYWsKKyAgICAgICAgLy8gbWVtb3J5LCBzbyBsb25n
IGFzIHRoZXNlIHRlc3RzIGFyZSBydW5uaW5nIHdpdGggIWRlZmluZWQoTkRFQlVHKS4KKyAgICAg
ICAgLy8gU2VlIE1ldGFBbGxvY2F0b3I6Om1fbWFsbG9jQmFsYW5jZS4KKyAgICAgICAgZGVsZXRl
IGFsbG9jYXRvcjsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKGFsbG9jYXRvckRlc3Ry
b3llZCk7CisgICAgICAgIAorICAgICAgICBkZWxldGUgbWVtb3J5TWFwOworICAgICAgICBkZWxl
dGUgcGFnZU1hcDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNr
TW9kZSA9IFJ1blNhbml0eUNoZWNrKQorICAgIHsKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykubGVha1JlZigpOwor
ICAgICAgICBURVNUX0FTU0VSVChoYW5kbGUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTCho
YW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIHVp
bnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGFuZGxlLT5z
dGFydCgpKTsKKyAgICAgICAgdWludHB0cl90IGVuZEJ5dGUgPSBzdGFydEJ5dGUgKyBzaXplSW5C
eXRlczsKKyAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1
cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytjdXJyZW50Qnl0ZSkgeworICAgICAgICAgICAgVEVTVF9B
U1NFUlQoIWJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkpOworICAgICAgICAgICAgYnl0ZVN0YXRlKGN1
cnJlbnRCeXRlKSA9IHRydWU7CisgICAgICAgICAgICBURVNUX0FTU0VSVChwYWdlU3RhdGUoY3Vy
cmVudEJ5dGUgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChzYW5pdHlDaGVja01vZGUgPT0gUnVuU2FuaXR5Q2hlY2spCisgICAgICAgICAgICBzYW5pdHlD
aGVjaygpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIHZvaWQgZnJlZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUsIFNhbml0eUNo
ZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAg
IFRFU1RfQVNTRVJUKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBub3RpZnlGcmVlKGhhbmRs
ZS0+c3RhcnQoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgaGFuZGxlLT5kZXJl
ZigpOworICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlD
aGVjaykKKyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyB2b2lkIG5vdGlmeUZyZWUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7
CisgICAgICAgIHVpbnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oc3RhcnQpOworICAgICAgICB1aW50cHRyX3QgZW5kQnl0ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJ
bkJ5dGVzOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsg
Y3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBURVNU
X0FTU0VSVChieXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShj
dXJyZW50Qnl0ZSkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCBzYW5pdHlDaGVjaygpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAgVEVTVF9B
U1NFUlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCkgLSBhbGxvY2F0b3ItPmJ5dGVz
QWxsb2NhdGVkKCksIGFsbG9jYXRvci0+ZGVidWdGcmVlU3BhY2VTaXplKCkpOworI2VuZGlmCisg
ICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpLCAoZGVm
YXVsdFBhZ2VzSW5IZWFwICsgYWRkaXRpb25hbFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpOwor
ICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvY2F0b3ItPmJ5dGVzQWxsb2NhdGVkKCksIGJ5
dGVzQWxsb2NhdGVkKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvY2F0b3ItPmJ5
dGVzQ29tbWl0dGVkKCksIGJ5dGVzQ29tbWl0dGVkKCkpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgdm9pZCBjb25maXJtKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKKyAgICB7CisgICAg
ICAgIHVpbnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGFu
ZGxlLT5zdGFydCgpKTsKKyAgICAgICAgY29uZmlybShzdGFydEJ5dGUsIHN0YXJ0Qnl0ZSArIGhh
bmRsZS0+c2l6ZUluQnl0ZXMoKSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IGNvbmZpcm1IaWdoV2F0ZXJtYXJrKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKKyAgICB7
CisgICAgICAgIGNvbmZpcm0ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+ZW5k
KCkpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2Up
OworICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtKHVpbnRw
dHJfdCBzdGFydEJ5dGUsIHVpbnRwdHJfdCBlbmRCeXRlLCBib29sIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRl
IDwgZW5kQnl0ZTsgKytjdXJyZW50Qnl0ZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVl
KQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBh
Z2VTaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAg
ICB1aW50cHRyX3QgZmlyc3RGcmVlUGFnZSA9IChzdGFydEJ5dGUgKyBwYWdlU2l6ZSgpIC0gMSkg
LyBwYWdlU2l6ZSgpOworICAgICAgICAgICAgdWludHB0cl90IGxhc3RGcmVlUGFnZSA9IChlbmRC
eXRlIC0gcGFnZVNpemUoKSkgLyBwYWdlU2l6ZSgpOworICAgICAgICAgICAgZm9yICh1aW50cHRy
X3QgY3VycmVudFBhZ2UgPSBmaXJzdEZyZWVQYWdlOyBjdXJyZW50UGFnZSA8PSBsYXN0RnJlZVBh
Z2U7ICsrY3VycmVudFBhZ2UpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0
ZShjdXJyZW50UGFnZSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBzaXpl
X3QgYnl0ZXNBbGxvY2F0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1lbW9yeU1hcC0+c2l6ZSgp
OyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAobWVtb3J5TWFwLT5hdChpbmRleCkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisgICAgewor
ICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgcGFnZU1hcC0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAo
cGFnZU1hcC0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9
CisgICAgICAgIHJldHVybiByZXN1bHQgKiBwYWdlU2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgYm9vbCYgYnl0ZVN0YXRlKHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gYnl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSk7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBib29sJiBieXRlU3RhdGUodWludHB0cl90IGFkZHJlc3MpCisg
ICAgeworICAgICAgICB1aW50cHRyX3QgYnl0ZUluZGV4ID0gYWRkcmVzcyAtIGJhc2VQYWdlICog
cGFnZVNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1lbW9yeU1hcC0+YXQoYnl0ZUluZGV4KTsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIGJvb2wmIHBhZ2VTdGF0ZSh1aW50cHRyX3QgcGFnZSkKKyAg
ICB7CisgICAgICAgIHVpbnRwdHJfdCBwYWdlSW5kZXggPSBwYWdlIC0gYmFzZVBhZ2U7CisgICAg
ICAgIHJldHVybiBwYWdlTWFwLT5hdChwYWdlSW5kZXgpOworICAgIH0KK307CisKK01ldGFBbGxv
Y2F0b3JUZXN0czo6SGVhcEdyb3d0aE1vZGUgTWV0YUFsbG9jYXRvclRlc3RzOjpjdXJyZW50SGVh
cEdyb3d0aE1vZGU7CitzaXplX3QgTWV0YUFsbG9jYXRvclRlc3RzOjphbGxvd0FsbG9jYXRlUGFn
ZXM7CitzaXplX3QgTWV0YUFsbG9jYXRvclRlc3RzOjpyZXF1ZXN0ZWROdW1QYWdlczsKK3Vuc2ln
bmVkIE1ldGFBbGxvY2F0b3JUZXN0czo6YWRkaXRpb25hbFBhZ2VzSW5IZWFwOworVmVjdG9yPGJv
b2wsIDA+KiBNZXRhQWxsb2NhdG9yVGVzdHM6Om1lbW9yeU1hcDsKK1ZlY3Rvcjxib29sLCAwPiog
TWV0YUFsbG9jYXRvclRlc3RzOjpwYWdlTWFwOworYm9vbCBNZXRhQWxsb2NhdG9yVGVzdHM6OmFs
bG9jYXRvckRlc3Ryb3llZDsKK01ldGFBbGxvY2F0b3JUZXN0czo6U2ltcGxlVGVzdEFsbG9jYXRv
ciogTWV0YUFsbG9jYXRvclRlc3RzOjphbGxvY2F0b3I7CisKKy8vIFJlZ3Jlc3Npb24gdGVzdHMg
Zm9yIE1ldGFBbGxvY2F0b3IgLSBzaW11bGF0ZXMgY2FzZXMgdGhhdCB3ZSd2ZSBzZWVuIGZhaWwg
aW4gdGhlCisvLyBwYXN0LgorCitjbGFzcyBNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVz
dHMgeworcHJpdmF0ZToKKyAgICBNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMoKSB7
IH0KKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBydW5UZXN0cygpCisgICAgeworI2lm
IENQVShYODZfNjQpCisgICAgICAgIFJVTl9URVNUKHJ1blRyZWVSb290Q29ycnVwdGlvblRlc3Qo
KSk7CisjZW5kaWYKKyAgICB9CisKK3ByaXZhdGU6CisjaWYgQ1BVKFg4Nl82NCkKKyAgICBjbGFz
cyBOdWxsVGVzdEFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgTnVsbFRlc3RBbGxvY2F0b3IoKQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9y
KDMyKSAvLyBtYXRjaGVzIEZpeGVkVk1Qb29sQWxsb2NhdG9yCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGFkZEZyZXNoRnJlZVNwYWNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4NDQwMzM5YzAx
MDAwbGx1KSwgMTAyNCAqIDEwMjQgKiAxMDI0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFs
IHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCopCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCopCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBzdGF0aWMgdm9pZCBydW5UcmVlUm9vdENvcnJ1
cHRpb25UZXN0KCkKKyAgICB7CisgICAgICAgIE51bGxUZXN0QWxsb2NhdG9yIGFsbG9jYXRvcjsK
KyAgICAgICAgCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3RvcjxSZWZQdHI8TWV0YUFsbG9j
YXRvckhhbmRsZT4sIDA+IGhhbmRsZXM7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxv
Y2F0b3IuYWxsb2NhdGUoNzM2KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0
b3IuYWxsb2NhdGUoMTU1MjApKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRv
ci5hbGxvY2F0ZSgxMDI0KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3Iu
YWxsb2NhdGUoNTc2KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxs
b2NhdGUoMjk3NikpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9j
YXRlKDQ4MCkpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRl
KDIyNDApKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg5
NikpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDM0ODgp
KTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgzODQpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlcy5hdCg2
KS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHg0NDAzNzljMDAxMDBsbHUpKTsK
KyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQoNiktPnNpemVJbkJ5dGVz
KCksIHN0YXRpY19jYXN0PHNpemVfdD4oMjI0MCkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoaGFuZGxlcy5hdCg4KS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oMHg0
NDAzMzljMDVkNjBsbHUpKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMu
YXQoOCktPnNpemVJbkJ5dGVzKCksIHN0YXRpY19jYXN0PHNpemVfdD4oMzQ4OCkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBoYW5kbGVzLmF0KDYpLmNsZWFyKCk7CisgICAgICAgICAgICBo
YW5kbGVzLmF0KDgpLmNsZWFyKCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK307CisKK2lu
dCBtYWluKGludCwgY2hhcioqKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwor
CisgICAgUlVOX1NVSVRFKFJlZEJsYWNrVHJlZVRlc3RzOjpydW5UZXN0cygpKTsKKyAgICBSVU5f
U1VJVEUoTWV0YUFsbG9jYXRvclRlc3RzOjpydW5UZXN0cygpKTsKKyAgICBSVU5fU1VJVEUoTWV0
YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cygpKTsKKyAgICBwcmludGYo
IkFsbCB0ZXN0cyBwYXNzZWQuXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1l
dGFBbGxvY2F0b3IuaCIKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFB
bGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAg
ICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBt
X3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChhbGxvY2F0b3IpOworICAg
IEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKK30KKworTWV0YUFsbG9j
YXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQoreworICAgIGlmICghbV9hbGxvY2F0
b3IpCisgICAgICAgIHJldHVybjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2Nh
dG9yLT5tX2xvY2spOworICAgIGlmIChtX3NpemVJbkJ5dGVzKSB7CisgICAgICAgIG1fYWxsb2Nh
dG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMpOworICAg
ICAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKG1fc3RhcnQs
IG1fc2l6ZUluQnl0ZXMpOworICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpz
aHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdTaXplSW5CeXRl
cyA8PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW1fYWxsb2NhdG9yKSB7CisgICAg
ICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2sp
OworCisgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91bmRVcChuZXdTaXplSW5C
eXRlcyk7CisgICAgCisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMp
OworICAgIAorICAgIGlmIChuZXdTaXplSW5CeXRlcyA9PSBtX3NpemVJbkJ5dGVzKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgdWludHB0cl90IGZyZWVTdGFydCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihtX3N0YXJ0KSArIG5ld1NpemVJbkJ5dGVzOworICAgIHNpemVfdCBmcmVl
U2l6ZSA9IG1fc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKKyAgICB1aW50cHRyX3QgZnJl
ZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOworICAgIAorICAgIHVpbnRwdHJfdCBmaXJzdENv
bXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAt
IDEpICYgLW1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplOworICAgIGlmIChmaXJzdENvbXBsZXRlbHlG
cmVlUGFnZSA8IGZyZWVFbmQpCisgICAgICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2Nj
dXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlKSwg
ZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3RhcnQpKTsKKyAgICAK
KyAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGZyZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICAKKyAgICBtX3NpemVJ
bkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7Cit9CisKK01ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0
b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKQorICAgIDogbV9hbGxvY2F0aW9uR3JhbnVsZShh
bGxvY2F0aW9uR3JhbnVsZSkKKyAgICAsIG1fcGFnZVNpemUocGFnZVNpemUoKSkKKyAgICAsIG1f
Ynl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fYnl0ZXNSZXNlcnZlZCgwKQorICAgICwgbV9ieXRl
c0NvbW1pdHRlZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbWFsbG9jQmFsYW5jZSgwKQor
I2VuZGlmCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgLCBtX251bUFs
bG9jYXRpb25zKDApCisgICAgLCBtX251bUZyZWVzKDApCisjZW5kaWYKK3sKKyAgICBtX2xvY2su
SW5pdCgpOworICAgIAorICAgIGZvciAobV9sb2dQYWdlU2l6ZSA9IDA7IG1fbG9nUGFnZVNpemUg
PCAzMjsgKyttX2xvZ1BhZ2VTaXplKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+
KDEpIDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ1Bh
Z2VTaXplID09IG1fcGFnZVNpemUpOworICAgIAorICAgIGZvciAobV9sb2dBbGxvY2F0aW9uR3Jh
bnVsZSA9IDA7IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPCAzMjsgKyttX2xvZ0FsbG9jYXRpb25H
cmFudWxlKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxs
b2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xv
Z0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOworfQorCitNZXRhQWxs
b2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCit7CisgICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2Rl
ID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7IG5vZGU7KSB7CisgICAgICAgIEZyZWVTcGFj
ZU5vZGUqIG5leHQgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29yKG5vZGUpOworICAgICAg
ICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgICAgICBmcmVlRnJlZVNwYWNl
Tm9kZShub2RlKTsKKyAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgfQorI2lmbmRlZiBOREVCVUcK
KyAgICBBU1NFUlQoIW1fbWFsbG9jQmFsYW5jZSk7CisjZW5kaWYKK30KKworUGFzc1JlZlB0cjxN
ZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworCisgICAgaWYg
KCFzaXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgc2l6ZUluQnl0ZXMg
PSByb3VuZFVwKHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICB2b2lkKiBzdGFydCA9IGZpbmRBbmRS
ZW1vdmVGcmVlU3BhY2Uoc2l6ZUluQnl0ZXMpOworICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAg
c2l6ZV90IHJlcXVlc3RlZE51bWJlck9mUGFnZXMgPSAoc2l6ZUluQnl0ZXMgKyBtX3BhZ2VTaXpl
IC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgc2l6ZV90IG51bWJlck9mUGFnZXMgPSBy
ZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzOworICAgICAgICAKKyAgICAgICAgc3RhcnQgPSBhbGxvY2F0
ZU5ld1NwYWNlKG51bWJlck9mUGFnZXMpOworICAgICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVyT2ZQYWdlcyA+PSBy
ZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByb3VuZGVk
VXBTaXplID0gbnVtYmVyT2ZQYWdlcyA8PCBtX2xvZ1BhZ2VTaXplOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKHJvdW5kZWRVcFNpemUgPj0gc2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAg
ICAgbV9ieXRlc1Jlc2VydmVkICs9IHJvdW5kZWRVcFNpemU7CisgICAgICAgIAorICAgICAgICBp
ZiAocm91bmRlZFVwU2l6ZSA+IHNpemVJbkJ5dGVzKSB7CisgICAgICAgICAgICB2b2lkKiBmcmVl
U3BhY2VTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBzaXplX3QgZnJlZVNw
YWNlU2l6ZSA9IHJvdW5kZWRVcFNpemUgLSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIGFkZEZy
ZWVTcGFjZShmcmVlU3BhY2VTdGFydCwgZnJlZVNwYWNlU2l6ZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgaW5jcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydCwgc2l6ZUluQnl0ZXMpOworICAgIG1f
Ynl0ZXNBbGxvY2F0ZWQgKz0gc2l6ZUluQnl0ZXM7CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9S
X1BST0ZJTEUpCisgICAgbV9udW1BbGxvY2F0aW9ucysrOworI2VuZGlmCisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcykp
OworfQorCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRT
dGF0aXN0aWNzKCkKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAg
U3RhdGlzdGljcyByZXN1bHQ7CisgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVkID0gbV9ieXRlc0Fs
bG9jYXRlZDsKKyAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0ZXNSZXNlcnZlZDsKKyAg
ICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgPSBtX2J5dGVzQ29tbWl0dGVkOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQqIE1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uo
c2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVT
cGFjZVNpemVNYXAuZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKHNpemVJbkJ5dGVzKTsKKyAg
ICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIEFTU0VSVChu
b2RlLT5rZXkgPj0gc2l6ZUluQnl0ZXMpOworICAgIAorICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5y
ZW1vdmUobm9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0OworICAgIAorICAgIGlmIChub2Rl
LT5rZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgLy8gRWFzeSBjYXNlOiBwZXJmZWN0IGZp
dCwgc28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50aXJlbHkuCisgICAgICAgIHJlc3VsdCA9IG5v
ZGUtPnZhbHVlOworICAgICAgICAKKyAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAu
cmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJl
bW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
bm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7CisgICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5v
ZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRyeSB0byBiZSBhIGdvb2QgY2l0aXplbiBh
bmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNodW5rIG9mIG1lbW9yeQorICAgICAgICAvLyBz
dHJhZGRsZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3NpYmxlLCBidXQgb25seSBpbnNvZmFyIGFzIGRv
aW5nIHNvIHdpbGwKKyAgICAgICAgLy8gbm90IGluY3JlYXNlIGZyYWdtZW50YXRpb24uIFRoZSBp
bnR1aXRpb24gaXMgdGhhdCBtaW5pbWl6aW5nCisgICAgICAgIC8vIGZyYWdtZW50YXRpb24gaXMg
YSBzdHJpY3RseSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBtaW5pbWl6aW5nIHRoZSBudW1iZXIKKyAg
ICAgICAgLy8gb2YgY29tbWl0dGVkIHBhZ2VzLCBzaW5jZSBpbiB0aGUgbG9uZyBydW4sIHNtYWxs
ZXIgZnJhZ21lbnRhdGlvbiBtZWFucworICAgICAgICAvLyBmZXdlciBjb21taXR0ZWQgcGFnZXMg
YW5kIGZld2VyIGZhaWx1cmVzIGluIGdlbmVyYWwuCisgICAgICAgIAorICAgICAgICB1aW50cHRy
X3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSA+
PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIDEpID4+IG1fbG9n
UGFnZVNpemU7CisgICAgCisgICAgICAgIHVpbnRwdHJfdCBsYXN0UGFnZUZvckxlZnRBbGxvY2F0
aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBzaXplSW5C
eXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2VG
b3JSaWdodEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZh
bHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAg
ICAKKyAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gLSBmaXJzdFBhZ2UgKyAx
IDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uICsgMSkgeworICAgICAg
ICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQgc2lkZSBvZiB0aGUgcmV0dXJuZWQgY2h1bmss
IGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmlnaHQuCisgICAgICAgICAgICByZXN1bHQgPSBu
b2RlLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFk
ZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+dmFsdWUgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFs
dWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJl
c3NNYXAuYWRkKG5vZGUtPnZhbHVlLCBub2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIEFsbG9jYXRlIGluIHRoZSByaWdodCBzaXplIG9mIHRoZSByZXR1cm5lZCBjaHVuaywg
YW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSBsZWZ0OworICAgICAgICAgICAgCisgICAgICAgICAg
ICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5IC0gc2l6ZUluQnl0ZXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkg
KyBub2RlLT5rZXkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNp
emVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAu
aW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChy
ZXN1bHQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxl
KHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisjaWYgRU5BQkxFKE1FVEFfQUxM
T0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1GcmVlcysrOworI2VuZGlmCisgICAgbV9ieXRlc0Fs
bG9jYXRlZCAtPSBzaXplSW5CeXRlczsKKyAgICBhZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5
dGVzKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBz
dGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigm
bV9sb2NrKTsKKyAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0ZXM7CisgICAgYWRkRnJl
ZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpk
ZWJ1Z0ZyZWVTcGFjZVNpemUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yIChGcmVl
U3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7IG5vZGU7IG5vZGUg
PSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29yKG5vZGUpKQorICAgICAgICByZXN1bHQgKz0g
bm9kZS0+a2V5OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIENSQVNIKCk7CisgICAg
cmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uo
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiBlbmQgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsg
c2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6
aXRlcmF0b3IgbGVmdE5laWdoYm9yID0gbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmZpbmQoc3Rh
cnQpOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgcmlnaHRO
ZWlnaGJvciA9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmZpbmQoZW5kKTsKKyAgICAKKyAg
ICBpZiAobGVmdE5laWdoYm9yICE9IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5lbmQoKSkgewor
ICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUg
bGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFuZAorICAgICAgICAvLyByZW1vdmUgaXRz
IGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCisgICAgICAgIAorICAgICAgICBBU1NFUlQo
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRO
ZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkgKyBsZWZ0TmVpZ2hib3ItPnNlY29uZC0+a2V5KSA9PSBs
ZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxl
ZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgIAorICAgICAgICB2b2lkKiBs
ZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFsdWU7CisgICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxl
ZnROb2RlLT5rZXk7CisgICAgICAgIHZvaWQqIGxlZnRFbmQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdFN0YXJ0KSArIGxlZnRTaXplKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZWZ0RW5kID09IHN0YXJ0KTsKKyAgICAgICAgCisg
ICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobGVmdE5vZGUpOworICAgICAgICBtX2Zy
ZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKGxlZnRFbmQpOworICAgICAgICAKKyAgICAgICAg
Ly8gTm93IGNoZWNrIGlmIHRoZXJlIGlzIGFsc28gc29tZXRoaW5nIHRvIGNvYWxlc2NlIHdpdGgg
b24gdGhlIHJpZ2h0LgorICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0
YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcg
aW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBsZWZ0IGFuZAorICAg
ICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJv
bSB0aGUgbWFwcy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hi
b3ItPnNlY29uZC0+dmFsdWUgPT0gcmlnaHROZWlnaGJvci0+Zmlyc3QpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5z
ZWNvbmQ7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmly
c3Q7CisgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2RlLT5rZXk7CisgICAg
ICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0ID09IGVuZCk7CisgICAgICAgICAgICBB
U1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdo
dEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1v
dmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJl
bW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5y
ZW1vdmUocmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlRnJlZVNwYWNl
Tm9kZShyaWdodE5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5
ICs9IHNpemVJbkJ5dGVzICsgcmlnaHRTaXplOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5hZGQocmlnaHRFbmQsIGxlZnROb2RlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGxlZnROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobGVmdE5vZGUpOworICAg
ICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChlbmQsIGxlZnROb2RlKTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxl
ZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQuCisgICAgICAgIAor
ICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5l
bmQoKSkgeworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWln
aGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hi
b3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+a2V5
OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOworICAgICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyaWdodEVuZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXpl
KSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6
ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmln
aHROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICByaWdodE5vZGUtPnZhbHVl
ID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5p
bnNlcnQocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFw
LmFkZChzdGFydCwgcmlnaHROb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8v
IE5vdGhpbmcgdG8gY29hbGVzY2Ugd2l0aCwgc28gY3JlYXRlIGEgbmV3IGZyZWUgc3BhY2Ugbm9k
ZSBhbmQgYWRkIGl0LgorICAgICAgICAgICAgCisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiBu
b2RlID0gYWxsb2NGcmVlU3BhY2VOb2RlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5v
ZGUtPmtleSA9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+dmFsdWUgPSBzdGFydDsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2Rl
KTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChzdGFydCwgbm9k
ZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKGVuZCwgbm9kZSk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFn
ZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWlu
dHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+
PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJfdCBsYXN0UGFnZSA9IChyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNp
emU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3QgcGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBs
YXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+Ojpp
dGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFwLmZpbmQocGFnZSk7CisgICAgICAgIGlm
IChpdGVyID09IG1fcGFnZU9jY3VwYW5jeU1hcC5lbmQoKSkgeworICAgICAgICAgICAgbV9wYWdl
T2NjdXBhbmN5TWFwLmFkZChwYWdlLCAxKTsKKyAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQg
Kz0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjpk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykK
K3sKKyAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGFkZHJlc3MpID4+IG1fbG9nUGFnZVNpemU7CisgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4g
bV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdl
OyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKKyAgICAgICAgSGFzaE1hcDx1aW50cHRyX3Qs
IHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsK
KyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKTsKKyAgICAg
ICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lN
YXAucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VT
aXplOworICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc2l6ZV90
IE1ldGFBbGxvY2F0b3I6OnJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIGlmIChz
dGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9hbGxvY2F0aW9uR3JhbnVsZSA8
PSBzaXplSW5CeXRlcykKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gKHNpemVJbkJ5dGVz
ICsgbV9hbGxvY2F0aW9uR3JhbnVsZSAtIDEpICYgLW1fYWxsb2NhdGlvbkdyYW51bGU7Cit9CisK
K01ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZU5vZGUqIE1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNw
YWNlTm9kZSgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbWFsbG9jQmFsYW5jZSsrOworI2Vu
ZGlmCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyZWVTcGFjZU5vZGUqPihmYXN0TWFsbG9jKHNp
emVvZihGcmVlU3BhY2VOb2RlKSkpOworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmZyZWVGcmVl
U3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUqIG5vZGUpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1f
bWFsbG9jQmFsYW5jZS0tOworI2VuZGlmCisgICAgZmFzdEZyZWUobm9kZSk7Cit9CisKKyNpZiBF
TkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZHVtcFBy
b2ZpbGUoKQoreworICAgIHByaW50ZigibnVtIGFsbG9jYXRpb25zID0gJXUsIG51bSBmcmVlcyA9
ICV1XG4iLCBtX251bUFsbG9jYXRpb25zLCBtX251bUZyZWVzKTsKK30KKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFB
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFB
bGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0
YUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
VEZfTWV0YUFsbG9jYXRvcl9oCisjZGVmaW5lIFdURl9NZXRhQWxsb2NhdG9yX2gKKworI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KKyNpbmNsdWRlIDx3dGYvUmVkQmxhY2tUcmVl
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZp
bmUgRU5BQkxFX01FVEFfQUxMT0NBVE9SX1BST0ZJTEUgMAorCitjbGFzcyBNZXRhQWxsb2NhdG9y
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKK3B1YmxpYzoKKyAg
ICAKKyAgICBNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSk7CisgICAgCisg
ICAgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOworICAgIAorICAgIFBhc3NSZWZQdHI8TWV0YUFs
bG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAv
LyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCisg
ICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQor
ICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9Cisg
ICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkKCkgeyByZXR1cm4gbV9ieXRlc0NvbW1pdHRlZDsgfQor
ICAgIAorICAgIC8vIEF0b21pYyBtZXRob2QgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3Rp
Y3MuCisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICBzaXplX3QgYnl0ZXNBbGxvY2F0
ZWQ7CisgICAgICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOworICAgICAgICBzaXplX3QgYnl0ZXND
b21taXR0ZWQ7CisgICAgfTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCk7CisK
KyAgICAvLyBBZGQgbW9yZSBmcmVlIHNwYWNlIHRvIHRoZSBhbGxvY2F0b3IuIENhbGwgdGhpcyBk
aXJlY3RseSBmcm9tCisgICAgLy8gdGhlIGNvbnN0cnVjdG9yIGlmIHlvdSB3aXNoIHRvIG9wZXJh
dGUgdGhlIGFsbG9jYXRvciB3aXRoaW4gYQorICAgIC8vIGZpeGVkIHBvb2wuCisgICAgdm9pZCBh
ZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKworICAg
IC8vIFRoaXMgaXMgbWVhbnQgb25seSBmb3IgaW1wbGVtZW50aW5nIHRlc3RzLiBOZXZlciBjYWxs
IHRoaXMgaW4gcmVsZWFzZQorICAgIC8vIGJ1aWxkcy4KKyAgICBzaXplX3QgZGVidWdGcmVlU3Bh
Y2VTaXplKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAg
dm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkgeyB9Cisj
ZW5kaWYKKworcHJvdGVjdGVkOgorICAgIAorICAgIC8vIEFsbG9jYXRlIG5ldyB2aXJ0dWFsIHNw
YWNlLCBidXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4gbW9yZQorICAgIC8vIHBhZ2Vz
IHRoYW4gd2UgYXNrZWQsIGluIHdoaWNoIGNhc2UgbnVtUGFnZXMgaXMgY2hhbmdlZC4KKyAgICB2
aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykgPSAwOworICAg
IAorICAgIC8vIENvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdl
KHZvaWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBVbmNvbW1pdCBhIHBhZ2UuCisgICAgdmly
dHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkgPSAwOworICAgIAorICAgIC8v
IE5PVEU6IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCBkdXJpbmcgYWxsb2Nh
dG9yCisgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1ldGFBbGxvY2F0b3Ig
Y2Fubm90IGRpZSBzbyBsb25nCisgICAgLy8gYXMgdGhlcmUgYXJlIEhhbmRsZXMgdGhhdCByZWZl
ciB0byBpdC4KKworcHJpdmF0ZToKKyAgICAKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRv
ckhhbmRsZTsKKyAgICAKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxzaXplX3QsIHZvaWQqPiBU
cmVlOworICAgIHR5cGVkZWYgVHJlZTo6Tm9kZSBGcmVlU3BhY2VOb2RlOworICAgIAorICAgIC8v
IFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBpcyBlZmZlY3RpdmVs
eQorICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5v
dCBtYXJrIHRoZQorICAgIC8vIHJldHVybmVkIHNwYWNlIGFzIGJlaW5nIGluLXVzZS4KKyAgICB2
b2lkKiBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAv
LyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRpb24gaXMgZnJlZWQu
CisgICAgdm9pZCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNp
emVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgbG93LWxldmVsIGlt
cGxlbWVudGF0aW9uIG9mIGFkZGluZyBmcmVlIHNwYWNlOyBpdAorICAgIC8vIGlzIGNhbGxlZCBm
cm9tIGJvdGggYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlIGFuZCBmcm9tCisgICAgLy8g
YWRkRnJlc2hGcmVlU3BhY2UuCisgICAgdm9pZCBhZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNp
emVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTWFuYWdlbWVudCBvZiB1c2VkIHNwYWNl
LgorICAgIAorICAgIHZvaWQgaW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBz
aXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIHZvaWQgZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lk
KiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFV0aWxpdGllcy4K
KyAgICAKKyAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAg
IEZyZWVTcGFjZU5vZGUqIGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgIHZvaWQgZnJlZUZyZWVT
cGFjZU5vZGUoRnJlZVNwYWNlTm9kZSopOworICAgIAorICAgIHNpemVfdCBtX2FsbG9jYXRpb25H
cmFudWxlOworICAgIHVuc2lnbmVkIG1fbG9nQWxsb2NhdGlvbkdyYW51bGU7CisgICAgc2l6ZV90
IG1fcGFnZVNpemU7CisgICAgdW5zaWduZWQgbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBUcmVl
IG1fZnJlZVNwYWNlU2l6ZU1hcDsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4g
bV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNl
Tm9kZSo+IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcDsKKyAgICBIYXNoTWFwPHVpbnRwdHJfdCwg
c2l6ZV90PiBtX3BhZ2VPY2N1cGFuY3lNYXA7CisgICAgCisgICAgc2l6ZV90IG1fYnl0ZXNBbGxv
Y2F0ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKKyAgICBzaXplX3QgbV9ieXRlc0Nv
bW1pdHRlZDsKKyAgICAKKyAgICBTcGluTG9jayBtX2xvY2s7CisKKyNpZm5kZWYgTkRFQlVHCisg
ICAgc2l6ZV90IG1fbWFsbG9jQmFsYW5jZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FVEFfQUxM
T0NBVE9SX1BST0ZJTEUpCisgICAgdW5zaWduZWQgbV9udW1BbGxvY2F0aW9uczsKKyAgICB1bnNp
Z25lZCBtX251bUZyZWVzOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFdURl9NZXRhQWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisjZGVm
aW5lIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25z
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yOworCitjbGFzcyBNZXRh
QWxsb2NhdG9ySGFuZGxlOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiB7
Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICAgICAgOiBtX2FsbG9jYXRv
cigwKQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgICAgICwgbV9zaXplSW5CeXRlcyhz
aXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGFydCk7CisgICAgfQorICAgIAor
cHVibGljOgorICAgIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CisgICAgCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gY3JlYXRlU2VsZk1hbmFnZWRIYW5kbGUodm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZShzdGFydCwgc2l6ZUluQnl0ZXMpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCogc3RhcnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQ7
CisgICAgfQorICAgIAorICAgIHZvaWQqIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQp
ICsgbV9zaXplSW5CeXRlcyk7CisgICAgfQorICAgICAgICAKKyAgICBzaXplX3Qgc2l6ZUluQnl0
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CisgICAgfQorICAgICAg
ICAKKyAgICB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOworICAgIAorICAgIGJv
b2wgaXNNYW5hZ2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOworICAg
IH0KKyAgICAgICAgCisgICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9yOworICAg
IAorICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgIHZvaWQqIG1fc3RhcnQ7Cisg
ICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIEJhc2VkIG9uIFJlZC1CbGFjayB0cmVlIGltcGxlbWVudGF0aW9u
IGJ5IEVtaW4gTWFydGluaWFuCisgKiAtIGh0dHA6Ly93d3cubWl0LmVkdS9+ZW1pbi9zb3VyY2Vf
Y29kZS9pbmRleC5odG1sICAgICAgICAgCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWRCbGFja1RyZWVfaAorI2RlZmluZSBS
ZWRCbGFja1RyZWVfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaW1wbGVtZW50
cyBhIHJlZC1ibGFjayB0cmVlIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorLy8gLSBU
aGUgYWxsb2NhdGlvbiBvZiBub2RlcyBpbiB0aGUgdHJlZSBpcyBlbnRpcmVseSB1cCB0byB0aGUg
dXNlci4KKy8vIC0gSWYgeW91IGFyZSBpbiBwb3NzZXNzaW9uIG9mIGEgcG9pbnRlciB0byBhIG5v
ZGUsIHlvdSBjYW4gZGVsZXRlCisvLyAgIGl0IGZyb20gdGhlIHRyZWUuIFRoZSB0cmVlIHdpbGwg
c3Vic2VxdWVudGx5IG5vIGxvbmdlciBoYXZlIGEKKy8vICAgcmVmZXJlbmNlIHRvIHRoaXMgbm9k
ZS4KKy8vIC0gVGhlIGtleSB0eXBlIG11c3QgaW1wbGVtZW50IG9wZXJhdG9yPCBhbmQgPT0uCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIFJl
ZEJsYWNrVHJlZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVkQmxhY2tUcmVlKTsKK3B1
YmxpYzoKKyAgICBjbGFzcyBSYXdOb2RlIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlZEJsYWNr
VHJlZTsKKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBh
Y2sgdGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBzaW5nbGUKKyAgICAgICAgLy8gd29yZC4gQnV0
IGRvaW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEgYnVnIGluIHRoZSBjb21waWxlci4KKyAgICAg
ICAgUmF3Tm9kZSogcGFyZW50KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fcGFyZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBzZXRQYXJl
bnQoUmF3Tm9kZSogbmV3UGFyZW50KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9w
YXJlbnQgPSBuZXdQYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNS
ZWQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9yZWQ7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgc2V0UmVkKGJvb2wgdmFsdWUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3JlZCA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBSYXdOb2RlKiBtX2xlZnQ7CisgICAgICAgIFJhd05vZGUqIG1fcmlnaHQ7CisgICAg
ICAgIFJhd05vZGUqIG1fcGFyZW50OworICAgICAgICBib29sIG1fcmVkOworICAgIH07CisgICAg
CisgICAgY2xhc3MgTm9kZTogcHVibGljIFJhd05vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAg
S2V5VHlwZSBrZXk7CisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsKKyAgICB9OworICAgIAorICAg
IFJlZEJsYWNrVHJlZSgpCisgICAgeworICAgICAgICBtX25pbFNlbnRpbmVsLnNldFBhcmVudCgm
bV9uaWxTZW50aW5lbCk7CisgICAgICAgIG1fbmlsU2VudGluZWwubV9sZWZ0ID0gJm1fbmlsU2Vu
dGluZWw7CisgICAgICAgIG1fbmlsU2VudGluZWwubV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOwor
ICAgICAgICBtX25pbFNlbnRpbmVsLnNldFJlZChmYWxzZSk7CisgICAgICAgIAorICAgICAgICBt
X3Jvb3Quc2V0UGFyZW50KCZtX25pbFNlbnRpbmVsKTsKKyAgICAgICAgbV9yb290Lm1fbGVmdCA9
ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jvb3QubV9yaWdodCA9ICZtX25pbFNlbnRpbmVs
OworICAgICAgICBtX3Jvb3Quc2V0UmVkKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBp
bnNlcnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGluc2VydEhlbHAobm9kZSk7CisKKyAg
ICAgICAgUmF3Tm9kZSogeCA9IG5vZGU7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAgIAor
ICAgICAgICB4LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgIHdoaWxlICh4LT5wYXJlbnQoKS0+aXNS
ZWQoKSkgeworICAgICAgICAgICAgaWYgKHgtPnBhcmVudCgpID09IHgtPnBhcmVudCgpLT5wYXJl
bnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgeSA9IHgtPnBhcmVudCgpLT5wYXJlbnQo
KS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoeS0+aXNSZWQoKSkgeworICAgICAgICAg
ICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnBh
cmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQo
KS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fcmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUo
eCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50
KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJl
bnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5w
YXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdDsK
KyAgICAgICAgICAgICAgICBpZiAoeS0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4
LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVk
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRS
ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0g
eC0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBh
cmVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVk
KHRydWUpOworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpLT5wYXJl
bnQoKSk7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICByb290KCktPm1fbGVmdC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5p
c1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcmVtb3ZlKE5vZGUqIHopCisgICAgewor
ICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICBSYXdOb2RlKiB4OworCisgICAgICAgIHkgPSAo
ei0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCkgfHwgei0+bV9yaWdodCA9PSBuaWxTZW50aW5lbCgp
KSA/IHogOiBzdWNjZXNzb3JJbnRlcm5hbCh6KTsKKyAgICAgICAgeCA9IHktPm1fbGVmdCA9PSBu
aWxTZW50aW5lbCgpID8geS0+bV9yaWdodCA6IHktPm1fbGVmdDsKKyAgICAgICAgaWYgKHJvb3Qo
KSA9PSB4LT5zZXRQYXJlbnQoeS0+cGFyZW50KCkpKQorICAgICAgICAgICAgcm9vdCgpLT5tX2xl
ZnQgPSB4OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh5ID09IHktPnBhcmVudCgp
LT5tX2xlZnQpCisgICAgICAgICAgICAgICAgeS0+cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeS0+cGFyZW50KCktPm1fcmlnaHQgPSB4Owor
ICAgICAgICB9CisgICAgICAgIGlmICh5ICE9IHopIHsKKyAgICAgICAgICAgIEFTU0VSVCh5ICE9
IG5pbFNlbnRpbmVsKCkpOworCisgICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpCisgICAgICAg
ICAgICAgICAgcmVtb3ZlRml4VXAoeCk7CisgIAorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gei0+
bV9sZWZ0OworICAgICAgICAgICAgeS0+bV9yaWdodCA9IHotPm1fcmlnaHQ7CisgICAgICAgICAg
ICB5LT5zZXRQYXJlbnQoei0+cGFyZW50KCkpOworICAgICAgICAgICAgeS0+c2V0UmVkKHotPmlz
UmVkKCkpOworICAgICAgICAgICAgei0+bV9sZWZ0LT5zZXRQYXJlbnQoei0+bV9yaWdodC0+c2V0
UGFyZW50KHkpKTsKKyAgICAgICAgICAgIGlmICh6ID09IHotPnBhcmVudCgpLT5tX2xlZnQpCisg
ICAgICAgICAgICAgICAgei0+cGFyZW50KCktPm1fbGVmdCA9IHk7IAorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHotPnBhcmVudCgpLT5tX3JpZ2h0ID0geTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGlmICgheS0+aXNSZWQoKSkKKyAgICAgICAgICAgICAgICByZW1v
dmVGaXhVcCh4KTsKKyAgICAgICAgfQorICAKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVk
KCkpOworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworCisgICAgICAg
IHJldHVybiB6OworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaXJzdCgpCisgICAgeworICAgICAg
ICBSYXdOb2RlKiBub2RlID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIGlmIChub2RlID09IG5p
bFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKHRydWUp
IHsKKyAgICAgICAgICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5tX2xlZnQ7CisgICAgICAgICAg
ICBpZiAobmV4dCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhc05v
ZGUobm9kZSk7CisgICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBsYXN0KCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUgPSByb290
KCktPm1fbGVmdDsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmF3Tm9k
ZSogbmV4dCA9IG5vZGUtPm1fcmlnaHQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAg
ICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBzdWNjZXNz
b3IoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHJlc3VsdCA9IHN1Y2Nlc3Nv
ckludGVybmFsKG5vZGUpOworICAgICAgICBpZiAocmVzdWx0ID09IG5pbFNlbnRpbmVsKCkpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFzTm9kZShyZXN1bHQpOworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBwcmVkZWNlc3NvcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgUmF3Tm9kZSogeCA9IG5vZGU7CisgICAgICAgIFJhd05vZGUqIHk7CisKKyAgICAgICAgaWYg
KG5pbFNlbnRpbmVsKCkgIT0gKHkgPSB4LT5tX2xlZnQpKSB7CisgICAgICAgICAgICB3aGlsZSAo
eS0+bV9yaWdodCAhPSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHkgPSB5LT5tX3Jp
Z2h0OworICAgICAgICAgICAgcmV0dXJuIGFzTm9kZSh5KTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgeSA9IHgtPnBhcmVudCgpOworICAgICAgICB3aGlsZSAoeCA9PSB5LT5tX2xlZnQp
IHsgCisgICAgICAgICAgICBpZiAoeSA9PSByb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB4ID0geTsKKyAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQoKTsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoeSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIHJldHVybiBhc05vZGUoeSk7CisgICAgfQorICAgIAorICAgIE5vZGUq
IGZpbmRFeGFjdChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4
ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIGlmICh4ID09IG5pbFNlbnRpbmVsKCkpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKCEoYXNOb2RlKHgpLT5rZXkgPT0ga2V5
KSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZSh4KS0+a2V5ID4ga2V5KQorICAgICAgICAgICAg
ICAgIHggPSB4LT5tX2xlZnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9
IHgtPm1fcmlnaHQ7CisgICAgICAgICAgICBpZiAoeCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoeCk7
CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAg
eworICAgICAgICBOb2RlKiByZXN1bHQgPSBmaW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHJlbW92ZShyZXN1
bHQpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwo
Y29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogY3VycmVudCA9IHJv
b3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiBiZXN0ID0gMDsKKyAgICAgICAgd2hpbGUg
KGN1cnJlbnQgIT0gbmlsU2VudGluZWwoKSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJy
ZW50KS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKGN1cnJlbnQp
OworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5IDwga2V5KQorICAgICAgICAg
ICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX3JpZ2h0OworICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9
IGN1cnJlbnQtPm1fbGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYXNOb2RlKGJlc3QpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaW5kR3JlYXRlc3RMZXNz
VGhhbk9yRXF1YWwoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSog
Y3VycmVudCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiBiZXN0ID0gMDsKKyAg
ICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbmlsU2VudGluZWwoKSkgeworICAgICAgICAgICAgaWYg
KGFzTm9kZShjdXJyZW50KS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNO
b2RlKGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5IDwga2V5
KSB7CisgICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3Vy
cmVudCA9IGN1cnJlbnQtPm1fbGVmdDsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAg
ICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9yaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gYXNOb2RlKGJlc3QpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIE8obikgb3Bl
cmF0aW9uLgorICAgIHNpemVfdCBzaXplKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQg
PSAwOworICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBmaXJzdCgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gc3VjY2Vzc29yKGN1cnJlbnQpKQorICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gTygxKSBvcGVy
YXRpb24uCisgICAgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByb290KCkt
Pm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisg
ICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghcm9vdCgp
LT5pc1JlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAg
ICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uocm9vdCgpLT5tX2xlZnQpOworICAgICAgICBB
U1NFUlQocm9vdCgpLT5tX3JpZ2h0ID09IG5pbFNlbnRpbmVsKCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJUcmVlIGF0ICVwOlxuIiwgdGhp
cyk7CisgICAgICAgIGR1bXBSZWN1cnNlKHJvb3QoKS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRm
KCIgICByb290OiAlcCwgJXAsICVwXG4iLCByb290KCktPm1fbGVmdCwgcm9vdCgpLT5tX3JpZ2h0
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihyb290KCktPnBhcmVudEFuZFJlZCkpOworICAgICAg
ICBwcmludGYoIiAgICBuaWw6ICVwLCAlcCwgJXBcbiIsIG5pbFNlbnRpbmVsKCktPm1fbGVmdCwg
bmlsU2VudGluZWwoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmlsU2VudGlu
ZWwoKS0+cGFyZW50QW5kUmVkKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9p
ZCBsZWZ0Um90YXRlKFJhd05vZGUqIHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworCisg
ICAgICAgIHkgPSB4LT5tX3JpZ2h0OworICAgICAgICB4LT5tX3JpZ2h0ID0geS0+bV9sZWZ0Owor
CisgICAgICAgIGlmICh5LT5tX2xlZnQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHkt
Pm1fbGVmdC0+c2V0UGFyZW50KHgpOworICAKKyAgICAgICAgeS0+c2V0UGFyZW50KHgtPnBhcmVu
dCgpKTsKKworICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAg
ICAgeC0+cGFyZW50KCktPm1fbGVmdCA9IHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5tX3JpZ2h0ID0geTsKKyAgICAgICAgeS0+bV9sZWZ0ID0geDsKKyAgICAgICAg
eC0+c2V0UGFyZW50KHkpOworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQo
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmlnaHRSb3RhdGUoUmF3Tm9kZSogeSkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIHg7CisKKyAgICAgICAgeCA9IHktPm1fbGVmdDsKKyAgICAgICAg
eS0+bV9sZWZ0ID0geC0+bV9yaWdodDsKKworICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSB4
LT5tX3JpZ2h0KQorICAgICAgICAgICAgeC0+bV9yaWdodC0+c2V0UGFyZW50KHkpOworCisgICAg
ICAgIHgtPnNldFBhcmVudCh5LT5wYXJlbnQoKSk7CisgICAgICAgIGlmICh5ID09IHktPnBhcmVu
dCgpLT5tX2xlZnQpCisgICAgICAgICAgICB5LT5wYXJlbnQoKS0+bV9sZWZ0ID0geDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeS0+cGFyZW50KCktPm1fcmlnaHQgPSB4OworICAgICAgICB4
LT5tX3JpZ2h0ID0geTsKKyAgICAgICAgeS0+c2V0UGFyZW50KHgpOworCisgICAgICAgIEFTU0VS
VCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0
SGVscChOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeDsKKyAgICAgICAgUmF3Tm9k
ZSogeTsKKyAgCisgICAgICAgIHotPm1fbGVmdCA9IHotPm1fcmlnaHQgPSBuaWxTZW50aW5lbCgp
OworICAgICAgICB5ID0gcm9vdCgpOworICAgICAgICB4ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAg
ICAgIHdoaWxlICh4ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAgICAgICAgIHkgPSB4OworICAg
ICAgICAgICAgaWYgKHotPmtleSA8IGFzTm9kZSh4KS0+a2V5KQorICAgICAgICAgICAgICAgIHgg
PSB4LT5tX2xlZnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IHgtPm1f
cmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgei0+c2V0UGFyZW50KHkpOworICAgICAgICBpZiAo
eSA9PSByb290KCkgfHwgei0+a2V5IDwgYXNOb2RlKHkpLT5rZXkpCisgICAgICAgICAgICB5LT5t
X2xlZnQgPSB6OworICAgICAgICBlbHNlCisgICAgICAgICAgICB5LT5tX3JpZ2h0ID0gejsKKwor
ICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAg
ICBSYXdOb2RlKiBzdWNjZXNzb3JJbnRlcm5hbChSYXdOb2RlKiB4KQorICAgIHsKKyAgICAgICAg
UmF3Tm9kZSogeTsKKyAgICAgICAgCisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9ICh5ID0g
eC0+bV9yaWdodCkpIHsKKyAgICAgICAgICAgIHdoaWxlICh5LT5tX2xlZnQgIT0gbmlsU2VudGlu
ZWwoKSkKKyAgICAgICAgICAgICAgICB5ID0geS0+bV9sZWZ0OworICAgICAgICAgICAgcmV0dXJu
IHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAg
ICAgd2hpbGUgKHggPT0geS0+bV9yaWdodCkgeworICAgICAgICAgICAgeCA9IHk7CisgICAgICAg
ICAgICB5ID0geS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gcm9vdCgp
KQorICAgICAgICAgICAgcmV0dXJuIG5pbFNlbnRpbmVsKCk7CisgICAgICAgIHJldHVybiB5Owor
ICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZUZpeFVwKFJhd05vZGUqIHgpCisgICAgeworICAg
ICAgICBSYXdOb2RlKiByZWFsUm9vdCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2Rl
KiB3OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF4LT5pc1JlZCgpICYmIHJlYWxSb290ICE9
IHgpIHsKKyAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAg
ICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYg
KHctPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKDApOworICAgICAg
ICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAg
ICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgt
PnBhcmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAg
ICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0g
eC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3
LT5tX2xlZnQtPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5zZXRS
ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh3KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlz
UmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAg
IHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAgICAgICAg
IGlmICh3LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZChmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5pc1JlZCgpKSB7
IAorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXctPm1fbGVmdC0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHctPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUodyk7
CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50
KCktPmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOworICAg
ICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAg
ICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgeC0+c2V0UmVkKGZhbHNlKTsKKworICAgICAgICBBU1NFUlQoIXJv
b3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7
CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3lS
ZWN1cnNlKFJhd05vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAobm9kZS0+aXNSZWQoKSkg
eworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX2xlZnQtPmlzUmVkKCkpOworICAgICAgICAg
ICAgQVNTRVJUKCFub2RlLT5tX3JpZ2h0LT5pc1JlZCgpKTsKKyAgICAgICAgfQorICAgICAgICBj
aGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX2xlZnQpOworICAgICAgICBjaGVja0NvbnNp
c3RlbmN5UmVjdXJzZShub2RlLT5tX3JpZ2h0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1w
UmVjdXJzZShSYXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2Vu
dGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJpbnRmKCIgICBub2RlOiAl
cFxuIiwgbm9kZSk7CisgICAgICAgIHByaW50ZigiICAgICAgY29sb3IgPSAlc1xuIiwgbm9kZS0+
aXNSZWQoKSA/ICJyZWQiIDogImJsYWNrIik7CisgICAgICAgIHByaW50ZigiICAgICAgbGVmdCAg
PSAlcFxuIiwgbm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICByaWdodCA9ICVw
XG4iLCBub2RlLT5tX3JpZ2h0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9sZWZ0KTsK
KyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7CisgICAgfQorI2VuZGlmCisgICAg
CisgICAgUmF3Tm9kZSogcm9vdCgpCisgICAgeworICAgICAgICByZXR1cm4gJm1fcm9vdDsKKyAg
ICB9CisgICAgCisgICAgUmF3Tm9kZSogbmlsU2VudGluZWwoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuICZtX25pbFNlbnRpbmVsOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBhc05vZGUoUmF3Tm9k
ZSogcmF3Tm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IHJvb3QoKSk7Cisg
ICAgICAgIEFTU0VSVChyYXdOb2RlICE9IG5pbFNlbnRpbmVsKCkpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Tm9kZSo+KHJhd05vZGUpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlIG1f
cm9vdDsKKyAgICBSYXdOb2RlIG1fbmlsU2VudGluZWw7Cit9OworCit9CisKKyNlbmRpZgorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJKHJldmlzaW9uIDkzOTEwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsx
NCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAgICB3dGYvTUQ1
LmNwcCBcCiAgICAgd3RmL01haW5UaHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFsbG9jYXRvci5j
cHAgXAogICAgIHd0Zi9OdWxsUHRyLmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291cmNlLmNwcCBc
CiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDkzOTEwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3IEBA
IHB1YmxpYzoKICAgICAgICAgYmFja3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZpbmFs
aXplIHRoZSBjb2RlLgotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERhdGEs
IHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0
ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChsaW5r
QnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1f
c2hvdWxkRmFsbEJhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAko
cmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY1LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQgZXhl
Y3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgs
IGludCogb3V0cHV0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFy
ckpJVENvZGU+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQs
IGxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJ
VENvZGU+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxl
bmd0aCwgb3V0cHV0KTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAg
dm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygp
OyB9CisgICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxl
QWRkcmVzcygpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5n
ZUxvZwkocmV2aXNpb24gOTM5MTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3Ig
bWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2Yg
ZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFz
ZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQg
dHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJt
aXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQg
dG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVk
QmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2Vz
IHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBo
YW5kbGUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhh
bmRsZS5oOiBBZGRlZC4KKwogMjAxMS0wOC0xNSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJl
cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZmFjdG9yIEpTIG9iamVjdHMgdG8gYWxsb2NhdGUg
aW4gc3RhdGljIGNyZWF0ZSBtZXRob2RzIHJhdGhlciB0aGFuIGNvbnN0cnVjdG9ycwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdI
ZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01l
dGFBbGxvY2F0b3JIYW5kbGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzOTEwKQorKysg
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAK
KzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBU
aGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZp
ZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVz
dC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAg
ICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9y
eSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9k
ZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxU
cmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAg
ICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZl
cmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBz
aW5jZSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIEZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorCiAyMDExLTA4LTI2ICBOZWQg
SG9sYnJvb2sgIDxuaG9sYnJvb2tAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRlclRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkgc2hvdWxkIG1lYXN1cmUgd29yZHMgd2l0aCB0
cmFpbGluZyBzcGFjZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmg+Cg==
</data>
<flag name="commit-queue"
          id="101552"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105689</attachid>
            <date>2011-08-30 14:01:17 -0700</date>
            <delta_ts>2011-08-30 20:14:32 -0700</delta_ts>
            <desc>the patch - fix style, conflicts, architectures</desc>
            <filename>metaalloc_patch_13.diff</filename>
            <type>text/plain</type>
            <size>228203</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ0IEBA
CisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUuZXhwOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpMaW5rQnVmZmVyKToKKyAg
ICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVDb2RlKToKKyAgICAgICAgKEpTQzo6TGlu
a0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6b3BlcmF0b3IhKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6
ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0
aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJs
b2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1
cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJ
VENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAg
ICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRy
eUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAg
KiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVB
bGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAg
ICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAq
IGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpF
eGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6
RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6
OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxl
QWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
Ojpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9y
OjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmFkZHJl
c3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAo
SlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c3RhcnQpOgor
ICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0
RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUpOgorICAgICAgICAqIGppdC9KSVRPcGNv
ZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVy
dHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklU
VGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6
CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgor
ICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAg
ICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVk
VGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXpl
ZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6
CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgor
ICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICog
cnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNy
ZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAg
ICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKToKKyAgICAgICAg
KiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6Omdl
dENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAgICAgIChwcmludFZhbHVlKToKKyAgICAg
ICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6UmVkQmxh
Y2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OnJ1blRlc3RzKToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQYWlyKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3Rz
OjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFj
dCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6cmVtb3ZlKToKKyAgICAgICAgKFJlZEJs
YWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNr
VHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6YXNz
ZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6dGVzdERy
aXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3Rz
Ojp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE9uZUFs
bG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RTaW1wbGVGdWxsQ29hbGVzY2UpOgor
ICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0RklGT0FsbG9jKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JU
ZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6
OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFNocmluayk6
CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2Nl
KToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6c2V0VXApOgorICAgICAgICAoTWV0YUFs
bG9jYXRvclRlc3RzOjp0ZWFyRG93bik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmFs
bG9jYXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6ZnJlZSk6CisgICAgICAgIChN
ZXRhQWxsb2NhdG9yVGVzdHM6Om5vdGlmeUZyZWUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRl
c3RzOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmNvbmZpcm0p
OgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpjb25maXJtSGlnaFdhdGVybWFyayk6Cisg
ICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKE1l
dGFBbGxvY2F0b3JUZXN0czo6Ynl0ZXNDb21taXR0ZWQpOgorICAgICAgICAoTWV0YUFsbG9jYXRv
clRlc3RzOjpieXRlU3RhdGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpwYWdlU3Rh
dGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpNZXRhQWxs
b2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0
UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yNjRiaXRS
ZWdyZXNzaW9uVGVzdHM6OnJ1blRyZWVSb290Q29ycnVwdGlvblRlc3QpOgorICAgICAgICAobWFp
bik6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAgICAg
KFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKToKKyAgICAgICAgKFdURjo6TWV0YUFs
bG9jYXRvcjo6TWV0YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6On5N
ZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcyk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNwYWNlU2l6ZSk6CisgICAgICAgIChXVEY6Ok1l
dGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpk
ZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cm91
bmRVcCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0Fs
bG9jYXRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzUmVzZXJ2ZWQpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0NvbW1pdHRlZCk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKToKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oOiBBZGRlZC4KKyAgICAgICAgKiB3dGYvUmVkQmxhY2tUcmVlLmg6IEFkZGVk
LgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OnBhcmVudCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6c2V0UGFyZW50KToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjppc1JlZCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6UmF3Tm9kZTo6c2V0UmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSZWRCbGFj
a1RyZWUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpm
aXJzdCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6bGFzdCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpw
cmVkZWNlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEV4YWN0KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbCk6
CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6aXNFbXB0eSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Y2hlY2tDb25z
aXN0ZW5jeSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZHVtcCk6CisgICAgICAgIChX
VEY6OlJlZEJsYWNrVHJlZTo6bGVmdFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJl
ZTo6cmlnaHRSb3RhdGUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omluc2VydEhlbHAp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnN1Y2Nlc3NvckludGVybmFsKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmVGaXhVcCk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6Y2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmR1bXBSZWN1cnNlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyb290KToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpuaWxTZW50aW5lbCk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6YXNOb2RlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAg
ICAgICAoSlNDOjpZYXJyOjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKiB5YXJy
L1lhcnJKSVQuaDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OllhcnI6OllhcnJDb2RlQmxvY2s6OmdldEFkZHIpOgorCiAyMDExLTA4
LTMwICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgVHlwZWRBcnJh
eXMgZG9uJ3QgZW5zdXJlIHRoYXQgZGVub3JtYWxpc2VkIHZhbHVlcyBhcmUgbm9ybWFsaXNlZApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdv
cmtpbmcgY29weSkKQEAgLTUwOSw2ICs1MDksOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01E
NS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTm9u
Q29weWluZ1NvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Ob25jb3B5YWJsZS5o
IFwKQEAgLTU0MSw2ICs1NDQsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UmFuZG9tTnVtYmVyU2VlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNr
VHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oIFwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQxMDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDMsNiArNDAzLDEyIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRFUEZQdlMwX0VTMF9Q
S2MKIF9fWk4zV1RGMTJkZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFpblRocmVhZEV2CiBf
X1pOM1dURjEycmFuZG9tTnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdhZGRGcmVz
aEZyZWVTcGFjZUVQdm0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMThkZWJ1Z0ZyZWVTcGFjZVNp
emVFdgorX19aTjNXVEYxM01ldGFBbGxvY2F0b3I4YWxsb2NhdGVFbQorX19aTjNXVEYxM01ldGFB
bGxvY2F0b3JDMkVtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckQxRXYKK19fWk4zV1RGMTNNZXRh
QWxsb2NhdG9yRDJFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxMXJlaWZ5U3RyaW5nRXYKIF9f
Wk4zV1RGMTNTdHJpbmdCdWlsZGVyMTFzaHJpbmtUb0ZpdEV2CiBfX1pOM1dURjEzU3RyaW5nQnVp
bGRlcjE1cmVzZXJ2ZUNhcGFjaXR5RWoKQEAgLTQzNyw2ICs0NDMsOCBAQCBfX1pOM1dURjE4Y2Fs
Y3VsYXRlVVRDT2Zmc2V0RXYKIF9fWk4zV1RGMThjaGFyYWN0ZXJzVG9Eb3VibGVFUEt0bVBiUzJf
CiBfX1pOM1dURjE4ZGF0ZVRvRGF5c0Zyb20xOTcwRWlpaQogX19aTjNXVEYxOG1vbnRoRnJvbURh
eUluWWVhckVpYgorX19aTjNXVEYxOU1ldGFBbGxvY2F0b3JIYW5kbGU2c2hyaW5rRW0KK19fWk4z
V1RGMTlNZXRhQWxsb2NhdG9ySGFuZGxlRDFFdgogX19aTjNXVEYxOWluaXRpYWxpemVUaHJlYWRp
bmdFdgogX19aTjNXVEYyMGVxdWFsSWdub3JpbmdOdWxsaXR5RVBOU18xMFN0cmluZ0ltcGxFUzFf
CiBfX1pOM1dURjIwZmFzdE1hbGxvY1N0YXRpc3RpY3NFdgpAQCAtNTE2LDYgKzUyNCw3IEBAIF9f
Wk4zV1RGOEludGVybmFsMjFmYXN0TWFsbG9jTWF0Y2hGYWlsZWQKIF9fWk4zV1RGOGZhc3RGcmVl
RVB2CiBfX1pOM1dURjhtc1RvWWVhckVkCiBfX1pOM1dURjhudWxsQXRvbUUKK19fWk4zV1RGOHBh
Z2VTaXplRXYKIF9fWk4zV1RGOHN0YXJBdG9tRQogX19aTjNXVEY4dGV4dEF0b21FCiBfX1pOM1dU
RjlCeXRlQXJyYXk2Y3JlYXRlRW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkocmV2aXNpb24g
OTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dU
Ri9XVEYudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03NTcsNiArNzU3LDE4IEBACiAJCQk+CiAJ
CTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE1ldGFBbGxvY2F0
b3IuY3BwIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHd0ZlxNZXRhQWxsb2NhdG9yLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5cd3RmXE1ldGFBbGxvY2F0b3JIYW5kbGUuaCIKKwkJCT4KKwkJPC9GaWxl
PgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTUQ1LmNwcCIKIAkJCT4KIAkJ
PC9GaWxlPgpAQCAtODk3LDYgKzkwOSwxMCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxSZWRCbGFja1RyZWUuaCIKKwkJCT4KKwkJPC9GaWxl
PgorCQk8RmlsZQogCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVmQ291bnRlZC5oIgogCQkJ
PgogCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
OTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogCQkJCTE0
MTIxNEJGMEE0OTE5MEUwMDQ4MDI1NSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTkz
MkY1QkU5MDgyMkExQzcwMDczNjk3NSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJCTE0
QkQ1OUM3MEEzRThGQTQwMEJBRjU5QyAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJCTBG
OTYzQjI5MTNGNzY0RDEwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAogCQkJKTsK
IAkJCW5hbWUgPSBBbGw7CiAJCQlwcm9kdWN0TmFtZSA9IEFsbDsKQEAgLTQ5LDYgKzUwLDEzIEBA
CiAJCTBCREZGQUUxMEZDNjE5MzEwMEQ2OUVGNCAvKiBPd25GYXN0TWFsbG9jUHRyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQkRGRkFEMTBGQzYxNkVD
MDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXpl
TGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYy
OTQ3OUMxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyOTQ3OUIxMjZFNjk4QzAwQjNBQkY1
IC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9OworCQkwRjk2M0IxODEzRjc1MzA0MDAwMkQ5QjIg
LyogQ29yZUZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU2MEE0Q0YwNEIzQjNFNzAwOEFFOTUyIC8qIENvcmVGb3Vu
ZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEY5NjNCMTkxM0Y3NTMwNDAwMDJEOUIyIC8qIEph
dmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29y
ZS5mcmFtZXdvcmsgKi87IH07CisJCTBGOTYzQjI1MTNGNzUzMzMwMDAyRDlCMiAvKiB1bml0dGVz
dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMTExM0Y3NTJGNzAwMDJEOUIyIC8qIHVuaXR0ZXN0cy5jcHAgKi87IH07CisJCTBGOTYzQjI3
MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRC
bGFja1RyZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQjEzRjg1M0M3
MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IHNldHRpbmdzID0ge0NPTVBJTEVSX0ZM
QUdTID0gIi1mbm8tc3RyaWN0LWFsaWFzaW5nIjsgfTsgfTsKKwkJMEY5NjNCMkQxM0Y4NTQwMjAw
MDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY5
NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJFMTNGQzY2QUUwMDAy
RDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTAxNDAyRkRFNDAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzcwMDkyMTQwMkZG
M0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3NzAwOTExNDAyRkYyODAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgKi87IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1
ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNjI0LDYgKzYzMiwyMCBAQAog
LyogRW5kIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWENvbnRhaW5lckl0
ZW1Qcm94eSBzZWN0aW9uICovCisJCTBGOTYzQjE0MTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJ
CQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBv
YmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSA5
MzJGNUIzRTA4MjJBMUM3MDA3MzY5NzU7CisJCQlyZW1vdGVJbmZvID0gSmF2YVNjcmlwdENvcmU7
CisJCX07CisJCTBGOTYzQjI4MTNGNzY0RDEwMDAyRDlCMiAvKiBQQlhDb250YWluZXJJdGVtUHJv
eHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQ
b3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJ
CQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRjk2M0IxMjEzRjc1
MzA0MDAwMkQ5QjI7CisJCQlyZW1vdGVJbmZvID0gdW5pdHRlc3RzOworCQl9OwogCQkxNDEyMTEz
NTBBNDg3OTYxMDA0ODAyNTUgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNh
ID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBG
RTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOwpAQCAtNjgzLDYgKzcwNSwyNiBA
QAogLyogRW5kIFBCWENvbnRhaW5lckl0ZW1Qcm94eSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBC
WENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkwRjk2M0IxQTEzRjc1MzA0MDAwMkQ5
QjIgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlGaWxlc0J1
aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZHN0UGF0aCA9
ICIiOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJ
bmFtZSA9ICJDb3B5IFN1cHBvcnQgU2NyaXB0IjsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQl9OworCQkwRjk2M0IxQzEzRjc1MzA0MDAwMkQ5QjIgLyogSW5z
dGFsbCBTdXBwb3J0IFNjcmlwdCAqLyA9IHsKKwkJCWlzYSA9IFBCWENvcHlGaWxlc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSA4OworCQkJZHN0UGF0aCA9ICIkKFNZU1RFTV9MSUJS
QVJZX0RJUikvRnJhbWV3b3Jrcy9KYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsvVmVyc2lvbnMvQS9S
ZXNvdXJjZXMiOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDA7CisJCQlmaWxlcyA9ICgKKwkJCSk7
CisJCQluYW1lID0gIkluc3RhbGwgU3VwcG9ydCBTY3JpcHQiOworCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDE7CisJCX07CiAJCTVEQkIxNTExMTMxRDBCMTMwMDU2QUQz
NiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovID0gewogCQkJaXNhID0gUEJYQ29weUZpbGVzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC03MzYsNiArNzc4
LDEyIEBACiAJCTBCREZGQUQ0MEZDNjE3MTAwMEQ2OUVGNCAvKiBDcm9zc1RocmVhZFJlZkNvdW50
ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRSZWZDb3Vu
dGVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBCRjI4QTI4MTFBMzNEQzMwMDYz
OEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNpemVMaW1pdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI5NDc5
QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEY5NjNCMTExM0Y3NTJGNzAwMDJEOUIyIC8qIHVuaXR0ZXN0cy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB1bml0dGVzdHMuY3BwOyBwYXRoID0g
dGVzdHMvdW5pdC91bml0dGVzdHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
Rjk2M0IyMzEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUi
OyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB1bml0dGVzdHM7IHNvdXJjZVRyZWUgPSBCVUlM
VF9QUk9EVUNUU19ESVI7IH07CisJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFj
a1RyZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAv
KiBNZXRhQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFB
bGxvY2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkIxM0Y4NTND
NzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8qIFNh
bXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGlu
Z0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAyRkYy
ODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTMzOSw2ICsxMzg3LDE1IEBACiAvKiBFbmQgUEJYRmlsZVJlZmVy
ZW5jZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJMEY5NjNCMTcxM0Y3NTMwNDAwMDJEOUIyIC8qIEZyYW1ld29ya3MgKi8gPSB7CisJ
CQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjk2M0IxODEzRjc1MzA0MDAwMkQ5QjIgLyog
Q29yZUZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEY5NjNCMTkx
M0Y3NTMwNDAwMDJEOUIyIC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwor
CQl9OwogCQkxNDEyMTExRTBBNDg3OTNDMDA0ODAyNTUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0
NzQ4MzY0NzsKQEAgLTEzODcsNiArMTQ0NCw3IEBACiAJCQkJOTMyRjVCRTEwODIyQTFDNzAwNzM2
OTc1IC8qIGpzYyAqLywKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyogbWluaWRvbSAq
LywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKKwkJCQkwRjk2
M0IyMzEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQ
cm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNDUyLDkgKzE1MTAsMTgg
QEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsKIAkJfTsKKwkJMEY5NjNCMEYx
M0Y3NTJCMjAwMDJEOUIyIC8qIHVuaXQgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVzdHMuY3Bw
ICovLAorCQkJKTsKKwkJCW5hbWUgPSB1bml0OworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMTQxMjExMDAwQTQ4NzcyNjAwNDgwMjU1IC8qIHRlc3RzICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IwRjEzRjc1MkIyMDAwMkQ5
QjIgLyogdW5pdCAqLywKIAkJCQkxNDQwMDUxNzBBNTMxQ0I1MDAwNUYwNjEgLyogbWluaWRvbSAq
LywKIAkJCQkxNEJENUEyRDBBM0U5MUY2MDBCQUY1OUMgLyogdGVzdGFwaS5jICovLAogCQkJCTE0
RDg1Nzc0MEE0Njk2QzgwMDMyMTQ2QyAvKiB0ZXN0YXBpLmpzICovLApAQCAtMTY3MCw2ICsxNzM3
LDEwIEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTYzQjJFMTNGQzY2QUUwMDAyRDlC
MiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCisJCQkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJE
OUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlC
MiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCisJCQkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8q
IFJlZEJsYWNrVHJlZS5oICovLAogCQkJCTA2RDM1OEEwMERBQUQ5QzQwMDNCMTc0RSAvKiBtYWMg
Ki8sCiAJCQkJODY1NjU3M0UxMTVCRTM1MjAwMjkxRjQwIC8qIHRleHQgKi8sCiAJCQkJRTE5NTY3
OEQwOUU3Q0YxMjAwQjg5RDEzIC8qIHVuaWNvZGUgKi8sCkBAIC0yMjUxLDYgKzIzMjIsOSBAQAog
CQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QUREMTQ1MEZEREVBOTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBN
ZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAy
MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcx
M0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
ODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjE0LDYgKzI2ODgsMjUgQEAKIC8qIEVuZCBQQlhIZWFk
ZXJzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWE5hdGl2ZVRhcmdldCBzZWN0
aW9uICovCisJCTBGOTYzQjEyMTNGNzUzMDQwMDAyRDlCMiAvKiB1bml0dGVzdHMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEY5
NjNCMUUxM0Y3NTMwNDAwMDJEOUIyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJY
TmF0aXZlVGFyZ2V0ICJ1bml0dGVzdHMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEY5
NjNCMTUxM0Y3NTMwNDAwMDJEOUIyIC8qIFNvdXJjZXMgKi8sCisJCQkJMEY5NjNCMTcxM0Y3NTMw
NDAwMDJEOUIyIC8qIEZyYW1ld29ya3MgKi8sCisJCQkJMEY5NjNCMUExM0Y3NTMwNDAwMDJEOUIy
IC8qIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8sCisJCQkJMEY5NjNCMUMxM0Y3NTMwNDAwMDJEOUIy
IC8qIEluc3RhbGwgU3VwcG9ydCBTY3JpcHQgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgK
KwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkJMEY5NjNCMTMxM0Y3NTMwNDAwMDJEOUIy
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8sCisJCQkpOworCQkJbmFtZSA9IHVuaXR0ZXN0czsK
KwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRjk2M0Iy
MzEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29t
LmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsKIAkJMTQxMjExMUYwQTQ4NzkzQzAwNDgw
MjU1IC8qIG1pbmlkb20gKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWls
ZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQxMjExMzkwQTQ4Nzk4NDAwNDgwMjU1IC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJtaW5pZG9tIiAqLzsKQEAgLTI3
MjQsNiArMjgxNyw3IEBACiAJCQkJMTQxMjExMUYwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20g
Ki8sCiAJCQkJMTRCRDU5QkUwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJOTMy
RjVCREEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLywKKwkJCQkwRjk2M0IxMjEzRjc1MzA0MDAw
MkQ5QjIgLyogdW5pdHRlc3RzICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0IHNl
Y3Rpb24gKi8KQEAgLTI4MzgsNiArMjkzMiwxNCBAQAogLyogRW5kIFBCWFNoZWxsU2NyaXB0QnVp
bGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJMEY5NjNCMTUxM0Y3NTMwNDAwMDJEOUIyIC8qIFNvdXJjZXMgKi8gPSB7CisJCQlp
c2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRjk2M0IyNTEzRjc1MzMzMDAwMkQ5QjIgLyogdW5pdHRl
c3RzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkxNDEyMTExRDBBNDg3OTNDMDA0ODAyNTUgLyogU291
cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTI4NjIsNiArMjk2NCw3IEBACiAJCQlpc2EgPSBQQlhT
b3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlm
aWxlcyA9ICgKKwkJCQkwRjk2M0IyQzEzRjg1M0VDMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxl
U3BlY3RydW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NzAwOTIx
NDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTMwNzIsNiArMzE3NSwxNiBAQAogLyogRW5kIFBCWFNvdXJjZXNCdWlsZFBoYXNlIHNlY3Rpb24g
Ki8KIAogLyogQmVnaW4gUEJYVGFyZ2V0RGVwZW5kZW5jeSBzZWN0aW9uICovCisJCTBGOTYzQjEz
MTNGNzUzMDQwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0g
UEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDkzMkY1QjNFMDgyMkExQzcwMDczNjk3
NSAvKiBKYXZhU2NyaXB0Q29yZSAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY5NjNCMTQxM0Y3NTMw
NDAwMDJEOUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKKwkJMEY5NjNCMjkx
M0Y3NjREMTAwMDJEOUIyIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQ
QlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEY5NjNCMTIxM0Y3NTMwNDAwMDJEOUIy
IC8qIHVuaXR0ZXN0cyAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEY5NjNCMjgxM0Y3NjREMTAwMDJE
OUIyIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMTQxMjExMzYwQTQ4Nzk2
MTAwNDgwMjU1IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJn
ZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gOTMyRjVCM0UwODIyQTFDNzAwNzM2OTc1IC8qIEph
dmFTY3JpcHRDb3JlICovOwpAQCAtMzExNSw2ICszMjI4LDM4IEBACiAvKiBFbmQgUEJYVGFyZ2V0
RGVwZW5kZW5jeSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFhDQnVpbGRDb25maWd1cmF0aW9uIHNl
Y3Rpb24gKi8KKwkJMEY5NjNCMUYxM0Y3NTMwNDAwMDJEOUIyIC8qIERlYnVnICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB1bml0dGVzdHM7CisJCQl9Owor
CQkJbmFtZSA9IERlYnVnOworCQl9OworCQkwRjk2M0IyMDEzRjc1MzA0MDAwMkQ5QjIgLyogUmVs
ZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZp
Z3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54
Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdW5p
dHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRjk2M0IyMTEzRjc1
MzA0MDAwMkQ5QjIgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMw
MEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJ
CQlQUk9EVUNUX05BTUUgPSB1bml0dGVzdHM7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsK
KwkJfTsKKwkJMEY5NjNCMjIxM0Y3NTMwNDAwMDJEOUIyIC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJ
CQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJl
bmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRlc3RBUEkueGNjb25maWcgKi87CisJ
CQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHVuaXR0ZXN0czsKKwkJCX07
CisJCQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMTQxMjExM0EwQTQ4Nzk4NDAwNDgwMjU1
IC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWls
ZFNldHRpbmdzID0gewpAQCAtMzMyOSw2ICszNDc0LDE3IEBACiAvKiBFbmQgWENCdWlsZENvbmZp
Z3VyYXRpb24gc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0NvbmZpZ3VyYXRpb25MaXN0IHNlY3Rp
b24gKi8KKwkJMEY5NjNCMUUxM0Y3NTMwNDAwMDJEOUIyIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ1bml0dGVzdHMiICovID0geworCQkJaXNhID0gWEND
b25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEY5NjNC
MUYxM0Y3NTMwNDAwMDJEOUIyIC8qIERlYnVnICovLAorCQkJCTBGOTYzQjIwMTNGNzUzMDQwMDAy
RDlCMiAvKiBSZWxlYXNlICovLAorCQkJCTBGOTYzQjIxMTNGNzUzMDQwMDAyRDlCMiAvKiBQcm9m
aWxpbmcgKi8sCisJCQkJMEY5NjNCMjIxM0Y3NTMwNDAwMDJEOUIyIC8qIFByb2R1Y3Rpb24gKi8s
CisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVs
dENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMTQxMjExMzkwQTQ4Nzk4
NDAwNDgwMjU1IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJtaW5pZG9tIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWls
ZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlICJK
U0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4K
ICNpbmNsdWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgpAQCAtMTI4LDE5ICsxMjksMjEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9p
bmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgICAgIFBh
c3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5kZXgpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFs
bG9jYXRvci0+YWxsb2MoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CisgICAgICAgICAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xvYmFsRGF0YS5leGVjdXRhYmxlQWxs
b2NhdG9yLmFsbG9jYXRlKGdsb2JhbERhdGEsIG1faW5kZXgpOwogCiAgICAgICAgICAgICBpZiAo
IXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgRXhlY3V0
YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgbV9pbmRleCk7CisgICAgICAgICAg
ICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LT5zdGFydCgpLCByZXN1
bHQtPnNpemVJbkJ5dGVzKCkpOwogCi0gICAgICAgICAgICByZXR1cm4gbWVtY3B5KHJlc3VsdCwg
bV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+c3RhcnQoKSwg
bV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmV3aW5kVG9MYWJlbChB
c3NlbWJsZXJMYWJlbCBsYWJlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwyMiArNjks
OCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZl
cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCBQYXNzUmVm
UHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgOiBtX2V4ZWN1dGFi
bGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1f
Y29kZSgwKQotICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCi0gICAgICAgICwgbV9nbG9iYWxE
YXRhKCZnbG9iYWxEYXRhKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLCBtX2NvbXBsZXRlZChm
YWxzZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgbGlua0NvZGUoKTsKLSAgICB9Ci0KLSAgICBM
aW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20s
IEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAgOiBtX2V4ZWN1dGFibGVQ
b29sKGFsbG9jYXRvci5wb29sRm9yU2l6ZShnbG9iYWxEYXRhLCBtYXNtLT5tX2Fzc2VtYmxlci5j
b2RlU2l6ZSgpKSkKLSAgICAgICAgLCBtX3NpemUoMCkKKyAgICBMaW5rQnVmZmVyKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisgICAgICAgIDogbV9zaXpl
KDApCiAgICAgICAgICwgbV9jb2RlKDApCiAgICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKICAg
ICAgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCkBAIC0xODUsMTQgKzE3MSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKIAotICAgICAgICBy
ZXR1cm4gQ29kZVJlZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBvb2wsIG1fc2l6ZSk7Ci0gICAgfQot
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluYWxpemVDb2RlQWRkZW5kdW0oKQotICAgIHsKLSAg
ICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwotCi0gICAgICAgIHJldHVybiBDb2RlTG9jYXRp
b25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1v
cnkpOwogICAgIH0KIAogICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExhYmVsIGxhYmVsKQpAQCAt
MjMyLDE0ICsyMTEsMTkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9jb2Rl
KTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQotICAgICAgICBtX2NvZGUgPSBtX2Fz
c2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xvYmFsRGF0YSwgbV9leGVj
dXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fYXNzZW1i
bGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxEYXRhKTsKKyAgICAgICAg
aWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
Y29kZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKICAgICAgICAgbV9zaXplID0gbV9h
c3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgICAgIEFTU0VSVChtX2NvZGUp
OwogI2Vsc2UKICAgICAgICAgc2l6ZV90IGluaXRpYWxTaXplID0gbV9hc3NlbWJsZXItPm1fYXNz
ZW1ibGVyLmNvZGVTaXplKCk7Ci0gICAgICAgIG1fY29kZSA9ICh1aW50OF90KiltX2V4ZWN1dGFi
bGVQb29sLT5hbGxvYygqbV9nbG9iYWxEYXRhLCBpbml0aWFsU2l6ZSk7Ci0gICAgICAgIGlmICgh
bV9jb2RlKQorICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2dsb2JhbERhdGEtPmV4ZWN1
dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fZ2xvYmFsRGF0YSwgaW5pdGlhbFNpemUpOworICAg
ICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgbV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKKyAgICAg
ICAgQVNTRVJUKG1fY29kZSk7CiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0
YWJsZShtX2NvZGUsIGluaXRpYWxTaXplKTsKICAgICAgICAgdWludDhfdCogaW5EYXRhID0gKHVp
bnQ4X3QqKW1fYXNzZW1ibGVyLT51bmxpbmtlZENvZGUoKTsKICAgICAgICAgdWludDhfdCogb3V0
RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7CkBAIC0yOTcsNyArMjgx
LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBqdW1wc1RvTGluay5jbGVhcigpOwogICAgICAgICBt
X3NpemUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsKLSAgICAgICAgbV9leGVj
dXRhYmxlUG9vbC0+dHJ5U2hyaW5rKG1fY29kZSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7CisgICAg
ICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7CiAKICNpZiBEVU1QX0xJTktf
U1RBVElTVElDUwogICAgICAgICBkdW1wTGlua1N0YXRpc3RpY3MobV9jb2RlLCBpbml0aWFsU2l6
ZSwgbV9zaXplKTsKQEAgLTM2Niw3ICszNTAsNyBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgog
ICAgIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKKyAgICBS
ZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogICAgIHNp
emVfdCBtX3NpemU7CiAgICAgdm9pZCogbV9jb2RlOwogICAgIE1hY3JvQXNzZW1ibGVyKiBtX2Fz
c2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTksMjIgKzE5OSw1OSBAQCBwcml2YXRlOgogLy8gcG9pbnRlciB0byB0aGUg
Y29kZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3aXRoaW4gd2hpY2ggaXQK
IC8vIHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgeworcHJpdmF0
ZToKKyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCdzIGRhbmdlcm91cyBlbm91Z2gg
dGhhdCB3ZSB3YW50IHVzZXMgb2YgaXQKKyAgICAvLyB0byBiZSBlYXN5IHRvIGZpbmQgLSBoZW5j
ZSB0aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cuCisgICAgZXhwbGljaXQgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgICAgICA6IG1f
Y29kZVB0cihjb2RlUHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CisgICAg
fQorCiBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkKLSAgICAgICAgOiBtX3Np
emUoMCkKICAgICB7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKHZvaWQqIGNv
ZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6
ZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX2V4ZWN1dGFibGVQb29sKGV4
ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZihQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1v
cnkpCisgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpCisgICAg
ICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVNZW1vcnkpCisgICAgeworICAgICAg
ICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7CisgICAgICAgIEFTU0VS
VChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOworICAgICAgICBBU1NFUlQobV9jb2RlUHRy
KTsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQg
dGhlIGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcworICAgIC8vIGFscmVhZHkgYmVpbmcg
a2VwdCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5z
CisgICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgorICAgIHN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjb2RlUHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihj
b2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0
YWJsZU1lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVt
b3J5LmdldCgpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlUHRyOworICAgIH0KKyAgICAKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1l
bW9yeSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxl
TWVtb3J5LT5zaXplSW5CeXRlcygpOwogICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX2NvZGVQdHI7IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBtX2NvZGU7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwot
ICAgIHNpemVfdCBtX3NpemU7Citwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBt
X2NvZGVQdHI7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0YWJs
ZU1lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA5NDEwOCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE1OTUsOSArMTU5NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGIubV9v
ZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBleGVjdXRhYmxlQ29w
eShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisg
ICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIu
ZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1f
Zm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZvaWQg
cmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBtX2Zvcm1hdHRlci5yZXdp
bmRUb0xhYmVsKHJld2luZFRvKTsgfQpAQCAtMTkzOSw5ICsxOTM5LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3QgeyByZXR1cm4gbV9idWZm
ZXIuaXNBbGlnbmVkKGFsaWdubWVudCk7IH0KICAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAg
ICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAgICAgICAg
ICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAgICAgICB9
CiAKICAgICAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7
IG1fYnVmZmVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
Mjk5LDcgKzI5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEpJVCkKICAgICAg
ICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25zdHJ1Y3RvciA/IG93bmVy
RXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0KCkgOiBvd25lckV4ZWN1
dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQotICAgICAgICBFeGVjdXRhYmxl
UG9vbCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJs
ZVBvb2woKTsgfQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVt
b3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogI2Vu
ZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVjdXRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cnVjdHVyZUNo
YWluOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVmIENvZGVMb2NhdGlvbkxhYmVsIFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKKyAgICB0eXBlZGVm
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHVi
Um91dGluZVR5cGU7CiAKICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRfc2Vs
Zl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xkIGRh
dGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5
KQpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfSBwdXRC
eUlkUmVwbGFjZTsKICAgICAgICAgfSB1OwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0
dWJSb3V0aW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CiAg
ICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwogICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW47CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDEwOCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05MjgsNyArOTI4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBl
bnRyeQogICAgIC8vIEdlbmVyYXRlIHRoZSBib2R5IG9mIHRoZSBwcm9ncmFtLgogICAgIGNvbXBp
bGVCb2R5KCk7CiAgICAgLy8gTGluawotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExp
bmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBsaW5rKGxpbmtC
dWZmZXIpOwogICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBK
SVRDb2RlOjpERkdKSVQpOwogfQpAQCAtOTg2LDcgKzk4Niw3IEBAIHZvaWQgSklUQ29tcGlsZXI6
OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKIAogCiAgICAgLy8gPT09IExpbmsgPT09Ci0gICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhl
Y3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMpOwogICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgCiAgICAgLy8gRklYTUU6IHN3
aXRjaCB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNrIG92ZXIgdG8gREZHT3Bl
cnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkz
LDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtCdWZmZQogICAgIGxpbmtS
ZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogfQogCi1z
dGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywg
U3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVf
dCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlv
bkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgQ29k
ZUxvY2F0aW9uTGFiZWwmIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0No
YWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
bywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNpemVfdCBvZmZzZXQsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiYgc3R1YlJv
dXRpbmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERh
dGEoKTsKIApAQCAtMTMzLDExICsxMzMsMTEgQEAgc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0No
YWluQWNjZXNzU3R1YgogICAgIAogICAgIGVtaXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2Vz
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1Ykpp
dCwgZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAKICAgICBsaW5rUmVzdG9y
ZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJlbCk7CiAgICAgCi0gICAg
c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIHN0
dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgYmFzZVZhbHVlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpAQCAtMTc2LDE1ICsxNzYsMTQgQEAgc3RhdGljIGJv
b2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAKICAgICAgICAgZW1pdFJl
c3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBz
dWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJs
ZVBvb2woKSk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZz
dHViSml0KTsKICAgICAgICAgCiAgICAgICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZl
ciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJl
Q2FzZXMpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgICAgIHN0dWJJbmZvLnN0
dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0Y2hCdWZm
ZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJv
dXRpbmUuY29kZSgpKSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAgICAgICAgIAogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTIzMSw3ICsyMzAsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5
SUQoRXhlY1N0YXRlKiBlCiAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBz
dHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9E
b25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5zdHViUm91dGluZSk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1
YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3Qp
OwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmdsb2JhbERhdGEsIGNvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4pOwpAQCAt
MzI0LDcgKzMyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQK
ICAgICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3Nl
bGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGluZSk7Ci0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxp
c3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nh
c2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwor
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7
CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMzUwLDIx
ICszNDksMjEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAg
ICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2VzcyA9IHN0dWJKaXQuanVt
cCgpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0
YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgCi0gICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGlj
U3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwog
ICAgICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAgICAgICAgIAogICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBsYXN0UHJvdG9CZWdpbik7CiAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgIAotICAgICAgICBDb2Rl
TG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5k
dW0oKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgICAg
IAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVj
ayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3RJbmRleCA8
IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtNDA4LDcgKzQwNyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3Rv
TGlzdChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lk
X2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKICAgICAg
ICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1Yklu
Zm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsKLSAgICAgICAg
c3R1YkluZm8uc3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHVi
SW5mby5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgICAgICBzdHVi
SW5mby5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzdHViSW5mby5hY2Nlc3NUeXBlID0gYWNjZXNz
X2dldF9ieV9pZF9wcm90b19saXN0KTsKQEAgLTQxOSwxOCArNDE4LDE4IEBAIHN0YXRpYyBib29s
IHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAobGlzdEluZGV4IDwgUE9MWU1P
UlBISUNfTElTVF9DQUNIRV9TSVpFKSB7CiAgICAgICAgIHN0dWJJbmZvLnUuZ2V0QnlJZFByb3Rv
TGlzdC5saXN0U2l6ZSsrOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90
b0JlZ2luKTsKIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAgICAgIAotICAgICAgICBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFp
biwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwg
ZW50cnlMYWJlbCk7CisgICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywg
c3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRv
RG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAgICAgIAotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEs
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVj
dHVyZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAg
aWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTQ4LDE4ICs1NDcsMTcgQEAgc3RhdGljIGJvb2wgdHJ5
Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Kmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gp
CiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNl
KSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFk
ZGVuZHVtKCk7Ci0gICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7
CisgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRp
bmUuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0aW9uKHNsb3QsIHB1dEtp
bmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1dEJ5SWRUcmFu
c2l0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBvbGRTdHJ1
Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiA5NDEw
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDQyICsyNywxMTEgQEAKIAogI2luY2x1ZGUgIkV4ZWN1dGFi
bGVBbGxvY2F0b3IuaCIKIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQp
CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDx3dGYvUGFnZVJlc2Vy
dmF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgorI2VuZGlmCisKICNpZiBFTkFCTEUo
QVNTRU1CTEVSKQogCit1c2luZyBuYW1lc3BhY2UgV1RGOworCiBuYW1lc3BhY2UgSlNDIHsKIAog
I2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCiAKLUV4ZWN1dGFibGVQb29s
OjpBbGxvY2F0aW9uIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSkKK2Ns
YXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKK3B1
YmxpYzoKKyAgICBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICAgICAgOiBNZXRhQWxs
b2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMKKyAgICB7
CisgICAgICAgIC8vIERvbid0IHByZWFsbG9jYXRlIGFueSBtZW1vcnkgaGVyZS4KKyAgICB9Cisg
ICAgCisgICAgdmlydHVhbCB+RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzZXJ2YXRpb25zLnNpemUoKTsgKytpKQor
ICAgICAgICAgICAgcmVzZXJ2YXRpb25zLmF0KGkpLmRlYWxsb2NhdGUoKTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1Q
YWdlcykKKyAgICB7CisgICAgICAgIHNpemVfdCBuZXdOdW1QYWdlcyA9ICgoKG51bVBhZ2VzICog
cGFnZVNpemUoKSArIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSAtIDEpIC8gSklUX0FM
TE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFICogSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpF
KSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7CisgICAgICAgIAorICAgICAgICBBU1NF
UlQobmV3TnVtUGFnZXMgPj0gbnVtUGFnZXMpOworICAgICAgICAKKyAgICAgICAgbnVtUGFnZXMg
PSBuZXdOdW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIFBhZ2VSZXNlcnZhdGlvbiByZXNlcnZh
dGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShudW1QYWdlcyAqIHBhZ2VTaXplKCksIE9T
QWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVl
KTsKKyAgICAgICAgaWYgKCFyZXNlcnZhdGlvbikKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAg
ICAgIAorICAgICAgICByZXNlcnZhdGlvbnMuYXBwZW5kKHJlc2VydmF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiByZXNlcnZhdGlvbi5iYXNlKCk7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQorICAgIHsKKyAgICAgICAgT1NB
bGxvY2F0b3I6OmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFC
TEUsIHRydWUpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJl
ZSh2b2lkKiBwYWdlKQorICAgIHsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmRlY29tbWl0KHBhZ2Us
IHBhZ2VTaXplKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UGFnZVJlc2VydmF0
aW9uLCAxNj4gcmVzZXJ2YXRpb25zOworfTsKKworc3RhdGljIERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3IqIGFsbG9jYXRvcjsKKwordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXpl
QWxsb2NhdG9yKCkKIHsKLSAgICBQYWdlQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0gUGFnZUFsbG9j
YXRpb246OmFsbG9jYXRlKHNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VU
QUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKLSAgICBpZiAoIWFsbG9jYXRpb24pCi0gICAgICAg
IENSQVNIKCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRpb247CisgICAgQVNTRVJUKCFhbGxvY2F0b3Ip
OworICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCk7CiB9CiAK
LXZvaWQgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoRXhlY3V0YWJsZVBvb2w6OkFsbG9j
YXRpb24mIGFsbG9jYXRpb24pCitFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2Nh
dG9yKEpTR2xvYmFsRGF0YSYpCiB7Ci0gICAgYWxsb2NhdGlvbi5kZWFsbG9jYXRlKCk7CisgICAg
QVNTRVJUKGFsbG9jYXRvcik7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxp
ZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCisKIGJvb2wgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQotICAgIAorCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcykKK3sK
KyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5h
bGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIENSQVNIKCk7
CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKIHNpemVfdCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQogewotICAgIHJldHVybiAwOwotfSAKKyAgICBy
ZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOworfQogCisjaWYgRU5BQkxFKE1FVEFf
QUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxl
KCkKK3sKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7Cit9CiAjZW5kaWYKIAorI2VuZGlm
IC8vIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCisKICNpZiBFTkFCTEUoQVNT
RU1CTEVSX1dYX0VYQ0xVU0lWRSkKIAogI2lmIE9TKFdJTkRPV1MpIHx8IE9TKFNZTUJJQU4pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
aAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFi
bGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
PHN0ZGRlZi5oPiAvLyBmb3IgcHRyZGlmZl90CiAjaW5jbHVkZSA8bGltaXRzPgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4K
ICNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0xMDIsMTIwICsxMDMsMjcgQEAg
aW5saW5lIHNpemVfdCByb3VuZFVwQWxsb2NhdGlvblNpemUoc2l6ZQogCiBuYW1lc3BhY2UgSlND
IHsKIAotY2xhc3MgRXhlY3V0YWJsZVBvb2wgOiBwdWJsaWMgUmVmQ291bnRlZDxFeGVjdXRhYmxl
UG9vbD4gewotcHVibGljOgotI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQp
Ci0gICAgdHlwZWRlZiBQYWdlQWxsb2NhdGlvbiBBbGxvY2F0aW9uOwotI2Vsc2UKLSAgICBjbGFz
cyBBbGxvY2F0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFsbG9jYXRpb24odm9pZCogYmFz
ZSwgc2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fYmFzZShiYXNlKQotICAgICAgICAgICAg
LCBtX3NpemUoc2l6ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAgICAgIHZvaWQqIGJhc2Uo
KSB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICAgICAgc2l6ZV90IHNpemUoKSB7IHJldHVybiBtX3Np
emU7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9iYXNlOyB9
Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkKiBtX2Jhc2U7Ci0gICAgICAgIHNpemVfdCBt
X3NpemU7Ci0gICAgfTsKLSNlbmRpZgotICAgIHR5cGVkZWYgVmVjdG9yPEFsbG9jYXRpb24sIDI+
IEFsbG9jYXRpb25MaXN0OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlUG9vbChnbG9iYWxEYXRhLCBuKSk7Ci0g
ICAgfQotCi0gICAgdm9pZCogYWxsb2MoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qg
bikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVQdHIgPD0gbV9lbmQpOwotCi0gICAgICAg
IC8vIFJvdW5kICduJyB1cCB0byBhIG11bHRpcGxlIG9mIHdvcmQgc2l6ZTsgaWYgYWxsIGFsbG9j
YXRpb25zIGFyZSBvZgotICAgICAgICAvLyB3b3JkIHNpemVkIHF1YW50aXRpZXMsIHRoZW4gYWxs
IHN1YnNlcXVlbnQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGlnbmVkLgotICAgICAgICBuID0gcm91
bmRVcEFsbG9jYXRpb25TaXplKG4sIHNpemVvZih2b2lkKikpOwotCi0gICAgICAgIGlmIChzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KG4pIDwgKG1fZW5kIC0gbV9mcmVlUHRyKSkgewotICAgICAgICAg
ICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlUHRyOwotICAgICAgICAgICAgbV9mcmVlUHRyICs9IG47
Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSW5z
dWZmaWNpZW50IHNwYWNlIHRvIGFsbG9jYXRlIGluIHRoZSBleGlzdGluZyBwb29sCi0gICAgICAg
IC8vIHNvIHdlIG5lZWQgYWxsb2NhdGUgaW50byBhIG5ldyBwb29sCi0gICAgICAgIHJldHVybiBw
b29sQWxsb2NhdGUoZ2xvYmFsRGF0YSwgbik7Ci0gICAgfQotICAgIAotICAgIHZvaWQgdHJ5U2hy
aW5rKHZvaWQqIGFsbG9jYXRpb24sIHNpemVfdCBvbGRTaXplLCBzaXplX3QgbmV3U2l6ZSkKLSAg
ICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyBvbGRTaXpl
ICE9IG1fZnJlZVB0cikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9mcmVlUHRyID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pICsgcm91bmRVcEFsbG9jYXRpb25TaXplKG5l
d1NpemUsIHNpemVvZih2b2lkKikpOwotICAgIH0KLQotICAgIH5FeGVjdXRhYmxlUG9vbCgpCi0g
ICAgewotICAgICAgICBBbGxvY2F0aW9uTGlzdDo6aXRlcmF0b3IgZW5kID0gbV9wb29scy5lbmQo
KTsKLSAgICAgICAgZm9yIChBbGxvY2F0aW9uTGlzdDo6aXRlcmF0b3IgcHRyID0gbV9wb29scy5i
ZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIEV4ZWN1dGFibGVQb29sOjpz
eXN0ZW1SZWxlYXNlKCpwdHIpOwotICAgIH0KLQotICAgIHNpemVfdCBhdmFpbGFibGUoKSBjb25z
dCB7IHJldHVybiAobV9wb29scy5zaXplKCkgPiAxKSA/IDAgOiBtX2VuZCAtIG1fZnJlZVB0cjsg
fQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBBbGxvY2F0aW9uIHN5c3RlbUFsbG9jKHNpemVfdCBu
KTsKLSAgICBzdGF0aWMgdm9pZCBzeXN0ZW1SZWxlYXNlKEFsbG9jYXRpb24mIGFsbG9jKTsKLQot
ICAgIEV4ZWN1dGFibGVQb29sKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQotICAgIHZvaWQq
IHBvb2xBbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgbik7Ci0KLSAgICBjaGFyKiBtX2Zy
ZWVQdHI7Ci0gICAgY2hhciogbV9lbmQ7Ci0gICAgQWxsb2NhdGlvbkxpc3QgbV9wb29sczsKLX07
Cit0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
OwogCiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVtIFByb3RlY3Rpb25TZXR0
aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVibGljOgotICAgIEV4ZWN1dGFibGVB
bGxvY2F0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsKLSAgICAgICAgaWYgKGlz
VmFsaWQoKSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IEV4ZWN1dGFibGVQ
b29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKTsK
LSNpZiAhRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDUkFT
SCgpOwotI2VuZGlmCi0gICAgfQorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRh
Jik7CisgICAgCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogCiAgICAg
Ym9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCB1bmRlck1lbW9yeVByZXNz
dXJlKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgc3Rh
dGljIHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAgc3RhdGljIHZvaWQgZHVtcFByb2Zp
bGUoKSB7IH0KKyNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbEZv
clNpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAg
IC8vIFRyeSB0byBmaXQgaW4gdGhlIGV4aXN0aW5nIHNtYWxsIGFsbG9jYXRvcgotICAgICAgICBB
U1NFUlQobV9zbWFsbEFsbG9jYXRpb25Qb29sKTsKLSAgICAgICAgaWYgKG4gPCBtX3NtYWxsQWxs
b2NhdGlvblBvb2wtPmF2YWlsYWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuIG1fc21hbGxBbGxv
Y2F0aW9uUG9vbDsKLQotICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpcyBsYXJnZSwgd2UganVz
dCBwcm92aWRlIGEgdW5zaGFyZWQgYWxsb2NhdG9yCi0gICAgICAgIGlmIChuID4gSklUX0FMTE9D
QVRPUl9MQVJHRV9BTExPQ19TSVpFKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29s
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgbik7Ci0KLSAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IGFsbG9j
YXRvcgotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IHBvb2wgPSBFeGVjdXRhYmxlUG9v
bDo6Y3JlYXRlKGdsb2JhbERhdGEsIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSk7Ci0K
LSAgICAgICAgLy8gSWYgdGhlIG5ldyBhbGxvY2F0b3Igd2lsbCByZXN1bHQgaW4gbW9yZSBmcmVl
IHNwYWNlIHRoYW4gaW4KLSAgICAgICAgLy8gdGhlIGN1cnJlbnQgc21hbGwgYWxsb2NhdG9yLCB0
aGVuIHdlIHdpbGwgdXNlIGl0IGluc3RlYWQKLSAgICAgICAgaWYgKChwb29sLT5hdmFpbGFibGUo
KSAtIG4pID4gbV9zbWFsbEFsbG9jYXRpb25Qb29sLT5hdmFpbGFibGUoKSkKLSAgICAgICAgICAg
IG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IHBvb2w7Ci0gICAgICAgIHJldHVybiBwb29sLnJlbGVh
c2UoKTsKLSAgICB9CisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBhbGxv
Y2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwogCiAjaWYgRU5BQkxFKEFT
U0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZvaWQgbWFrZVdyaXRhYmxlKHZvaWQq
IHN0YXJ0LCBzaXplX3Qgc2l6ZSkKQEAgLTM0OCw1MCArMjU2LDkgQEAgcHJpdmF0ZToKICNpZiBF
TkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCByZXByb3RlY3RS
ZWdpb24odm9pZCosIHNpemVfdCwgUHJvdGVjdGlvblNldHRpbmcpOwogI2VuZGlmCi0KLSAgICBS
ZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fc21hbGxBbGxvY2F0aW9uUG9vbDsKIH07CiAKLWlubGlu
ZSBFeGVjdXRhYmxlUG9vbDo6RXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0gcm91bmRVcEFsbG9jYXRpb25T
aXplKG4sIHBhZ2VTaXplKCkpOwotICAgIEFsbG9jYXRpb24gbWVtID0gc3lzdGVtQWxsb2MoYWxs
b2NTaXplKTsKLSAgICBpZiAoIW1lbS5iYXNlKCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFi
bGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1lbSA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6
ZSk7Ci0gICAgfQotICAgIG1fcG9vbHMuYXBwZW5kKG1lbSk7Ci0gICAgbV9mcmVlUHRyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1lbS5iYXNlKCkpOwotICAgIGlmICghbV9mcmVlUHRyKQotICAgICAg
ICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAgICBtX2VuZCA9IG1fZnJlZVB0ciAr
IGFsbG9jU2l6ZTsKLSAgICBkZXByZWNhdGVkVHVybk9mZlZlcmlmaWVyKCk7Ci19Ci0KLWlubGlu
ZSB2b2lkKiBFeGVjdXRhYmxlUG9vbDo6cG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9IHJvdW5kVXBBbGxvY2F0
aW9uU2l6ZShuLCBwYWdlU2l6ZSgpKTsKLSAgICAKLSAgICBBbGxvY2F0aW9uIHJlc3VsdCA9IHN5
c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFyZXN1bHQuYmFzZSgpKSB7Ci0gICAgICAg
IHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOwotICAgICAgICByZXN1bHQgPSBz
eXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgICAgICBpZiAoIXJlc3VsdC5iYXNlKCkpCi0gICAg
ICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAgICB9Ci0gICAgCi0gICAg
QVNTRVJUKG1fZW5kID49IG1fZnJlZVB0cik7Ci0gICAgaWYgKChhbGxvY1NpemUgLSBuKSA+IHN0
YXRpY19jYXN0PHNpemVfdD4obV9lbmQgLSBtX2ZyZWVQdHIpKSB7Ci0gICAgICAgIC8vIFJlcGxh
Y2UgYWxsb2NhdGlvbiBwb29sCi0gICAgICAgIG1fZnJlZVB0ciA9IHN0YXRpY19jYXN0PGNoYXIq
PihyZXN1bHQuYmFzZSgpKSArIG47Ci0gICAgICAgIG1fZW5kID0gc3RhdGljX2Nhc3Q8Y2hhcio+
KHJlc3VsdC5iYXNlKCkpICsgYWxsb2NTaXplOwotICAgIH0KLQotICAgIG1fcG9vbHMuYXBwZW5k
KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5iYXNlKCk7Ci19Ci0KLX0KK30gLy8gbmFtZXNw
YWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYgRU5BQkxFKEFTU0VNQkxFUikKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDEwICszMSw5IEBACiAKICNpbmNsdWRlIDxlcnJuby5oPgogCi0j
aW5jbHVkZSAiVENTcGluTG9jay5oIgogI2luY2x1ZGUgPHN5cy9tbWFuLmg+CiAjaW5jbHVkZSA8
dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFs
bG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KICNpbmNsdWRlIDx3
dGYvVk1UYWdzLmg+CiAKQEAgLTQ2LDQ4MSArNDUsMTA1IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7
CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotI2RlZmluZSBUd29Qb3cobikgKDF1bGwgPDwgbikK
LQotY2xhc3MgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHsKLXB1YmxpYzoKLSAgICBBbGxvY2F0
aW9uVGFibGVTaXplQ2xhc3Moc2l6ZV90IHNpemUsIHNpemVfdCBibG9ja1NpemUsIHVuc2lnbmVk
IGxvZzJCbG9ja1NpemUpCi0gICAgICAgIDogbV9ibG9ja1NpemUoYmxvY2tTaXplKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKGJsb2NrU2l6ZSA9PSBUd29Qb3cobG9nMkJsb2NrU2l6ZSkpOwotCi0g
ICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyBuZWVkZWQgdG8gaG9sZCBz
aXplLgotICAgICAgICBzaXplX3QgYmxvY2tNYXNrID0gYmxvY2tTaXplIC0gMTsKLSAgICAgICAg
bV9ibG9ja0NvdW50ID0gKHNpemUgKyBibG9ja01hc2spID4+IGxvZzJCbG9ja1NpemU7Ci0KLSAg
ICAgICAgLy8gQWxpZ24gdG8gdGhlIHNtYWxsZXN0IHBvd2VyIG9mIHR3byA+PSBtX2Jsb2NrQ291
bnQuCi0gICAgICAgIG1fYmxvY2tBbGlnbm1lbnQgPSAxOwotICAgICAgICB3aGlsZSAobV9ibG9j
a0FsaWdubWVudCA8IG1fYmxvY2tDb3VudCkKLSAgICAgICAgICAgIG1fYmxvY2tBbGlnbm1lbnQg
Kz0gbV9ibG9ja0FsaWdubWVudDsKLSAgICB9Ci0KLSAgICBzaXplX3QgYmxvY2tTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ibG9ja1NpemU7IH0KLSAgICBzaXplX3QgYmxvY2tDb3VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tDb3VudDsgfQotICAgIHNpemVfdCBibG9ja0FsaWdubWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tBbGlnbm1lbnQ7IH0KLQotICAgIHNpemVfdCBzaXplKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrU2l6ZSAqIG1fYmxvY2tDb3VudDsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fYmxvY2tTaXplOwotICAgIHNpemVfdCBtX2Jsb2NrQ291
bnQ7Ci0gICAgc2l6ZV90IG1fYmxvY2tBbGlnbm1lbnQ7Ci19OwotCi10ZW1wbGF0ZTx1bnNpZ25l
ZCBsb2cyRW50cmllcz4KLWNsYXNzIEFsbG9jYXRpb25UYWJsZUxlYWYgewotICAgIHR5cGVkZWYg
dWludDY0X3QgQml0RmllbGQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bG9nMlN1YnJlZ2lvblNpemUgPSAxMjsgLy8gMl4xMiA9PSBwYWdlc2l6ZQotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IGxvZzJTdWJyZWdpb25TaXplICsgbG9nMkVu
dHJpZXM7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1YnJlZ2lvblNpemUgPSBUd29Qb3co
bG9nMlN1YnJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcmVnaW9uU2l6ZSA9
IFR3b1Bvdyhsb2cyUmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVudHJp
ZXMgPSBUd29Qb3cobG9nMkVudHJpZXMpOwotICAgIENPTVBJTEVfQVNTRVJUKGVudHJpZXMgPD0g
KHNpemVvZihCaXRGaWVsZCkgKiA4KSwgQWxsb2NhdGlvblRhYmxlTGVhZl9lbnRyaWVzX2ZpdF9p
bl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVMZWFmKCkKLSAgICAgICAgOiBtX2Fs
bG9jYXRlZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlTGVhZigpCi0g
ICAgewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxs
b2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAg
ICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpID09IHN1YnJlZ2lvblNpemUpOwotICAgICAg
ICBBU1NFUlQoIWlzRnVsbCgpKTsKLQotICAgICAgICBzaXplX3QgYWxpZ25tZW50ID0gc2l6ZUNs
YXNzLmJsb2NrQWxpZ25tZW50KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5i
bG9ja0NvdW50KCk7Ci0gICAgICAgIC8vIFVzZSB0aGlzIG1hc2sgdG8gY2hlY2sgZm9yIHNwYW5z
IG9mIGZyZWUgYmxvY2tzLgotICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50
KSAtIDEpIDw8IChhbGlnbm1lbnQgLSBjb3VudCk7Ci0KLSAgICAgICAgLy8gU3RlcCBpbiB1bml0
cyBvZiBhbGlnbm1lbnQgc2l6ZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVu
dHJpZXM7IGkgKz0gYWxpZ25tZW50KSB7Ci0gICAgICAgICAgICBpZiAoIShtX2FsbG9jYXRlZCAm
IG1hc2spKSB7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWQgfD0gbWFzazsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gKGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9u
U2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVl
KHNpemVfdCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0g
ICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpID09IHN1YnJlZ2lvblNp
emUpOwotCi0gICAgICAgIHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25T
aXplOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAg
ICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IGVudHJ5OwotCi0g
ICAgICAgIEFTU0VSVCgobV9hbGxvY2F0ZWQgJiBtYXNrKSA9PSBtYXNrKTsKLSAgICAgICAgbV9h
bGxvY2F0ZWQgJj0gfm1hc2s7Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAhbV9hbGxvY2F0ZWQ7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Z1bGwoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuICF+bV9hbGxvY2F0ZWQ7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwotICAgIH0K
LQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXplKHNpemVf
dCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhz
aXplLCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVm
IE5ERUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQg
aW5kZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRl
bnQ7ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiUwOHg6IFslMDE2bGx4XVxuIiwgKGludClwYXJlbnRPZmZzZXQsIG1f
YWxsb2NhdGVkKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBCaXRGaWVsZCBtX2Fs
bG9jYXRlZDsKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVsPgotY2xhc3MgTGF6eUFs
bG9jYXRpb25UYWJsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJS
ZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW50cmllcyA9IE5leHRMZXZlbDo6ZW50cmllczsKLQotICAgIExhenlBbGxvY2F0
aW9uVGFibGUoKQotICAgICAgICA6IG1fcHRyKDApCi0gICAgewotICAgIH0KLQotICAgIH5MYXp5
QWxsb2NhdGlvblRhYmxlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAg
IH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVD
bGFzcykKLSAgICB7Ci0gICAgICAgIGlmICghbV9wdHIpCi0gICAgICAgICAgICBtX3B0ciA9IG5l
dyBOZXh0TGV2ZWwoKTsKLSAgICAgICAgcmV0dXJuIG1fcHRyLT5hbGxvY2F0ZShzaXplQ2xhc3Mp
OwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRpb24sIEFsbG9jYXRpb25UYWJs
ZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAg
ICAgICAgbV9wdHItPmZyZWUobG9jYXRpb24sIHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChtX3B0
ci0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkZWxldGUgbV9wdHI7Ci0gICAgICAgICAgICBt
X3B0ciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuICFtX3B0cjsKLSAgICB9Ci0KLSAgICBib29sIGlzRnVsbCgpCi0gICAg
ewotICAgICAgICByZXR1cm4gbV9wdHIgJiYgbV9wdHItPmlzRnVsbCgpOwotICAgIH0KLQotICAg
IHN0YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gTmV4dExldmVsOjpz
aXplKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFy
ZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChtX3B0cik7Ci0gICAgICAgIG1fcHRyLT5kdW1wKHBhcmVudE9mZnNldCwgaW5kZW50KTsKLSAg
ICB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NG
b3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5leHRMZXZlbDo6Y2xh
c3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBOZXh0TGV2ZWwqIG1fcHRy
OwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVsLCB1bnNpZ25lZCBsb2cyRW50cmllcz4K
LWNsYXNzIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSB7Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBC
aXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyU3VicmVn
aW9uU2l6ZSA9IE5leHRMZXZlbDo6bG9nMlJlZ2lvblNpemU7Ci0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lvblNpemUgKyBsb2cyRW50cmllczsK
LQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyU3Vi
cmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCByZWdpb25TaXplID0gVHdvUG93
KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW50cmllcyA9IFR3
b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZW50cmllcyA8PSAoc2l6ZW9m
KEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVEaXJlY3RvcnlfZW50cmllc19maXRfaW5f
Qml0RmllbGQpOwotCi0gICAgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICAgICAgOiBt
X2Z1bGwoMCkKLSAgICAgICAgLCBtX2hhc1N1YmFsbG9jYXRpb24oMCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgfkFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSgpCi0gICAgewotICAgICAgICBBU1NFUlQo
aXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGUoQWxsb2NhdGlvblRhYmxl
U2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJs
b2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotICAgICAgICBBU1NFUlQoIWlzRnVsbCgpKTsK
LQotICAgICAgICBpZiAoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDwgc3VicmVnaW9uU2l6ZSkgewot
ICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBlbnRyaWVzOyArK2ksIGJpdCArPSBiaXQpIHsKLSAgICAgICAgICAgICAgICBp
ZiAobV9mdWxsICYgYml0KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgICAgICBzaXplX3QgbG9jYXRpb24gPSBtX3N1YmFsbG9jYXRpb25zW2ldLmFsbG9jYXRlKHNp
emVDbGFzcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG5vdEZvdW5kKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZGlkbid0IGFscmVhZHkgaGF2ZSBhIHN1YnJl
Z2lvbiwgaXQgZG9lcyBub3chCi0gICAgICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlv
biB8PSBiaXQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1pcnJvciB0aGUgc3ViYWxsb2NhdGlv
bidzIGZ1bGwgYml0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tp
XS5pc0Z1bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVsbCB8PSBiaXQ7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAoaSAqIHN1YnJlZ2lvblNpemUpIHwgbG9jYXRpb247Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQSBibG9jayBpcyBhbGxvY2F0ZWQgaWYgZWl0
aGVyIGl0IGlzIGZ1bGx5IGFsbG9jYXRlZCBvciBjb250YWlucyBzdWJhbGxvY2F0aW9ucy4KLSAg
ICAgICAgQml0RmllbGQgYWxsb2NhdGVkID0gbV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uOwot
Ci0gICAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsK
LSAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAg
Ly8gVXNlIHRoaXMgbWFzayB0byBjaGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAg
ICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAt
IGNvdW50KTsKLQotICAgICAgICAvLyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQp
IHsKLSAgICAgICAgICAgIGlmICghKGFsbG9jYXRlZCAmIG1hc2spKSB7Ci0gICAgICAgICAgICAg
ICAgbV9mdWxsIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpICsgKGFsaWdubWVu
dCAtIGNvdW50KSkgPDwgbG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBtYXNrIDw8PSBhbGlnbm1lbnQ7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vdEZv
dW5kOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRpb24sIEFsbG9jYXRpb25U
YWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFz
cy5ibG9ja1NpemUoKSA8PSBzdWJyZWdpb25TaXplKTsKLQotICAgICAgICBzaXplX3QgZW50cnkg
PSBsb2NhdGlvbiA+PiBsb2cyU3VicmVnaW9uU2l6ZTsKLQotICAgICAgICBpZiAoc2l6ZUNsYXNz
LmJsb2NrU2l6ZSgpIDwgc3VicmVnaW9uU2l6ZSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0
ID0gMXVsbCA8PCBlbnRyeTsKLSAgICAgICAgICAgIG1fc3ViYWxsb2NhdGlvbnNbZW50cnldLmZy
ZWUobG9jYXRpb24gJiAoc3VicmVnaW9uU2l6ZSAtIDEpLCBzaXplQ2xhc3MpOwotICAgICAgICAg
ICAgLy8gQ2hlY2sgaWYgdGhlIHN1YmFsbG9jYXRpb24gaXMgbm93IGVtcHR5LgotICAgICAgICAg
ICAgaWYgKG1fc3ViYWxsb2NhdGlvbnNbZW50cnldLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICBtX2hhc1N1YmFsbG9jYXRpb24gJj0gfmJpdDsKLSAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2ssIGl0IGNsZWFybHkgaXNuJ3QgZnVsbCBhbnkgbW9yZSEKLSAgICAgICAgICAgIG1fZnVs
bCAmPSB+Yml0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2l6ZV90IGNvdW50ID0g
c2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1
bGwgPDwgY291bnQpIC0gMSkgPDwgZW50cnk7Ci0gICAgICAgICAgICBBU1NFUlQoKG1fZnVsbCAm
IG1hc2spID09IG1hc2spOwotICAgICAgICAgICAgQVNTRVJUKCEobV9oYXNTdWJhbGxvY2F0aW9u
ICYgbWFzaykpOwotICAgICAgICAgICAgbV9mdWxsICY9IH5tYXNrOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKG1fZnVsbCB8
IG1faGFzU3ViYWxsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Z1bGwoKQotICAgIHsg
ICAKLSAgICAgICAgcmV0dXJuICF+bV9mdWxsOwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3Qg
c2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVnaW9uU2l6ZTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkK
LSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgc3VicmVnaW9uU2l6ZSkgewotICAgICAgICAgICAg
QWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IE5leHRMZXZlbDo6Y2xhc3NGb3JT
aXplKHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemVDbGFzcy5zaXplKCkgPCBOZXh0TGV2ZWw6
OnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZUNsYXNzOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6ZSwgc3VicmVnaW9uU2l6
ZSwgbG9nMlN1YnJlZ2lvblNpemUpOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lk
IGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGluZGVudCA9IDApCi0gICAg
ewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50OyArK2kpCi0gICAgICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIl
MDh4OiBbIiwgKGludClwYXJlbnRPZmZzZXQpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgZW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8
IGk7Ci0gICAgICAgICAgICBjaGFyIGMgPSBtX2hhc1N1YmFsbG9jYXRpb24gJiBiaXQKLSAgICAg
ICAgICAgICAgICA/IChtX2Z1bGwgJiBiaXQgPyAnTicgOiAnbicpCi0gICAgICAgICAgICAgICAg
OiAobV9mdWxsICYgYml0ID8gJ0YnIDogJy0nKTsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJWMiLCBjKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIl1cbiIpOwot
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAg
ICAgICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBwYXJlbnRPZmZzZXQgfCAoc3VicmVnaW9uU2l6ZSAqIGkpOwotICAgICAgICAgICAgaWYg
KG1faGFzU3ViYWxsb2NhdGlvbiAmIGJpdCkKLSAgICAgICAgICAgICAgICBtX3N1YmFsbG9jYXRp
b25zW2ldLmR1bXAob2Zmc2V0LCBpbmRlbnQgKyAxKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgotCi1wcml2YXRlOgotICAgIE5leHRMZXZlbCBtX3N1YmFsbG9jYXRpb25zW2VudHJpZXNdOwot
ICAgIC8vIFN1YnJlZ2lvbnMgZXhpc3QgaW4gb25lIG9mIGZvdXIgc3RhdGVzOgotICAgIC8vICgx
KSBlbXB0eSAoYm90aCBiaXRzIGNsZWFyKQotICAgIC8vICgyKSBmdWxseSBhbGxvY2F0ZWQgYXMg
YSBzaW5nbGUgYWxsb2NhdGlvbiAobV9mdWxsIHNldCkKLSAgICAvLyAoMykgcGFydGlhbGx5IGFs
bG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9jYXRpb25zIChtX2hhc1N1YmFsbG9jYXRpb24gc2V0KQot
ICAgIC8vICg0KSBmdWxseSBhbGxvY2F0ZWQgdGhyb3VnaCBzdWJhbGxvY2F0aW9ucyAoYm90aCBi
aXRzIHNldCkKLSAgICBCaXRGaWVsZCBtX2Z1bGw7Ci0gICAgQml0RmllbGQgbV9oYXNTdWJhbGxv
Y2F0aW9uOwotfTsKLQotCi10eXBlZGVmIEFsbG9jYXRpb25UYWJsZUxlYWY8Nj4gUGFnZVRhYmxl
czI1NktCOwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8UGFnZVRhYmxlczI1NktC
LCA2PiBQYWdlVGFibGVzMTZNQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PExh
enlBbGxvY2F0aW9uVGFibGU8UGFnZVRhYmxlczE2TUI+LCAxPiBQYWdlVGFibGVzMzJNQjsKLXR5
cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PExhenlBbGxvY2F0aW9uVGFibGU8UGFnZVRh
YmxlczE2TUI+LCA2PiBQYWdlVGFibGVzMUdCOwotCiAjaWYgQ1BVKEFSTSkKLXR5cGVkZWYgUGFn
ZVRhYmxlczE2TUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGljIGNvbnN0IHNpemVfdCBm
aXhlZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQVShYODZfNjQpCi10eXBl
ZGVmIFBhZ2VUYWJsZXMxR0IgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGljIGNvbnN0IHNp
emVfdCBmaXhlZFBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0OwogI2Vsc2UKLXR5cGVkZWYg
UGFnZVRhYmxlczMyTUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGljIGNvbnN0IHNpemVf
dCBmaXhlZFBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKICNlbmRpZgogCi0KLWNsYXNzIEZp
eGVkVk1Qb29sQWxsb2NhdG9yCi17CitjbGFzcyBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0
b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICBGaXhlZFZNUG9vbEFsbG9j
YXRvcigpCisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICAgICAgOiBN
ZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8gMzIgYnl0ZXMK
ICAgICB7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMjU2S0I6OnNpemUoKSA9PSAyNTYgKiAx
MDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMxNk1COjpzaXplKCkgPT0gMTYgKiAxMDI0
ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMzJNQjo6c2l6ZSgpID09IDMyICog
MTAyNCAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczFHQjo6c2l6ZSgpID09IDEw
MjQgKiAxMDI0ICogMTAyNCk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZh
dGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6c2l6ZSgp
LCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwg
dHJ1ZSk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmVX
aXRoR3VhcmRQYWdlcyhmaXhlZFBvb2xTaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMs
IEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CiAjaWYgIUVOQUJMRShJTlRFUlBSRVRF
UikKLSAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIGlmICghbV9yZXNlcnZhdGlvbikK
ICAgICAgICAgICAgIENSQVNIKCk7CiAjZW5kaWYKKyAgICAgICAgaWYgKG1fcmVzZXJ2YXRpb24p
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUoKSA9PSBmaXhlZFBvb2xT
aXplKTsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKG1fcmVzZXJ2YXRpb24uYmFzZSgp
LCBtX3Jlc2VydmF0aW9uLnNpemUoKSk7CisgICAgICAgIH0KICAgICB9Ci0gCi0gICAgRXhlY3V0
YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2Moc2l6ZV90IHJlcXVlc3RlZFNpemUpCi0gICAgewot
ICAgICAgICBBU1NFUlQocmVxdWVzdGVkU2l6ZSk7Ci0gICAgICAgIEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyBzaXplQ2xhc3MgPSBjbGFzc0ZvclNpemUocmVxdWVzdGVkU2l6ZSk7Ci0gICAgICAg
IHNpemVfdCBzaXplID0gc2l6ZUNsYXNzLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHNpemUpOwot
Ci0gICAgICAgIGlmIChzaXplID49IEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6c2l6ZSgpKQotICAg
ICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotICAgICAg
ICBpZiAobV9wYWdlcy5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9v
bDo6QWxsb2NhdGlvbigwLCAwKTsKLQotICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gbV9wYWdlcy5h
bGxvY2F0ZShzaXplQ2xhc3MpOwotICAgICAgICBpZiAob2Zmc2V0ID09IG5vdEZvdW5kKQotICAg
ICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAg
ICAgIHZvaWQqIHBvaW50ZXIgPSBvZmZzZXRUb1BvaW50ZXIob2Zmc2V0KTsKLSAgICAgICAgbV9y
ZXNlcnZhdGlvbi5jb21taXQocG9pbnRlciwgc2l6ZSk7Ci0gICAgICAgIHJldHVybiBFeGVjdXRh
YmxlUG9vbDo6QWxsb2NhdGlvbihwb2ludGVyLCBzaXplKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZy
ZWUoRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2NhdGlvbikKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JikKICAgICB7Ci0g
ICAgICAgIHZvaWQqIHBvaW50ZXIgPSBhbGxvY2F0aW9uLmJhc2UoKTsKLSAgICAgICAgc2l6ZV90
IHNpemUgPSBhbGxvY2F0aW9uLnNpemUoKTsKLSAgICAgICAgQVNTRVJUKHNpemUpOwotCi0gICAg
ICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocG9pbnRlciwgc2l6ZSk7Ci0KLSAgICAgICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShzaXplKTsKLSAg
ICAgICAgQVNTRVJUKHNpemVDbGFzcy5zaXplKCkgPT0gc2l6ZSk7Ci0gICAgICAgIG1fcGFnZXMu
ZnJlZShwb2ludGVyVG9PZmZzZXQocG9pbnRlciksIHNpemVDbGFzcyk7CisgICAgICAgIC8vIFdl
J3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxvY2F0aW9uIGlzIGFsd2F5
cyBwcm9oaWJpdGVkLgorICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBzaXplX3QgYWxs
b2NhdGVkKCkKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFn
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jlc2VydmF0aW9uLmNvbW1pdHRlZCgpOworICAg
ICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsKICAgICB9Ci0KLSAg
ICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdl
SXNGcmVlKHZvaWQqIHBhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gISFtX3Jlc2VydmF0aW9u
OworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkpOwogICAg
IH0KIAogcHJpdmF0ZToKLSAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXpl
KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEZpeGVkVk1Qb29sUGFnZVRhYmxl
czo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotICAgIHZvaWQqIG9mZnNldFRvUG9pbnRl
cihzaXplX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVzZXJ2YXRpb24uYmFzZSgpKSAr
IG9mZnNldCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBvaW50ZXJUb09mZnNldCh2b2lkKiBwb2lu
dGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBv
aW50ZXIpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkp
OwotICAgIH0KLQogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0aW9uOwotICAgIEZpeGVk
Vk1Qb29sUGFnZVRhYmxlcyBtX3BhZ2VzOwogfTsKIAorc3RhdGljIEZpeGVkVk1Qb29sRXhlY3V0
YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOwogCi1zdGF0aWMgU3BpbkxvY2sgc3BpbmxvY2sgPSBT
UElOTE9DS19JTklUSUFMSVpFUjsKLXN0YXRpYyBGaXhlZFZNUG9vbEFsbG9jYXRvciogYWxsb2Nh
dG9yID0gMDsKLQordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9y
KCkKK3sKKyAgICBBU1NFUlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworfQogCi1zaXplX3QgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFi
bGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrSG9s
ZGVyKCZzcGlubG9jayk7Ci0gICAgcmV0dXJuIGFsbG9jYXRvciA/IGFsbG9jYXRvci0+YWxsb2Nh
dGVkKCkgOiAwOwotfSAgIAorICAgIEFTU0VSVChhbGxvY2F0b3IpOworfQogCiBib29sIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxv
Y2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAgaWYgKCFhbGxvY2F0b3IpCi0gICAgICAgIGFsbG9j
YXRvciA9IG5ldyBGaXhlZFZNUG9vbEFsbG9jYXRvcigpOwotICAgIHJldHVybiBhbGxvY2F0b3It
PmlzVmFsaWQoKTsKKyAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKTsKIH0K
IAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKLSAg
ICAvLyBUZWNobmljYWxseSB3ZSBzaG91bGQgdGFrZSB0aGUgc3BpbiBsb2NrIGhlcmUsIGJ1dCB3
ZSBkb24ndCBjYXJlIGlmIHdlIGdldCBzdGFsZSBkYXRhLgotICAgIC8vIFRoaXMgaXMgb25seSBy
ZWFsbHkgYSBoZXVyaXN0aWMgYW55d2F5LgotICAgIHJldHVybiBhbGxvY2F0b3IgJiYgKGFsbG9j
YXRvci0+YWxsb2NhdGVkKCkgPiAoRml4ZWRWTVBvb2xQYWdlVGFibGVzOjpzaXplKCkgLyAyKSk7
CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNzID0gYWxsb2NhdG9yLT5j
dXJyZW50U3RhdGlzdGljcygpOworICAgIHJldHVybiBzdGF0aXN0aWNzLmJ5dGVzQWxsb2NhdGVk
ID4gc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkIC8gMjsKIH0KIAotRXhlY3V0YWJsZVBvb2w6OkFs
bG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNpemVfdCBzaXplKQorUGFzc1Jl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxsb2NhdG9yOjphbGxvY2F0
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBzaXplSW5CeXRlcykKIHsKLSAgICBT
cGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0
b3IpOwotICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jKHNpemUpOworICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5
dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBjaGFyIGJ1ZlsyN107CisgICAgICAg
IHRpbWVfdCBjdXJyZW50VGltZTsKKyAgICAgICAgdGltZSgmY3VycmVudFRpbWUpOworICAgICAg
ICBjdGltZV9yKCZjdXJyZW50VGltZSwgYnVmKTsKKyAgICAgICAgcHJpbnRmKCIlczogSSdtIGdp
dmluZyBoZXIgYWxsIHNoZSdzIGdvdCwgQ2FwdGFpbiFcbiIsIGJ1Zik7CisgICAgICAgIHJlbGVh
c2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0
b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
ICAgICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwor
c2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisgICAg
cmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxl
UG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlv
bikgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRl
cigmc3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJl
ZShhbGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9CisjZW5kaWYK
IAogfQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFCTEUoRVhF
Q1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29t
cGlsZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFs
RGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRv
IGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEsMjAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJh
bnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNl
dCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBz
dGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRyYW1wb2xp
bmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJ
TWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+KiBleGVjdXRhYmxlTWVtb3J5LCBUcmFtcG9saW5lU3RydWN0dXJl
ICp0cmFtcG9saW5lcykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5j
YW5Vc2VKSVQoKSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICBKSVQgaml0
KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wb2xpbmVzKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7Cisg
ICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZXhlY3V0
YWJsZU1lbW9yeSwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIENvZGVQdHIgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgTmF0aXZl
RnVuY3Rpb24gZnVuYykKKyAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNh
bGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVSZWYo
KTsKICAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICByZXR1
cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChleGVjdXRhYmxlUG9vbCwgZ2xvYmFs
RGF0YSwgZnVuYyk7CisgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2
b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0
cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCk7CiAKLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBUcmFtcG9saW5lU3Ry
dWN0dXJlICp0cmFtcG9saW5lcyk7CisgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+KiwgSlNHbG9iYWxE
YXRhKiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGls
ZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsK
LSAgICAgICAgQ29kZVB0ciBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgTmF0aXZl
RnVuY3Rpb24gZnVuYyk7CisgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVD
YWxsKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNz
KTsKIAogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwpAQCAtMTAzNCw3ICsxMDM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNlbmRpZgogICAgICAgICBXZWFrUmFuZG9tIG1f
cmFuZG9tR2VuZXJhdG9yOwotICAgICAgICBzdGF0aWMgQ29kZVB0ciBzdHJpbmdHZXRCeVZhbFN0
dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9v
bCk7CisgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKICAgICBpbmxpbmUg
dm9pZCBKSVQ6OmVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0MTA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2
LDEyICs1NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIG9wZXJhdG9yICEo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVj
dXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuICFtX3JlZjsKICAgICAgICAgfQog
CiAgICAgICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9yZWYubV9jb2RlOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0
IGluIGJ5dGVzIG9mICdwb2ludGVySW50b0NvZGUnIGludG8KQEAgLTY5LDcgKzY5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIGJsb2NrIG9mIGNvZGUuICBJdCBpcyBBU1NFUlRlZCB0
aGF0IG5vIGNvZGVibG9jayA+NGdiIGluIHNpemUuCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldE9m
KHZvaWQqIHBvaW50ZXJJbnRvQ29kZSkKICAgICAgICAgewotICAgICAgICAgICAgaW50cHRyX3Qg
cmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICAgICAgICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpKSA9PSByZXN1bHQpOwog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpOwogICAgICAg
ICB9CkBAIC03NywyNCArNzcsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEV4ZWN1
dGUgdGhlIGNvZGUhCiAgICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoUmVnaXN0ZXJGaWxl
KiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJl
Z2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJl
bmNlKCksIGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1
ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCks
IHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVm
ZXJlbmNlKCksIGdsb2JhbERhdGEpKTsKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5l
eGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQq
IHN0YXJ0KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZS5kYXRh
TG9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZGF0YUxvY2F0aW9u
KCk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3Qgc2l6ZSgpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIEFTU0VSVChtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9yZWYubV9zaXplOworICAgICAgICAgICAgQVNTRVJUKG1fcmVmLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5zaXplKCk7
CiAgICAgICAgIH0KIAotICAgICAgICBFeGVjdXRhYmxlUG9vbCogZ2V0RXhlY3V0YWJsZVBvb2wo
KQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRhYmxlTWVtb3J5KCkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0YWJsZVBvb2wuZ2V0
KCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBKSVRUeXBlIGppdFR5cGUoKQpAQCAtMTA0LDkgKzEwNCw5
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIEhvc3QgZnVuY3Rpb25zIGFyZSBhIGJp
dCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhleQogICAgICAgICAv
LyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wgY29udGFpbmluZyB0
aGUgdHJhbXBvbGluZS4KLSAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVQ
dHIgY29kZSkKKyAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVSZWYgY29k
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRp
b24oKSwgMCwgMCwgSG9zdENhbGxUaHVuayk7CisgICAgICAgICAgICByZXR1cm4gSklUQ29kZShj
b2RlLCBIb3N0Q2FsbFRodW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpA
QCAtMTE2LDggKzExNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2
YXRlOgotICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBv
b2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRUeXBlKQotICAgICAg
ICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgSklUQ29k
ZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnksIEpJ
VFR5cGUgaml0VHlwZSkKKyAgICAgICAgICAgIDogbV9yZWYoZXhlY3V0YWJsZU1lbW9yeSkKICAg
ICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2
aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8
RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKK3ZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4q
IGV4ZWN1dGFibGVNZW1vcnksIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0
cnVjdHVyZSAqdHJhbXBvbGluZXMpCiB7CiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8p
CiAgICAgTGFiZWwgc29mdE1vZEJlZ2luID0gYWxpZ24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdf
ZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVD
YXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBj
b2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBv
YmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBt
X2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmlu
Z19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdf
ZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYz
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDY29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29u
c3RydWN0X2ppdENvbXBpbGUpKTsKIAogICAgIENvZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhl
Y3V0YWJsZVBvb2w7CisgICAgKmV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJs
ZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gcGF0Y2hCdWZm
ZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlW
aXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1
Y3RCZWdpbik7CkBAIC0zMTIsMTAgKzMxMiw5IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwogfQogCi1KSVQ6OkNv
ZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRh
YmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZl
RnVuY3Rpb24gZnVuYykKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAg
ICAgQ2FsbCBuYXRpdmVDYWxsOwotICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7
CiAKICAgICBlbWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxl
OjpDb2RlQmxvY2spOwogCkBAIC00NDcsMTIgKzQ0NiwxMCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU5hdGl2CiAgICAgcmV0KCk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGlu
ZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhl
IHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIGV4ZWN1dGFibGVQb29sKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhuYXRpdmVDYWxsLCBGdW5jdGlvblB0cihmdW5jKSk7Ci0gICAgcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7Ci0KLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNh
bGxUaHVuayk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2
b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQx
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJl
ZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQordm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiogZXhlY3V0YWJsZU1lbW9yeSwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9s
aW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKIHsKICAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5j
dGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0aAogICAg
IExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0gYWxpZ24oKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdf
ZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVD
YXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBj
b2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBv
YmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBt
X2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmlu
Z19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdf
ZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjQsNyArMTY0
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNo
QnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25z
dHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVj
dXRhYmxlUG9vbDsKKyAgICAqZXhlY3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxl
TWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hC
dWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKICAgICB0cmFtcG9saW5l
cy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmly
dHVhbENvbnN0cnVjdExpbmtCZWdpbik7CkBAIC0yOTEsOSArMjkxLDkgQEAgSklUOjpMYWJlbCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7
CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNz
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVG
dW5jdGlvbikKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uKQogewotICAgIHJldHVybiBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgIHJldHVybiBDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNr
KEluc3RyCiAgICAgbV9ieXRlY29kZU9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9p
ZCk7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklUOjpDb2Rl
UmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7
CkBAIC0xOTMsOCArMTkzLDggQEAgSklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHVi
R2VuZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBw
b29sKTsKLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJldHVybiBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIzMiw3IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNl
bGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNr
CiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDAp
LCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5h
a2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJh
dG9yKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5n
R2V0QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNo
VGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3Zh
bCkpOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRU
cmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAg
ICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlv
blB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9i
eV9pZF9mYWlsKSk7CiAgICAgCkBAIC01NTAsMTAgKzU1MCw5IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxz
WzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9j
KSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5B
ZGRyZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJh
bXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJv
dXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9j
ayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MpCkBAIC02MDYsNyArNjA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRB
cnJheUxlbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEp
OwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgp
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAg
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9j
YXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjE3LDEz
ICs2MTYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNr
IHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRl
ci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVs
OworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAg
IAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1
cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0
X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY2Niw3ICs2NjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgp
OwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywg
bV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZv
cm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNs
b3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBz
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0
QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02ODQsMTMgKzY4MiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgfQogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIg
d2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRl
bmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1
YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAg
ICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90
IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdl
dEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIo
bV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50
cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8g
V2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBj
dGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJU
b0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJv
dG9fbGlzdCkpOwpAQCAtNzIzLDcgKzcyMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRTZWxmTGlzdCgKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5l
eGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9y
PENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1f
Y2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtNzMx
LDcgKzcyOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAg
ICAgICAgfQogICAgIH0gICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBs
aW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0
aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBo
aWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7
CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHVi
SW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJ
ZFNsb3dDYXNlQ2FsbCk7CiAgICAgCkBAIC03NDAsMTQgKzczNywxNCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFu
Y2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25z
dCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc4Nyw3ICs3ODQsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVtcCBzdWNj
ZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1Ykxp
bmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
ICAgICBpZiAoaXRlci0+dG8pCkBAIC03OTUsMjEgKzc5MiwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEs
IGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxh
c3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRo
ZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRv
IGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwog
ICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOwor
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAKICAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRv
U2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NT
dHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODU0LDcgKzg1MSw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAgc3VjY2Vz
cyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5r
KSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9j
YWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAg
ICAgaWYgKGl0ZXItPnRvKQpAQCAtODYyLDIyICs4NTksMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUg
cGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBv
cmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJv
dG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1
YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9j
YXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZG
YWlsLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQpKTsKICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2Ug
aGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0
dXJlLCBjaGFpbik7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhd
LnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7CiAgICAgCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTIx
LDcgKzkxOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAg
ICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBj
YWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVj
dXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENh
bGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2Fs
bHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtOTM1LDEz
ICs5MzIsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0
T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNr
IHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRl
ci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVs
OworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
KyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAKICAgICAvLyBG
aW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0
byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJy
YW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVs
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8g
cGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9n
ZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5B
ZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShy
ZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1KSVQ6OkNvZGVQ
dHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5
VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgSlNJbnRl
cmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtNzcsOCArNzcsOCBAQCBK
SVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1
c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVybiBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZl
cigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5r
U2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9
IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIobV9nbG9i
YWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+
Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0TmFrZWRD
YWxsKENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1Qw
KTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5
X3ZhbCkpOwpAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5
SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7
CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVj
dXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIo
ZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRf
ZmFpbCkpOwogCkBAIC01NjQsMTAgKzU2NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20s
IEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAg
fQogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5
TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBl
bnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShy
ZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29k
ZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02
MTUsNyArNjE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgog
ICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKICAgICBKdW1w
IHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVXNlIHRoZSBw
YXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9y
aWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNl
QmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNo
T2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MjYsMTMgKzYyNSwxMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhz
dWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkUHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0
ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFi
ZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1Yklu
Zm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRj
aCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjczLDcg
KzY3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9
IGVsc2UKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAs
IGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1
cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRp
b24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTY5
MCwxMyArNjg4LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIK
ICAgICAgICAgfQogICAgIH0KICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQg
c28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1
YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2gg
dGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBp
bnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhv
dFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2Fz
ZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8t
PnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBt
b3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMu
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3Ms
IEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzI2LDcgKzcy
Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAg
Y29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDAsIHN0cnVjdHVyZSwgY2FjaGVkT2Zm
c2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgp
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAg
ICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsg
KytpdGVyKSB7CkBAIC03MzYsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZFNlbGZMaXN0KAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24g
dG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ug
cm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3Jw
aGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHlt
b3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2Rl
KCkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0g
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdl
dEJ5SWRTbG93Q2FzZUNhbGwpOwogCkBAIC03NDUsMTQgKzc0MiwxNCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFj
ayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBz
dG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29k
ZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2Rl
QmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlKTsKIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFi
ZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNh
Y2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC03OTEsNyArNzg4LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBzdWNjZXNz
ID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7
CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxs
cy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODAxLDIwICs3
OTgsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIH0K
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhm
YWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVy
biBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0g
dGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywg
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1
dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCpt
X2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0
cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29k
ZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3Ry
dWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTcsNyArODU0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0
KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBq
dW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7
CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxs
cy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODY3LDIyICs4
NjQsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0K
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3Mg
cmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVy
Zm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNj
ZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRC
eUlkUHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5l
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3
ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1
Y3R1cmUsIGNoYWluKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsKIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRD
aGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBT
dHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRl
bnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJu
QWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyNSw3
ICs5MjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAg
ICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZz
ZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAg
ICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6
aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyAr
K2l0ZXIpIHsKQEAgLTk0MSwxMyArOTM4LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsK
IAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwg
YmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBlbnRyeUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsK
IAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhl
IGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVt
cExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVm
ZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24s
IGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3
YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRf
YnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24o
cmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQx
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzU3LDggKzc1Nyw4IEBAIEpJVFRodW5rczo6SklUVGh1bmtzKEpTR2xvYmFsRGF0
YSogZ2xvYmEKICAgICBpZiAoIWdsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxp
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoZ2xvYmFsRGF0YSwgJm1fZXhlY3V0YWJsZVBvb2wsICZtX3RyYW1wb2xpbmVTdHJ1Y3R1
cmUpOwotICAgIEFTU0VSVChtX2V4ZWN1dGFibGVQb29sKTsKKyAgICBKSVQ6OmNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1fZXhlY3V0YWJsZU1lbW9yeSwgJm1fdHJh
bXBvbGluZVN0cnVjdHVyZSk7CisgICAgQVNTRVJUKCEhbV9leGVjdXRhYmxlTWVtb3J5KTsKICNp
ZiBDUFUoQVJNX1RIVU1CMikKICAgICAvLyBVbmZvcnR1bmF0ZSB0aGUgYXJtIGNvbXBpbGVyIGRv
ZXMgbm90IGxpa2UgdGhlIHVzZSBvZiBvZmZzZXRvZiBvbiBKSVRTdGFja0ZyYW1lIChzaW5jZSBp
dCBjb250YWlucyBub24gUE9EIHR5cGVzKSwKICAgICAvLyBhbmQgdGhlIE9CSkVDVF9PRkZTRVRP
RiBtYWNybyBkb2VzIG5vdCBhcHBlYXIgY29uc3RhbnRpc2ggZW5vdWdoIGZvciBpdCB0byBiZSBo
YXBweSB3aXRoIGl0cyB1c2UgaW4gQ09NUElMRV9BU1NFUlQKQEAgLTE2MDgsNyArMTYwOCw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBpZiAo
c3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBDb2Rl
TG9jYXRpb25MYWJlbCgpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0
dXJlLmdldCgpKTsKKyAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpLCBzdHVi
SW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAg
ICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCwgMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZUxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTE2
MzQsMTIgKzE2MzQsMTIgQEAgc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCog
ZwogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19n
ZXRfYnlfaWRfcHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+
c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJl
LmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgp
KTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsK
KyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7
CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1
cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2No
YWluOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5l
LCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1
YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJS
b3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0
R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CkBAIC0zNTcyLDExICsz
NTcyLDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCB0b18KICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmpl
Y3QoY2FsbEZyYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0
aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3Ip
CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIHN0ZDo6cGFpcjxD
VElTdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVy
YXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIHN0ZDo6cGFpcjxDVElTdHViTWFw
OjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAgIGlmIChlbnRyeS5zZWNvbmQpCi0gICAgICAgIGVu
dHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9v
bC5nZXQoKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFs
RGF0YSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQ7CiB9CiAKQEAgLTM1ODQsNyAr
MzU4NCw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAg
ICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0g
bV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJs
ZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50cnkuZmly
c3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xv
YmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBtX2V4ZWN1dGFi
bGVQb29sLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhv
c3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5z
ZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklU
Ojpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVD
b25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAgcmV0dXJu
IGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKQEAgLTM1OTIsOCArMzU5Miw4IEBAIE5h
dGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8
SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rp
b25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAg
aWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEs
IG1fZXhlY3V0YWJsZVBvb2wuZ2V0KCkpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAg
ICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxl
OjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3Qo
KSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9i
YWxEYXRhKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBlbnRyeS5maXJzdC0+
c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxE
YXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFu
YWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvcikpOwogICAgIH0KICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsK
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDk0MTA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOTQsNyArMjk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1
Y3R1cmUuY3RpTmF0aXZlQ29uc3RydWN0OyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlTb2Z0TW9kdWxvKCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVNvZnRN
b2R1bG87IH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3R1YihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcik7CisgICAgICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2VuZXJhdG9y
KTsKIAogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFs
RGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1
bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3Ip
OwpAQCAtMzAyLDExICszMDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xl
YXJIb3N0RnVuY3Rpb25TdHVicygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBI
YXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IENUSVN0dWJNYXA7
CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmPiBDVElTdHViTWFwOwogICAgICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKICAg
ICAgICAgdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+ID4gSG9zdEZ1bmN0aW9uU3R1Yk1hcDsKICAgICAgICAgT3duUHRyPEhvc3RGdW5jdGlvblN0
dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQ
b29sPiBtX2V4ZWN1dGFibGVQb29sOworICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhh
bmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogCiAgICAgICAgIFRyYW1wb2xpbmVTdHJ1Y3R1cmUg
bV90cmFtcG9saW5lU3RydWN0dXJlOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gOTQxMDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3BlY2lh
bGl6ZWRUaHVua0pJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgcHVibGljOgogICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IFRoaXNBcmd1bWVudCA9IC0xOwotICAgICAgICBTcGVjaWFs
aXplZFRodW5rSklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGlu
dCBleHBlY3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgICAg
ICA6IG1fZXhwZWN0ZWRBcmdDb3VudChleHBlY3RlZEFyZ0NvdW50KQogICAgICAgICAgICAgLCBt
X2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgICwgbV9wb29sKHBvb2wpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVt
YmVyIG9mIGFyZ3VtZW50cwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIo
Tm90RXF1YWwsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1l
bnRDb3VudCAqIChpbnQpc2l6ZW9mKFJlZ2lzdGVyKSksIFRydXN0ZWRJbW0zMihleHBlY3RlZEFy
Z0NvdW50ICsgMSkpKTsKQEAgLTEyMywxMyArMTIyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgcmV0KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBmaW5hbGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBmYWxsYmFjaykKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFs
aXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxi
YWNrKQogICAgICAgICB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2Jh
bERhdGEsIHRoaXMsIG1fcG9vbC5nZXQoKSk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKGdsb2JhbERhdGEsIHRoaXMpOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayht
X2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxsYmFjaykpOwogICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7
Ci0gICAgICAgICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOwor
ICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNlcyBmcFJl
Z2lzdGVyMCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKQEAgLTE2Myw3ICsxNjIsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludCBtX2V4cGVjdGVkQXJnQ291bnQ7CiAgICAg
ICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+IG1fcG9vbDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVy
ZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI+ID4gbV9jYWxs
czsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDI2ICs2MywyNiBAQCBz
dGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVuCiAgICAgaml0LmFwcGVuZEZh
aWx1cmUoaml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
IHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFy
TG9hZChqaXQpOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFy
QXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29s
KiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGds
b2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1cm5KU0Nl
bGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUo
Kmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQog
Ci1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7
CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgLy8gbG9h
ZCBjaGFyIGNvZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDEpOwpAQCAtOTAsMTEgKzkwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBmcm9tQ2hhckNvZGVUaHVua0cKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50
U3FydCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAg
ICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1Qw
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBA
IC0xNzgsMTIgKzE3OCwxMiBAQCBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpOwogZGVm
aW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBw
ZXIoY2VpbCk7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7Cisg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZs
b29yKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybklu
dDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmpp
dCk7CkBAIC0xOTcsMTEgKzE5NywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVu
a0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxl
UG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2Jh
bERhdGEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBw
b3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5s
b2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVt
cCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAg
LTIyMCwxMSArMjIwLDExIEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvQ29uc3Rh
bnQKIHN0YXRpYyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3Qg
ZG91YmxlIG5lZ2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhl
Y3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8
fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7
CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDApOwpAQCAtMjM5LDM3ICsyMzksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5k
VGh1bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRh
YmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBl
cihleHApKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRD
b2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91Ymxl
VG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJs
ZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXpl
KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICgh
VW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwg
Z2xvYmFsRGF0YSwgcG9vbCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAg
ICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsK
ICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpOwog
ICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29s
KTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAo
IWppdC5zdXBwb3J0c0RvdWJsZUJpdG9wcygpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAg
ICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBu
b25JbnRKdW1wKTsKICAgICBqaXQucnNoaWZ0MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1
bmtHZW5lcmF0b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFi
bGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgy
LCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9i
YWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAg
cmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIAogICAgIGppdC5sb2FkRG91Ymxl
KCZvbmVDb25zdGFudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0Lmxv
YWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDIw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogICAgIGNsYXNz
IEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNsYXNzIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0cjsKKyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAK
LSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciAoKlRodW5rR2VuZXJhdG9yKShKU0ds
b2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
aGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
LSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNo
YXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwg
RXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2VpbFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29s
Kik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9n
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVj
dXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsK
KyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKShKU0ds
b2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEV4ZWN1dGFi
bGVCYXNlIEJhc2U7CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBzdGF0aWMgTmF0aXZlRXhl
Y3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCisgICAg
ICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5j
dGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlv
biBjb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZTsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJ
KHJldmlzaW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlh
bGl6ZVRocmVhZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKIAorI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVk
ZSAiZHRvYS5oIgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
KyNpbmNsdWRlICJkdG9hLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8
d3RmL1RocmVhZGluZy5oPgogCkBAIC01Myw2ICs1NCw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVUaHJlYWRpbmdPbmNlKCkKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgp
OwogI2VuZGlmCiAgICAgSlNHbG9iYWxEYXRhOjpzdG9yZVZQdHJzKCk7CisgICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogI2lmIEVOQUJMRShKU0NfTVVMVElQ
TEVfVEhSRUFEUykKICAgICBSZWdpc3RlckZpbGU6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERh
dGEuY3BwCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNiBAQCBKU0ds
b2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBlbXB0eUxpc3QobmV3
IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBleGVj
dXRhYmxlQWxsb2NhdG9yKCp0aGlzKQotICAgICwgcmVnZXhBbGxvY2F0b3IoKnRoaXMpCiAjZW5k
aWYKICAgICAsIGxleGVyKG5ldyBMZXhlcih0aGlzKSkKICAgICAsIHBhcnNlcihuZXcgUGFyc2Vy
KQpAQCAtNDQwLDYgKzQzOSw5IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpzdG9wU2FtcGxpbmcoKQog
dm9pZCBKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICBpbnRlcnByZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhlYyk7CisjaWYgRU5BQkxFKEFTU0VNQkxF
UikKKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpOworI2VuZGlmCiB9CiAK
IHZvaWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQx
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAK
ICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1
dGFibGVBbGxvY2F0b3I7Ci0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgcmVnZXhBbGxvY2F0
b3I7CiAjZW5kaWYKIAogI2lmICFFTkFCTEUoSklUKQpAQCAtMjE2LDcgKzIxNSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxF
KEpJVCkKICAgICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2Vu
ZXJhdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIo
dGhpcywgZ2VuZXJhdG9yKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvdW5pdC91bml0dGVzdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbml0aWFs
aXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKKy8vIFRlc3Qgc3Vw
cG9ydAorCisjZGVmaW5lIFJVTl9TVUlURShleHByZXNzaW9uKSBkbyB7ICAgICAgICAgICAgICBc
CisgICAgICAgIHByaW50ZigiJXM6XG4iLCAjZXhwcmVzc2lvbik7ICAgICAgICAgICBcCisgICAg
ICAgIChleHByZXNzaW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGls
ZSAoMCkKKworI2RlZmluZSBSVU5fVEVTVChleHByZXNzaW9uKSBkbyB7ICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBwcmludGYoIiAgICVzOiAiLCAjZXhwcmVzc2lvbik7ICAgICAgICAgICAg
XAorICAgICAgICBmZmx1c2goc3Rkb3V0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAoZXhwcmVzc2lvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcmludGYoIk9LXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKDApCisKKyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoZXhwcmVzc2lvbikp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ICAgIHByaW50ZigiRkFJTDogJXM6JXM6JWQ6IGFzc2VydGlvbiAlcyBmYWlsZWQhXG4iLCBfX0ZJ
TEVfXywgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyBcCisgICAgICAgICAg
ICBDUkFTSCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQg
cHJpbnRWYWx1ZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcHJpbnRm
KCJ0cnVlIik7CisgICAgZWxzZQorICAgICAgICBwcmludGYoImZhbHNlIik7Cit9CisKK3N0YXRp
YyB2b2lkIHByaW50VmFsdWUoaW50IHZhbHVlKQoreworICAgIHByaW50ZigiJWQiLCB2YWx1ZSk7
Cit9CisKK3N0YXRpYyB2b2lkIHByaW50VmFsdWUoc2l6ZV90IHZhbHVlKQoreworICAgIHByaW50
ZigiMHglbHgiLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50VmFsdWUodm9pZCogdmFs
dWUpCit7CisgICAgcHJpbnRmKCIlcCIsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK3N0YXRpYyB2b2lkIGFzc2VydEVxdWFsSW1wbChjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogYWN0dWFs
U3RyaW5nLCBUIGFjdHVhbCwgVCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9IGV4cGVj
dGVkKSB7CisgICAgICAgIHByaW50ZigiRkFJTDogJXM6JXM6JWQ6IGV4cGVjdGVkICVzIHRvIGJl
ICIsIGZpbGVOYW1lLCBmdW5jdGlvbk5hbWUsIGxpbmVOdW1iZXIsIGFjdHVhbFN0cmluZyk7Cisg
ICAgICAgIHByaW50VmFsdWUoZXhwZWN0ZWQpOworICAgICAgICBwcmludGYoIiBidXQgd2FzICIp
OworICAgICAgICBwcmludFZhbHVlKGFjdHVhbCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMg
dm9pZCBhc3NlcnRFcXVhbEltcGwoY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGFjdHVhbFN0cmluZywgVCBh
Y3R1YWwsIGludCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9IChUKWV4cGVjdGVkKSB7
CisgICAgICAgIHByaW50ZigiRkFJTDogJXM6JXM6JWQ6IGV4cGVjdGVkICVzIHRvIGJlICIsIGZp
bGVOYW1lLCBmdW5jdGlvbk5hbWUsIGxpbmVOdW1iZXIsIGFjdHVhbFN0cmluZyk7CisgICAgICAg
IHByaW50VmFsdWUoZXhwZWN0ZWQpOworICAgICAgICBwcmludGYoIiBidXQgd2FzICIpOworICAg
ICAgICBwcmludFZhbHVlKGFjdHVhbCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9Cit9CisKKyNkZWZpbmUgVEVTVF9BU1NFUlRfRVFVQUwoYWN0dWFsLCBl
eHBlY3RlZCkgYXNzZXJ0RXF1YWxJbXBsKF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9f
LCAjYWN0dWFsLCBhY3R1YWwsIGV4cGVjdGVkKQorCisvLyBUZXN0cyBmb3IgUmVkQmxhY2tUcmVl
CisKK2NsYXNzIFJlZEJsYWNrVHJlZVRlc3RzIHsKK3ByaXZhdGU6CisgICAgUmVkQmxhY2tUcmVl
VGVzdHMoKSB7IH0KKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBydW5UZXN0cygpCisg
ICAgeworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIiKSk7CisgICAgICAgIFJVTl9URVNU
KHRlc3REcml2ZXIoIip4QHkheiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2Ei
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithKnhAeSF6IikpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0RHJpdmVyKCIrYSphQGEhYSIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERy
aXZlcigiK2ErYiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2ErYitjIikpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCIpKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkIikp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrZStmK2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oi
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrYStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28rcCtxK3Ircyt0K3Urdit4K3kr
eiphKmIqYypkKmUqZipnKmgqaSpqKmsqbCptKm4qbypwKnEqcipzKnQqdSp2KncqeCp5KnohYSFi
IWMhZCFlIWYhZyFoIWkhaiFrIWwhbSFuIW8hcCFxIXIhcyF0IXUhdiF3IXgheSF6IikpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrZCtkK20rd0BkQG1Ad0BhQGdAcSIpKTsKKyAgICAg
ICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2QrZCtkK2QrZCtkK2QrZCtkK2QrZitmK2YrZitmK2Yr
ZitoK2graStqK2srbCttK28rcCtxK3IrekBhQGJAY0BkQGVAZkBnQGhAaUBqQGtAbEBtQG5Ab0Bw
QHFAckBzQHRAdUB2QHdAeEB5QHoiKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB1
bnNpZ25lZCBjb3VudGVyOworICAgIAorICAgIHN0cnVjdCBQYWlyIHsKKyAgICAgICAgY2hhciBr
ZXk7CisgICAgICAgIHVuc2lnbmVkIHZhbHVlOworICAgICAgICAKKyAgICAgICAgUGFpcigpIHsg
fQorICAgICAgICAKKyAgICAgICAgUGFpcihjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAg
ICAgICAgICA6IGtleShrZXkpCisgICAgICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgICAgICB7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYWly
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleSA9PSBvdGhl
ci5rZXk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0
IFBhaXImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5IDwg
b3RoZXIua2V5OworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIFZlY3RvcjxQ
YWlyLCAxNj4gUGFpclZlY3RvcjsKKyAgICAKKyAgICBzdGF0aWMgUGFpclZlY3RvciBmaW5kRXhh
Y3QoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgUGFpclZl
Y3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAoYXNWZWN0
b3IuYXQoaW5kZXgpLmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChh
c1ZlY3Rvci5hdChpbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGQ6OnNv
cnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZW1vdmUoUGFpclZlY3Rv
ciYgYXNWZWN0b3IsIHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGFzVmVjdG9yLmF0KGlu
ZGV4KSA9IGFzVmVjdG9yLmxhc3QoKTsKKyAgICAgICAgYXNWZWN0b3IucmVtb3ZlTGFzdCgpOwor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUGFpclZlY3RvciBmaW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgY2hh
ciBiZXN0S2V5ID0gMDsgLy8gYXNzaWdubWVudCB0byBtYWtlIGdjYyBoYXBweQorICAgICAgICBi
b29sIGZvdW5kS2V5ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBp
ZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA+PSBrZXkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YXNWZWN0b3IuYXQoaW5kZXgpLmtleSA8IGJlc3RLZXkgfHwgIWZvdW5kS2V5KSB7CisgICAgICAg
ICAgICAgICAgICAgIGZvdW5kS2V5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmVzdEtl
eSA9IGFzVmVjdG9yLmF0KGluZGV4KS5rZXk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBQYWlyVmVjdG9yIHJlc3VsdDsKKyAg
ICAgICAgCisgICAgICAgIGlmICghZm91bmRLZXkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZpbmRFeGFjdChhc1ZlY3RvciwgYmVzdEtleSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGFzc2VydEZvdW5kQW5kUmVtb3ZlKFBhaXJW
ZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAg
ICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgc2l6ZV90IGZvdW5kSW5kZXgg
PSAwOyAvLyBtYWtlIGNvbXBpbGVycyBoYXBweQorICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7
CisgICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5CisgICAg
ICAgICAgICAgICAgICAgICYmIGFzVmVjdG9yLmF0KGluZGV4KS52YWx1ZSA9PSB2YWx1ZSkgewor
ICAgICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVCghZm91bmQpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBmb3VuZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBURVNUX0FTU0VSVChmb3VuZCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJlbW92ZShhc1ZlY3RvciwgZm91bmRJbmRleCk7CisgICAgfQor
ICAgIAorICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IHBhc3NlcyBhIGNvcHkgb2YgdGhlIHZlY3Rv
ci4KKyAgICBzdGF0aWMgdm9pZCBhc3NlcnRFcXVhbChSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWdu
ZWQ+JiBhc1RyZWUsIFBhaXJWZWN0b3IgYXNWZWN0b3IpCisgICAgeworICAgICAgICBmb3IgKFJl
ZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIGN1cnJlbnQgPSBhc1RyZWUuZmlyc3Qo
KTsgY3VycmVudDsgY3VycmVudCA9IGFzVHJlZS5zdWNjZXNzb3IoY3VycmVudCkpCisgICAgICAg
ICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3RvciwgY3VycmVudC0+a2V5LCBjdXJyZW50
LT52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFNhbWVWYWx1ZXNG
b3JLZXkoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBSZWRCbGFja1RyZWU8
Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlLCBQYWlyVmVjdG9yIGZvdW5kVmFsdWVzLCBjaGFy
IGtleSkKKyAgICB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBURVNUX0FTU0VS
VF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZEJs
YWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIHByZXZOb2RlID0gbm9kZTsKKyAgICAgICAg
ICAgIGRvIHsKKyAgICAgICAgICAgICAgICBub2RlID0gcHJldk5vZGU7CisgICAgICAgICAgICAg
ICAgcHJldk5vZGUgPSBhc1RyZWUucHJlZGVjZXNzb3IocHJldk5vZGUpOworICAgICAgICAgICAg
fSB3aGlsZSAocHJldk5vZGUgJiYgcHJldk5vZGUtPmtleSA9PSBrZXkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAg
ICAgICBURVNUX0FTU0VSVCghcHJldk5vZGUgfHwgcHJldk5vZGUtPmtleSA8IGtleSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFu
ZFJlbW92ZShmb3VuZFZhbHVlcywgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbm9kZSA9IGFzVHJlZS5zdWNjZXNzb3Iobm9kZSk7Cisg
ICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIW5vZGUgfHwgbm9kZS0+a2V5ID49IGtleSk7Cisg
ICAgICAgICAgICB9IHdoaWxlIChub2RlICYmIG5vZGUtPmtleSA9PSBrZXkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVChmb3VuZFZhbHVlcy5pc0VtcHR5KCkpOwor
ICAgIH0KKyAgICAKKyAgICAvLyBUaGUgY29udHJvbCBzdHJpbmcgaXMgYSBudWxsLXRlcm1pbmF0
ZWQgbGlzdCBvZiBjb21tYW5kcy4gRWFjaAorICAgIC8vIGNvbW1hbmQgaXMgdHdvIGNoYXJhY3Rl
cnMsIHdpdGggdGhlIGZpcnN0IGlkZW50aWZ5aW5nIHRoZSBvcGVyYXRpb24KKyAgICAvLyBhbmQg
dGhlIHNlY29uZCBnaXZpbmcgYSBrZXkuIFRoZSBjb21tYW5kcyBhcmU6CisgICAgLy8gICt4ICBB
ZGQgeAorICAgIC8vICAqeCAgRmluZCBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAorICAgIC8vICBA
eCAgRmluZCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBzbWFsbGVzdCBrZXkgdGhhdCBpcyBn
cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8geAorICAgIC8vICAheCAgUmVtb3ZlIGFsbCBlbGVtZW50
cyBlcXVhbCB0byB4CisgICAgc3RhdGljIHZvaWQgdGVzdERyaXZlcihjb25zdCBjaGFyKiBjb250
cm9sU3RyaW5nKQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciBhc1ZlY3RvcjsKKyAgICAgICAg
UmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiBhc1RyZWU7CisgICAgICAgIAorICAgICAgICBm
b3IgKGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBjb250cm9sU3RyaW5nOyAqY3VycmVudDsgY3VycmVu
dCArPSAyKSB7CisgICAgICAgICAgICBjaGFyIGNvbW1hbmQgPSBjdXJyZW50WzBdOworICAgICAg
ICAgICAgY2hhciBrZXkgPSBjdXJyZW50WzFdOworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUg
PSArK2NvdW50ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChjb21tYW5kKTsK
KyAgICAgICAgICAgIEFTU0VSVChrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0
Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2UgJysnOiB7CisgICAgICAgICAgICAgICAg
UmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IG5ldyBSZWRCbGFja1Ry
ZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlOworICAgICAgICAgICAgICAgIG5vZGUtPmtleSA9IGtl
eTsKKyAgICAgICAgICAgICAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAg
IGFzVHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICAgICAgYXNWZWN0b3IuYXBwZW5kKFBh
aXIoa2V5LCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAnKic6IHsKKyAgICAgICAgICAgICAg
ICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRF
eGFjdChrZXkpOworICAgICAgICAgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgICAgICAg
ICBURVNUX0FTU0VSVF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgYXNz
ZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5
KSwga2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgY2FzZSAnQCc6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5z
aWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChr
ZXkpOworICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIFRF
U1RfQVNTRVJUKG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRT
YW1lVmFsdWVzRm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFs
KGFzVmVjdG9yLCBrZXkpLCBub2RlLT5rZXkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgICAgICBURVNUX0FTU0VSVChmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwo
YXNWZWN0b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyEnOiB7CisgICAg
ICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVkQmxhY2tU
cmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5yZW1vdmUoa2V5KTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRF
U1RfQVNTRVJUX0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFzc2VydEZvdW5kQW5kUmVtb3ZlKGFzVmVjdG9yLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsK
KyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRF
U1RfQVNTRVJUKGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgYXNUcmVlLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyNlbmRpZgorICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYXNUcmVlLnNpemUo
KSwgYXNWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFsKGFzVHJlZSwgYXNW
ZWN0b3IpOworICAgICAgICB9CisgICAgfQorfTsKKwordW5zaWduZWQgUmVkQmxhY2tUcmVlVGVz
dHM6OmNvdW50ZXI7CisKKy8vIFRlc3RzIGZvciBNZXRhQWxsb2NhdG9yCisKK2NsYXNzIE1ldGFB
bGxvY2F0b3JUZXN0cyB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JUZXN0cygpIHsgfQor
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgUlVO
X1RFU1QodGVzdE5vdGhpbmcoKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RBbGxvY1plcm8oKSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3RPbmVBbGxvYygzMikpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0T25lQWxsb2MoNjQpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdE9uZUFsbG9jKHBhZ2VTaXpl
KCkqMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMCkp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgMCkpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMCkpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgNjQsIDApKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDY0LCAwKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCA2NCwgMCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCBwYWdlU2l6ZSgpICogMiwgMCkpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCAzMiwgMCkpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkg
KiAyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUocGFnZVNpemUo
KSAqIDIsIHBhZ2VTaXplKCksIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxD
b2FsZXNjZSgzMiwgMzIsIDEyOCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENv
YWxlc2NlKDMyLCA2NCwgMTI4KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29h
bGVzY2UoNjQsIDMyLCAxMjgpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2Fs
ZXNjZSgzMiwgcGFnZVNpemUoKSAtIDMyLCBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNU
KHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFnZVNpemUoKSAq
IDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShwYWdlU2l6ZSgp
LCAzMiwgcGFnZVNpemUoKSAqIDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxD
b2FsZXNjZShwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpICogMikpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAwKSk7CisgICAgICAg
IFJVTl9URVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAwKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAzMiwgMCkp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgcGFnZVNpemUoKSAt
IDMyLCAzMiwgcGFnZVNpemUoKSAtIDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RG
SUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RGSUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgcGFnZVNpemUoKSAtIDMyLCAzMiwgcGFnZVNp
emUoKSAtIDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RmlsbEhlYXAoMzIsIGRl
ZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMikpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0RmlsbEhlYXAocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwKSk7CisgICAgICAgIFJV
Tl9URVNUKHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgpICogMiwgZGVmYXVsdFBhZ2VzSW5IZWFwIC8g
MikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmlnaHRBbGxvY2F0aW9uKDMyLCBwYWdlU2l6ZSgp
LCAzMiwgcGFnZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmlnaHRBbGxvY2F0aW9u
KHBhZ2VTaXplKCkgLyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSkp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDMsIFJ1blNhbml0eUNoZWNr
KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAsIERvbnRSdW5TYW5p
dHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDEwMCwgRG9u
dFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwg
MywgUnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDY0
LCAxMCwgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0
KDk2LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dEJlc3RGaXQoOTYsIDk2LCAzLCBSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0QmVzdEZpdCg5NiwgOTYsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVO
X1RFU1QodGVzdEJlc3RGaXQoOTYsIDk2LCA4MCwgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RTaHJpbmsoNjQsIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RT
aHJpbmsocGFnZVNpemUoKSwgMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdl
U2l6ZSgpLCBwYWdlU2l6ZSgpIC0gMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhw
YWdlU2l6ZSgpICogMiwgMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6
ZSgpICogMiwgcGFnZVNpemUoKSArIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmso
cGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmlu
ayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKiAyIC0gMzIpKTsKKyAgICAgICAg
UlVOX1RFU1QodGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2Vz
SW5IZWFwLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVh
cCoyLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNU
KHRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhl
YXAqMiwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgZW51bSBTYW5pdHlDaGVja01vZGUgeyBSdW5TYW5pdHlDaGVjaywgRG9udFJ1
blNhbml0eUNoZWNrIH07CisgICAgCisgICAgZW51bSBIZWFwR3Jvd3RoTW9kZSB7IERvbnRHcm93
SGVhcCwgRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2UsIEZvclRlc3REZW1hbmRBbGxvY0RvbnRD
b2FsZXNjZSB9OworICAgIAorICAgIHN0YXRpYyBIZWFwR3Jvd3RoTW9kZSBjdXJyZW50SGVhcEdy
b3d0aE1vZGU7CisgICAgc3RhdGljIHNpemVfdCBhbGxvd0FsbG9jYXRlUGFnZXM7CisgICAgc3Rh
dGljIHNpemVfdCByZXF1ZXN0ZWROdW1QYWdlczsKKworICAgIGNsYXNzIFNpbXBsZVRlc3RBbGxv
Y2F0b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNpbXBs
ZVRlc3RBbGxvY2F0b3IoKQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKQorICAgICAg
ICB7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZWludGVycHJldF9jYXN0PHZvaWQq
PihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB+U2ltcGxlVGVzdEFsbG9j
YXRvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3JEZXN0
cm95ZWQpOworICAgICAgICAgICAgYWxsb2NhdG9yRGVzdHJveWVkID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVf
dCYgbnVtUGFnZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudEhlYXBH
cm93dGhNb2RlKSB7CisgICAgICAgICAgICBjYXNlIERvbnRHcm93SGVhcDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRm9yVGVz
dERlbWFuZEFsbG9jQ29hbGVzY2U6CisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxv
Y0RvbnRDb2FsZXNjZTogeworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKGFsbG93QWxsb2Nh
dGVQYWdlcyk7CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoYWxsb3dBbGxvY2F0ZVBhZ2Vz
ID49IG51bVBhZ2VzKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IG51bVBh
Z2VzOworICAgICAgICAgICAgICAgIG51bVBhZ2VzID0gYWxsb3dBbGxvY2F0ZVBhZ2VzOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAg
ICAgICAgICBpZiAoY3VycmVudEhlYXBHcm93dGhNb2RlID09IEZvclRlc3REZW1hbmRBbGxvY0Nv
YWxlc2NlKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigo
YmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyBvZmZzZXQpICogcGFnZVNpemUoKSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gMDsK
KyAgICAgICAgICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnRlciA9IDA7
IGNvdW50ZXIgPCBudW1QYWdlcyArIG9mZnNldDsgKytjb3VudGVyKSB7CisgICAgICAgICAgICAg
ICAgICAgIHBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYnl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRlciA8IHBhZ2VTaXplKCk7ICsrYnl0
ZUNvdW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFwcGVuZChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGFkZGl0aW9uYWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBib3RoIGZyZWUgYW5kIHVubWFwcGVkLgor
ICAgICAgICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBh
ZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQor
ICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYWRkcmVzcykpKTsKKyAgICAgICAgICAgIHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlIG9mIG9iamVj
dHMgYXQgdGhpcyBwb2ludCwgYnV0IGl0IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgLy8gYmUg
bWFwcGVkLgorICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAodWlu
dHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJl
c3MgPCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyArK2Fk
ZHJlc3MpCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIWJ5dGVTdGF0ZShyZWludGVycHJl
dF9jYXN0PHZvaWQqPihhZGRyZXNzKSkpOworICAgICAgICAgICAgcGFnZVN0YXRlKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJhc2VQYWdlID0gMTsKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFBhZ2VzSW5IZWFwID0gMTAwOworICAgIAor
ICAgIHN0YXRpYyB1bnNpZ25lZCBhZGRpdGlvbmFsUGFnZXNJbkhlYXA7CisgICAgCisgICAgc3Rh
dGljIFZlY3Rvcjxib29sLCAwPiogbWVtb3J5TWFwOworICAgIHN0YXRpYyBWZWN0b3I8Ym9vbCwg
MD4qIHBhZ2VNYXA7CisgICAgc3RhdGljIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOworICAgIAor
ICAgIHN0YXRpYyBTaW1wbGVUZXN0QWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgCisgICAgc3Rh
dGljIHZvaWQgdGVzdE5vdGhpbmcoKQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgdGhhdCBjcmVh
dGluZyBhbmQgZGVzdHJveWluZyBhbiBhbGxvY2F0b3Igd29ya3MuCisgICAgICAgIAorICAgICAg
ICBzZXRVcCgpOworICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
dm9pZCB0ZXN0QWxsb2NaZXJvKCkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoYXQgYWxsb2Nh
dGluZyBhIHplcm8tbGVuZ3RoIGJsb2NrIHJldHVybnMgMCBhbmQKKyAgICAgICAgLy8gZG9lcyBu
b3QgY2hhbmdlIGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7
CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworCisg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2Vz
SW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgZnJlZShmaW5hbCk7CisKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAg
CisgICAgc3RhdGljIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAg
ICAgLy8gVGVzdHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6IGFsbG9jYXRlIG9uZSB0aGluZyBh
bmQgZnJlZSBpdC4gQWxzbworICAgICAgICAvLyB2ZXJpZmllcyB0aGF0IHRoZSBzdGF0ZSBvZiBw
YWdlcyBpcyBjb3JyZWN0LgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemUpOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVB
TChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemUpOworICAgICAgICBURVNUX0FTU0VSVChwYWdl
U3RhdGUoYmFzZVBhZ2UpKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAg
ICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZy
ZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyB2b2lkIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc2l6ZV90IGZpcnN0U2l6ZSwgLi4u
KQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgcmlnaHQtY29hbGVzY2luZyBieSByZXBlYXRlZGx5
IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcuIFRoZSBpZGVhCisgICAgICAgIC8vIGlzIHRoYXQgaWYg
eW91IGFsbG9jYXRlIHNvbWV0aGluZyBhbmQgdGhlbiBmcmVlIGl0LCB0aGVuIHRoZSBoZWFwIHNo
b3VsZAorICAgICAgICAvLyBsb29rIGlkZW50aWNhbCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhl
IGFsbG9jYXRpb24gZHVlIHRvIGEgcmlnaHQtY29hbGVzY2UKKyAgICAgICAgLy8gb2YgdGhlIGZy
ZWVkIGNodW5rIGFuZCB0aGUgYWxyZWFkeS1mcmVlIG1lbW9yeSwgYW5kIHNvIHN1YnNlcXVlbnQK
KyAgICAgICAgLy8gYWxsb2NhdGlvbnMgc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgZmly
c3Qgb25lLgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAg
IFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhh
bmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZp
cm0oaGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAg
ICAgCisgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJn
TGlzdDsKKyAgICAgICAgdmFfc3RhcnQoYXJnTGlzdCwgZmlyc3RTaXplKTsKKyAgICAgICAgd2hp
bGUgKHNpemVfdCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBzaXplX3QpKSB7CisgICAg
ICAgICAgICBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFu
ZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhh
bmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAg
fQorICAgICAgICB2YV9lbmQoYXJnTGlzdCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHNp
emVfdCBmaXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplLCBzaXplX3QgdGhpcmRTaXplKQorICAg
IHsKKyAgICAgICAgLy8gQWxsb2NhdGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0U2l6ZSwgdGhl
biBzb21ldGhpbmcgb2Ygc2l6ZSBzZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAgICAvLyBmcmVl
cyB0aGUgZmlyc3QgYWxsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5kIHRoZW4gYXR0
ZW1wdHMgdG8gYWxsb2NhdGUgdGhlCisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRpbmcgdGhhdCBp
dCBhbGxvY2F0ZWQgYXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAgICAgICAgCisg
ICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFsbG9jYXRpb24s
IHdoaWNoIHdpbGwgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8gVGh1cyB0aGUg
Y29ycmVjdCB3YXkgb2YgcnVubmluZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgc2Vjb25k
U2l6ZSBpcworICAgICAgICAvLyBwaWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IG5ldmVyIHN0
cmFkZGxlcyBhIHBhZ2UuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNp
emUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRF
U1RfQVNTRVJUX0VRVUFMKGZpcnN0SGFuZGxlLT5zaXplSW5CeXRlcygpLCBmaXJzdFNpemUpOwor
ICAgICAgICAKKyAgICAgICAgY29uZmlybShmaXJzdEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKGZpcnN0SGFuZGxlKTsKKworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBmaXJzdFNpemUpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRf
RVFVQUwoc2Vjb25kSGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAg
CisgICAgICAgIGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtKHNlY29uZEhh
bmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAg
ICAgIAorICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZp
cm0oc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFu
ZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisg
ICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0
UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTCh0aGlyZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJU
X0VRVUFMKHRoaXJkSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0aGlyZFNpemUpOworICAgICAgICAK
KyAgICAgICAgY29uZmlybSh0aGlyZEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJt
YXJrKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUodGhpcmRIYW5kbGUpOwor
ICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgZW51bSBUZXN0
RklGT0FsbG9jTW9kZSB7IEZpbGxBdEVuZCwgRWFnZXJGaWxsIH07CisgICAgc3RhdGljIHZvaWQg
dGVzdEZJRk9BbGxvYyhUZXN0RklGT0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAgeworICAgICAg
ICAvLyBUaGlzIHdpbGwgdGVzdCB0aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVzY2UgKGZyZWVp
bmcgdGhlIGxlZnQtbW9zdAorICAgICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hlbiB0aGUgY2h1
bmsgdG8gdGhlIHJpZ2h0IG9mIGl0IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAgIC8vIGZ1bGx5
IGV4ZXJjaXNlIGxlZnQtY29hbGVzY2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiBJbiBFYWdlckZp
bGwKKyAgICAgICAgLy8gbW9kZSwgdGhpcyBhbHNvIHRlc3RzIHBlcmZlY3QtZml0IGFsbG9jYXRp
b24gYW5kIG5vLWNvYWxlc2NpbmcgZnJlZS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisK
KyAgICAgICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8
TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAgICAgIAorICAgICAgICB2YV9s
aXN0IGFyZ0xpc3Q7CisgICAgICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIG1vZGUpOworICAgICAgICB3
aGlsZSAoc2l6ZV90IHNpemVJbkJ5dGVzID0gdmFfYXJnKGFyZ0xpc3QsIHNpemVfdCkpIHsKKyAg
ICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVJbkJ5
dGVzKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplKSk7
CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNp
emVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOwor
ICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKKyAgICAgICAgICAgIHRvdGFsU2l6
ZSArPSBzaXplSW5CeXRlczsKKyAgICAgICAgfQorICAgICAgICB2YV9lbmQoYXJnTGlzdCk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVz
LnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlcy5hdChpbmRleCkp
OworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemVTb0ZhciA9IDA7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICBzaXplU29GYXIgKz0gaGFuZGxlcy5hdChpbmRleCktPnNpemVJbkJ5dGVzKCk7
CisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAgICAgIGlmICht
b2RlID09IEVhZ2VyRmlsbCkgeworICAgICAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGhhbmRsZSA9IGFsbG9jYXRlKHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5k
bGUtPnNpemVJbkJ5dGVzKCksIHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQYWdlICogcGFnZVNp
emUoKSArIHRvdGFsU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaGFu
ZGxlcy5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFy
ayhoYW5kbGVzLmxhc3QoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
ICsgc2l6ZVNvRmFyLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChzaXplU29GYXIgPT0gdG90YWxTaXplKTsKKyAgICAgICAgCisgICAg
ICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFn
ZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1v
ZGUgPT0gRmlsbEF0RW5kKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5h
bEhhbmRsZSA9IGFsbG9jYXRlKHRvdGFsU2l6ZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9F
UVVBTChmaW5hbEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbEhh
bmRsZS0+c2l6ZUluQnl0ZXMoKSwgdG90YWxTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uZmlybShmaW5hbEhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFy
ayhmaW5hbEhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoZmluYWxIYW5k
bGUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0RmlsbEhlYXAoc2l6ZV90IHNpemVJbkJ5dGVzLCBzaXpl
X3QgbnVtQWxsb2NhdGlvbnMpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAg
ICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAgICAK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyAr
K2luZGV4KQorICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdGUoc2l6ZUluQnl0ZXMs
IERvbnRSdW5TYW5pdHlDaGVjaykpOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsK
KyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJ
bkJ5dGVzKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4
IDwgbnVtQWxsb2NhdGlvbnM7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQo
aW5kZXgpLCBEb250UnVuU2FuaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hl
Y2soKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyB2b2lkIHRlc3RSaWdodEFsbG9jYXRpb24oc2l6ZV90IGZpcnN0TGVmdFNpemUsIHNpemVf
dCBmaXJzdFJpZ2h0U2l6ZSwgc2l6ZV90IHNlY29uZExlZnRTaXplLCBzaXplX3Qgc2Vjb25kUmln
aHRTaXplKQorICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGZpcnN0TGVmdCA9IGFsbG9jYXRlKGZpcnN0TGVmdFNpemUpOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdExlZnQtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogZmlyc3RSaWdodCA9IGFsbG9jYXRlKGZpcnN0UmlnaHRTaXplKTsK
KyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmlyc3RSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRMZWZ0ID0g
YWxsb2NhdGUoc2Vjb25kTGVmdFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNv
bmRMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VT
aXplKCkgKyBmaXJzdExlZnQtPnNpemVJbkJ5dGVzKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZFJpZ2h0ID0gYWxsb2NhdGUoc2Vjb25kUmlnaHRTaXpl
KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kUmlnaHQtPmVuZCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNp
emUoKSAtIGZpcnN0UmlnaHQtPnNpemVJbkJ5dGVzKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZy
ZWUoZmlyc3RMZWZ0KTsKKyAgICAgICAgZnJlZShmaXJzdFJpZ2h0KTsKKyAgICAgICAgZnJlZShz
ZWNvbmRMZWZ0KTsKKyAgICAgICAgZnJlZShzZWNvbmRSaWdodCk7CisgICAgICAgIAorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVh
cCAqIHBhZ2VTaXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIAorICAgICAgICBmcmVlKGZpbmFsKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RCZXN0Rml0KHNpemVfdCBmaXJzdFNp
emUsIHNpemVfdCBzdGVwLCB1bnNpZ25lZCBudW1TbG90cywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0
eUNoZWNrTW9kZSkKKyAgICB7CisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBW
ZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXNUb0ZyZWU7CisgICAgICAgIFZl
Y3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgVmVjdG9yPHZv
aWQqLCAwPiBsb2NhdGlvbnM7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpcnN0
U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7
ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHRvRnJlZSA9IGFs
bG9jYXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZXMu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRvRnJlZS0+c3RhcnQoKSAhPSBo
YW5kbGVzLmxhc3QoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlc1RvRnJl
ZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAgICAgICAgICAgdG9GcmVlID0gYWxsb2NhdGUo
c2l6ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZyYWdnZXIgPSBhbGxvY2F0ZSgz
Miwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZyYWdn
ZXItPnN0YXJ0KCksIHRvRnJlZS0+ZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBs
b2NhdGlvbnMuYXBwZW5kKHRvRnJlZS0+c3RhcnQoKSk7CisKKyAgICAgICAgICAgIGhhbmRsZXNU
b0ZyZWUuYXBwZW5kKHRvRnJlZSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChmcmFnZ2Vy
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSArPSBzdGVwOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQobG9jYXRpb25zLnNpemUoKSA9PSBudW1TbG90cyk7Cisg
ICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVz
VG9GcmVlLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlc1RvRnJlZS5h
dChpbmRleCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBzaXplID0gZmly
c3RTaXplOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90
czsgKytpbmRleCkgeworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogYmVzdEZpdCA9
IGFsbG9jYXRlKHNpemUgLSAzMiwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgVEVTVF9BU1NFUlQoYmVzdEZpdC0+c3RhcnQoKSA9PSBsb2NhdGlvbnMuYXQoaW5k
ZXgpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCBiZXN0Rml0LT5lbmQoKSA9PSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9jYXRpb25zLmF0
KGluZGV4KSkgKyBzaXplKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIHNtYWxsID0gYWxsb2NhdGUoMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAg
ICAgICBpZiAoYmVzdEZpdC0+c3RhcnQoKSA9PSBsb2NhdGlvbnMuYXQoaW5kZXgpKQorICAgICAg
ICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNtYWxsLT5zdGFydCgpLCBiZXN0Rml0LT5lbmQo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
c21hbGwtPmVuZCgpLCBiZXN0Rml0LT5zdGFydCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZnJlZShiZXN0Rml0LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgZnJlZShzbWFs
bCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSArPSBz
dGVwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0g
MDsgaW5kZXggPCBudW1TbG90czsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlcy5h
dChpbmRleCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXpl
KCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgCisgICAgICAgIGZyZWUoZmluYWwsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAg
IAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0
U2hyaW5rKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplKQorICAgIHsKKyAgICAg
ICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSB0aGluZyB0aGF0
IHdpbGwgYmUgc2hydW5rCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFs
bG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBTaHJpbmsgaXQsIGFuZCBt
YWtlIHN1cmUgdGhhdCBvdXIgc3RhdGUgcmVmbGVjdHMgdGhlIHNocmlua2FnZS4KKyAgICAgICAg
bm90aWZ5RnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oaGFuZGxlLT5zdGFydCgpKSArIHNlY29uZFNpemUpLCBmaXJzdFNpemUgLSBzZWNvbmRT
aXplKTsKKyAgICAgICAgCisgICAgICAgIGhhbmRsZS0+c2hyaW5rKHNlY29uZFNpemUpOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNlY29uZFNpemUp
OworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIC8v
IEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgVEVTVF9BU1NFUlQo
IWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQWxsb2NhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgaGVhcC4K
KyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogcmVtYWluZGVyID0gYWxsb2NhdGUoZGVmYXVs
dFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSAtIHNlY29uZFNpemUpOworICAgICAgICBURVNUX0FT
U0VSVF9FUVVBTChyZW1haW5kZXItPnN0YXJ0KCksIGhhbmRsZS0+ZW5kKCkpOworICAgICAgICAK
KyAgICAgICAgZnJlZShyZW1haW5kZXIpOworICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAg
IAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBlbXB0eSBhbmQgZmluaXNoIHVw
LgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQ
YWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5h
bC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpbmFsKTsKKyAgICAgICAgCisgICAgICAgIHRl
YXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3REZW1hbmRBbGxvY0Nv
YWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdlcywgc2l6ZV90IHNlY29uZFNp
emUpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NF
UlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZp
cnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIFRFU1Rf
QVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAgICAgICAgVEVTVF9B
U1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2Vz
KSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9k
ZSA9IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFn
ZXMgPSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNl
Y29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgVEVT
VF9BU1NFUlQoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAg
IFRFU1RfQVNTRVJUX0VRVUFMKGFsbG93QWxsb2NhdGVQYWdlcywgMCk7CisgICAgICAgIFRFU1Rf
QVNTRVJUX0VRVUFMKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkg
LSAxKSAvIHBhZ2VTaXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5k
bGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQ
YWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICByZXF1ZXN0ZWRO
dW1QYWdlcyA9IDA7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAg
ICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShhbGxvY2F0ZSgo
ZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAK
KyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdERl
bWFuZEFsbG9jRG9udENvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdlcywg
c2l6ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAg
ICAgICAgZnJlZShhbGxvY2F0ZShmaXJzdFNpemUpKTsKKyAgICAgICAgZnJlZShhbGxvY2F0ZShk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdl
U2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhh
bmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VS
VCghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJU
KCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBw
YWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBG
b3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U7CisgICAgICAgIGFsbG93QWxsb2NhdGVQYWdl
cyA9IG51bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vj
b25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBURVNU
X0FTU0VSVChjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoYWxsb3dBbGxvY2F0ZVBhZ2VzLCAwKTsKKyAgICAgICAgVEVTVF9B
U1NFUlRfRVFVQUwocmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRTaXplICsgcGFnZVNpemUoKSAt
IDEpIC8gcGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZEhhbmRs
ZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBh
Z2VzSW5IZWFwICsgMSkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICByZXF1ZXN0
ZWROdW1QYWdlcyA9IDA7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9y
LT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkp
OworCisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAgICBmcmVlKHNlY29uZEhhbmRs
ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgo
ZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAK
KyAgICAgICAgZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBzZWNv
bmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwoZmlyc3RIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUt
PnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdl
c0luSGVhcCArIDEpICogcGFnZVNpemUoKSkpOworICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsK
KyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24o
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgc2V0VXAoKQorICAgIHsKKyAgICAgICAg
bWVtb3J5TWFwID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICBwYWdlTWFwID0gbmV3
IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdl
ID0gYmFzZVBhZ2U7IHBhZ2UgPCBiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcDsgKytwYWdl
KSB7CisgICAgICAgICAgICBwYWdlTWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBieXRlSW5QYWdlID0gMDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0
ZUluUGFnZSkKKyAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAg
ICAgIH0KKworICAgICAgICBhbGxvY2F0b3JEZXN0cm95ZWQgPSBmYWxzZTsKKyAgICAgICAgCisg
ICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAgICAgYWxs
b3dBbGxvY2F0ZVBhZ2VzID0gMDsKKyAgICAgICAgYWRkaXRpb25hbFBhZ2VzSW5IZWFwID0gMDsK
KyAgICAgICAgCisgICAgICAgIGFsbG9jYXRvciA9IG5ldyBTaW1wbGVUZXN0QWxsb2NhdG9yKCk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IFRFU1RfQVNTRVJUKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChhbGxvd0FsbG9jYXRlUGFnZXMsIDApOworICAgICAgICBU
RVNUX0FTU0VSVF9FUVVBTChyZXF1ZXN0ZWROdW1QYWdlcywgMCk7CisgICAgICAgIAorICAgICAg
ICAvLyBtZW1vcnkgc2hvdWxkIGJlIGZyZWUuCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9
IGJhc2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkg
eworICAgICAgICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShwYWdlKSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGJ5dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsg
KytieXRlSW5QYWdlKQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocGFn
ZSAqIHBhZ2VTaXplKCkgKyBieXRlSW5QYWdlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIC8vIE5PVEU6IHRoaXMgYXV0b21hdGljYWxseSB0ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3Ig
ZGlkIG5vdCBsZWFrCisgICAgICAgIC8vIG1lbW9yeSwgc28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBh
cmUgcnVubmluZyB3aXRoICFkZWZpbmVkKE5ERUJVRykuCisgICAgICAgIC8vIFNlZSBNZXRhQWxs
b2NhdG9yOjptX21hbGxvY0JhbGFuY2UuCisgICAgICAgIGRlbGV0ZSBhbGxvY2F0b3I7CisgICAg
ICAgIAorICAgICAgICBURVNUX0FTU0VSVChhbGxvY2F0b3JEZXN0cm95ZWQpOworICAgICAgICAK
KyAgICAgICAgZGVsZXRlIG1lbW9yeU1hcDsKKyAgICAgICAgZGVsZXRlIHBhZ2VNYXA7CisgICAg
fQorICAgIAorICAgIHN0YXRpYyBNZXRhQWxsb2NhdG9ySGFuZGxlKiBhbGxvY2F0ZShzaXplX3Qg
c2l6ZUluQnl0ZXMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlD
aGVjaykKKyAgICB7CisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9j
YXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpLmxlYWtSZWYoKTsKKyAgICAgICAgVEVTVF9BU1NF
UlQoaGFuZGxlKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRl
cygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRl
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAg
IHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZv
ciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5
dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUo
Y3VycmVudEJ5dGUpKTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkgPSB0cnVl
OworICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNp
emUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5Q2hlY2tNb2Rl
ID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGZy
ZWUoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hl
Y2tNb2RlID0gUnVuU2FuaXR5Q2hlY2spCisgICAgeworICAgICAgICBURVNUX0FTU0VSVChoYW5k
bGUpOworICAgICAgICAKKyAgICAgICAgbm90aWZ5RnJlZShoYW5kbGUtPnN0YXJ0KCksIGhhbmRs
ZS0+c2l6ZUluQnl0ZXMoKSk7CisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKKyAgICAgICAgCisg
ICAgICAgIGlmIChzYW5pdHlDaGVja01vZGUgPT0gUnVuU2FuaXR5Q2hlY2spCisgICAgICAgICAg
ICBzYW5pdHlDaGVjaygpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlGcmVl
KHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICB1aW50cHRy
X3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KTsKKyAgICAg
ICAgdWludHB0cl90IGVuZEJ5dGUgPSBzdGFydEJ5dGUgKyBzaXplSW5CeXRlczsKKyAgICAgICAg
Zm9yICh1aW50cHRyX3QgY3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5k
Qnl0ZTsgKytjdXJyZW50Qnl0ZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlQoYnl0ZVN0YXRl
KGN1cnJlbnRCeXRlKSk7CisgICAgICAgICAgICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgc2FuaXR5Q2hlY2so
KQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9j
YXRvci0+Ynl0ZXNSZXNlcnZlZCgpIC0gYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBhbGxv
Y2F0b3ItPmRlYnVnRnJlZVNwYWNlU2l6ZSgpKTsKKyNlbmRpZgorICAgICAgICBURVNUX0FTU0VS
VF9FUVVBTChhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSwgKGRlZmF1bHRQYWdlc0luSGVhcCAr
IGFkZGl0aW9uYWxQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBieXRlc0FsbG9jYXRlZCgpKTsK
KyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpLCBi
eXRlc0NvbW1pdHRlZCgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY29uZmlybShN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICB1aW50cHRyX3Qgc3Rh
cnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7Cisg
ICAgICAgIGNvbmZpcm0oc3RhcnRCeXRlLCBzdGFydEJ5dGUgKyBoYW5kbGUtPnNpemVJbkJ5dGVz
KCksIHRydWUpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtSGlnaFdhdGVy
bWFyayhNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICBjb25maXJt
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPmVuZCgpKSwgKGJhc2VQYWdlICsg
ZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgc3RhdGljIHZvaWQgY29uZmlybSh1aW50cHRyX3Qgc3RhcnRCeXRlLCB1
aW50cHRyX3QgZW5kQnl0ZSwgYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGZvciAodWludHB0
cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3Vy
cmVudEJ5dGUpIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJ5dGVTdGF0ZShjdXJy
ZW50Qnl0ZSksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAg
ICBURVNUX0FTU0VSVChwYWdlU3RhdGUoY3VycmVudEJ5dGUgLyBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgdWludHB0cl90IGZpcnN0
RnJlZVBhZ2UgPSAoc3RhcnRCeXRlICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAg
ICAgICAgICAgIHVpbnRwdHJfdCBsYXN0RnJlZVBhZ2UgPSAoZW5kQnl0ZSAtIHBhZ2VTaXplKCkp
IC8gcGFnZVNpemUoKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRQYWdlID0g
Zmlyc3RGcmVlUGFnZTsgY3VycmVudFBhZ2UgPD0gbGFzdEZyZWVQYWdlOyArK2N1cnJlbnRQYWdl
KQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFwYWdlU3RhdGUoY3VycmVudFBhZ2UpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
KCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluZGV4ID0gMDsgaW5kZXggPCBtZW1vcnlNYXAtPnNpemUoKTsgKytpbmRleCkgeworICAg
ICAgICAgICAgaWYgKG1lbW9yeU1hcC0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJl
c3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VN
YXAtPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKHBhZ2VNYXAtPmF0KGluZGV4
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0ICogcGFnZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wmIGJ5dGVT
dGF0ZSh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ5dGVTdGF0ZShyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykpOworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgYm9vbCYgYnl0ZVN0YXRlKHVpbnRwdHJfdCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWlu
dHB0cl90IGJ5dGVJbmRleCA9IGFkZHJlc3MgLSBiYXNlUGFnZSAqIHBhZ2VTaXplKCk7CisgICAg
ICAgIHJldHVybiBtZW1vcnlNYXAtPmF0KGJ5dGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBib29sJiBwYWdlU3RhdGUodWludHB0cl90IHBhZ2UpCisgICAgeworICAgICAgICB1aW50
cHRyX3QgcGFnZUluZGV4ID0gcGFnZSAtIGJhc2VQYWdlOworICAgICAgICByZXR1cm4gcGFnZU1h
cC0+YXQocGFnZUluZGV4KTsKKyAgICB9Cit9OworCitNZXRhQWxsb2NhdG9yVGVzdHM6OkhlYXBH
cm93dGhNb2RlIE1ldGFBbGxvY2F0b3JUZXN0czo6Y3VycmVudEhlYXBHcm93dGhNb2RlOworc2l6
ZV90IE1ldGFBbGxvY2F0b3JUZXN0czo6YWxsb3dBbGxvY2F0ZVBhZ2VzOworc2l6ZV90IE1ldGFB
bGxvY2F0b3JUZXN0czo6cmVxdWVzdGVkTnVtUGFnZXM7Cit1bnNpZ25lZCBNZXRhQWxsb2NhdG9y
VGVzdHM6OmFkZGl0aW9uYWxQYWdlc0luSGVhcDsKK1ZlY3Rvcjxib29sLCAwPiogTWV0YUFsbG9j
YXRvclRlc3RzOjptZW1vcnlNYXA7CitWZWN0b3I8Ym9vbCwgMD4qIE1ldGFBbGxvY2F0b3JUZXN0
czo6cGFnZU1hcDsKK2Jvb2wgTWV0YUFsbG9jYXRvclRlc3RzOjphbGxvY2F0b3JEZXN0cm95ZWQ7
CitNZXRhQWxsb2NhdG9yVGVzdHM6OlNpbXBsZVRlc3RBbGxvY2F0b3IqIE1ldGFBbGxvY2F0b3JU
ZXN0czo6YWxsb2NhdG9yOworCisvLyBSZWdyZXNzaW9uIHRlc3RzIGZvciBNZXRhQWxsb2NhdG9y
IC0gc2ltdWxhdGVzIGNhc2VzIHRoYXQgd2UndmUgc2VlbiBmYWlsIGluIHRoZQorLy8gcGFzdC4K
KworY2xhc3MgTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzIHsKK3ByaXZhdGU6Cisg
ICAgTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzKCkgeyB9CisgICAgCitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAg
ICAgICBSVU5fVEVTVChydW5UcmVlUm9vdENvcnJ1cHRpb25UZXN0KCkpOworI2VuZGlmCisgICAg
fQorCitwcml2YXRlOgorI2lmIENQVShYODZfNjQpCisgICAgY2xhc3MgTnVsbFRlc3RBbGxvY2F0
b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE51bGxUZXN0
QWxsb2NhdG9yKCkKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gbWF0Y2hlcyBG
aXhlZFZNUG9vbEFsbG9jYXRvcgorICAgICAgICB7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVT
cGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPigweDQ0MDMzOWMwMTAwMGxsdSksIDEwMjQgKiAx
MDI0ICogMTAyNCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCog
YWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQ
YWdlKHZvaWQqKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICB9OworCisgICAgc3RhdGljIHZvaWQgcnVuVHJlZVJvb3RDb3JydXB0aW9uVGVzdCgpCisgICAg
eworICAgICAgICBOdWxsVGVzdEFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAg
ICB7CisgICAgICAgICAgICBWZWN0b3I8UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCAwPiBo
YW5kbGVzOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDcz
NikpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDE1NTIw
KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMTAyNCkp
OworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDU3NikpOwor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDI5NzYpKTsKKyAg
ICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg0ODApKTsKKyAgICAg
ICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgyMjQwKSk7CisgICAgICAg
ICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoOTYpKTsKKyAgICAgICAgICAg
IGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgzNDg4KSk7CisgICAgICAgICAgICBo
YW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMzg0KSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQoNiktPnN0YXJ0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4NDQwMzc5YzAwMTAwbGx1KSk7CisgICAgICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDYpLT5zaXplSW5CeXRlcygpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KDIyNDApKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQo
OCktPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4NDQwMzM5YzA1ZDYwbGx1KSk7
CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDgpLT5zaXplSW5CeXRl
cygpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDM0ODgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaGFuZGxlcy5hdCg2KS5jbGVhcigpOworICAgICAgICAgICAgaGFuZGxlcy5hdCg4KS5jbGVh
cigpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9OworCitpbnQgbWFpbihpbnQsIGNoYXIq
KikKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKworICAgIFJVTl9TVUlURShS
ZWRCbGFja1RyZWVUZXN0czo6cnVuVGVzdHMoKSk7CisgICAgUlVOX1NVSVRFKE1ldGFBbGxvY2F0
b3JUZXN0czo6cnVuVGVzdHMoKSk7CisgICAgUlVOX1NVSVRFKE1ldGFBbGxvY2F0b3I2NGJpdFJl
Z3Jlc3Npb25UZXN0czo6cnVuVGVzdHMoKSk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2Vk
LlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0Mjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZXRhQWxsb2NhdG9yLmgiCisK
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworTWV0YUFs
bG9jYXRvckhhbmRsZTo6TWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgOiBtX2FsbG9jYXRvcihh
bGxvY2F0b3IpCisgICAgLCBtX3N0YXJ0KHN0YXJ0KQorICAgICwgbV9zaXplSW5CeXRlcyhzaXpl
SW5CeXRlcykKK3sKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKKyAgICBBU1NFUlQoc3RhcnQpOwor
ICAgIEFTU0VSVChzaXplSW5CeXRlcyk7Cit9CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRh
QWxsb2NhdG9ySGFuZGxlKCkKK3sKKyAgICBpZiAoIW1fYWxsb2NhdG9yKQorICAgICAgICByZXR1
cm47CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAg
ICBpZiAobV9zaXplSW5CeXRlcykgeworICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFn
ZU9jY3VwYW5jeShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVzKTsKKyAgICAgICAgbV9hbGxvY2F0b3It
PmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVzKTsK
KyAgICB9Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBuZXdT
aXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRl
cyk7CisgICAgCisgICAgaWYgKCFtX2FsbG9jYXRvcikgeworICAgICAgICBtX3NpemVJbkJ5dGVz
ID0gbmV3U2l6ZUluQnl0ZXM7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKworICAgIG5ld1NpemVJ
bkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJvdW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIAorICAg
IEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAo
bmV3U2l6ZUluQnl0ZXMgPT0gbV9zaXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIHVpbnRwdHJfdCBmcmVlU3RhcnQgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9z
dGFydCkgKyBuZXdTaXplSW5CeXRlczsKKyAgICBzaXplX3QgZnJlZVNpemUgPSBtX3NpemVJbkJ5
dGVzIC0gbmV3U2l6ZUluQnl0ZXM7CisgICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3RhcnQg
KyBmcmVlU2l6ZTsKKyAgICAKKyAgICB1aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2Ug
PSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKSAmIC1tX2FsbG9jYXRv
ci0+bV9wYWdlU2l6ZTsKKyAgICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBmcmVlRW5k
KQorICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJl
dF9jYXN0PHZvaWQqPihmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0
Q29tcGxldGVseUZyZWVQYWdlIC0gZnJlZVN0YXJ0KSk7CisgICAgCisgICAgbV9hbGxvY2F0b3It
PmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZShyZWludGVycHJldF9jYXN0PHZvaWQqPihm
cmVlU3RhcnQpLCBmcmVlU2l6ZSk7CisgICAgCisgICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJ
bkJ5dGVzOworfQorCitNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0
aW9uR3JhbnVsZSkKKyAgICA6IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51bGUp
CisgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXplKCkpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDAp
CisgICAgLCBtX2J5dGVzUmVzZXJ2ZWQoMCkKKyAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKKyNp
Zm5kZWYgTkRFQlVHCisgICAgLCBtX21hbGxvY0JhbGFuY2UoMCkKKyNlbmRpZgorI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgICwgbV9udW1BbGxvY2F0aW9ucygwKQorICAg
ICwgbV9udW1GcmVlcygwKQorI2VuZGlmCit7CisgICAgbV9sb2NrLkluaXQoKTsKKyAgICAKKyAg
ICBmb3IgKG1fbG9nUGFnZVNpemUgPSAwOyBtX2xvZ1BhZ2VTaXplIDwgMzI7ICsrbV9sb2dQYWdl
U2l6ZSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ1BhZ2VT
aXplID09IG1fcGFnZVNpemUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAg
QVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VT
aXplKTsKKyAgICAKKyAgICBmb3IgKG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPSAwOyBtX2xvZ0Fs
bG9jYXRpb25HcmFudWxlIDwgMzI7ICsrbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSkgeworICAgICAg
ICBpZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09
IG1fYWxsb2NhdGlvbkdyYW51bGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisg
ICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVs
ZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKTsKK30KKworTWV0YUFsbG9jYXRvcjo6fk1ldGFBbGxv
Y2F0b3IoKQoreworICAgIGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6
ZU1hcC5maXJzdCgpOyBub2RlOykgeworICAgICAgICBGcmVlU3BhY2VOb2RlKiBuZXh0ID0gbV9m
cmVlU3BhY2VTaXplTWFwLnN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VTaXpl
TWFwLnJlbW92ZShub2RlKTsKKyAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7CisgICAg
ICAgIG5vZGUgPSBuZXh0OworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX21h
bGxvY0JhbGFuY2UpOworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRs
ZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKworICAgIGlmICghc2l6ZUluQnl0ZXMpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHNpemVJbkJ5dGVzID0gcm91bmRVcChzaXplSW5C
eXRlcyk7CisgICAgCisgICAgdm9pZCogc3RhcnQgPSBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNp
emVJbkJ5dGVzKTsKKyAgICBpZiAoIXN0YXJ0KSB7CisgICAgICAgIHNpemVfdCByZXF1ZXN0ZWRO
dW1iZXJPZlBhZ2VzID0gKHNpemVJbkJ5dGVzICsgbV9wYWdlU2l6ZSAtIDEpID4+IG1fbG9nUGFn
ZVNpemU7CisgICAgICAgIHNpemVfdCBudW1iZXJPZlBhZ2VzID0gcmVxdWVzdGVkTnVtYmVyT2ZQ
YWdlczsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJP
ZlBhZ2VzKTsKKyAgICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKG51bWJlck9mUGFnZXMgPj0gcmVxdWVzdGVkTnVtYmVyT2ZQ
YWdlcyk7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgcm91bmRlZFVwU2l6ZSA9IG51bWJlck9m
UGFnZXMgPDwgbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChyb3VuZGVk
VXBTaXplID49IHNpemVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIG1fYnl0ZXNSZXNlcnZl
ZCArPSByb3VuZGVkVXBTaXplOworICAgICAgICAKKyAgICAgICAgaWYgKHJvdW5kZWRVcFNpemUg
PiBzaXplSW5CeXRlcykgeworICAgICAgICAgICAgdm9pZCogZnJlZVNwYWNlU3RhcnQgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsg
c2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgc2l6ZV90IGZyZWVTcGFjZVNpemUgPSByb3VuZGVk
VXBTaXplIC0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBhZGRGcmVlU3BhY2UoZnJlZVNwYWNl
U3RhcnQsIGZyZWVTcGFjZVNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGluY3JlbWVudFBh
Z2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVzKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkICs9
IHNpemVJbkJ5dGVzOworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1f
bnVtQWxsb2NhdGlvbnMrKzsKKyNlbmRpZgorICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFs
bG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMpKTsKK30KKworTWV0YUFsbG9j
YXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCit7Cisg
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIFN0YXRpc3RpY3MgcmVzdWx0
OworICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgcmVz
dWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7CisgICAgcmVzdWx0LmJ5dGVzQ29t
bWl0dGVkID0gbV9ieXRlc0NvbW1pdHRlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
KiBNZXRhQWxsb2NhdG9yOjpmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRl
cykKK3sKKyAgICBGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpbmRM
ZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChzaXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBBU1NFUlQobm9kZS0+a2V5ID49IHNpemVJ
bkJ5dGVzKTsKKyAgICAKKyAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAg
IAorICAgIHZvaWQqIHJlc3VsdDsKKyAgICAKKyAgICBpZiAobm9kZS0+a2V5ID09IHNpemVJbkJ5
dGVzKSB7CisgICAgICAgIC8vIEVhc3kgY2FzZTogcGVyZmVjdCBmaXQsIHNvIGp1c3QgcmVtb3Zl
IHRoZSBub2RlIGVudGlyZWx5LgorICAgICAgICByZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAg
ICAgCisgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1
ZSk7CisgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5v
ZGUtPmtleSkpOworICAgICAgICBmcmVlRnJlZVNwYWNlTm9kZShub2RlKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICAvLyBUcnkgdG8gYmUgYSBnb29kIGNpdGl6ZW4gYW5kIGVuc3VyZSB0aGF0IHRo
ZSByZXR1cm5lZCBjaHVuayBvZiBtZW1vcnkKKyAgICAgICAgLy8gc3RyYWRkbGVzIGFzIGZldyBw
YWdlcyBhcyBwb3NzaWJsZSwgYnV0IG9ubHkgaW5zb2ZhciBhcyBkb2luZyBzbyB3aWxsCisgICAg
ICAgIC8vIG5vdCBpbmNyZWFzZSBmcmFnbWVudGF0aW9uLiBUaGUgaW50dWl0aW9uIGlzIHRoYXQg
bWluaW1pemluZworICAgICAgICAvLyBmcmFnbWVudGF0aW9uIGlzIGEgc3RyaWN0bHkgaGlnaGVy
IHByaW9yaXR5IHRoYW4gbWluaW1pemluZyB0aGUgbnVtYmVyCisgICAgICAgIC8vIG9mIGNvbW1p
dHRlZCBwYWdlcywgc2luY2UgaW4gdGhlIGxvbmcgcnVuLCBzbWFsbGVyIGZyYWdtZW50YXRpb24g
bWVhbnMKKyAgICAgICAgLy8gZmV3ZXIgY29tbWl0dGVkIHBhZ2VzIGFuZCBmZXdlciBmYWlsdXJl
cyBpbiBnZW5lcmFsLgorICAgICAgICAKKyAgICAgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsK
KyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAor
ICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlvbiA9IChyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xv
Z1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9u
ID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkg
LSBzaXplSW5CeXRlcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChs
YXN0UGFnZUZvckxlZnRBbGxvY2F0aW9uIC0gZmlyc3RQYWdlICsgMSA8PSBsYXN0UGFnZSAtIGZp
cnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiArIDEpIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRl
IGluIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5v
ZGUgdG8gdGhlIHJpZ2h0LgorICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShu
b2RlLT52YWx1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXpl
SW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVz
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChu
b2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChub2RlLT52
YWx1ZSwgbm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBp
biB0aGUgcmlnaHQgc2l6ZSBvZiB0aGUgcmV0dXJuZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9k
ZSB0byB0aGUgbGVmdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVl
KSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXplSW5CeXRlczsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmVzdWx0LCBub2RlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIE1ldGFB
bGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzKQoreworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQor
ICAgIG1fbnVtRnJlZXMrKzsKKyNlbmRpZgorICAgIG1fYnl0ZXNBbGxvY2F0ZWQgLT0gc2l6ZUlu
Qnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9CisKK3ZvaWQg
TWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcykKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgbV9i
eXRlc1Jlc2VydmVkICs9IHNpemVJbkJ5dGVzOworICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6
ZUluQnl0ZXMpOworfQorCitzaXplX3QgTWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXpl
KCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OworICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgIGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9
IG1fZnJlZVNwYWNlU2l6ZU1hcC5maXJzdCgpOyBub2RlOyBub2RlID0gbV9mcmVlU3BhY2VTaXpl
TWFwLnN1Y2Nlc3Nvcihub2RlKSkKKyAgICAgICAgcmVzdWx0ICs9IG5vZGUtPmtleTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCogZW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAg
ICAKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj46Oml0ZXJhdG9yIGxlZnROZWln
aGJvciA9IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5maW5kKHN0YXJ0KTsKKyAgICBIYXNoTWFw
PHZvaWQqLCBGcmVlU3BhY2VOb2RlKj46Oml0ZXJhdG9yIHJpZ2h0TmVpZ2hib3IgPSBtX2ZyZWVT
cGFjZVN0YXJ0QWRkcmVzc01hcC5maW5kKGVuZCk7CisgICAgCisgICAgaWYgKGxlZnROZWlnaGJv
ciAhPSBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gV2UgaGF2
ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBm
cm9tIHRoZSB0cmVlLCBhbmQKKyAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5k
IGFkZHJlc3MgbWFwLgorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+
dmFsdWUpICsgbGVmdE5laWdoYm9yLT5zZWNvbmQtPmtleSkgPT0gbGVmdE5laWdoYm9yLT5maXJz
dCk7CisgICAgICAgIAorICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWln
aGJvci0+c2Vjb25kOworICAgICAgICAKKyAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5v
ZGUtPnZhbHVlOworICAgICAgICBzaXplX3QgbGVmdFNpemUgPSBsZWZ0Tm9kZS0+a2V5OworICAg
ICAgICB2b2lkKiBsZWZ0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQobGVmdEVuZCA9PSBzdGFydCk7CisgICAgICAgIAorICAgICAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAucmVtb3ZlKGxlZnROb2RlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNz
TWFwLnJlbW92ZShsZWZ0RW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB0
aGVyZSBpcyBhbHNvIHNvbWV0aGluZyB0byBjb2FsZXNjZSB3aXRoIG9uIHRoZSByaWdodC4KKyAg
ICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5k
KCkpIHsKKyAgICAgICAgICAgIC8vIEZyZWVpbmcgc29tZXRoaW5nIGluIHRoZSBtaWRkbGUgb2Yg
ZnJlZSBibG9ja3MuIENvYWxlc2NlIGJvdGggbGVmdCBhbmQKKyAgICAgICAgICAgIC8vIHJpZ2h0
LCB3aGlsc3QgcmVtb3ZpbmcgdGhlIHJpZ2h0IG5laWdoYm9yIGZyb20gdGhlIG1hcHMuCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT5zZWNvbmQtPnZhbHVl
ID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJl
ZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAg
ICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAg
c2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmln
aHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBB
U1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVm
dFNpemUgKyBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7Cisg
ICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7
CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJpZ2h0RW5kKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUocmlnaHROb2RlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVmdE5vZGUtPmtleSArPSBzaXplSW5CeXRlcyAr
IHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFw
Lmluc2VydChsZWZ0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAu
YWRkKHJpZ2h0RW5kLCBsZWZ0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBs
ZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBsZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBDYW5ub3QgY29hbGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlm
IHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0
TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAg
ICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAg
ICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAg
ICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdodE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZv
aWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgQVNTRVJUKHJpZ2h0U3RhcnQgPT0gZW5kKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVT
RUQocmlnaHRFbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0
Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmln
aHRTdGFydCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNp
emVJbkJ5dGVzOworICAgICAgICAgICAgcmlnaHROb2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7
CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0
Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxl
c2NlIHdpdGgsIHNvIGNyZWF0ZSBhIG5ldyBmcmVlIHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNw
YWNlTm9kZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5rZXkgPSBzaXplSW5C
eXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIG5vZGUpOworICAgICAgICAgICAg
bV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChlbmQsIG5vZGUpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCog
YWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2Ug
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsK
KyAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFk
ZHJlc3MpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZv
ciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkg
eworICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1f
cGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOworICAgICAgICBpZiAoaXRlciA9PSBtX3BhZ2VP
Y2N1cGFuY3lNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQo
cGFnZSwgMSk7CisgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7Cisg
ICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8
IG1fbG9nUGFnZVNpemUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT5zZWNv
bmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3Vw
YW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90
IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xv
Z1BhZ2VTaXplOworICAgIHVpbnRwdHJfdCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4oYWRkcmVzcykgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7Cisg
ICAgCisgICAgZm9yICh1aW50cHRyX3QgcGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFn
ZTsgKytwYWdlKSB7CisgICAgICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRv
ciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFwLmZpbmQocGFnZSk7CisgICAgICAgIEFTU0VSVChp
dGVyICE9IG1fcGFnZU9jY3VwYW5jeU1hcC5lbmQoKSk7CisgICAgICAgIGlmICghLS0oaXRlci0+
c2Vjb25kKSkgeworICAgICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsK
KyAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQgLT0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAg
IG5vdGlmeVBhZ2VJc0ZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1Bh
Z2VTaXplKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpy
b3VuZFVwKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0
czxzaXplX3Q+OjptYXgoKSAtIG1fYWxsb2NhdGlvbkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisg
ICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIChzaXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdy
YW51bGUgLSAxKSAmIC1tX2FsbG9jYXRpb25HcmFudWxlOworfQorCitNZXRhQWxsb2NhdG9yOjpG
cmVlU3BhY2VOb2RlKiBNZXRhQWxsb2NhdG9yOjphbGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lm
bmRlZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBz
dGF0aWNfY2FzdDxGcmVlU3BhY2VOb2RlKj4oZmFzdE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9k
ZSkpKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3Bh
Y2VOb2RlKiBub2RlKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsK
KyNlbmRpZgorICAgIGZhc3RGcmVlKG5vZGUpOworfQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NB
VE9SX1BST0ZJTEUpCit2b2lkIE1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBw
cmludGYoIm51bSBhbGxvY2F0aW9ucyA9ICV1LCBudW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxv
Y2F0aW9ucywgbV9udW1GcmVlcyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3Jf
aAorI2RlZmluZSBXVEZfTWV0YUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UGFnZUJsb2NrLmg+CisjaW5jbHVkZSA8d3RmL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9U
Q1NwaW5Mb2NrLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIEVOQUJMRV9NRVRBX0FM
TE9DQVRPUl9QUk9GSUxFIDAKKworY2xhc3MgTWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTWV0YUFsbG9jYXRvcik7CitwdWJsaWM6CisgICAgCisgICAgTWV0YUFsbG9j
YXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpOworICAgIAorICAgIHZpcnR1YWwgfk1ldGFB
bGxvY2F0b3IoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFs
bG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTm9uLWF0b21pYyBtZXRo
b2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHNpemVfdCBieXRlc0Fs
bG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNS
ZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQorICAgIHNpemVfdCBieXRlc0Nv
bW1pdHRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNDb21taXR0ZWQ7IH0KKyAgICAKKyAgICAvLyBBdG9t
aWMgbWV0aG9kIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHN0cnVjdCBT
dGF0aXN0aWNzIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkOworICAgICAgICBzaXpl
X3QgYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkOworICAgIH07
CisgICAgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpOworCisgICAgLy8gQWRkIG1vcmUg
ZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQorICAg
IC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Ig
d2l0aGluIGEKKyAgICAvLyBmaXhlZCBwb29sLgorICAgIHZvaWQgYWRkRnJlc2hGcmVlU3BhY2Uo
dm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBUaGlzIGlzIG1lYW50
IG9ubHkgZm9yIGltcGxlbWVudGluZyB0ZXN0cy4gTmV2ZXIgY2FsbCB0aGlzIGluIHJlbGVhc2UK
KyAgICAvLyBidWlsZHMuCisgICAgc2l6ZV90IGRlYnVnRnJlZVNwYWNlU2l6ZSgpOworICAgIAor
I2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUo
KTsKKyNlbHNlCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFjZSwgYnV0IGRvbid0IGNv
bW1pdC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKKyAgICAvLyBwYWdlcyB0aGFuIHdlIGFza2VkLCBp
biB3aGljaCBjYXNlIG51bVBhZ2VzIGlzIGNoYW5nZWQuCisgICAgdmlydHVhbCB2b2lkKiBhbGxv
Y2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpID0gMDsKKyAgICAKKyAgICAvLyBDb21taXQg
YSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSA9IDA7
CisgICAgCisgICAgLy8gVW5jb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQ
YWdlSXNGcmVlKHZvaWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBOT1RFOiBub25lIG9mIHRo
ZSBhYm92ZSBtZXRob2RzIGFyZSBjYWxsZWQgZHVyaW5nIGFsbG9jYXRvcgorICAgIC8vIGRlc3Ry
dWN0aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9u
ZworICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCisKK3ByaXZh
dGU6CisgICAgCisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CisgICAgCisg
ICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJlZTsKKyAgICB0eXBlZGVm
IFRyZWU6Ok5vZGUgRnJlZVNwYWNlTm9kZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgZnJlZSBzcGFj
ZSBmcm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyB0aGUgYWxs
b2NhdGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKKyAgICAv
LyByZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBpbi11c2UuCisgICAgdm9pZCogZmluZEFuZFJlbW92
ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQg
d2hlbiBtZW1vcnkgZnJvbSBhbiBhbGxvY2F0aW9uIGlzIGZyZWVkLgorICAgIHZvaWQgYWRkRnJl
ZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMp
OworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBh
ZGRpbmcgZnJlZSBzcGFjZTsgaXQKKyAgICAvLyBpcyBjYWxsZWQgZnJvbSBib3RoIGFkZEZyZWVT
cGFjZUZyb21SZWxlYXNlZEhhbmRsZSBhbmQgZnJvbQorICAgIC8vIGFkZEZyZXNoRnJlZVNwYWNl
LgorICAgIHZvaWQgYWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMp
OworICAgIAorICAgIC8vIE1hbmFnZW1lbnQgb2YgdXNlZCBzcGFjZS4KKyAgICAKKyAgICB2b2lk
IGluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVz
KTsKKyAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90
IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBVdGlsaXRpZXMuCisgICAgCisgICAgc2l6ZV90
IHJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBGcmVlU3BhY2VOb2RlKiBh
bGxvY0ZyZWVTcGFjZU5vZGUoKTsKKyAgICB2b2lkIGZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFj
ZU5vZGUqKTsKKyAgICAKKyAgICBzaXplX3QgbV9hbGxvY2F0aW9uR3JhbnVsZTsKKyAgICB1bnNp
Z25lZCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlOworICAgIHNpemVfdCBtX3BhZ2VTaXplOworICAg
IHVuc2lnbmVkIG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgVHJlZSBtX2ZyZWVTcGFjZVNpemVN
YXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRB
ZGRyZXNzTWFwOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFj
ZUVuZEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD4gbV9wYWdlT2Nj
dXBhbmN5TWFwOworICAgIAorICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVf
dCBtX2J5dGVzUmVzZXJ2ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgCisg
ICAgU3BpbkxvY2sgbV9sb2NrOworCisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX21hbGxv
Y0JhbGFuY2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQor
ICAgIHVuc2lnbmVkIG1fbnVtQWxsb2NhdGlvbnM7CisgICAgdW5zaWduZWQgbV9udW1GcmVlczsK
KyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBXVEZfTWV0YUFs
bG9jYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21w
dXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JIYW5kbGVfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9j
YXRvckhhbmRsZV9oCisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgTWV0YUFsbG9jYXRvcjsKKworY2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTog
cHVibGljIFJlZkNvdW50ZWQ8TWV0YUFsbG9jYXRvckhhbmRsZT4geworcHJpdmF0ZToKKyAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzKTsKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKHZvaWQqIHN0YXJ0LCBz
aXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgICAgIDogbV9hbGxvY2F0b3IoMCkKKyAgICAgICAgLCBt
X3N0YXJ0KHN0YXJ0KQorICAgICAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAg
eworICAgICAgICBBU1NFUlQoc3RhcnQpOworICAgIH0KKyAgICAKK3B1YmxpYzoKKyAgICB+TWV0
YUFsbG9jYXRvckhhbmRsZSgpOworICAgIAorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IGNyZWF0ZVNlbGZNYW5hZ2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxv
Y2F0b3JIYW5kbGUoc3RhcnQsIHNpemVJbkJ5dGVzKSk7CisgICAgfQorICAgIAorICAgIHZvaWQq
IHN0YXJ0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3N0YXJ0OworICAgIH0KKyAgICAKKyAg
ICB2b2lkKiBlbmQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N0YXJ0KSArIG1fc2l6ZUluQnl0ZXMp
OworICAgIH0KKyAgICAgICAgCisgICAgc2l6ZV90IHNpemVJbkJ5dGVzKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOworICAgIH0KKyAgICAgICAgCisgICAgdm9pZCBzaHJp
bmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBib29sIGlzTWFuYWdlZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gISFtX2FsbG9jYXRvcjsKKyAgICB9CisgICAgICAgIAorICAg
IE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvcigpCisgICAgeworICAgICAgICBBU1NFUlQobV9hbGxv
Y2F0b3IpOworICAgICAgICByZXR1cm4gbV9hbGxvY2F0b3I7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvcjsKKyAgICAKKyAgICBNZXRhQWxsb2Nh
dG9yKiBtX2FsbG9jYXRvcjsKKyAgICB2b2lkKiBtX3N0YXJ0OworICAgIHNpemVfdCBtX3NpemVJ
bkJ5dGVzOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUmVkQmxhY2tUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBCYXNlZCBvbiBSZWQtQmxhY2sgdHJlZSBpbXBsZW1lbnRhdGlvbiBieSBFbWluIE1hcnRpbmlh
bgorICogLSBodHRwOi8vd3d3Lm1pdC5lZHUvfmVtaW4vc291cmNlX2NvZGUvaW5kZXguaHRtbCAg
ICAgICAgIAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUmVkQmxhY2tUcmVlX2gKKyNkZWZpbmUgUmVkQmxhY2tUcmVlX2gKKwor
I2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJl
ZSB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Yg
bm9kZXMgaW4gdGhlIHRyZWUgaXMgZW50aXJlbHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlv
dSBhcmUgaW4gcG9zc2Vzc2lvbiBvZiBhIHBvaW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0
ZQorLy8gICBpdCBmcm9tIHRoZSB0cmVlLiBUaGUgdHJlZSB3aWxsIHN1YnNlcXVlbnRseSBubyBs
b25nZXIgaGF2ZSBhCisvLyAgIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUuCisvLyAtIFRoZSBrZXkg
dHlwZSBtdXN0IGltcGxlbWVudCBvcGVyYXRvcjwgYW5kID09LgorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+CitjbGFzcyBSZWRCbGFja1RyZWUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFJlZEJsYWNrVHJlZSk7CitwdWJsaWM6CisgICAgY2xhc3Mg
UmF3Tm9kZSB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWRCbGFja1RyZWU7CisgICAgICAgIAor
ICAgICAgICAvLyBOT1RFOiB0aGVzZSBtZXRob2RzIHNob3VsZCBwYWNrIHRoZSBwYXJlbnQgYW5k
IHJlZCBpbnRvIGEgc2luZ2xlCisgICAgICAgIC8vIHdvcmQuIEJ1dCBkb2luZyBzbyBhcHBlYXJz
IHRvIHJldmVhbCBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIuCisgICAgICAgIFJhd05vZGUqIHBhcmVu
dCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogc2V0UGFyZW50KFJhd05vZGUqIG5ld1Bh
cmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50ID0gbmV3UGFyZW50
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzUmVkKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcmVkOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIHNldFJlZChib29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9yZWQgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSog
bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiBtX3JpZ2h0OworICAgICAgICBSYXdOb2RlKiBtX3Bh
cmVudDsKKyAgICAgICAgYm9vbCBtX3JlZDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIE5vZGU6
IHB1YmxpYyBSYXdOb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEtleVR5cGUga2V5OworICAg
ICAgICBWYWx1ZVR5cGUgdmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUoKQor
ICAgIHsKKyAgICAgICAgbV9uaWxTZW50aW5lbC5zZXRQYXJlbnQoJm1fbmlsU2VudGluZWwpOwor
ICAgICAgICBtX25pbFNlbnRpbmVsLm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBt
X25pbFNlbnRpbmVsLm1fcmlnaHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50
aW5lbC5zZXRSZWQoZmFsc2UpOworICAgICAgICAKKyAgICAgICAgbV9yb290LnNldFBhcmVudCgm
bV9uaWxTZW50aW5lbCk7CisgICAgICAgIG1fcm9vdC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsK
KyAgICAgICAgbV9yb290Lm1fcmlnaHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290
LnNldFJlZChmYWxzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KE5vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpbnNlcnRIZWxwKG5vZGUpOworCisgICAgICAgIFJhd05vZGUqIHgg
PSBub2RlOworICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICAKKyAgICAgICAgeC0+c2V0UmVk
KHRydWUpOworICAgICAgICB3aGlsZSAoeC0+cGFyZW50KCktPmlzUmVkKCkpIHsKKyAgICAgICAg
ICAgIGlmICh4LT5wYXJlbnQoKSA9PSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdCkgewor
ICAgICAgICAgICAgICAgIHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAg
ICAgICAgICAgICAgaWYgKHktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFy
ZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRy
dWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBh
cmVudCgpLT5tX3JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2Up
OworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgp
KTsKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICB5ID0geC0+cGFyZW50KCktPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAg
aWYgKHktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJl
ZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAg
ICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xl
ZnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAg
ICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAg
ICAgICAgIH0gCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdCgpLT5tX2xl
ZnQtPnNldFJlZChmYWxzZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVs
KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgfQor
ICAgIAorICAgIE5vZGUqIHJlbW92ZShOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSog
eTsKKyAgICAgICAgUmF3Tm9kZSogeDsKKworICAgICAgICB5ID0gKHotPm1fbGVmdCA9PSBuaWxT
ZW50aW5lbCgpIHx8IHotPm1fcmlnaHQgPT0gbmlsU2VudGluZWwoKSkgPyB6IDogc3VjY2Vzc29y
SW50ZXJuYWwoeik7CisgICAgICAgIHggPSB5LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSA/IHkt
Pm1fcmlnaHQgOiB5LT5tX2xlZnQ7CisgICAgICAgIGlmIChyb290KCkgPT0geC0+c2V0UGFyZW50
KHktPnBhcmVudCgpKSkKKyAgICAgICAgICAgIHJvb3QoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAg
ICAgICAgICAgIHktPnBhcmVudCgpLT5tX2xlZnQgPSB4OworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHktPnBhcmVudCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoeSAhPSB6KSB7CisgICAgICAgICAgICBBU1NFUlQoeSAhPSBuaWxTZW50aW5lbCgpKTsK
KworICAgICAgICAgICAgaWYgKCF5LT5pc1JlZCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZp
eFVwKHgpOworICAKKyAgICAgICAgICAgIHktPm1fbGVmdCA9IHotPm1fbGVmdDsKKyAgICAgICAg
ICAgIHktPm1fcmlnaHQgPSB6LT5tX3JpZ2h0OworICAgICAgICAgICAgeS0+c2V0UGFyZW50KHot
PnBhcmVudCgpKTsKKyAgICAgICAgICAgIHktPnNldFJlZCh6LT5pc1JlZCgpKTsKKyAgICAgICAg
ICAgIHotPm1fbGVmdC0+c2V0UGFyZW50KHotPm1fcmlnaHQtPnNldFBhcmVudCh5KSk7CisgICAg
ICAgICAgICBpZiAoeiA9PSB6LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgICAgIHot
PnBhcmVudCgpLT5tX2xlZnQgPSB5OyAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB6LT5wYXJlbnQoKS0+bV9yaWdodCA9IHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBpZiAoIXktPmlzUmVkKCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAoeCk7CisgICAg
ICAgIH0KKyAgCisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAgQVNT
RVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKworICAgICAgICByZXR1cm4gejsKKyAgICB9
CisgICAgCisgICAgTm9kZSogZmlyc3QoKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogbm9kZSA9
IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBS
YXdOb2RlKiBuZXh0ID0gbm9kZS0+bV9sZWZ0OworICAgICAgICAgICAgaWYgKG5leHQgPT0gbmls
U2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKG5vZGUpOworICAgICAg
ICAgICAgbm9kZSA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogbGFz
dCgpCisgICAgeworICAgICAgICBSYXdOb2RlKiBub2RlID0gcm9vdCgpLT5tX2xlZnQ7CisgICAg
ICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5t
X3JpZ2h0OworICAgICAgICAgICAgaWYgKG5leHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYXNOb2RlKG5vZGUpOworICAgICAgICAgICAgbm9kZSA9IG5leHQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogc3VjY2Vzc29yKE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBSYXdOb2RlKiByZXN1bHQgPSBzdWNjZXNzb3JJbnRlcm5hbChub2RlKTsK
KyAgICAgICAgaWYgKHJlc3VsdCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBhc05vZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogcHJlZGVjZXNzb3IoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHggPSBu
b2RlOworICAgICAgICBSYXdOb2RlKiB5OworCisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9
ICh5ID0geC0+bV9sZWZ0KSkgeworICAgICAgICAgICAgd2hpbGUgKHktPm1fcmlnaHQgIT0gbmls
U2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICB5ID0geS0+bV9yaWdodDsKKyAgICAgICAgICAg
IHJldHVybiBhc05vZGUoeSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHkgPSB4LT5w
YXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKHggPT0geS0+bV9sZWZ0KSB7IAorICAgICAgICAgICAg
aWYgKHkgPT0gcm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAg
eCA9IHk7CisgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHkgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBy
ZXR1cm4gYXNOb2RlKHkpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaW5kRXhhY3QoY29uc3Qg
S2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IHJvb3QoKS0+bV9sZWZ0
OworICAgICAgICBpZiAoeCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHdoaWxlICghKGFzTm9kZSh4KS0+a2V5ID09IGtleSkpIHsKKyAgICAgICAgICAg
IGlmIChhc05vZGUoeCktPmtleSA+IGtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAg
ICAgICAgICAgaWYgKHggPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKHgpOworICAgIH0KKyAgICAKKyAg
ICBOb2RlKiByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgTm9kZSog
cmVzdWx0ID0gZmluZEV4YWN0KGtleSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAgICB9CisgICAg
CisgICAgTm9kZSogZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtl
eSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAg
ICAgICAgUmF3Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNl
bnRpbmVsKCkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlm
IChhc05vZGUoY3VycmVudCktPmtleSA8IGtleSkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC0+bV9yaWdodDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJl
c3QgPSBjdXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsK
KyAgICB9CisgICAgCisgICAgTm9kZSogZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0
IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCkt
Pm1fbGVmdDsKKyAgICAgICAgUmF3Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJy
ZW50ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCkt
PmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAg
ICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA8IGtleSkgeworICAgICAgICAgICAg
ICAgIGJlc3QgPSBjdXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5t
X2xlZnQ7CisgICAgICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1
cnJlbnQtPm1fcmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBPKG4pIG9wZXJhdGlvbi4KKyAgICBzaXpl
X3Qgc2l6ZSgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9y
IChOb2RlKiBjdXJyZW50ID0gZmlyc3QoKTsgY3VycmVudDsgY3VycmVudCA9IHN1Y2Nlc3Nvcihj
dXJyZW50KSkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJvb2wg
aXNFbXB0eSgpCisgICAgeworICAgICAgICByZXR1cm4gcm9vdCgpLT5tX2xlZnQgPT0gbmlsU2Vu
dGluZWwoKTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgY2hlY2tDb25z
aXN0ZW5jeSgpCisgICAgeworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAg
ICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgICAgIGNoZWNrQ29uc2lz
dGVuY3lSZWN1cnNlKHJvb3QoKS0+bV9sZWZ0KTsKKyAgICAgICAgQVNTRVJUKHJvb3QoKS0+bV9y
aWdodCA9PSBuaWxTZW50aW5lbCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKCkKKyAg
ICB7CisgICAgICAgIHByaW50ZigiVHJlZSBhdCAlcDpcbiIsIHRoaXMpOworICAgICAgICBkdW1w
UmVjdXJzZShyb290KCktPm1fbGVmdCk7CisgICAgICAgIHByaW50ZigiICAgcm9vdDogJXAsICVw
LCAlcFxuIiwgcm9vdCgpLT5tX2xlZnQsIHJvb3QoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocm9vdCgpLT5wYXJlbnRBbmRSZWQpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgbmls
OiAlcCwgJXAsICVwXG4iLCBuaWxTZW50aW5lbCgpLT5tX2xlZnQsIG5pbFNlbnRpbmVsKCktPm1f
cmlnaHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5pbFNlbnRpbmVsKCktPnBhcmVudEFuZFJl
ZCkpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgbGVmdFJvdGF0ZShSYXdO
b2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKworICAgICAgICB5ID0geC0+bV9y
aWdodDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHktPm1fbGVmdDsKKworICAgICAgICBpZiAoeS0+
bV9sZWZ0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICB5LT5tX2xlZnQtPnNldFBhcmVu
dCh4KTsKKyAgCisgICAgICAgIHktPnNldFBhcmVudCh4LT5wYXJlbnQoKSk7CisKKyAgICAgICAg
aWYgKHggPT0geC0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5t
X2xlZnQgPSB5OworICAgICAgICBlbHNlCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9yaWdo
dCA9IHk7CisgICAgICAgIHktPm1fbGVmdCA9IHg7CisgICAgICAgIHgtPnNldFBhcmVudCh5KTsK
KworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHJpZ2h0Um90YXRlKFJhd05vZGUqIHkpCisgICAgeworICAgICAgICBSYXdOb2Rl
KiB4OworCisgICAgICAgIHggPSB5LT5tX2xlZnQ7CisgICAgICAgIHktPm1fbGVmdCA9IHgtPm1f
cmlnaHQ7CisKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0geC0+bV9yaWdodCkKKyAgICAg
ICAgICAgIHgtPm1fcmlnaHQtPnNldFBhcmVudCh5KTsKKworICAgICAgICB4LT5zZXRQYXJlbnQo
eS0+cGFyZW50KCkpOworICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAg
ICAgICAgICAgeS0+cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHktPnBhcmVudCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHk7Cisg
ICAgICAgIHktPnNldFBhcmVudCh4KTsKKworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCkt
PmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEhlbHAoTm9kZSogeikKKyAg
ICB7CisgICAgICAgIFJhd05vZGUqIHg7CisgICAgICAgIFJhd05vZGUqIHk7CisgIAorICAgICAg
ICB6LT5tX2xlZnQgPSB6LT5tX3JpZ2h0ID0gbmlsU2VudGluZWwoKTsKKyAgICAgICAgeSA9IHJv
b3QoKTsKKyAgICAgICAgeCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICB3aGlsZSAoeCAhPSBu
aWxTZW50aW5lbCgpKSB7CisgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIGlmICh6LT5r
ZXkgPCBhc05vZGUoeCktPmtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICB9
CisgICAgICAgIHotPnNldFBhcmVudCh5KTsKKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpIHx8IHot
PmtleSA8IGFzTm9kZSh5KS0+a2V5KQorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gejsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgeS0+bV9yaWdodCA9IHo7CisKKyAgICAgICAgQVNTRVJUKCFu
aWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogc3VjY2Vz
c29ySW50ZXJuYWwoUmF3Tm9kZSogeCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAg
ICAgIAorICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSAoeSA9IHgtPm1fcmlnaHQpKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoeS0+bV9sZWZ0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAg
ICAgICAgeSA9IHktPm1fbGVmdDsKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB5ID0geC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlICh4ID09IHkt
Pm1fcmlnaHQpIHsKKyAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHktPnBhcmVu
dCgpOworICAgICAgICB9CisgICAgICAgIGlmICh5ID09IHJvb3QoKSkKKyAgICAgICAgICAgIHJl
dHVybiBuaWxTZW50aW5lbCgpOworICAgICAgICByZXR1cm4geTsKKyAgICB9CisgICAgCisgICAg
dm9pZCByZW1vdmVGaXhVcChSYXdOb2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogcmVh
bFJvb3QgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3Tm9kZSogdzsKKyAgICAgICAgCisg
ICAgICAgIHdoaWxlICgheC0+aXNSZWQoKSAmJiByZWFsUm9vdCAhPSB4KSB7CisgICAgICAgICAg
ICBpZiAoeCA9PSB4LT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgdyA9IHgt
PnBhcmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+
cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4
LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdo
dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5p
c1JlZCgpICYmICF3LT5tX2xlZnQtPmlzUmVkKCkpIHsgCisgICAgICAgICAgICAgICAgICAgIHct
PnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdo
dC0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQo
ZmFsc2UpOworICAgICAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgdy0+c2V0UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAg
ICAgIHctPm1fcmlnaHQtPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGxlZnRS
b3RhdGUoeC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3
ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAody0+aXNSZWQoKSkg
eworICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAg
ICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICByaWdo
dFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQo
KS0+bV9sZWZ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1f
cmlnaHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAg
ICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50
KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3
LT5tX2xlZnQtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHctPm1fcmlnaHQt
PnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHcpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIHctPm1fbGVmdC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
cmlnaHRSb3RhdGUoeC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJv
b3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHgtPnNldFJlZChmYWxzZSk7CisKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOwor
ICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyNp
Zm5kZWYgTkRFQlVHCisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShSYXdOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKG5vZGUtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIEFT
U0VSVCghbm9kZS0+bV9sZWZ0LT5pc1JlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+
bV9yaWdodC0+aXNSZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJl
Y3Vyc2Uobm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uobm9k
ZS0+bV9yaWdodCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcFJlY3Vyc2UoUmF3Tm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIHByaW50ZigiICAgbm9kZTogJXBcbiIsIG5vZGUpOworICAg
ICAgICBwcmludGYoIiAgICAgIGNvbG9yID0gJXNcbiIsIG5vZGUtPmlzUmVkKCkgPyAicmVkIiA6
ICJibGFjayIpOworICAgICAgICBwcmludGYoIiAgICAgIGxlZnQgID0gJXBcbiIsIG5vZGUtPm1f
bGVmdCk7CisgICAgICAgIHByaW50ZigiICAgICAgcmlnaHQgPSAlcFxuIiwgbm9kZS0+bV9yaWdo
dCk7CisgICAgICAgIGR1bXBSZWN1cnNlKG5vZGUtPm1fbGVmdCk7CisgICAgICAgIGR1bXBSZWN1
cnNlKG5vZGUtPm1fcmlnaHQpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIFJhd05vZGUqIHJv
b3QoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX3Jvb3Q7CisgICAgfQorICAgIAorICAgIFJh
d05vZGUqIG5pbFNlbnRpbmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9uaWxTZW50aW5l
bDsKKyAgICB9CisgICAgCisgICAgTm9kZSogYXNOb2RlKFJhd05vZGUqIHJhd05vZGUpCisgICAg
eworICAgICAgICBBU1NFUlQocmF3Tm9kZSAhPSByb290KCkpOworICAgICAgICBBU1NFUlQocmF3
Tm9kZSAhPSBuaWxTZW50aW5lbCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGUq
PihyYXdOb2RlKTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSBtX3Jvb3Q7CisgICAgUmF3Tm9k
ZSBtX25pbFNlbnRpbmVsOworfTsKKworfQorCisjZW5kaWYKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi93dGYucHJpCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBTT1VSQ0VTICs9
IFwKICAgICB3dGYvSGFzaFRhYmxlLmNwcCBcCiAgICAgd3RmL01ENS5jcHAgXAogICAgIHd0Zi9N
YWluVGhyZWFkLmNwcCBcCisgICAgd3RmL01ldGFBbGxvY2F0b3IuY3BwIFwKICAgICB3dGYvTnVs
bFB0ci5jcHAgXAogICAgIHd0Zi9PU1JhbmRvbVNvdXJjZS5jcHAgXAogICAgIHd0Zi9xdC9NYWlu
VGhyZWFkUXQuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3Bw
CShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwdWJsaWM6CiAgICAgICAg
IGJhY2t0cmFjaygpOwogCiAgICAgICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAg
ICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxEYXRh
LT5yZWdleEFsbG9jYXRvcik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqZ2xvYmFs
RGF0YSwgdGhpcyk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMo
bGlua0J1ZmZlcik7CiAgICAgICAgIGppdE9iamVjdC5zZXQobGlua0J1ZmZlci5maW5hbGl6ZUNv
ZGUoKSk7CiAgICAgICAgIGppdE9iamVjdC5zZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDk0MTA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02NSwxMSArNjUsMTEgQEAgcHVibGljOgogCiAgICAgaW50IGV4ZWN1dGUoY29uc3QgVUNoYXIq
IGlucHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5t
X2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CiAg
ICAgfQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIHZvaWQgKmdldEFkZHIoKSB7
IHJldHVybiBtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQorICAgIHZvaWQgKmdl
dEFkZHIoKSB7IHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2Vu
ZGlmCiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0
MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDIwIEBACisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgVGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3Vs
dCB0byBmcmVlIGluZGl2aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAg
SW50cm9kdWNlZCBhIGJlc3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhl
IGFsbG9jYXRvcgorICAgICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5v
dCBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBv
ZiBpbmRpdmlkdWFsIG5vZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtl
eSk7IG5laXRoZXIgQVZMVHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0
ZWQgdGhpcy4KKyAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNv
ZGUgdG8gdXNlIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAg
ICogRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDogQWRkZWQuCisK
IDIwMTEtMDgtMjkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnppcCBpbml0aWFsaXphdGlvbiBsaXN0cyBhbmQgY29uc3RydWN0b3JzIGluIEpT
Q2VsbCBoaWVyYXJjaHkgKDMvNykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJk
aW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRs
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFk
ZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2Vz
IGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1
dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NjM2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJlc3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFs
bG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAgICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUg
dGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0
aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5vZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5
CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZMVHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNr
VHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBl
eGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxl
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgc2luY2UgYmVoYXZpb3IgaXMgbm90IGNoYW5nZWQu
CisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5o
OiBBZGRlZC4KKwogMjAxMS0wOC0zMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIHJlZmFjdG9yIGJveC1vcmRpbmFsLWdyb3VwIGhhbmRsaW5nIHNvIHdlIGRvbid0
IHRpbWVvdXQgb24gbGFyZ2UgdmFsdWVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5n
SGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgo=
</data>
<flag name="commit-queue"
          id="101939"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105731</attachid>
            <date>2011-08-30 20:14:32 -0700</date>
            <delta_ts>2011-09-01 15:45:34 -0700</delta_ts>
            <desc>the patch - fix more style, build systems</desc>
            <filename>metaalloc_patch_15.diff</filename>
            <type>text/plain</type>
            <size>229777</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxNDYpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQ4IEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHRlc3RzL3VuaXQ6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcDogQWRkZWQuCisgICAg
ICAgIChwcmludFZhbHVlKToKKyAgICAgICAgKGFzc2VydEVxdWFsSW1wbCk6CisgICAgICAgIChS
ZWRCbGFja1RyZWVUZXN0czo6UmVkQmxhY2tUcmVlVGVzdHMpOgorICAgICAgICAoUmVkQmxhY2tU
cmVlVGVzdHM6OnJ1blRlc3RzKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpQ
YWlyKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcj09KToKKyAg
ICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpQYWlyOjpvcGVyYXRvcjwpOgorICAgICAgICAoUmVk
QmxhY2tUcmVlVGVzdHM6OmZpbmRFeGFjdCk6CisgICAgICAgIChSZWRCbGFja1RyZWVUZXN0czo6
cmVtb3ZlKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjpmaW5kTGVhc3RHcmVhdGVyVGhh
bk9yRXF1YWwpOgorICAgICAgICAoUmVkQmxhY2tUcmVlVGVzdHM6OmFzc2VydEZvdW5kQW5kUmVt
b3ZlKToKKyAgICAgICAgKFJlZEJsYWNrVHJlZVRlc3RzOjphc3NlcnRFcXVhbCk6CisgICAgICAg
IChSZWRCbGFja1RyZWVUZXN0czo6YXNzZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAgIChS
ZWRCbGFja1RyZWVUZXN0czo6dGVzdERyaXZlcik6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVz
dHM6Ok1ldGFBbGxvY2F0b3JUZXN0cyk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnJ1
blRlc3RzKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdE5vdGhpbmcpOgorICAg
ICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0QWxsb2NaZXJvKToKKyAgICAgICAgKE1ldGFB
bGxvY2F0b3JUZXN0czo6dGVzdE9uZUFsbG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0
czo6dGVzdFJlcGVhdEFsbG9jRnJlZSk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRl
c3RTaW1wbGVGdWxsQ29hbGVzY2UpOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZXN0
RklGT0FsbG9jKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdEZpbGxIZWFwKToK
KyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVzdFJpZ2h0QWxsb2NhdGlvbik6CisgICAg
ICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRlc3RCZXN0Rml0KToKKyAgICAgICAgKE1ldGFBbGxv
Y2F0b3JUZXN0czo6dGVzdFNocmluayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OnRl
c3REZW1hbmRBbGxvY0NvYWxlc2NlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6dGVz
dERlbWFuZEFsbG9jRG9udENvYWxlc2NlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6
c2V0VXApOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjp0ZWFyRG93bik6CisgICAgICAg
IChNZXRhQWxsb2NhdG9yVGVzdHM6OmFsbG9jYXRlKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JU
ZXN0czo6ZnJlZSk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6Om5vdGlmeUZyZWUpOgor
ICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChNZXRh
QWxsb2NhdG9yVGVzdHM6OmNvbmZpcm0pOgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpj
b25maXJtSGlnaFdhdGVybWFyayk6CisgICAgICAgIChNZXRhQWxsb2NhdG9yVGVzdHM6OmJ5dGVz
QWxsb2NhdGVkKToKKyAgICAgICAgKE1ldGFBbGxvY2F0b3JUZXN0czo6Ynl0ZXNDb21taXR0ZWQp
OgorICAgICAgICAoTWV0YUFsbG9jYXRvclRlc3RzOjpieXRlU3RhdGUpOgorICAgICAgICAoTWV0
YUFsbG9jYXRvclRlc3RzOjpwYWdlU3RhdGUpOgorICAgICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0
UmVncmVzc2lvblRlc3RzOjpNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHMpOgorICAg
ICAgICAoTWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzOjpydW5UZXN0cyk6CisgICAg
ICAgIChNZXRhQWxsb2NhdG9yNjRiaXRSZWdyZXNzaW9uVGVzdHM6OnJ1blRyZWVSb290Q29ycnVw
dGlvblRlc3QpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0NNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6
Ok1ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSk6CisgICAgICAgIChX
VEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGU6OnNocmluayk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3I6Ok1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjp+TWV0
YUFsbG9jYXRvcik6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MpOgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjpmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3BhY2UpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUpOgorICAgICAgICAoV1RGOjpNZXRh
QWxsb2NhdG9yOjphZGRGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpp
bmNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVj
cmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OnJvdW5k
VXApOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY0ZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZSk6CisgICAgICAg
IChXVEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKToKKyAgICAgICAgKiB3dGYvTWV0YUFs
bG9jYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNBbGxv
Y2F0ZWQpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc1Jlc2VydmVkKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNDb21taXR0ZWQpOgorICAgICAgICAoV1RG
OjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3RmL01ldGFBbGxvY2F0
b3JIYW5kbGUuaDogQWRkZWQuCisgICAgICAgICogd3RmL1JlZEJsYWNrVHJlZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpwYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OnNldFBhcmVudCk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6UmF3Tm9kZTo6aXNSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6
OlJhd05vZGU6OnNldFJlZCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmVkQmxhY2tU
cmVlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjppbnNlcnQpOgorICAgICAgICAoV1RG
OjpSZWRCbGFja1RyZWU6OnJlbW92ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Zmly
c3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omxhc3QpOgorICAgICAgICAoV1RGOjpS
ZWRCbGFja1RyZWU6OnN1Y2Nlc3Nvcik6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6cHJl
ZGVjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRFeGFjdCk6CisgICAg
ICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnNpemUpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmNoZWNrQ29uc2lz
dGVuY3kpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmR1bXApOgorICAgICAgICAoV1RG
OjpSZWRCbGFja1RyZWU6OmxlZnRSb3RhdGUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6
OnJpZ2h0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjppbnNlcnRIZWxwKToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3JJbnRlcm5hbCk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6cmVtb3ZlRml4VXApOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tU
cmVlOjpkdW1wUmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6cm9vdCk6Cisg
ICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6bmlsU2VudGluZWwpOgorICAgICAgICAoV1RGOjpS
ZWRCbGFja1RyZWU6OmFzTm9kZSk6CisgICAgICAgICogd3RmL3d0Zi5wcmk6CisgICAgICAgICog
eWFyci9ZYXJySklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckdlbmVyYXRvcjo6Y29t
cGlsZSk6CisgICAgICAgICogeWFyci9ZYXJySklULmg6CisgICAgICAgIChKU0M6OllhcnI6Ollh
cnJDb2RlQmxvY2s6OmV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpZYXJyOjpZYXJyQ29kZUJsb2Nr
OjpnZXRBZGRyKToKKwogMjAxMS0wOC0zMCAgQWFyb24gQ29sd2VsbCAgPGFjb2x3ZWxsQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBBZGQgTWVkaWFTb3VyY2UgQVBJIHRvIEhUTUxNZWRpYUVsZW1l
bnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZp
c2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
CSh3b3JraW5nIGNvcHkpCkBAIC01MDksNiArNTA5LDkgQEAgamF2YXNjcmlwdGNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NYXRoRXh0cmFzLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTUQ1LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NRDUuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcCBc
CisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmggXAorCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oIFwKIAlTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01lc3NhZ2VRdWV1ZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L05vbkNvcHlpbmdTb3J0LmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTm9uY29weWFi
bGUuaCBcCkBAIC01NDEsNiArNTQ0LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21OdW1iZXIuY3BwIFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1JhbmRvbU51bWJlclNlZWQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRC
bGFja1RyZWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkLmggXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmNwcCBcCiAJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaCBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDk0MTA4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBj
b3B5KQpAQCAtNDAzLDYgKzQwMywxMiBAQCBfX1pOM1dURjEyY3JlYXRlVGhyZWFkRVBGUHZTMF9F
UzBfUEtjCiBfX1pOM1dURjEyZGV0YWNoVGhyZWFkRWoKIF9fWk4zV1RGMTJpc01haW5UaHJlYWRF
dgogX19aTjNXVEYxMnJhbmRvbU51bWJlckV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE3YWRk
RnJlc2hGcmVlU3BhY2VFUHZtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3Bh
Y2VTaXplRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yOGFsbG9jYXRlRW0KK19fWk4zV1RGMTNN
ZXRhQWxsb2NhdG9yQzJFbQorX19aTjNXVEYxM01ldGFBbGxvY2F0b3JEMUV2CitfX1pOM1dURjEz
TWV0YUFsbG9jYXRvckQyRXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2
CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYxM1N0cmlu
Z0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00MzcsNiArNDQzLDggQEAgX19aTjNXVEYx
OGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1Q
YlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3MEVpaWkKIF9fWk4zV1RGMThtb250aEZy
b21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxsb2NhdG9ySGFuZGxlNnNocmlua0VtCitf
X1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYKIF9fWk4zV1RGMTlpbml0aWFsaXplVGhy
ZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5nTnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBs
RVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0aWNzRXYKQEAgLTUxNiw2ICs1MjQsNyBA
QCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01hdGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0
RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19aTjNXVEY4bnVsbEF0b21FCitfX1pOM1dU
RjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUKIF9fWk4zV1RGOHRleHRBdG9tRQogX19a
TjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlz
aW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzU3LDYgKzc1NywxOCBAQAogCQkJ
PgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxs
b2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIu
LlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9ySGFuZGxlLmgiCisJCQk+CisJCTwv
RmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+
CiAJCTwvRmlsZT4KQEAgLTg5Nyw2ICs5MDksMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8Rmls
ZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVkQmxhY2tUcmVlLmgiCisJCQk+CisJCTwv
RmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFJlZkNvdW50ZWQuaCIK
IAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKIAkJ
CQkxNDEyMTRCRjBBNDkxOTBFMDA0ODAyNTUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJ
CQk5MzJGNUJFOTA4MjJBMUM3MDA3MzY5NzUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJ
CQkxNEJENTlDNzBBM0U4RkE0MDBCQUY1OUMgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKKwkJ
CQkwRjk2M0IyOTEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJ
CSk7CiAJCQluYW1lID0gQWxsOwogCQkJcHJvZHVjdE5hbWUgPSBBbGw7CkBAIC00OSw2ICs1MCwx
MyBAQAogCQkwQkRGRkFFMTBGQzYxOTMxMDBENjlFRjQgLyogT3duRmFzdE1hbGxvY1B0ci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEJERkZBRDEwRkM2
MTZFQzAwRDY5RUY0IC8qIE93bkZhc3RNYWxsb2NQdHIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQkYyOEEyOTExQTMzREMzMDA2MzhGODQgLyog
U2l6ZUxpbWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwQkYyOEEyODExQTMzREMzMDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi87IH07CiAJ
CTBGMjk0NzlDMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjk0NzlCMTI2RTY5OEMwMEIz
QUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLzsgfTsKKwkJMEY5NjNCMTgxM0Y3NTMwNDAwMDJE
OUIyIC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjBBNENGMDRCM0IzRTcwMDhBRTk1MiAvKiBDb3Jl
Rm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBGOTYzQjE5MTNGNzUzMDQwMDAyRDlCMiAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRjk2M0IyNTEzRjc1MzMzMDAwMkQ5QjIgLyogdW5p
dHRlc3RzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVzdHMuY3BwICovOyB9OworCQkwRjk2
M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyog
UmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkIxM0Y4
NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9IHtDT01QSUxF
Ul9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CisJCTBGOTYzQjJEMTNGODU0
MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyRTEzRkM2NkFF
MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0
MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwICovOyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyog
VmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTYyNCw2ICs2MzIsMjAg
QEAKIC8qIEVuZCBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhDb250YWlu
ZXJJdGVtUHJveHkgc2VjdGlvbiAqLworCQkwRjk2M0IxNDEzRjc1MzA0MDAwMkQ5QjIgLyogUEJY
Q29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5
OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2pl
Y3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5n
ID0gOTMyRjVCM0UwODIyQTFDNzAwNzM2OTc1OworCQkJcmVtb3RlSW5mbyA9IEphdmFTY3JpcHRD
b3JlOworCQl9OworCQkwRjk2M0IyODEzRjc2NEQxMDAwMkQ5QjIgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFp
bmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICov
OworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEY5NjNCMTIx
M0Y3NTMwNDAwMDJEOUIyOworCQkJcmVtb3RlSW5mbyA9IHVuaXR0ZXN0czsKKwkJfTsKIAkJMTQx
MjExMzUwQTQ4Nzk2MTAwNDgwMjU1IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJ
CWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdE
NjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTY4Myw2ICs3MDUs
MjYgQEAKIC8qIEVuZCBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAqLwogCiAvKiBCZWdp
biBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KKwkJMEY5NjNCMUExM0Y3NTMwNDAw
MDJEOUIyIC8qIENvcHkgU3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQQlhDb3B5Rmls
ZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWRzdFBh
dGggPSAiIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAxNjsKKwkJCWZpbGVzID0gKAorCQkJKTsK
KwkJCW5hbWUgPSAiQ29weSBTdXBwb3J0IFNjcmlwdCI7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKKwkJMEY5NjNCMUMxM0Y3NTMwNDAwMDJEOUIyIC8q
IEluc3RhbGwgU3VwcG9ydCBTY3JpcHQgKi8gPSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKKwkJCWRzdFBhdGggPSAiJChTWVNURU1f
TElCUkFSWV9ESVIpL0ZyYW1ld29ya3MvSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrL1ZlcnNpb25z
L0EvUmVzb3VyY2VzIjsKKwkJCWRzdFN1YmZvbGRlclNwZWMgPSAwOworCQkJZmlsZXMgPSAoCisJ
CQkpOworCQkJbmFtZSA9ICJJbnN0YWxsIFN1cHBvcnQgU2NyaXB0IjsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAxOworCQl9OwogCQk1REJCMTUxMTEzMUQwQjEzMDA1
NkFEMzYgLyogQ29weSBTdXBwb3J0IFNjcmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBCWENvcHlGaWxl
c0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNzM2LDYg
Kzc3OCwxMiBAQAogCQkwQkRGRkFENDBGQzYxNzEwMDBENjlFRjQgLyogQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENyb3NzVGhyZWFkUmVm
Q291bnRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwQkYyOEEyODExQTMzREMz
MDA2MzhGODQgLyogU2l6ZUxpbWl0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTaXplTGltaXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYy
OTQ3OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGVjaW1hbE51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGOTYzQjExMTNGNzUyRjcwMDAyRDlCMiAvKiB1bml0dGVzdHMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdW5pdHRlc3RzLmNwcDsgcGF0
aCA9IHRlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRh
YmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gdW5pdHRlc3RzOyBzb3VyY2VUcmVlID0g
QlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVk
QmxhY2tUcmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJl
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5
QjIgLyogTWV0YUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZXRhQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJCMTNG
ODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9ySGFuZGxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAv
KiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ft
cGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQw
MkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzMzksNiArMTM4NywxNSBAQAogLyogRW5kIFBCWEZpbGVS
ZWZlcmVuY2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCisJCTBGOTYzQjE3MTNGNzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdvcmtzICovID0g
eworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMTgxM0Y3NTMwNDAwMDJEOUIy
IC8qIENvcmVGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGOTYz
QjE5MTNGNzUzMDQwMDAyRDlCMiAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3
b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKKwkJfTsKIAkJMTQxMjExMUUwQTQ4NzkzQzAwNDgwMjU1IC8qIEZyYW1ld29ya3MgKi8gPSB7
CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9
IDIxNDc0ODM2NDc7CkBAIC0xMzg3LDYgKzE0NDQsNyBAQAogCQkJCTkzMkY1QkUxMDgyMkExQzcw
MDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlk
b20gKi8sCiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCisJCQkJ
MEY5NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLywKIAkJCSk7CiAJCQluYW1l
ID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTQ1Miw5ICsxNTEw
LDE4IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTBGOTYz
QjBGMTNGNzUyQjIwMDAyRDlCMiAvKiB1bml0ICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IxMTEzRjc1MkY3MDAwMkQ5QjIgLyogdW5pdHRlc3Rz
LmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gdW5pdDsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CiAJCTE0MTIxMTAwMEE0ODc3MjYwMDQ4MDI1NSAvKiB0ZXN0cyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEY5NjNCMEYxM0Y3NTJCMjAw
MDJEOUIyIC8qIHVuaXQgKi8sCiAJCQkJMTQ0MDA1MTcwQTUzMUNCNTAwMDVGMDYxIC8qIG1pbmlk
b20gKi8sCiAJCQkJMTRCRDVBMkQwQTNFOTFGNjAwQkFGNTlDIC8qIHRlc3RhcGkuYyAqLywKIAkJ
CQkxNEQ4NTc3NDBBNDY5NkM4MDAzMjE0NkMgLyogdGVzdGFwaS5qcyAqLywKQEAgLTE2NzAsNiAr
MTczNywxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFDMDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAw
MkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovLAorCQkJCTBGOTYzQjJCMTNGODUzQzcw
MDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAw
MkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAorCQkJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlC
MiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkwNkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyog
bWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIwMDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUx
OTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmljb2RlICovLApAQCAtMjI1MSw2ICsyMzIyLDkg
QEAKIAkJCQk4NkQzQjJDNDEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkFERDE0NTBGRERFQTk4MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBcnJheUNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMkQxM0Y4
NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYz
QjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVBy
b2ZpbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMjYxNCw2ICsyNjg4LDI1IEBACiAvKiBFbmQgUEJY
SGVhZGVyc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhOYXRpdmVUYXJnZXQg
c2VjdGlvbiAqLworCQkwRjk2M0IxMjEzRjc1MzA0MDAwMkQ5QjIgLyogdW5pdHRlc3RzICovID0g
eworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9
IDBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9y
IFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3RzIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJ
CTBGOTYzQjE1MTNGNzUzMDQwMDAyRDlCMiAvKiBTb3VyY2VzICovLAorCQkJCTBGOTYzQjE3MTNG
NzUzMDQwMDAyRDlCMiAvKiBGcmFtZXdvcmtzICovLAorCQkJCTBGOTYzQjFBMTNGNzUzMDQwMDAy
RDlCMiAvKiBDb3B5IFN1cHBvcnQgU2NyaXB0ICovLAorCQkJCTBGOTYzQjFDMTNGNzUzMDQwMDAy
RDlCMiAvKiBJbnN0YWxsIFN1cHBvcnQgU2NyaXB0ICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMg
PSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJCTBGOTYzQjEzMTNGNzUzMDQwMDAy
RDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovLAorCQkJKTsKKwkJCW5hbWUgPSB1bml0dGVz
dHM7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEY5
NjNCMjMxM0Y3NTMwNDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLzsKKwkJCXByb2R1Y3RUeXBlID0g
ImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJCX07CiAJCTE0MTIxMTFGMEE0ODc5M0Mw
MDQ4MDI1NSAvKiBtaW5pZG9tICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJ
YnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0MTIxMTM5MEE0ODc5ODQwMDQ4MDI1NSAvKiBCdWls
ZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibWluaWRvbSIgKi87CkBA
IC0yNzI0LDYgKzI4MTcsNyBAQAogCQkJCTE0MTIxMTFGMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5p
ZG9tICovLAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJ
CTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCisJCQkJMEY5NjNCMTIxM0Y3NTMw
NDAwMDJEOUIyIC8qIHVuaXR0ZXN0cyAqLywKIAkJCSk7CiAJCX07CiAvKiBFbmQgUEJYUHJvamVj
dCBzZWN0aW9uICovCkBAIC0yODM4LDYgKzI5MzIsMTQgQEAKIC8qIEVuZCBQQlhTaGVsbFNjcmlw
dEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQQlhTb3VyY2VzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCisJCTBGOTYzQjE1MTNGNzUzMDQwMDAyRDlCMiAvKiBTb3VyY2VzICovID0gewor
CQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3
NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMjUxM0Y3NTMzMzAwMDJEOUIyIC8qIHVu
aXR0ZXN0cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMTQxMjExMUQwQTQ4NzkzQzAwNDgwMjU1IC8q
IFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxk
QWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0yODYyLDYgKzI5NjQsNyBAQAogCQkJaXNhID0g
UEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3Owog
CQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZU
YWJsZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENG
QTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcw
MDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC0zMDcyLDYgKzMxNzUsMTYgQEAKIC8qIEVuZCBQQlhTb3VyY2VzQnVpbGRQaGFzZSBzZWN0
aW9uICovCiAKIC8qIEJlZ2luIFBCWFRhcmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLworCQkwRjk2
M0IxMzEzRjc1MzA0MDAwMkQ5QjIgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlz
YSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSA5MzJGNUIzRTA4MjJBMUM3MDA3
MzY5NzUgLyogSmF2YVNjcmlwdENvcmUgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGOTYzQjE0MTNG
NzUzMDQwMDAyRDlCMiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CisJCTBGOTYz
QjI5MTNGNzY0RDEwMDAyRDlCMiAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNh
ID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGOTYzQjEyMTNGNzUzMDQwMDAy
RDlCMiAvKiB1bml0dGVzdHMgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGOTYzQjI4MTNGNzY0RDEw
MDAyRDlCMiAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTE0MTIxMTM2MEE0
ODc5NjEwMDQ4MDI1NSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDkzMkY1QjNFMDgyMkExQzcwMDczNjk3NSAv
KiBKYXZhU2NyaXB0Q29yZSAqLzsKQEAgLTMxMTUsNiArMzIyOCwzOCBAQAogLyogRW5kIFBCWFRh
cmdldERlcGVuZGVuY3kgc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlv
biBzZWN0aW9uICovCisJCTBGOTYzQjFGMTNGNzUzMDQwMDAyRDlCMiAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLzsK
KwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdW5pdHRlc3RzOworCQkJ
fTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEY5NjNCMjAxM0Y3NTMwNDAwMDJEOUIyIC8q
IFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRlc3RB
UEkueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9
IHVuaXR0ZXN0czsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMEY5NjNCMjEx
M0Y3NTMwNDAwMDJEOUIyIC8qIFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25m
aWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkw
MEMzMDBGQzU0NjcgLyogVGVzdEFQSS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7
CisJCQkJUFJPRFVDVF9OQU1FID0gdW5pdHRlc3RzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxp
bmc7CisJCX07CisJCTBGOTYzQjIyMTNGNzUzMDQwMDAyRDlCMiAvKiBQcm9kdWN0aW9uICovID0g
eworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJl
ZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUZXN0QVBJLnhjY29uZmlnICov
OworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB1bml0dGVzdHM7CisJ
CQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTE0MTIxMTNBMEE0ODc5ODQwMDQ4
MDI1NSAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKQEAgLTMzMjksNiArMzQ3NCwxNyBAQAogLyogRW5kIFhDQnVpbGRD
b25maWd1cmF0aW9uIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBz
ZWN0aW9uICovCisJCTBGOTYzQjFFMTNGNzUzMDQwMDAyRDlCMiAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidW5pdHRlc3RzIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBG
OTYzQjFGMTNGNzUzMDQwMDAyRDlCMiAvKiBEZWJ1ZyAqLywKKwkJCQkwRjk2M0IyMDEzRjc1MzA0
MDAwMkQ5QjIgLyogUmVsZWFzZSAqLywKKwkJCQkwRjk2M0IyMTEzRjc1MzA0MDAwMkQ5QjIgLyog
UHJvZmlsaW5nICovLAorCQkJCTBGOTYzQjIyMTNGNzUzMDQwMDAyRDlCMiAvKiBQcm9kdWN0aW9u
ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTE0MTIxMTM5MEE0
ODc5ODQwMDQ4MDI1NSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRh
cmdldCAibWluaWRvbSIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJ
YnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCisjaW5jbHVk
ZSAiSlNHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSAic3RkaW50LmgiCiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaD4KQEAgLTEyOCwxOSArMTI5
LDIxIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIEFzc2VtYmxlckxhYmVs
KG1faW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCogZXhlY3V0YWJsZUNvcHkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgICAg
ICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVDb3B5KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFtX2luZGV4
KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICB2b2lkKiByZXN1bHQg
PSBhbGxvY2F0b3ItPmFsbG9jKGdsb2JhbERhdGEsIG1faW5kZXgpOworICAgICAgICAgICAgUmVm
UHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGdsb2JhbERhdGEuZXhlY3V0YWJs
ZUFsbG9jYXRvci5hbGxvY2F0ZShnbG9iYWxEYXRhLCBtX2luZGV4KTsKIAogICAgICAgICAgICAg
aWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIEV4
ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQsIG1faW5kZXgpOworICAgICAg
ICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdC0+c3RhcnQoKSwg
cmVzdWx0LT5zaXplSW5CeXRlcygpKTsKIAotICAgICAgICAgICAgcmV0dXJuIG1lbWNweShyZXN1
bHQsIG1fYnVmZmVyLCBtX2luZGV4KTsKKyAgICAgICAgICAgIG1lbWNweShyZXN1bHQtPnN0YXJ0
KCksIG1fYnVmZmVyLCBtX2luZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRvTGFi
ZWwoQXNzZW1ibGVyTGFiZWwgbGFiZWwpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjksMjIg
KzY5LDggQEAgY2xhc3MgTGlua0J1ZmZlciB7CiAjZW5kaWYKIAogcHVibGljOgotICAgIExpbmtC
dWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSwgUGFz
c1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgIDogbV9leGVj
dXRhYmxlUG9vbChleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAg
LCBtX2NvZGUoMCkKLSAgICAgICAgLCBtX2Fzc2VtYmxlcihtYXNtKQotICAgICAgICAsIG1fZ2xv
YmFsRGF0YSgmZ2xvYmFsRGF0YSkKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgICwgbV9jb21wbGV0
ZWQoZmFsc2UpCi0jZW5kaWYKLSAgICB7Ci0gICAgICAgIGxpbmtDb2RlKCk7Ci0gICAgfQotCi0g
ICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBt
YXNtLCBFeGVjdXRhYmxlQWxsb2NhdG9yJiBhbGxvY2F0b3IpCi0gICAgICAgIDogbV9leGVjdXRh
YmxlUG9vbChhbGxvY2F0b3IucG9vbEZvclNpemUoZ2xvYmFsRGF0YSwgbWFzbS0+bV9hc3NlbWJs
ZXIuY29kZVNpemUoKSkpCi0gICAgICAgICwgbV9zaXplKDApCisgICAgTGlua0J1ZmZlcihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtKQorICAgICAgICA6IG1f
c2l6ZSgwKQogICAgICAgICAsIG1fY29kZSgwKQogICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20p
CiAgICAgICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQpAQCAtMTg1LDE0ICsxNzEsNyBA
QCBwdWJsaWM6CiAgICAgewogICAgICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7CiAKLSAgICAg
ICAgcmV0dXJuIENvZGVSZWYobV9jb2RlLCBtX2V4ZWN1dGFibGVQb29sLCBtX3NpemUpOwotICAg
IH0KLQotICAgIENvZGVMb2NhdGlvbkxhYmVsIGZpbmFsaXplQ29kZUFkZGVuZHVtKCkKLSAgICB7
Ci0gICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKLQotICAgICAgICByZXR1cm4gQ29kZUxv
Y2F0aW9uTGFiZWwoY29kZSgpKTsKKyAgICAgICAgcmV0dXJuIENvZGVSZWYobV9leGVjdXRhYmxl
TWVtb3J5KTsKICAgICB9CiAKICAgICBDb2RlUHRyIHRyYW1wb2xpbmVBdChMYWJlbCBsYWJlbCkK
QEAgLTIzMiwxNCArMjExLDE5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlQoIW1f
Y29kZSk7CiAjaWYgIUVOQUJMRShCUkFOQ0hfQ09NUEFDVElPTikKLSAgICAgICAgbV9jb2RlID0g
bV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERhdGEsIG1f
ZXhlY3V0YWJsZVBvb2wuZ2V0KCkpOworICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2Fz
c2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xvYmFsRGF0YSk7CisgICAg
ICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2NvZGUgPSBtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7CiAgICAgICAgIG1fc2l6ZSA9
IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwogICAgICAgICBBU1NFUlQobV9j
b2RlKTsKICNlbHNlCiAgICAgICAgIHNpemVfdCBpbml0aWFsU2l6ZSA9IG1fYXNzZW1ibGVyLT5t
X2Fzc2VtYmxlci5jb2RlU2l6ZSgpOwotICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVj
dXRhYmxlUG9vbC0+YWxsb2MoKm1fZ2xvYmFsRGF0YSwgaW5pdGlhbFNpemUpOwotICAgICAgICBp
ZiAoIW1fY29kZSkKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5ID0gbV9nbG9iYWxEYXRhLT5l
eGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKCptX2dsb2JhbERhdGEsIGluaXRpYWxTaXplKTsK
KyAgICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIG1fY29kZSA9ICh1aW50OF90KiltX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCk7Cisg
ICAgICAgIEFTU0VSVChtX2NvZGUpOwogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtl
V3JpdGFibGUobV9jb2RlLCBpbml0aWFsU2l6ZSk7CiAgICAgICAgIHVpbnQ4X3QqIGluRGF0YSA9
ICh1aW50OF90KiltX2Fzc2VtYmxlci0+dW5saW5rZWRDb2RlKCk7CiAgICAgICAgIHVpbnQ4X3Qq
IG91dERhdGEgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihtX2NvZGUpOwpAQCAtMjk3LDcg
KzI4MSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAganVtcHNUb0xpbmsuY2xlYXIoKTsKICAgICAg
ICAgbV9zaXplID0gd3JpdGVQdHIgKyBpbml0aWFsU2l6ZSAtIHJlYWRQdHI7Ci0gICAgICAgIG1f
ZXhlY3V0YWJsZVBvb2wtPnRyeVNocmluayhtX2NvZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwor
ICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnktPnNocmluayhtX3NpemUpOwogCiAjaWYgRFVNUF9M
SU5LX1NUQVRJU1RJQ1MKICAgICAgICAgZHVtcExpbmtTdGF0aXN0aWNzKG1fY29kZSwgaW5pdGlh
bFNpemUsIG1fc2l6ZSk7CkBAIC0zNjYsNyArMzUwLDcgQEAgcHJpdmF0ZToKICAgICB9CiAjZW5k
aWYKICAgICAKLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7Cisg
ICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKICAg
ICBzaXplX3QgbV9zaXplOwogICAgIHZvaWQqIG1fY29kZTsKICAgICBNYWNyb0Fzc2VtYmxlciog
bV9hc3NlbWJsZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkod29y
a2luZyBjb3B5KQpAQCAtMTk5LDIyICsxOTksNTkgQEAgcHJpdmF0ZToKIC8vIHBvaW50ZXIgdG8g
dGhlIGNvZGUsIGFuZCBhIHJlZiBwb2ludGVyIHRvIHRoZSBwb29sIGZyb20gd2l0aGluIHdoaWNo
IGl0CiAvLyB3YXMgYWxsb2NhdGVkLgogY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHsKK3By
aXZhdGU6CisgICAgLy8gVGhpcyBpcyBwcml2YXRlIGJlY2F1c2UgaXQncyBkYW5nZXJvdXMgZW5v
dWdoIHRoYXQgd2Ugd2FudCB1c2VzIG9mIGl0CisgICAgLy8gdG8gYmUgZWFzeSB0byBmaW5kIC0g
aGVuY2UgdGhlIHN0YXRpYyBjcmVhdGUgbWV0aG9kIGJlbG93LgorICAgIGV4cGxpY2l0IE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKKyAgICAgICAg
OiBtX2NvZGVQdHIoY29kZVB0cikKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NvZGVQdHIpOwor
ICAgIH0KKwogcHVibGljOgogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpCi0gICAgICAgIDog
bV9zaXplKDApCiAgICAgewogICAgIH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZih2b2lk
KiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90
IHNpemUpCi0gICAgICAgIDogbV9jb2RlKGNvZGUpCi0gICAgICAgICwgbV9leGVjdXRhYmxlUG9v
bChleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgLCBtX3NpemUoc2l6ZSkKKyAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
TWVtb3J5KQorICAgICAgICA6IG1fY29kZVB0cihleGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKQor
ICAgICAgICAsIG1fZXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlTWVtb3J5KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+aXNNYW5hZ2VkKCkpOworICAgICAgICBB
U1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpKTsKKyAgICAgICAgQVNTRVJUKG1fY29k
ZVB0cik7CisgICAgfQorICAgIAorICAgIC8vIFVzZSB0aGlzIG9ubHkgd2hlbiB5b3Uga25vdyB0
aGF0IHRoZSBjb2RlUHRyIHJlZmVycyB0byBjb2RlIHRoYXQgaXMKKyAgICAvLyBhbHJlYWR5IGJl
aW5nIGtlcHQgYWxpdmUgdGhyb3VnaCBzb21lIG90aGVyIG1lYW5zLiBUeXBpY2FsbHkgdGhpcyBt
ZWFucworICAgIC8vIHRoYXQgY29kZVB0ciBpcyBpbW1vcnRhbC4KKyAgICBzdGF0aWMgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY29kZVB0cikKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYoY29kZVB0cik7CisgICAgfQorICAgIAorICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGV4
ZWN1dGFibGVNZW1vcnkoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZXhlY3V0YWJs
ZU1lbW9yeS5nZXQoKTsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNv
ZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY29kZVB0cjsKKyAgICB9CisgICAg
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFi
bGVNZW1vcnkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG1fZXhlY3V0
YWJsZU1lbW9yeS0+c2l6ZUluQnl0ZXMoKTsKICAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhbV9jb2RlUHRyOyB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgbV9jb2RlOwotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRhYmxlUG9v
bDsKLSAgICBzaXplX3QgbV9zaXplOworcHJpdmF0ZToKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgbV9jb2RlUHRyOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1
dGFibGVNZW1vcnk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gOTQxMDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTk1LDkgKzE1OTUsOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBi
Lm1fb2Zmc2V0IC0gYS5tX29mZnNldDsKICAgICB9CiAgICAgCi0gICAgdm9pZCogZXhlY3V0YWJs
ZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9y
KQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fZm9ybWF0
dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIGFsbG9jYXRvcik7CisgICAgICAgIHJldHVy
biBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhKTsKICAgICB9CiAKICAgICB2
b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFiZWwgcmV3aW5kVG8pIHsgbV9mb3JtYXR0ZXIu
cmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7IH0KQEAgLTE5MzksOSArMTkzOSw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGJvb2wgaXNBbGlnbmVkKGludCBhbGlnbm1lbnQpIGNvbnN0IHsgcmV0dXJuIG1f
YnVmZmVyLmlzQWxpZ25lZChhbGlnbm1lbnQpOyB9CiAgICAgICAgIHZvaWQqIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2J1ZmZlci5kYXRhKCk7IH0KIAotICAgICAgICB2b2lkKiBleGVjdXRhYmxl
Q29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3Ip
CisgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNv
cHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRU
bykgeyBtX2J1ZmZlci5yZXdpbmRUb0xhYmVsKHJld2luZFRvKTsgfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gOTQxMDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5OSw3ICsyOTksNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShKSVQpCiAg
ICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2lzQ29uc3RydWN0b3IgPyBv
d25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNvbnN0cnVjdCgpIDogb3duZXJF
eGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDYWxsKCk7IH0KLSAgICAgICAgRXhlY3V0
YWJsZVBvb2wqIGV4ZWN1dGFibGVQb29sKCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1
dGFibGVQb29sKCk7IH0KKyAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJs
ZU1lbW9yeSgpIHsgcmV0dXJuIGdldEpJVENvZGUoKS5nZXRFeGVjdXRhYmxlTWVtb3J5KCk7IH0K
ICNlbmRpZgogCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIG93bmVyRXhlY3V0YWJsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXJFeGVjdXRhYmxlLmdldCgpOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gOTQxMDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTdHJ1Y3R1
cmVDaGFpbjsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgdHlwZWRlZiBDb2RlTG9jYXRpb25MYWJl
bCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGU7CisgICAgdHlw
ZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
U3R1YlJvdXRpbmVUeXBlOwogCiAgICAgLy8gU3RydWN0dXJlIHVzZWQgYnkgb3BfZ2V0X2J5X2lk
X3NlbGZfbGlzdCBhbmQgb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QgaW5zdHJ1Y3Rpb24gdG8gaG9s
ZCBkYXRhIG9mZiB0aGUgbWFpbiBvcGNvZGUgc3RyZWFtLgogICAgIHN0cnVjdCBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Myw3ICsxNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIH0g
cHV0QnlJZFJlcGxhY2U7CiAgICAgICAgIH0gdTsKIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBzdHViUm91dGluZTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5l
OwogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGNhbGxSZXR1cm5Mb2NhdGlvbjsKICAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgaG90UGF0aEJlZ2luOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gOTQxMDgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTI4LDcgKzkyOCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6OmNvbXBpbGUoSklUQ29k
ZSYgZW50cnkKICAgICAvLyBHZW5lcmF0ZSB0aGUgYm9keSBvZiB0aGUgcHJvZ3JhbS4KICAgICBj
b21waWxlQm9keSgpOwogICAgIC8vIExpbmsKLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhs
aW5rQnVmZmVyKTsKICAgICBlbnRyeSA9IEpJVENvZGUobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUo
KSwgSklUQ29kZTo6REZHSklUKTsKIH0KQEAgLTk4Niw3ICs5ODYsNyBAQCB2b2lkIEpJVENvbXBp
bGVyOjpjb21waWxlRnVuY3Rpb24oSklUQ29kCiAKIAogICAgIC8vID09PSBMaW5rID09PQotICAg
IExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEt
PmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzKTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwogICAgIAogICAgIC8vIEZJWE1F
OiBzd2l0Y2ggdGhlIHJlZ2lzdGVyIGZpbGUgY2hlY2sgJiBhcml0eSBjaGVjayBvdmVyIHRvIERG
R09wZXJ0YWlvbiBzdHlsZSBjYWxscywgbm90IEpJVCBzdHVicy4KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3
ICs5Myw3IEBAIHN0YXRpYyB2b2lkIGxpbmtSZXN0b3JlU2NyYXRjaChMaW5rQnVmZmUKICAgICBs
aW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdWNj
ZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKIH0K
IAotc3RhdGljIHZvaWQgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4
ZWMsIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBz
aXplX3QgY291bnQsIHNpemVfdCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9j
YXRpb25MYWJlbCBzdWNjZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWws
IENvZGVMb2NhdGlvbkxhYmVsJiBzdHViUm91dGluZSkKK3N0YXRpYyB2b2lkIGdlbmVyYXRlUHJv
dG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1
YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYmIHN0
dWJSb3V0aW5lKQogewogICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9i
YWxEYXRhKCk7CiAKQEAgLTEzMywxMSArMTMzLDExIEBAIHN0YXRpYyB2b2lkIGdlbmVyYXRlUHJv
dG9DaGFpbkFjY2Vzc1N0dWIKICAgICAKICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwg
bmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVD
YXNlcyk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0
dWJKaXQsIGV4ZWMtPmNvZGVCbG9jaygpLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgCiAgICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2Vzcywg
ZmFpbCwgZmFpbHVyZUNhc2VzLCBzdWNjZXNzTGFiZWwsIHNsb3dDYXNlTGFiZWwpOwogICAgIAot
ICAgIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAg
ICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiBzdGF0aWMg
Ym9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
Y29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3Qs
IFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbykKQEAgLTE3NiwxNSArMTc2LDE0IEBAIHN0YXRp
YyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgCiAgICAgICAgIGVt
aXRSZXN0b3JlU2NyYXRjaChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQ
Uiwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1
dGFibGVQb29sKCkpOworICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRh
LCAmc3R1YkppdCk7CiAgICAgICAgIAogICAgICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hC
dWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzdHViSW5mbywgc3VjY2VzcywgZmFpbCwgZmFp
bHVyZUNhc2VzKTsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFi
ZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAogICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0
dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWQpOwogICAgICAgICAKICAgICAg
ICAgcmV0dXJuIHRydWU7CkBAIC0yMzEsNyArMjMwLDcgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVH
ZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhl
Yywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2Fs
bFRvRG9uZSksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CiAgICAgCiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHVi
SW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJJbmZvLnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRM
aXN0KTsKICAgICAKICAgICBzdHViSW5mby5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluKTsK
QEAgLTMyNCw3ICszMjMsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNT
dGF0CiAgICAgCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9p
ZF9zZWxmKSB7CiAgICAgICAgIEFTU0VSVCghc3R1YkluZm8uc3R1YlJvdXRpbmUpOwotICAgICAg
ICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5m
by5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Ns
b3dDYXNlKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9T
bG93Q2FzZSkpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCkpOwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTM1
MCwyMSArMzQ5LDIxIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQK
ICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHN1Y2Nlc3MgPSBzdHViSml0
Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgICAgIAot
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3Ry
dWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgp
KTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwogICAgICAgICAKICAgICAgICAg
cGF0Y2hCdWZmZXIubGluayh3cm9uZ1N0cnVjdCwgbGFzdFByb3RvQmVnaW4pOwogICAgICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJl
bEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgICAgICAKLSAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFk
ZGVuZHVtKCk7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAKLSAgICAgICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEsIGNv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAg
ICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0
Q2hlY2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
LSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsK
KyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5k
ZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTQwOCw3ICs0MDcsNyBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQ
cm90b0xpc3QoRXhlCiAgICAgaWYgKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9i
eV9pZF9jaGFpbikgewogICAgICAgICBBU1NFUlQoISFzdHViSW5mby5zdHViUm91dGluZSk7CiAg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJJbmZvLnN0dWJSb3V0aW5lLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBzdHViSW5mby51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSk7Ci0gICAg
ICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAg
c3R1YkluZm8uc3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAg
c3R1YkluZm8uaW5pdEdldEJ5SWRQcm90b0xpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAx
KTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQoc3R1YkluZm8uYWNjZXNzVHlwZSA9IGFj
Y2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdCk7CkBAIC00MTksMTggKzQxOCwxOCBAQCBzdGF0aWMg
Ym9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgaWYgKGxpc3RJbmRleCA8IFBP
TFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSkgewogICAgICAgICBzdHViSW5mby51LmdldEJ5SWRQ
cm90b0xpc3QubGlzdFNpemUrKzsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFts
aXN0SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgICAgICBBU1NFUlQoISFsYXN0
UHJvdG9CZWdpbik7CiAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbDsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJSb3V0aW5lOwogICAgICAgICAKLSAgICAg
ICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVn
aW4sIGVudHJ5TGFiZWwpOworICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4
ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb0RvbmUpLCBsYXN0UHJvdG9CZWdpbiwgc3R1YlJvdXRpbmUpOwogICAgICAgICAKLSAgICAg
ICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxE
YXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUp
OworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQo
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUpOwogICAgICAgICAKICAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZm
ZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBlbnRyeUxhYmVsKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFIC0gMSkpCiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU0OCwxOCArNTQ3LDE3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlUHV0QnlJRChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIH0gZWxzZQogICAgICAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBzdHViSml0Lmp1bXAoKTsKICAgICAgICAgICAgIAotICAgICAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVC
bG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvRG9uZSkpOwogICAgICAgICAgICAgaWYgKG5lZWRUb1Jlc3RvcmVTY3Jh
dGNoKQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGVBZGRlbmR1bSgpOwotICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxh
YmVsOworICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJS
b3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLCBhcHByb3ByaWF0ZVB1dEJ5SWRGdW5jdGlvbihzbG90LCBw
dXRLaW5kKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN0dWJJbmZvLmluaXRQdXRCeUlk
VHJhbnNpdGlvbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgb2xk
U3RydWN0dXJlLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
OTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw0MiArMjcsMTExIEBACiAKICNpbmNsdWRlICJFeGVj
dXRhYmxlQWxsb2NhdG9yLmgiCiAKKyNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVN
QU5EKQorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL1BhZ2VS
ZXNlcnZhdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KKyNlbmRpZgorCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKIAordXNpbmcgbmFtZXNwYWNlIFdURjsKKwogbmFtZXNwYWNlIEpTQyB7
CiAKICNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQogCi1FeGVjdXRhYmxl
UG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IHNpemUp
CitjbGFzcyBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7
CitwdWJsaWM6CisgICAgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgICAgIDogTWV0
YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5dGVzCisg
ICAgeworICAgICAgICAvLyBEb24ndCBwcmVhbGxvY2F0ZSBhbnkgbWVtb3J5IGhlcmUuCisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgfkRlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc2VydmF0aW9ucy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIHJlc2VydmF0aW9ucy5hdChpKS5kZWFsbG9jYXRlKCk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYg
bnVtUGFnZXMpCisgICAgeworICAgICAgICBzaXplX3QgbmV3TnVtUGFnZXMgPSAoKChudW1QYWdl
cyAqIHBhZ2VTaXplKCkgKyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgLSAxKSAvIEpJ
VF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSAqIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0Nf
U0laRSkgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpOworICAgICAgICAKKyAgICAgICAg
QVNTRVJUKG5ld051bVBhZ2VzID49IG51bVBhZ2VzKTsKKyAgICAgICAgCisgICAgICAgIG51bVBh
Z2VzID0gbmV3TnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICBQYWdlUmVzZXJ2YXRpb24gcmVz
ZXJ2YXRpb24gPSBQYWdlUmVzZXJ2YXRpb246OnJlc2VydmUobnVtUGFnZXMgKiBwYWdlU2l6ZSgp
LCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwg
dHJ1ZSk7CisgICAgICAgIGlmICghcmVzZXJ2YXRpb24pCisgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAKKyAgICAgICAgcmVzZXJ2YXRpb25zLmFwcGVuZChyZXNlcnZhdGlvbik7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gcmVzZXJ2YXRpb24uYmFzZSgpOworICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkKKyAgICB7CisgICAgICAg
IE9TQWxsb2NhdG9yOjpjb21taXQocGFnZSwgcGFnZVNpemUoKSwgRVhFQ1VUQUJMRV9QT09MX1dS
SVRBQkxFLCB0cnVlKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJ
c0ZyZWUodm9pZCogcGFnZSkKKyAgICB7CisgICAgICAgIE9TQWxsb2NhdG9yOjpkZWNvbW1pdChw
YWdlLCBwYWdlU2l6ZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFBhZ2VSZXNl
cnZhdGlvbiwgMTY+IHJlc2VydmF0aW9uczsKK307CisKK3N0YXRpYyBEZW1hbmRFeGVjdXRhYmxl
QWxsb2NhdG9yKiBhbGxvY2F0b3I7CisKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlh
bGl6ZUFsbG9jYXRvcigpCiB7Ci0gICAgUGFnZUFsbG9jYXRpb24gYWxsb2NhdGlvbiA9IFBhZ2VB
bGxvY2F0aW9uOjphbGxvY2F0ZShzaXplLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVY
RUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7Ci0gICAgaWYgKCFhbGxvY2F0aW9uKQotICAg
ICAgICBDUkFTSCgpOwotICAgIHJldHVybiBhbGxvY2F0aW9uOworICAgIEFTU0VSVCghYWxsb2Nh
dG9yKTsKKyAgICBhbGxvY2F0b3IgPSBuZXcgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcigpOwog
fQogCi12b2lkIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKEV4ZWN1dGFibGVQb29sOjpB
bGxvY2F0aW9uJiBhbGxvY2F0aW9uKQorRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIGFsbG9jYXRpb24uZGVhbGxvY2F0ZSgpOwor
ICAgIEFTU0VSVChhbGxvY2F0b3IpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6Omlz
VmFsaWQoKSBjb25zdAogewogICAgIHJldHVybiB0cnVlOwogfQotICAgIAorCiBib29sIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKQogewogICAgIHJldHVybiBmYWxz
ZTsKIH0KLSAgICAKKworUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRh
YmxlQWxsb2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMp
Cit7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRv
ci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICBDUkFT
SCgpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCiBzaXplX3QgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKIHsKLSAgICByZXR1cm4gMDsKLX0gCisg
ICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKK30KIAorI2lmIEVOQUJMRShN
RVRBX0FMTE9DQVRPUl9QUk9GSUxFKQordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJv
ZmlsZSgpCit7CisgICAgYWxsb2NhdG9yLT5kdW1wUHJvZmlsZSgpOworfQogI2VuZGlmCiAKKyNl
bmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVNQU5EKQorCiAjaWYgRU5BQkxF
KEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAKICNpZiBPUyhXSU5ET1dTKSB8fCBPUyhTWU1CSUFO
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNs
dWRlIDxzdGRkZWYuaD4gLy8gZm9yIHB0cmRpZmZfdAogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9ySGFuZGxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VBbGxvY2F0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMTAyLDEyMCArMTAzLDI3
IEBAIGlubGluZSBzaXplX3Qgcm91bmRVcEFsbG9jYXRpb25TaXplKHNpemUKIAogbmFtZXNwYWNl
IEpTQyB7CiAKLWNsYXNzIEV4ZWN1dGFibGVQb29sIDogcHVibGljIFJlZkNvdW50ZWQ8RXhlY3V0
YWJsZVBvb2w+IHsKLXB1YmxpYzoKLSNpZiBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfREVN
QU5EKQotICAgIHR5cGVkZWYgUGFnZUFsbG9jYXRpb24gQWxsb2NhdGlvbjsKLSNlbHNlCi0gICAg
Y2xhc3MgQWxsb2NhdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBBbGxvY2F0aW9uKHZvaWQq
IGJhc2UsIHNpemVfdCBzaXplKQotICAgICAgICAgICAgOiBtX2Jhc2UoYmFzZSkKLSAgICAgICAg
ICAgICwgbV9zaXplKHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgfQotICAgICAgICB2b2lkKiBi
YXNlKCkgeyByZXR1cm4gbV9iYXNlOyB9Ci0gICAgICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4g
bV9zaXplOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fYmFz
ZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCogbV9iYXNlOwotICAgICAgICBzaXpl
X3QgbV9zaXplOwotICAgIH07Ci0jZW5kaWYKLSAgICB0eXBlZGVmIFZlY3RvcjxBbGxvY2F0aW9u
LCAyPiBBbGxvY2F0aW9uTGlzdDsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQ
b29sPiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXhlY3V0YWJsZVBvb2woZ2xvYmFsRGF0YSwgbikp
OwotICAgIH0KLQotICAgIHZvaWQqIGFsbG9jKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6
ZV90IG4pCi0gICAgewotICAgICAgICBBU1NFUlQobV9mcmVlUHRyIDw9IG1fZW5kKTsKLQotICAg
ICAgICAvLyBSb3VuZCAnbicgdXAgdG8gYSBtdWx0aXBsZSBvZiB3b3JkIHNpemU7IGlmIGFsbCBh
bGxvY2F0aW9ucyBhcmUgb2YKLSAgICAgICAgLy8gd29yZCBzaXplZCBxdWFudGl0aWVzLCB0aGVu
IGFsbCBzdWJzZXF1ZW50IGFsbG9jYXRpb25zIHdpbGwgYmUgYWxpZ25lZC4KLSAgICAgICAgbiA9
IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuLCBzaXplb2Yodm9pZCopKTsKLQotICAgICAgICBpZiAo
c3RhdGljX2Nhc3Q8cHRyZGlmZl90PihuKSA8IChtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAgICAg
ICAgICAgIHZvaWQqIHJlc3VsdCA9IG1fZnJlZVB0cjsKLSAgICAgICAgICAgIG1fZnJlZVB0ciAr
PSBuOwotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IEluc3VmZmljaWVudCBzcGFjZSB0byBhbGxvY2F0ZSBpbiB0aGUgZXhpc3RpbmcgcG9vbAotICAg
ICAgICAvLyBzbyB3ZSBuZWVkIGFsbG9jYXRlIGludG8gYSBuZXcgcG9vbAotICAgICAgICByZXR1
cm4gcG9vbEFsbG9jYXRlKGdsb2JhbERhdGEsIG4pOwotICAgIH0KLSAgICAKLSAgICB2b2lkIHRy
eVNocmluayh2b2lkKiBhbGxvY2F0aW9uLCBzaXplX3Qgb2xkU2l6ZSwgc2l6ZV90IG5ld1NpemUp
Ci0gICAgewotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pICsgb2xk
U2l6ZSAhPSBtX2ZyZWVQdHIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fZnJlZVB0
ciA9IHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0aW9uKSArIHJvdW5kVXBBbGxvY2F0aW9uU2l6
ZShuZXdTaXplLCBzaXplb2Yodm9pZCopKTsKLSAgICB9Ci0KLSAgICB+RXhlY3V0YWJsZVBvb2wo
KQotICAgIHsKLSAgICAgICAgQWxsb2NhdGlvbkxpc3Q6Oml0ZXJhdG9yIGVuZCA9IG1fcG9vbHMu
ZW5kKCk7Ci0gICAgICAgIGZvciAoQWxsb2NhdGlvbkxpc3Q6Oml0ZXJhdG9yIHB0ciA9IG1fcG9v
bHMuYmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICBFeGVjdXRhYmxlUG9v
bDo6c3lzdGVtUmVsZWFzZSgqcHRyKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYXZhaWxhYmxlKCkg
Y29uc3QgeyByZXR1cm4gKG1fcG9vbHMuc2l6ZSgpID4gMSkgPyAwIDogbV9lbmQgLSBtX2ZyZWVQ
dHI7IH0KLQotcHJpdmF0ZToKLSAgICBzdGF0aWMgQWxsb2NhdGlvbiBzeXN0ZW1BbGxvYyhzaXpl
X3Qgbik7Ci0gICAgc3RhdGljIHZvaWQgc3lzdGVtUmVsZWFzZShBbGxvY2F0aW9uJiBhbGxvYyk7
Ci0KLSAgICBFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERhdGEmLCBzaXplX3Qgbik7Ci0KLSAgICB2
b2lkKiBwb29sQWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG4pOwotCi0gICAgY2hhciog
bV9mcmVlUHRyOwotICAgIGNoYXIqIG1fZW5kOwotICAgIEFsbG9jYXRpb25MaXN0IG1fcG9vbHM7
Ci19OwordHlwZWRlZiBXVEY6Ok1ldGFBbGxvY2F0b3JIYW5kbGUgRXhlY3V0YWJsZU1lbW9yeUhh
bmRsZTsKIAogY2xhc3MgRXhlY3V0YWJsZUFsbG9jYXRvciB7CiAgICAgZW51bSBQcm90ZWN0aW9u
U2V0dGluZyB7IFdyaXRhYmxlLCBFeGVjdXRhYmxlIH07CiAKIHB1YmxpYzoKLSAgICBFeGVjdXRh
YmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKLSAgICB7Ci0gICAgICAgIGlm
IChpc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX3NtYWxsQWxsb2NhdGlvblBvb2wgPSBFeGVjdXRh
YmxlUG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEsIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0la
RSk7Ci0jaWYgIUVOQUJMRShJTlRFUlBSRVRFUikKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
Q1JBU0goKTsKLSNlbmRpZgotICAgIH0KKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFs
RGF0YSYpOworICAgIAorICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemVBbGxvY2F0b3IoKTsKIAog
ICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogCiAgICAgc3RhdGljIGJvb2wgdW5kZXJNZW1vcnlQ
cmVzc3VyZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAg
IHN0YXRpYyB2b2lkIGR1bXBQcm9maWxlKCk7CisjZWxzZQorICAgIHN0YXRpYyB2b2lkIGR1bXBQ
cm9maWxlKCkgeyB9CisjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IHBv
b2xGb3JTaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4pCi0gICAgewotICAg
ICAgICAvLyBUcnkgdG8gZml0IGluIHRoZSBleGlzdGluZyBzbWFsbCBhbGxvY2F0b3IKLSAgICAg
ICAgQVNTRVJUKG1fc21hbGxBbGxvY2F0aW9uUG9vbCk7Ci0gICAgICAgIGlmIChuIDwgbV9zbWFs
bEFsbG9jYXRpb25Qb29sLT5hdmFpbGFibGUoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3NtYWxs
QWxsb2NhdGlvblBvb2w7Ci0KLSAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXMgbGFyZ2UsIHdl
IGp1c3QgcHJvdmlkZSBhIHVuc2hhcmVkIGFsbG9jYXRvcgotICAgICAgICBpZiAobiA+IEpJVF9B
TExPQ0FUT1JfTEFSR0VfQUxMT0NfU0laRSkKLSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxl
UG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEsIG4pOwotCi0gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBh
bGxvY2F0b3IKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBwb29sID0gRXhlY3V0YWJs
ZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUp
OwotCi0gICAgICAgIC8vIElmIHRoZSBuZXcgYWxsb2NhdG9yIHdpbGwgcmVzdWx0IGluIG1vcmUg
ZnJlZSBzcGFjZSB0aGFuIGluCi0gICAgICAgIC8vIHRoZSBjdXJyZW50IHNtYWxsIGFsbG9jYXRv
ciwgdGhlbiB3ZSB3aWxsIHVzZSBpdCBpbnN0ZWFkCi0gICAgICAgIGlmICgocG9vbC0+YXZhaWxh
YmxlKCkgLSBuKSA+IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAg
ICAgICBtX3NtYWxsQWxsb2NhdGlvblBvb2wgPSBwb29sOwotICAgICAgICByZXR1cm4gcG9vbC5y
ZWxlYXNlKCk7Ci0gICAgfQorICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKIAogI2lmIEVOQUJM
RShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2b2lkIG1ha2VXcml0YWJsZSh2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemUpCkBAIC0zNDgsNTAgKzI1Niw5IEBAIHByaXZhdGU6CiAj
aWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZvaWQgcmVwcm90
ZWN0UmVnaW9uKHZvaWQqLCBzaXplX3QsIFByb3RlY3Rpb25TZXR0aW5nKTsKICNlbmRpZgotCi0g
ICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX3NtYWxsQWxsb2NhdGlvblBvb2w7CiB9OwogCi1p
bmxpbmUgRXhlY3V0YWJsZVBvb2w6OkV4ZWN1dGFibGVQb29sKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9IHJvdW5kVXBBbGxvY2F0
aW9uU2l6ZShuLCBwYWdlU2l6ZSgpKTsKLSAgICBBbGxvY2F0aW9uIG1lbSA9IHN5c3RlbUFsbG9j
KGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFtZW0uYmFzZSgpKSB7Ci0gICAgICAgIHJlbGVhc2VFeGVj
dXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOwotICAgICAgICBtZW0gPSBzeXN0ZW1BbGxvYyhhbGxv
Y1NpemUpOwotICAgIH0KLSAgICBtX3Bvb2xzLmFwcGVuZChtZW0pOwotICAgIG1fZnJlZVB0ciA9
IHN0YXRpY19jYXN0PGNoYXIqPihtZW0uYmFzZSgpKTsKLSAgICBpZiAoIW1fZnJlZVB0cikKLSAg
ICAgICAgQ1JBU0goKTsgLy8gRmFpbGVkIHRvIGFsbG9jYXRlCi0gICAgbV9lbmQgPSBtX2ZyZWVQ
dHIgKyBhbGxvY1NpemU7Ci0gICAgZGVwcmVjYXRlZFR1cm5PZmZWZXJpZmllcigpOwotfQotCi1p
bmxpbmUgdm9pZCogRXhlY3V0YWJsZVBvb2w6OnBvb2xBbGxvY2F0ZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3VuZFVwQWxs
b2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgCi0gICAgQWxsb2NhdGlvbiByZXN1bHQg
PSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghcmVzdWx0LmJhc2UoKSkgewotICAg
ICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgcmVzdWx0
ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICAgICAgaWYgKCFyZXN1bHQuYmFzZSgpKQot
ICAgICAgICAgICAgQ1JBU0goKTsgLy8gRmFpbGVkIHRvIGFsbG9jYXRlCi0gICAgfQotICAgIAot
ICAgIEFTU0VSVChtX2VuZCA+PSBtX2ZyZWVQdHIpOwotICAgIGlmICgoYWxsb2NTaXplIC0gbikg
PiBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fZW5kIC0gbV9mcmVlUHRyKSkgewotICAgICAgICAvLyBS
ZXBsYWNlIGFsbG9jYXRpb24gcG9vbAotICAgICAgICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxj
aGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBuOwotICAgICAgICBtX2VuZCA9IHN0YXRpY19jYXN0PGNo
YXIqPihyZXN1bHQuYmFzZSgpKSArIGFsbG9jU2l6ZTsKLSAgICB9Ci0KLSAgICBtX3Bvb2xzLmFw
cGVuZChyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQuYmFzZSgpOwotfQotCi19Cit9IC8vIG5h
bWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpICYmIEVOQUJMRShBU1NFTUJMRVIp
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZp
eGVkVk1Qb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAJKHJldmlzaW9uIDk0MTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsOSBAQAogCiAjaW5jbHVkZSA8ZXJybm8uaD4K
IAotI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKICNpbmNsdWRlIDxzeXMvbW1hbi5oPgogI2luY2x1
ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHd0Zi9BVkxUcmVlLmg+CisjaW5jbHVkZSA8d3RmL01l
dGFBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZNVGFncy5oPgogCkBAIC00Niw0ODEgKzQ1LDEwNSBAQCB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLSNkZWZpbmUgVHdvUG93KG4pICgxdWxsIDw8
IG4pCi0KLWNsYXNzIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyB7Ci1wdWJsaWM6Ci0gICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzKHNpemVfdCBzaXplLCBzaXplX3QgYmxvY2tTaXplLCB1bnNp
Z25lZCBsb2cyQmxvY2tTaXplKQotICAgICAgICA6IG1fYmxvY2tTaXplKGJsb2NrU2l6ZSkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChibG9ja1NpemUgPT0gVHdvUG93KGxvZzJCbG9ja1NpemUpKTsK
LQotICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBibG9ja3MgbmVlZGVkIHRvIGhv
bGQgc2l6ZS4KLSAgICAgICAgc2l6ZV90IGJsb2NrTWFzayA9IGJsb2NrU2l6ZSAtIDE7Ci0gICAg
ICAgIG1fYmxvY2tDb3VudCA9IChzaXplICsgYmxvY2tNYXNrKSA+PiBsb2cyQmxvY2tTaXplOwot
Ci0gICAgICAgIC8vIEFsaWduIHRvIHRoZSBzbWFsbGVzdCBwb3dlciBvZiB0d28gPj0gbV9ibG9j
a0NvdW50LgotICAgICAgICBtX2Jsb2NrQWxpZ25tZW50ID0gMTsKLSAgICAgICAgd2hpbGUgKG1f
YmxvY2tBbGlnbm1lbnQgPCBtX2Jsb2NrQ291bnQpCi0gICAgICAgICAgICBtX2Jsb2NrQWxpZ25t
ZW50ICs9IG1fYmxvY2tBbGlnbm1lbnQ7Ci0gICAgfQotCi0gICAgc2l6ZV90IGJsb2NrU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tTaXplOyB9Ci0gICAgc2l6ZV90IGJsb2NrQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2Jsb2NrQ291bnQ7IH0KLSAgICBzaXplX3QgYmxvY2tBbGlnbm1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2Jsb2NrQWxpZ25tZW50OyB9Ci0KLSAgICBzaXplX3Qgc2l6ZSgp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ibG9ja1NpemUgKiBtX2Jsb2NrQ291bnQ7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIHNpemVfdCBtX2Jsb2NrU2l6ZTsKLSAgICBzaXplX3QgbV9ibG9j
a0NvdW50OwotICAgIHNpemVfdCBtX2Jsb2NrQWxpZ25tZW50OwotfTsKLQotdGVtcGxhdGU8dW5z
aWduZWQgbG9nMkVudHJpZXM+Ci1jbGFzcyBBbGxvY2F0aW9uVGFibGVMZWFmIHsKLSAgICB0eXBl
ZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZzJTdWJyZWdpb25TaXplID0gMTI7IC8vIDJeMTIgPT0gcGFnZXNpemUKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSArIGxv
ZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0gVHdv
UG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lvblNp
emUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBl
bnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRyaWVz
IDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZUxlYWZfZW50cmllc19m
aXRfaW5fQml0RmllbGQpOwotCi0gICAgQWxsb2NhdGlvblRhYmxlTGVhZigpCi0gICAgICAgIDog
bV9hbGxvY2F0ZWQoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgfkFsbG9jYXRpb25UYWJsZUxlYWYo
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90
IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA9PSBzdWJyZWdpb25TaXplKTsKLSAg
ICAgICAgQVNTRVJUKCFpc0Z1bGwoKSk7Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNp
emVDbGFzcy5ibG9ja0FsaWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xh
c3MuYmxvY2tDb3VudCgpOwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBz
cGFucyBvZiBmcmVlIGJsb2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBj
b3VudCkgLSAxKSA8PCAoYWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4g
dW5pdHMgb2YgYWxpZ25tZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBlbnRyaWVzOyBpICs9IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEobV9hbGxvY2F0
ZWQgJiBtYXNrKSkgewotICAgICAgICAgICAgICAgIG1fYWxsb2NhdGVkIHw9IG1hc2s7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIChpICsgKGFsaWdubWVudCAtIGNvdW50KSkgPDwgbG9nMlN1YnJl
Z2lvblNpemU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtYXNrIDw8PSBhbGlnbm1lbnQ7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIH0KLQotICAgIHZvaWQg
ZnJlZShzaXplX3QgbG9jYXRpb24sIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNz
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA9PSBzdWJyZWdp
b25TaXplKTsKLQotICAgICAgICBzaXplX3QgZW50cnkgPSBsb2NhdGlvbiA+PiBsb2cyU3VicmVn
aW9uU2l6ZTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsK
LSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsK
LQotICAgICAgICBBU1NFUlQoKG1fYWxsb2NhdGVkICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAg
IG1fYWxsb2NhdGVkICY9IH5tYXNrOwotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpCi0gICAg
ewotICAgICAgICByZXR1cm4gIW1fYWxsb2NhdGVkOwotICAgIH0KLQotICAgIGJvb2wgaXNGdWxs
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhfm1fYWxsb2NhdGVkOwotICAgIH0KLQotICAgIHN0
YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVnaW9uU2l6ZTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6ZShz
aXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uVGFibGVTaXplQ2xh
c3Moc2l6ZSwgc3VicmVnaW9uU2l6ZSwgbG9nMlN1YnJlZ2lvblNpemUpOwotICAgIH0KLQotI2lm
bmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2ln
bmVkIGluZGVudCA9IDApCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
aW5kZW50OyArK2kpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlMDh4OiBbJTAxNmxseF1cbiIsIChpbnQpcGFyZW50T2Zmc2V0
LCBtX2FsbG9jYXRlZCk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgQml0RmllbGQg
bV9hbGxvY2F0ZWQ7Ci19OwotCi0KLXRlbXBsYXRlPGNsYXNzIE5leHRMZXZlbD4KLWNsYXNzIExh
enlBbGxvY2F0aW9uVGFibGUgewotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBs
b2cyUmVnaW9uU2l6ZSA9IE5leHRMZXZlbDo6bG9nMlJlZ2lvblNpemU7Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGVudHJpZXMgPSBOZXh0TGV2ZWw6OmVudHJpZXM7Ci0KLSAgICBMYXp5QWxs
b2NhdGlvblRhYmxlKCkKLSAgICAgICAgOiBtX3B0cigwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+
TGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsK
LSAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBz
aXplQ2xhc3MpCi0gICAgewotICAgICAgICBpZiAoIW1fcHRyKQotICAgICAgICAgICAgbV9wdHIg
PSBuZXcgTmV4dExldmVsKCk7Ci0gICAgICAgIHJldHVybiBtX3B0ci0+YWxsb2NhdGUoc2l6ZUNs
YXNzKTsKLSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9u
VGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX3B0cik7
Ci0gICAgICAgIG1fcHRyLT5mcmVlKGxvY2F0aW9uLCBzaXplQ2xhc3MpOwotICAgICAgICBpZiAo
bV9wdHItPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZGVsZXRlIG1fcHRyOwotICAgICAgICAg
ICAgbV9wdHIgPSAwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhbV9wdHI7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Z1bGwoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHRyICYmIG1fcHRyLT5pc0Z1bGwoKTsKLSAgICB9Ci0K
LSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIE5leHRMZXZl
bDo6c2l6ZSgpOwotICAgIH0KLQotI2lmbmRlZiBOREVCVUcKLSAgICB2b2lkIGR1bXAoc2l6ZV90
IHBhcmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGluZGVudCA9IDApCi0gICAgewotICAgICAgICBB
U1NFUlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZHVtcChwYXJlbnRPZmZzZXQsIGluZGVudCk7
Ci0gICAgfQotI2VuZGlmCi0KLSAgICBzdGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNs
YXNzRm9yU2l6ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOZXh0TGV2ZWw6
OmNsYXNzRm9yU2l6ZShzaXplKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsKiBt
X3B0cjsKLX07Ci0KLXRlbXBsYXRlPGNsYXNzIE5leHRMZXZlbCwgdW5zaWduZWQgbG9nMkVudHJp
ZXM+Ci1jbGFzcyBBbGxvY2F0aW9uVGFibGVEaXJlY3RvcnkgewotICAgIHR5cGVkZWYgdWludDY0
X3QgQml0RmllbGQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlN1
YnJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IGxvZzJTdWJyZWdpb25TaXplICsgbG9nMkVudHJp
ZXM7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1YnJlZ2lvblNpemUgPSBUd29Qb3cobG9n
MlN1YnJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgcmVnaW9uU2l6ZSA9IFR3
b1Bvdyhsb2cyUmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGVudHJpZXMg
PSBUd29Qb3cobG9nMkVudHJpZXMpOwotICAgIENPTVBJTEVfQVNTRVJUKGVudHJpZXMgPD0gKHNp
emVvZihCaXRGaWVsZCkgKiA4KSwgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5X2VudHJpZXNfZml0
X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSgpCi0gICAgICAg
IDogbV9mdWxsKDApCi0gICAgICAgICwgbV9oYXNTdWJhbGxvY2F0aW9uKDApCi0gICAgewotICAg
IH0KLQotICAgIH5BbGxvY2F0aW9uVGFibGVEaXJlY3RvcnkoKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKGlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25U
YWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFz
cy5ibG9ja1NpemUoKSA8PSBzdWJyZWdpb25TaXplKTsKLSAgICAgICAgQVNTRVJUKCFpc0Z1bGwo
KSk7Ci0KLSAgICAgICAgaWYgKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8IHN1YnJlZ2lvblNpemUp
IHsKLSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDE7Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgZW50cmllczsgKytpLCBiaXQgKz0gYml0KSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1fZnVsbCAmIGJpdCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgc2l6ZV90IGxvY2F0aW9uID0gbV9zdWJhbGxvY2F0aW9uc1tpXS5hbGxvY2F0
ZShzaXplQ2xhc3MpOwotICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSBub3RGb3VuZCkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGRpZG4ndCBhbHJlYWR5IGhhdmUgYSBz
dWJyZWdpb24sIGl0IGRvZXMgbm93IQotICAgICAgICAgICAgICAgICAgICBtX2hhc1N1YmFsbG9j
YXRpb24gfD0gYml0OwotICAgICAgICAgICAgICAgICAgICAvLyBNaXJyb3IgdGhlIHN1YmFsbG9j
YXRpb24ncyBmdWxsIGJpdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc3ViYWxsb2NhdGlv
bnNbaV0uaXNGdWxsKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gYml0Owot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGkgKiBzdWJyZWdpb25TaXplKSB8IGxvY2F0aW9u
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBu
b3RGb3VuZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEEgYmxvY2sgaXMgYWxsb2NhdGVkIGlm
IGVpdGhlciBpdCBpcyBmdWxseSBhbGxvY2F0ZWQgb3IgY29udGFpbnMgc3ViYWxsb2NhdGlvbnMu
Ci0gICAgICAgIEJpdEZpZWxkIGFsbG9jYXRlZCA9IG1fZnVsbCB8IG1faGFzU3ViYWxsb2NhdGlv
bjsKLQotICAgICAgICBzaXplX3QgYWxpZ25tZW50ID0gc2l6ZUNsYXNzLmJsb2NrQWxpZ25tZW50
KCk7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAg
ICAgIC8vIFVzZSB0aGlzIG1hc2sgdG8gY2hlY2sgZm9yIHNwYW5zIG9mIGZyZWUgYmxvY2tzLgot
ICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IChhbGlnbm1l
bnQgLSBjb3VudCk7Ci0KLSAgICAgICAgLy8gU3RlcCBpbiB1bml0cyBvZiBhbGlnbm1lbnQgc2l6
ZS4KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7IGkgKz0gYWxpZ25t
ZW50KSB7Ci0gICAgICAgICAgICBpZiAoIShhbGxvY2F0ZWQgJiBtYXNrKSkgewotICAgICAgICAg
ICAgICAgIG1fZnVsbCB8PSBtYXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGln
bm1lbnQgLSBjb3VudCkpIDw8IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgbWFzayA8PD0gYWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBu
b3RGb3VuZDsKLSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0
aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXpl
Q2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVu
dHJ5ID0gbG9jYXRpb24gPj4gbG9nMlN1YnJlZ2lvblNpemU7Ci0KLSAgICAgICAgaWYgKHNpemVD
bGFzcy5ibG9ja1NpemUoKSA8IHN1YnJlZ2lvblNpemUpIHsKLSAgICAgICAgICAgIEJpdEZpZWxk
IGJpdCA9IDF1bGwgPDwgZW50cnk7Ci0gICAgICAgICAgICBtX3N1YmFsbG9jYXRpb25zW2VudHJ5
XS5mcmVlKGxvY2F0aW9uICYgKHN1YnJlZ2lvblNpemUgLSAxKSwgc2l6ZUNsYXNzKTsKLSAgICAg
ICAgICAgIC8vIENoZWNrIGlmIHRoZSBzdWJhbGxvY2F0aW9uIGlzIG5vdyBlbXB0eS4KLSAgICAg
ICAgICAgIGlmIChtX3N1YmFsbG9jYXRpb25zW2VudHJ5XS5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICAgICAgbV9oYXNTdWJhbGxvY2F0aW9uICY9IH5iaXQ7Ci0gICAgICAgICAgICAvLyBObyBuZWVk
IHRvIGNoZWNrLCBpdCBjbGVhcmx5IGlzbid0IGZ1bGwgYW55IG1vcmUhCi0gICAgICAgICAgICBt
X2Z1bGwgJj0gfmJpdDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemVfdCBjb3Vu
dCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAgICAgICBCaXRGaWVsZCBtYXNrID0g
KCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IGVudHJ5OwotICAgICAgICAgICAgQVNTRVJUKChtX2Z1
bGwgJiBtYXNrKSA9PSBtYXNrKTsKLSAgICAgICAgICAgIEFTU0VSVCghKG1faGFzU3ViYWxsb2Nh
dGlvbiAmIG1hc2spKTsKLSAgICAgICAgICAgIG1fZnVsbCAmPSB+bWFzazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIShtX2Z1
bGwgfCBtX2hhc1N1YmFsbG9jYXRpb24pOwotICAgIH0KLQotICAgIGJvb2wgaXNGdWxsKCkKLSAg
ICB7ICAgCi0gICAgICAgIHJldHVybiAhfm1fZnVsbDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6
ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lvblNpemU7Ci0gICAgfQotCi0g
ICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNp
emUpCi0gICAgewotICAgICAgICBpZiAoc2l6ZSA8IHN1YnJlZ2lvblNpemUpIHsKLSAgICAgICAg
ICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBzaXplQ2xhc3MgPSBOZXh0TGV2ZWw6OmNsYXNz
Rm9yU2l6ZShzaXplKTsKLSAgICAgICAgICAgIGlmIChzaXplQ2xhc3Muc2l6ZSgpIDwgTmV4dExl
dmVsOjpzaXplKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNpemVDbGFzczsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lv
blNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAg
dm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQot
ICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQotICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJTA4eDogWyIsIChpbnQpcGFyZW50T2Zmc2V0KTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGVudHJpZXM7ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVs
bCA8PCBpOwotICAgICAgICAgICAgY2hhciBjID0gbV9oYXNTdWJhbGxvY2F0aW9uICYgYml0Ci0g
ICAgICAgICAgICAgICAgPyAobV9mdWxsICYgYml0ID8gJ04nIDogJ24nKQotICAgICAgICAgICAg
ICAgIDogKG1fZnVsbCAmIGJpdCA/ICdGJyA6ICctJyk7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiVjIiwgYyk7Ci0gICAgICAgIH0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJdXG4i
KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgKytpKSB7Ci0g
ICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGk7Ci0gICAgICAgICAgICBzaXplX3Qg
b2Zmc2V0ID0gcGFyZW50T2Zmc2V0IHwgKHN1YnJlZ2lvblNpemUgKiBpKTsKLSAgICAgICAgICAg
IGlmIChtX2hhc1N1YmFsbG9jYXRpb24gJiBiaXQpCi0gICAgICAgICAgICAgICAgbV9zdWJhbGxv
Y2F0aW9uc1tpXS5kdW1wKG9mZnNldCwgaW5kZW50ICsgMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0j
ZW5kaWYKLQotcHJpdmF0ZToKLSAgICBOZXh0TGV2ZWwgbV9zdWJhbGxvY2F0aW9uc1tlbnRyaWVz
XTsKLSAgICAvLyBTdWJyZWdpb25zIGV4aXN0IGluIG9uZSBvZiBmb3VyIHN0YXRlczoKLSAgICAv
LyAoMSkgZW1wdHkgKGJvdGggYml0cyBjbGVhcikKLSAgICAvLyAoMikgZnVsbHkgYWxsb2NhdGVk
IGFzIGEgc2luZ2xlIGFsbG9jYXRpb24gKG1fZnVsbCBzZXQpCi0gICAgLy8gKDMpIHBhcnRpYWxs
eSBhbGxvY2F0ZWQgdGhyb3VnaCBzdWJhbGxvY2F0aW9ucyAobV9oYXNTdWJhbGxvY2F0aW9uIHNl
dCkKLSAgICAvLyAoNCkgZnVsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKGJv
dGggYml0cyBzZXQpCi0gICAgQml0RmllbGQgbV9mdWxsOwotICAgIEJpdEZpZWxkIG1faGFzU3Vi
YWxsb2NhdGlvbjsKLX07Ci0KLQotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVMZWFmPDY+IFBhZ2VU
YWJsZXMyNTZLQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PFBhZ2VUYWJsZXMy
NTZLQiwgNj4gUGFnZVRhYmxlczE2TUI7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9y
eTxMYXp5QWxsb2NhdGlvblRhYmxlPFBhZ2VUYWJsZXMxNk1CPiwgMT4gUGFnZVRhYmxlczMyTUI7
Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxMYXp5QWxsb2NhdGlvblRhYmxlPFBh
Z2VUYWJsZXMxNk1CPiwgNj4gUGFnZVRhYmxlczFHQjsKLQogI2lmIENQVShBUk0pCi10eXBlZGVm
IFBhZ2VUYWJsZXMxNk1CIEZpeGVkVk1Qb29sUGFnZVRhYmxlczsKK3N0YXRpYyBjb25zdCBzaXpl
X3QgZml4ZWRQb29sU2l6ZSA9IDE2ICogMTAyNCAqIDEwMjQ7CiAjZWxpZiBDUFUoWDg2XzY0KQot
dHlwZWRlZiBQYWdlVGFibGVzMUdCIEZpeGVkVk1Qb29sUGFnZVRhYmxlczsKK3N0YXRpYyBjb25z
dCBzaXplX3QgZml4ZWRQb29sU2l6ZSA9IDEwMjQgKiAxMDI0ICogMTAyNDsKICNlbHNlCi10eXBl
ZGVmIFBhZ2VUYWJsZXMzMk1CIEZpeGVkVk1Qb29sUGFnZVRhYmxlczsKK3N0YXRpYyBjb25zdCBz
aXplX3QgZml4ZWRQb29sU2l6ZSA9IDMyICogMTAyNCAqIDEwMjQ7CiAjZW5kaWYKIAotCi1jbGFz
cyBGaXhlZFZNUG9vbEFsbG9jYXRvcgoteworY2xhc3MgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAgRml4ZWRWTVBvb2xB
bGxvY2F0b3IoKQorICAgIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpCisgICAgICAg
IDogTWV0YUFsbG9jYXRvcigzMikgLy8gcm91bmQgdXAgYWxsIGFsbG9jYXRpb25zIHRvIDMyIGJ5
dGVzCiAgICAgewotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczI1NktCOjpzaXplKCkgPT0gMjU2
ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMTZNQjo6c2l6ZSgpID09IDE2ICog
MTAyNCAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczMyTUI6OnNpemUoKSA9PSAz
MiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMxR0I6OnNpemUoKSA9
PSAxMDI0ICogMTAyNCAqIDEwMjQpOwotCi0gICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVz
ZXJ2YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OnNp
emUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFC
TEUsIHRydWUpOworICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNl
cnZlV2l0aEd1YXJkUGFnZXMoZml4ZWRQb29sU2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBh
Z2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwogI2lmICFFTkFCTEUoSU5URVJQ
UkVURVIpCi0gICAgICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICBpZiAoIW1fcmVzZXJ2YXRp
b24pCiAgICAgICAgICAgICBDUkFTSCgpOwogI2VuZGlmCisgICAgICAgIGlmIChtX3Jlc2VydmF0
aW9uKSB7CisgICAgICAgICAgICBBU1NFUlQobV9yZXNlcnZhdGlvbi5zaXplKCkgPT0gZml4ZWRQ
b29sU2l6ZSk7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShtX3Jlc2VydmF0aW9uLmJh
c2UoKSwgbV9yZXNlcnZhdGlvbi5zaXplKCkpOworICAgICAgICB9CiAgICAgfQotIAotICAgIEV4
ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jKHNpemVfdCByZXF1ZXN0ZWRTaXplKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKHJlcXVlc3RlZFNpemUpOwotICAgICAgICBBbGxvY2F0aW9uVGFi
bGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JTaXplKHJlcXVlc3RlZFNpemUpOwotICAg
ICAgICBzaXplX3Qgc2l6ZSA9IHNpemVDbGFzcy5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChzaXpl
KTsKLQotICAgICAgICBpZiAoc2l6ZSA+PSBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OnNpemUoKSkK
LSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbigwLCAwKTsKLSAg
ICAgICAgaWYgKG1fcGFnZXMuaXNGdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJs
ZVBvb2w6OkFsbG9jYXRpb24oMCwgMCk7Ci0KLSAgICAgICAgc2l6ZV90IG9mZnNldCA9IG1fcGFn
ZXMuYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgaWYgKG9mZnNldCA9PSBub3RGb3VuZCkK
LSAgICAgICAgICAgIHJldHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbigwLCAwKTsKLQot
ICAgICAgICB2b2lkKiBwb2ludGVyID0gb2Zmc2V0VG9Qb2ludGVyKG9mZnNldCk7Ci0gICAgICAg
IG1fcmVzZXJ2YXRpb24uY29tbWl0KHBvaW50ZXIsIHNpemUpOwotICAgICAgICByZXR1cm4gRXhl
Y3V0YWJsZVBvb2w6OkFsbG9jYXRpb24ocG9pbnRlciwgc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9p
ZCBmcmVlKEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIGFsbG9jYXRpb24pCisgICAgCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYpCiAgICAg
ewotICAgICAgICB2b2lkKiBwb2ludGVyID0gYWxsb2NhdGlvbi5iYXNlKCk7Ci0gICAgICAgIHNp
emVfdCBzaXplID0gYWxsb2NhdGlvbi5zaXplKCk7Ci0gICAgICAgIEFTU0VSVChzaXplKTsKLQot
ICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBvaW50ZXIsIHNpemUpOwotCi0gICAgICAg
IEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBzaXplQ2xhc3MgPSBjbGFzc0ZvclNpemUoc2l6ZSk7
Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3Muc2l6ZSgpID09IHNpemUpOwotICAgICAgICBtX3Bh
Z2VzLmZyZWUocG9pbnRlclRvT2Zmc2V0KHBvaW50ZXIpLCBzaXplQ2xhc3MpOworICAgICAgICAv
LyBXZSdyZSBvcGVyYXRpbmcgaW4gYSBmaXhlZCBwb29sLCBzbyBuZXcgYWxsb2NhdGlvbiBpcyBh
bHdheXMgcHJvaGliaXRlZC4KKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgc2l6ZV90
IGFsbG9jYXRlZCgpCisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQq
IHBhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4gbV9yZXNlcnZhdGlvbi5jb21taXR0ZWQoKTsK
KyAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocGFnZSwgcGFnZVNpemUoKSk7CiAgICAgfQot
Ci0gICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
UGFnZUlzRnJlZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuICEhbV9yZXNlcnZh
dGlvbjsKKyAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpKTsK
ICAgICB9CiAKIHByaXZhdGU6Ci0gICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9y
U2l6ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBGaXhlZFZNUG9vbFBhZ2VU
YWJsZXM6OmNsYXNzRm9yU2l6ZShzaXplKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBvZmZzZXRUb1Bv
aW50ZXIoc2l6ZV90IG9mZnNldCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2Uo
KSkgKyBvZmZzZXQpOwotICAgIH0KLQotICAgIHNpemVfdCBwb2ludGVyVG9PZmZzZXQodm9pZCog
cG9pbnRlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGludHB0cl90
Pihwb2ludGVyKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVzZXJ2YXRpb24uYmFz
ZSgpKTsKLSAgICB9Ci0KICAgICBQYWdlUmVzZXJ2YXRpb24gbV9yZXNlcnZhdGlvbjsKLSAgICBG
aXhlZFZNUG9vbFBhZ2VUYWJsZXMgbV9wYWdlczsKIH07CiAKK3N0YXRpYyBGaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvcjsKIAotc3RhdGljIFNwaW5Mb2NrIHNwaW5sb2Nr
ID0gU1BJTkxPQ0tfSU5JVElBTElaRVI7Ci1zdGF0aWMgRml4ZWRWTVBvb2xBbGxvY2F0b3IqIGFs
bG9jYXRvciA9IDA7Ci0KK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9j
YXRvcigpCit7CisgICAgQVNTRVJUKCFhbGxvY2F0b3IpOworICAgIGFsbG9jYXRvciA9IG5ldyBG
aXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKK30KIAotc2l6ZV90IEV4ZWN1dGFibGVB
bGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCitFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVj
dXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9j
a0hvbGRlcigmc3BpbmxvY2spOwotICAgIHJldHVybiBhbGxvY2F0b3IgPyBhbGxvY2F0b3ItPmFs
bG9jYXRlZCgpIDogMDsKLX0gICAKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKK30KIAogYm9vbCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKLSAgICBTcGluTG9ja0hvbGRl
ciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIGlmICghYWxsb2NhdG9yKQotICAgICAgICBh
bGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xBbGxvY2F0b3IoKTsKLSAgICByZXR1cm4gYWxsb2Nh
dG9yLT5pc1ZhbGlkKCk7CisgICAgcmV0dXJuICEhYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCk7
CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7
Ci0gICAgLy8gVGVjaG5pY2FsbHkgd2Ugc2hvdWxkIHRha2UgdGhlIHNwaW4gbG9jayBoZXJlLCBi
dXQgd2UgZG9uJ3QgY2FyZSBpZiB3ZSBnZXQgc3RhbGUgZGF0YS4KLSAgICAvLyBUaGlzIGlzIG9u
bHkgcmVhbGx5IGEgaGV1cmlzdGljIGFueXdheS4KLSAgICByZXR1cm4gYWxsb2NhdG9yICYmIChh
bGxvY2F0b3ItPmFsbG9jYXRlZCgpID4gKEZpeGVkVk1Qb29sUGFnZVRhYmxlczo6c2l6ZSgpIC8g
MikpOworICAgIE1ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mgc3RhdGlzdGljcyA9IGFsbG9jYXRv
ci0+Y3VycmVudFN0YXRpc3RpY3MoKTsKKyAgICByZXR1cm4gc3RhdGlzdGljcy5ieXRlc0FsbG9j
YXRlZCA+IHN0YXRpc3RpY3MuYnl0ZXNSZXNlcnZlZCAvIDI7CiB9CiAKLUV4ZWN1dGFibGVQb29s
OjpBbGxvY2F0aW9uIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyhzaXplX3Qgc2l6ZSkKK1Bh
c3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxs
b2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCiB7Ci0g
ICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBBU1NFUlQoYWxs
b2NhdG9yKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yLT5hbGxvYyhzaXplKTsKKyAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXpl
SW5CeXRlcyk7CisgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgY2hhciBidWZbMjddOworICAg
ICAgICB0aW1lX3QgY3VycmVudFRpbWU7CisgICAgICAgIHRpbWUoJmN1cnJlbnRUaW1lKTsKKyAg
ICAgICAgY3RpbWVfcigmY3VycmVudFRpbWUsIGJ1Zik7CisgICAgICAgIHByaW50ZigiJXM6IEkn
bSBnaXZpbmcgaGVyIGFsbCBzaGUncyBnb3QsIENhcHRhaW4hXG4iLCBidWYpOworICAgICAgICBy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKKyAgICAgICAgcmVzdWx0ID0gYWxs
b2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9
CisKK3NpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQorewor
ICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7CiB9CiAKLXZvaWQgRXhlY3V0
YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24mIGFsbG9j
YXRpb24pIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQordm9pZCBFeGVjdXRh
YmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja19o
b2xkZXIoJnNwaW5sb2NrKTsKLSAgICBBU1NFUlQoYWxsb2NhdG9yKTsKLSAgICBhbGxvY2F0b3It
PmZyZWUoYWxsb2NhdGlvbik7CisgICAgYWxsb2NhdG9yLT5kdW1wUHJvZmlsZSgpOwogfQorI2Vu
ZGlmCiAKIH0KIAogCi0jZW5kaWYgLy8gSEFWRShBU1NFTUJMRVIpCisjZW5kaWYgLy8gRU5BQkxF
KEVYRUNVVEFCTEVfQUxMT0NBVE9SX0ZJWEVEKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU0OSw3ICs1NDksNyBAQCBKSVRDb2RlIEpJVDo6cHJpdmF0
ZUNvbXBpbGUoQ29kZVB0ciogZnVuCiAKICAgICBBU1NFUlQobV9qbXBUYWJsZS5pc0VtcHR5KCkp
OwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2ds
b2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBUcmFuc2xhdGUgdlBDIG9mZnNldHMg
aW50byBhZGRyZXNzZXMgaW4gSklUIGdlbmVyYXRlZCBjb2RlLCBmb3Igc3dpdGNoIHRhYmxlcy4K
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zd2l0Y2hlcy5zaXplKCk7ICsraSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIyMSwyMCArMjIxLDIw
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgaml0LnByaXZhdGVDb21waWxlUHV0QnlJ
ZFRyYW5zaXRpb24oc3R1YkluZm8sIG9sZFN0cnVjdHVyZSwgbmV3U3RydWN0dXJlLCBjYWNoZWRP
ZmZzZXQsIGNoYWluLCByZXR1cm5BZGRyZXNzLCBkaXJlY3QpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIHZvaWQgY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBUcmFt
cG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gY29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZXhlY3V0YWJsZVBvb2wsIGdsb2JhbERhdGEsIHRyYW1w
b2xpbmVzKTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5l
VHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMpOwogICAgICAgICB9CiAKLSAgICAg
ICAgc3RhdGljIENvZGVQdHIgY29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgTmF0aXZl
RnVuY3Rpb24gZnVuYykKKyAgICAgICAgc3RhdGljIENvZGVSZWYgY29tcGlsZUNUSU5hdGl2ZUNh
bGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoIWdsb2JhbERhdGEtPmNhblVzZUpJVCgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBDb2RlUHRyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvZGVSZWYo
KTsKICAgICAgICAgICAgIEpJVCBqaXQoZ2xvYmFsRGF0YSwgMCk7Ci0gICAgICAgICAgICByZXR1
cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChleGVjdXRhYmxlUG9vbCwgZ2xvYmFs
RGF0YSwgZnVuYyk7CisgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2
b2lkIHBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlYmxvY2ssIFN0cnVjdHVyZVN0dWJJ
bmZvKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciBy
ZXR1cm5BZGRyZXNzKTsKQEAgLTI3NCw5ICsyNzQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgdm9pZCBwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0
cnVjdHVyZSosIFN0cnVjdHVyZUNoYWluKiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVz
c1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSk7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihTdHJ1Y3R1cmVTdHViSW5mbyosIFN0cnVj
dHVyZSosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFN0cnVjdHVyZUNoYWluKiwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBib29sIGRpcmVjdCk7CiAKLSAgICAgICAg
dm9pZCBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBUcmFtcG9saW5lU3Ry
dWN0dXJlICp0cmFtcG9saW5lcyk7CisgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRh
KiwgVHJhbXBvbGluZVN0cnVjdHVyZSopOwogICAgICAgICBMYWJlbCBwcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgYm9vbCBpc0NvbnN0cnVjdCA9IGZhbHNlKTsKLSAg
ICAgICAgQ29kZVB0ciBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVj
dXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgTmF0aXZlRnVu
Y3Rpb24gZnVuYyk7CisgICAgICAgIENvZGVSZWYgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29t
cGlsZVBhdGNoR2V0QXJyYXlMZW5ndGgoUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKTsK
IAogICAgICAgICB2b2lkIGFkZFNsb3dDYXNlKEp1bXApOwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAjZW5kaWYKICNlbmRpZgogICAgICAgICBXZWFrUmFuZG9tIG1fcmFu
ZG9tR2VuZXJhdG9yOwotICAgICAgICBzdGF0aWMgQ29kZVB0ciBzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCk7
CisgICAgICAgIHN0YXRpYyBDb2RlUmVmIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0ds
b2JhbERhdGEqKTsKICAgICB9IEpJVF9DTEFTU19BTElHTk1FTlQ7CiAKICAgICBpbmxpbmUgdm9p
ZCBKSVQ6OmVtaXRfb3BfbG9vcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDEy
ICs1NiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBib29sIG9wZXJhdG9yICEoKSBj
b25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIW1fcmVmLm1fY29kZS5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgICAgICAgICAgcmV0dXJuICFtX3JlZjsKICAgICAgICAgfQogCiAg
ICAgICAgIENvZGVQdHIgYWRkcmVzc0ZvckNhbGwoKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9yZWYubV9jb2RlOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgb2Zmc2V0IGlu
IGJ5dGVzIG9mICdwb2ludGVySW50b0NvZGUnIGludG8KQEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIC8vIGJsb2NrIG9mIGNvZGUuICBJdCBpcyBBU1NFUlRlZCB0aGF0
IG5vIGNvZGVibG9jayA+NGdiIGluIHNpemUuCiAgICAgICAgIHVuc2lnbmVkIG9mZnNldE9mKHZv
aWQqIHBvaW50ZXJJbnRvQ29kZSkKICAgICAgICAgewotICAgICAgICAgICAgaW50cHRyX3QgcmVz
dWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
KyAgICAgICAgICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5jb2Rl
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiAgICAgICAgICAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpKSA9PSByZXN1bHQpOwogICAg
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihyZXN1bHQpOwogICAgICAgICB9
CkBAIC03NywyNCArNzcsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEV4ZWN1dGUg
dGhlIGNvZGUhCiAgICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoUmVnaXN0ZXJGaWxlKiBy
ZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVj
b2RlKGN0aVRyYW1wb2xpbmUobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lz
dGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KCksIGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6
ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJl
Z2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJl
bmNlKCksIGdsb2JhbERhdGEpKTsKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5leGNl
cHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQqIHN0
YXJ0KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZS5kYXRhTG9j
YXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZGF0YUxvY2F0aW9uKCk7
CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3Qgc2l6ZSgpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gbV9yZWYubV9zaXplOworICAgICAgICAgICAgQVNTRVJUKG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5zaXplKCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBFeGVjdXRhYmxlUG9vbCogZ2V0RXhlY3V0YWJsZVBvb2woKQor
ICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRhYmxlTWVtb3J5KCkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0YWJsZVBvb2wuZ2V0KCk7
CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBKSVRUeXBlIGppdFR5cGUoKQpAQCAtMTA0LDkgKzEwNCw5IEBA
IG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIEhvc3QgZnVuY3Rpb25zIGFyZSBhIGJpdCBz
cGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhleQogICAgICAgICAvLyBk
byBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wgY29udGFpbmluZyB0aGUg
dHJhbXBvbGluZS4KLSAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVQdHIg
Y29kZSkKKyAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVSZWYgY29kZSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24o
KSwgMCwgMCwgSG9zdENhbGxUaHVuayk7CisgICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2Rl
LCBIb3N0Q2FsbFRodW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAt
MTE2LDggKzExNiw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRUeXBlKQotICAgICAgICAg
ICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgSklUQ29kZShQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnksIEpJVFR5
cGUgaml0VHlwZSkKKyAgICAgICAgICAgIDogbV9yZWYoZXhlY3V0YWJsZU1lbW9yeSkKICAgICAg
ICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNp
b24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBU
cmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQog
ewogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogICAgIExhYmVsIHNvZnRNb2RCZWdp
biA9IGFsaWduKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFr
ZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKIAogICAgIC8vIEFsbCB0
cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5k
IHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxl
QWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNhbGwsIEZ1
bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRjaEJ1ZmZl
ci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9i
eV9pZF9zdHJpbmdfZmFpbCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxl
Q2NvbnN0cnVjdCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAK
ICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAg
ICpleGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQb29sOworICAgIFJlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4
ZWN1dGFibGVNZW1vcnkoKTsKIAogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHBh
dGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbEJlZ2luKTsKICAgICB0cmFtcG9saW5l
cy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFs
Q29uc3RydWN0QmVnaW4pOwpAQCAtMTc1LDYgKzE3NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG8KICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKICAg
ICB0cmFtcG9saW5lcy0+Y3RpU29mdE1vZHVsbyA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChz
b2Z0TW9kQmVnaW4pOwogI2VuZGlmCisgICAgCisgICAgcmV0dXJuIGV4ZWN1dGFibGVNZW1vcnku
cmVsZWFzZSgpOwogfQogCiBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVD
YWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0NvbnN0cnVjdCkKQEAgLTMxMiwx
MCArMzE0LDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAg
IHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxl
UG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorSklU
OjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKIHsKICAgICBDYWxsIG5hdGl2ZUNhbGw7
Ci0gICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5rID0gYWxpZ24oKTsKIAogICAgIGVtaXRQdXRJbW1l
ZGlhdGVUb0NhbGxGcmFtZUhlYWRlcigwLCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jayk7CiAKQEAg
LTQ0NywxMiArNDQ4LDEwIEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0
aXYKICAgICByZXQoKTsKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29w
eSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1h
Y2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgZXhlY3V0YWJsZVBvb2wpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKG5hdGl2ZUNhbGwsIEZ1bmN0
aW9uUHRyKGZ1bmMpKTsKLSAgICBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLQotICAgIHJl
dHVybiBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKKyAgICByZXR1
cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21v
dihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29s
PiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0
cnVjdHVyZSAqdHJhbXBvbGluZXMpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKIHsKICAgICAvLyAo
MikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Ig
c3RyaW5nIGxlbmd0aAogICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0gYWxpZ24oKTsKQEAg
LTE1Myw3ICsxNTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNh
bGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0
cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVy
cyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRj
aEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29w
X2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2Zh
aWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWls
KSk7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDb25zdHJ1Y3QsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29kZVJlZiBmaW5h
bENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBvb2wg
PSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9y
eUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7
CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJh
bXBvbGluZUF0KHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmly
dHVhbENvbnN0cnVjdExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0
cnVjdExpbmtCZWdpbik7CkBAIC0xNzMsNiArMTczLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxsID0gcGF0
Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CiAgICAgdHJhbXBvbGluZXMt
PmN0aU5hdGl2ZUNvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDb25z
dHJ1Y3RUaHVuayk7CiAgICAgdHJhbXBvbGluZXMtPmN0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUg
PSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQoc3RyaW5nTGVuZ3RoQmVnaW4pOworICAgIAorICAg
IHJldHVybiBleGVjdXRhYmxlTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAogSklUOjpMYWJlbCBKSVQ6
OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJv
b2wgaXNDb25zdHJ1Y3QpCkBAIC0yOTEsOSArMjkzLDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJ
VDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4
ZWN1dGFibGVQb29sPiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikK
K0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uKQogewotICAgIHJldHVybiBnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
NSw3ICsxNjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKEluc3RyCiAg
ICAgbV9ieXRlY29kZU9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CiB9CiAK
LUpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6
c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsK
ICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0xOTMs
OCArMTkzLDggQEAgSklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAg
IGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAg
ICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1w
KCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVt
cCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVk
SW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbCht
X2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7Cisg
ICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxT
dHViR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0ciha
ZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAt
NTQxLDcgKzU0MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8K
ICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBm
YWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBv
b2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsK
ICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJl
Y3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWls
KSk7CiAgICAgCkBAIC01NTAsMTAgKzU1MCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20s
IEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAg
fQogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5
TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBl
bnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShy
ZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29k
ZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJs
b2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBz
aXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02
MDYsNyArNjA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgog
ICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogICAgIEp1
bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIC8v
IFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNr
IHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJl
bCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zm
c2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjE3LDEzICs2MTYsMTIg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBh
dGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRk
ZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8g
Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVy
VG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2Fy
cmF5X2ZhaWwpKTsKQEAgLTY2Niw3ICs2NjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG8oU3RyCiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0
byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSBy
b3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dD
YXNlQ2FsbCk7CkBAIC02ODQsMTMgKzY4MiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG8oU3RyCiAgICAgfQogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBj
cmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwot
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gRmlu
YWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8g
anVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFu
Y2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7
CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJl
bChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkp
OwpAQCAtNzIzLDcgKzcyMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxm
TGlzdCgKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMp
OwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNv
cmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5k
KCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtNzMxLDcgKzcyOCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgfQog
ICAgIH0gICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1
cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYg
KCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCk7CiAgICAgCkBAIC03NDAsMTQgKzczNywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUg
aG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBk
ZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVu
dHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRj
aCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJl
IGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91
dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3Rv
TGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc4Nyw3ICs3ODQsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVt
cCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAg
ICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAo
aXRlci0+dG8pCkBAIC03OTUsMjEgKzc5MiwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBp
bmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFs
IHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2lu
ID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGlu
ZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxh
YmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRp
bmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90
b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0Jl
Z2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGUoKTsKIAotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5z
ZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVj
dHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRo
ZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2Up
OwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5l
LmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0
KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZz
ZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODU0LDcgKzg1MSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAg
ICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdp
bigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0
ZXItPnRvKQpAQCAtODYyLDIyICs4NTksMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0
QnlJZENoYWluTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5m
b3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
bG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7
CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJl
bChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5l
LmNvZGUoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0
UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUg
aG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBk
ZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAg
ICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVh
dGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVj
dHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1f
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBjaGFp
bik7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGlu
ZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVy
ZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29u
c3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNz
UHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTIxLDcgKzkxOCw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29t
cGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZz
ZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9v
bCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
ICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtOTM1LDEzICs5MzIsMTMg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVm
ZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBh
dGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRk
ZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIENv
ZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJS
b3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9y
ZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgog
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA5
NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBu
YW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1KSVQ6OkNvZGVQdHIgSklUOjpz
dHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1Ykdl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQg
aml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtNzcsOCArNzcsOCBAQCBKSVQ6OkNvZGVQ
dHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMy
KDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVybiBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFs
RGF0YSwgJmppdCk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQog
CiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92
YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2Uo
aXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0
cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5q
c1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1
YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0TmFrZWRDYWxsKENvZGVM
b2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJH
ZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJv
LCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpA
QCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2Fs
bCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9v
bCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8g
Y3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwog
CkBAIC01NjQsMTAgKzU2NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFu
c2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9u
UHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7Cisg
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVs
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRy
ZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9
CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MTUsNyArNjE0
LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIGVtaXRG
YXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHN1Y2Nlc3Mg
PSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZv
cm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNs
b3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBz
dHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0
QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MjYsMTMgKzYyNSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0
UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhh
dCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlM
YWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJS
b3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRo
YW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0
aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjczLDcgKzY3MSw3IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9IGVsc2UKICAg
ICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9m
ZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAg
ICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMg
YmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxB
dE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTY5MCwxMyArNjg4
LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAg
fQogICAgIH0KICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBp
dCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJl
bCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgog
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0
aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4g
b25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzI2LDcgKzcyMyw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgY29tcGlsZUdl
dERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDAsIHN0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0KTsKICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5l
ZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9y
IGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7
CkBAIC03MzYsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZM
aXN0KAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0
aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4K
LSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRp
b25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAg
IGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8t
PmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93
Q2FzZUNhbGwpOwogCkBAIC03NDUsMTQgKzc0MiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUg
aG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBk
ZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGVBZGRlbmR1bSgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90
b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRp
ZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNl
dCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC03OTEsNyArNzg4LDcgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgp
OwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2Nv
ZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAg
IGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigp
OyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODAxLDIwICs3OTgsMjAgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIH0KIAogICAgIC8v
IFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNr
IHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4g
PSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
Q2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2Fz
ZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRv
IHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3Jl
IHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkp
OwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCks
IGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAg
ICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERh
dGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwg
cHJvdG90eXBlU3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8g
c2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAg
IENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5q
dW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlw
ZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC04NTcsNyArODU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluTGlzdAogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2Jq
ZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAg
IGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigp
OyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODY3LDIyICs4NjQsMjIgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0KIAogICAgIC8v
IFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNr
IHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4g
PSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tl
dHNPZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNy
ZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIGNo
YWluKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNh
bGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0
dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVD
aGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0
IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0
ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyNSw3ICs5MjIsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNvbXBp
bGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAg
IEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVl
ZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsK
QEAgLTk0MSwxMyArOTM4LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFp
bihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIC8v
IFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRl
ZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRy
eUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFi
ZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBh
dGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2Vu
ZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRk
cmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQxMDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzU3LDggKzc1Nyw4IEBAIEpJVFRodW5rczo6SklUVGh1bmtzKEpTR2xvYmFsRGF0YSogZ2xvYmEK
ICAgICBpZiAoIWdsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xv
YmFsRGF0YSwgJm1fZXhlY3V0YWJsZVBvb2wsICZtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUpOwotICAg
IEFTU0VSVChtX2V4ZWN1dGFibGVQb29sKTsKKyAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBKSVQ6
OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1fdHJhbXBvbGluZVN0
cnVjdHVyZSk7CisgICAgQVNTRVJUKCEhbV9leGVjdXRhYmxlTWVtb3J5KTsKICNpZiBDUFUoQVJN
X1RIVU1CMikKICAgICAvLyBVbmZvcnR1bmF0ZSB0aGUgYXJtIGNvbXBpbGVyIGRvZXMgbm90IGxp
a2UgdGhlIHVzZSBvZiBvZmZzZXRvZiBvbiBKSVRTdGFja0ZyYW1lIChzaW5jZSBpdCBjb250YWlu
cyBub24gUE9EIHR5cGVzKSwKICAgICAvLyBhbmQgdGhlIE9CSkVDVF9PRkZTRVRPRiBtYWNybyBk
b2VzIG5vdCBhcHBlYXIgY29uc3RhbnRpc2ggZW5vdWdoIGZvciBpdCB0byBiZSBoYXBweSB3aXRo
IGl0cyB1c2UgaW4gQ09NUElMRV9BU1NFUlQKQEAgLTE2MDgsNyArMTYwOCw3IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBpZiAoc3R1YkluZm8t
PmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgICAgICBBU1NF
UlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBDb2RlTG9jYXRpb25M
YWJlbCgpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
KTsKKyAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhp
Y0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpLCBzdHViSW5mby0+dS5n
ZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgIHN0dWJJ
bmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBz
dHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTE2MzQsMTIgKzE2
MzQsMTIgQEAgc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZwogICAgIHN3
aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
cHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRp
bmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBz
dHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpKTsKLSAgICAg
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAg
IHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAy
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAg
ICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5m
by0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUu
Z2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5l
ID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFBy
b3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CkBAIC0zNTcyLDExICszNTcyLDExIEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCB0b18KICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZy
YW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aVN0dWIoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIHN0ZDo6cGFpcjxDVElTdHViTWFw
OjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRv
ciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKCkpOwogICAgIGlmIChlbnRyeS5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0
LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7
CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CiAg
ICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQ7CiB9CiAKQEAgLTM1ODQsNyArMzU4NCw3IEBA
IE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBh
aXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVu
Y3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAg
ICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29u
ZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwg
SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLCBm
dW5jdGlvbiksIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlv
bkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2Jh
bERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxl
Q1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3Qo
KSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAgcmV0dXJuIGVudHJ5LmZp
cnN0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKQEAgLTM1OTIsOCArMzU5Miw4IEBAIE5hdGl2ZUV4ZWN1
dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0
aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFw
LT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50
cnkuZmlyc3QtPnNlY29uZCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSA9
IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCkpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAgICAgIGVudHJ5
LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUo
Kmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhv
c3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRhKSA6
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNl
dCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2Rl
LCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVS
ZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcikp
OwogICAgIH0KICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQs
NyArMjk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjdGlOYXRpdmVDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3Rp
TmF0aXZlQ29uc3RydWN0OyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTb2Z0
TW9kdWxvKCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVNvZnRNb2R1bG87IH0K
IAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3R1YihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2VuZXJhdG9yKTsKIAogICAg
ICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5h
dGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1
YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IpOwpAQCAtMzAy
LDExICszMDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJIb3N0RnVu
Y3Rpb25TdHVicygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRo
dW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IENUSVN0dWJNYXA7CisgICAgICAg
IHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBD
VElTdHViTWFwOwogICAgICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKICAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPE5hdGl2ZUZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+ID4gSG9z
dEZ1bmN0aW9uU3R1Yk1hcDsKICAgICAgICAgT3duUHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1f
aG9zdEZ1bmN0aW9uU3R1Yk1hcDsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4
ZWN1dGFibGVQb29sOworICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9l
eGVjdXRhYmxlTWVtb3J5OwogCiAgICAgICAgIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgbV90cmFtcG9s
aW5lU3RydWN0dXJlOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Nw
ZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3BlY2lhbGl6ZWRUaHVu
a0pJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0
aWMgY29uc3QgaW50IFRoaXNBcmd1bWVudCA9IC0xOwotICAgICAgICBTcGVjaWFsaXplZFRodW5r
SklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1
dGFibGVQb29sKiBwb29sKQorICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGludCBleHBlY3Rl
ZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgICAgICA6IG1fZXhw
ZWN0ZWRBcmdDb3VudChleHBlY3RlZEFyZ0NvdW50KQogICAgICAgICAgICAgLCBtX2dsb2JhbERh
dGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgICwgbV9wb29sKHBvb2wpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGFy
Z3VtZW50cwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWws
IEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAq
IChpbnQpc2l6ZW9mKFJlZ2lzdGVyKSksIFRydXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsg
MSkpKTsKQEAgLTEyMywxMyArMTIyLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBmaW5hbGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBmYWxsYmFjaykKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRo
aXMsIG1fcG9vbC5nZXQoKSk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGds
b2JhbERhdGEsIHRoaXMpOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVz
LCBDb2RlTG9jYXRpb25MYWJlbChmYWxsYmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhtX2NhbGxzW2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7Ci0gICAgICAg
ICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgICAgICAg
ICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICB9CiAKICAgICAg
ICAgLy8gQXNzdW1lcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNlcyBmcFJlZ2lzdGVyMCBh
cyB0aGUgZmlyc3QgYXJndW1lbnQKQEAgLTE2Myw3ICsxNjIsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAgICAgICAgIGludCBtX2V4cGVjdGVkQXJnQ291bnQ7CiAgICAgICAgIEpTR2xv
YmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1f
cG9vbDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVyZXM7CiAgICAg
ICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI+ID4gbV9jYWxsczsKICAgICB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDI2ICs2MywyNiBAQCBzdGF0aWMgdm9p
ZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVuCiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hh
ckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQp
OwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAg
cmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRh
LCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAg
ICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERh
dGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBm
cm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0g
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgLy8gbG9hZCBjaGFyIGNv
ZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDEpOwpAQCAtOTAsMTEgKzkwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9t
Q2hhckNvZGVUaHVua0cKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1
dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwg
Z2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKQot
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0Lmxv
YWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBAIC0xNzgsMTIg
KzE3OCwxMiBAQCBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpOwogZGVmaW5lVW5hcnlE
b3VibGVPcFdyYXBwZXIoZmxvb3IpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCk7
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAg
U3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAh
aml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBAIC0x
OTcsMTEgKzE5NywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRv
CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9v
bCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERh
dGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwog
ICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0
aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJB
cmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAg
aml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTIyMCwxMSAr
MjIwLDExIEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvQ29uc3RhbnQKIHN0YXRp
YyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5l
Z2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBy
b3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwg
Z2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFs
RGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0
LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRK
dW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpA
QCAtMjM5LDM3ICsyMzksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5l
cmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhw
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
cG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQot
ICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQ
b2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAg
IGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUo
VW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3Vi
bGVPcFdyYXBwZXIobG9nKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0
YSwgcG9vbCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNl
bGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
KyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWpp
dC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQu
Y2FsbERvdWJsZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpOwogICAgIGppdC5y
ZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsK
LSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBT
cGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBw
b3J0c0RvdWJsZUJpdG9wcygpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0Lmxv
YWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1w
KTsKICAgICBqaXQucnNoaWZ0MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBA
IC0yODYsMTEgKzI4NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0
b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBw
b29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxE
YXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhKTsK
ICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIAogICAgIGppdC5sb2FkRG91YmxlKCZvbmVDb25z
dGFudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0LmxvYWREb3VibGVB
cmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmgJKHJldmlzaW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDIwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogICAgIGNsYXNzIEpTR2xvYmFs
RGF0YTsKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNsYXNzIE1hY3JvQXNzZW1i
bGVyQ29kZVB0cjsKKyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLSAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciAoKlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEq
LCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhl
Y3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJs
ZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2VpbFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwg
RXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9v
bCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcG93
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKKyAgICB0eXBl
ZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEq
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJD
b2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3
Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEV4ZWN1dGFibGVCYXNlIEJh
c2U7CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSog
Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNh
bGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBj
b25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCisgICAgICAgIHN0YXRp
YyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1
Y3RvcikKICAgICAgICAgewogICAgICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZTsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAJKHJldmlzaW9u
IDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEyICsyOSwxMyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKIAorI2luY2x1ZGUgIkV4
ZWN1dGFibGVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJIZWFwLmgiCi0jaW5jbHVkZSAiZHRvYS5o
IgogI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRl
ICJkdG9hLmgiCiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogCkBAIC01Myw2ICs1NCw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRp
bmdPbmNlKCkKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlm
CiAgICAgSlNHbG9iYWxEYXRhOjpzdG9yZVZQdHJzKCk7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFE
UykKICAgICBSZWdpc3RlckZpbGU6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICNlbmRpZgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShy
ZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNiBAQCBKU0dsb2JhbERhdGE6
OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFy
Z3VtZW50QnVmZmVyKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBleGVjdXRhYmxlQWxs
b2NhdG9yKCp0aGlzKQotICAgICwgcmVnZXhBbGxvY2F0b3IoKnRoaXMpCiAjZW5kaWYKICAgICAs
IGxleGVyKG5ldyBMZXhlcih0aGlzKSkKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQpAQCAtNDQw
LDYgKzQzOSw5IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpzdG9wU2FtcGxpbmcoKQogdm9pZCBKU0ds
b2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpbnRlcnBy
ZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhlYyk7CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKyAgICBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgSlNH
bG9iYWxEYXRhOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQxMDgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkzLDcgKzE5Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFC
TEUoQVNTRU1CTEVSKQogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFibGVBbGxv
Y2F0b3I7Ci0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgcmVnZXhBbGxvY2F0b3I7CiAjZW5k
aWYKIAogI2lmICFFTkFCTEUoSklUKQpAQCAtMjE2LDcgKzIxNSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkKICAg
ICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywgZ2Vu
ZXJhdG9yKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3Vu
aXQvdW5pdHRlc3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvdW5pdC91bml0dGVzdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3VuaXQvdW5pdHRlc3RzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFk
aW5nLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFs
bG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9SZWRCbGFja1RyZWUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKKy8vIFRlc3Qgc3VwcG9ydAorCisj
ZGVmaW5lIFJVTl9TVUlURShleHByZXNzaW9uKSBkbyB7ICAgICAgICAgICAgICBcCisgICAgICAg
IHByaW50ZigiJXM6XG4iLCAjZXhwcmVzc2lvbik7ICAgICAgICAgICBcCisgICAgICAgIChleHBy
ZXNzaW9uKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwor
I2RlZmluZSBSVU5fVEVTVChleHByZXNzaW9uKSBkbyB7ICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBwcmludGYoIiAgICVzOiAiLCAjZXhwcmVzc2lvbik7ICAgICAgICAgICAgXAorICAgICAg
ICBmZmx1c2goc3Rkb3V0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAo
ZXhwcmVzc2lvbik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBwcmlu
dGYoIk9LXG4iKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDAp
CisKKyNkZWZpbmUgVEVTVF9BU1NFUlQoZXhwcmVzc2lvbikgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCEoZXhwcmVzc2lvbikpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHByaW50
ZigiRkFJTDogJXM6JXM6JWQ6IGFzc2VydGlvbiAlcyBmYWlsZWQhXG4iLCBfX0ZJTEVfXywgX19G
VU5DVElPTl9fLCBfX0xJTkVfXywgI2V4cHJlc3Npb24pOyBcCisgICAgICAgICAgICBDUkFTSCgp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworc3RhdGljIHZvaWQgcHJpbnRWYWx1
ZShib29sIHZhbHVlKQoreworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgcHJpbnRmKCJ0cnVlIik7
CisgICAgZWxzZQorICAgICAgICBwcmludGYoImZhbHNlIik7Cit9CisKK3N0YXRpYyB2b2lkIHBy
aW50VmFsdWUoaW50IHZhbHVlKQoreworICAgIHByaW50ZigiJWQiLCB2YWx1ZSk7Cit9CisKK3N0
YXRpYyB2b2lkIHByaW50VmFsdWUoc2l6ZV90IHZhbHVlKQoreworICAgIHByaW50ZigiMHglbHgi
LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50VmFsdWUodm9pZCogdmFsdWUpCit7Cisg
ICAgcHJpbnRmKCIlcCIsIHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0YXRp
YyB2b2lkIGFzc2VydEVxdWFsSW1wbChjb25zdCBjaGFyKiBmaWxlTmFtZSwgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogYWN0dWFsU3RyaW5nLCBU
IGFjdHVhbCwgVCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9IGV4cGVjdGVkKSB7Cisg
ICAgICAgIHByaW50ZigiRkFJTDogJXM6JXM6JWQ6IGV4cGVjdGVkICVzIHRvIGJlICIsIGZpbGVO
YW1lLCBmdW5jdGlvbk5hbWUsIGxpbmVOdW1iZXIsIGFjdHVhbFN0cmluZyk7CisgICAgICAgIHBy
aW50VmFsdWUoZXhwZWN0ZWQpOworICAgICAgICBwcmludGYoIiBidXQgd2FzICIpOworICAgICAg
ICBwcmludFZhbHVlKGFjdHVhbCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgQ1JB
U0goKTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdGF0aWMgdm9pZCBhc3Nl
cnRFcXVhbEltcGwoY29uc3QgY2hhciogZmlsZU5hbWUsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGFjdHVhbFN0cmluZywgVCBhY3R1YWwsIGlu
dCBleHBlY3RlZCkKK3sKKyAgICBpZiAoYWN0dWFsICE9IChUKWV4cGVjdGVkKSB7CisgICAgICAg
IHByaW50ZigiRkFJTDogJXM6JXM6JWQ6IGV4cGVjdGVkICVzIHRvIGJlICIsIGZpbGVOYW1lLCBm
dW5jdGlvbk5hbWUsIGxpbmVOdW1iZXIsIGFjdHVhbFN0cmluZyk7CisgICAgICAgIHByaW50VmFs
dWUoZXhwZWN0ZWQpOworICAgICAgICBwcmludGYoIiBidXQgd2FzICIpOworICAgICAgICBwcmlu
dFZhbHVlKGFjdHVhbCk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgQ1JBU0goKTsK
KyAgICB9Cit9CisKKyNkZWZpbmUgVEVTVF9BU1NFUlRfRVFVQUwoYWN0dWFsLCBleHBlY3RlZCkg
YXNzZXJ0RXF1YWxJbXBsKF9fRklMRV9fLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjYWN0dWFs
LCBhY3R1YWwsIGV4cGVjdGVkKQorCisvLyBUZXN0cyBmb3IgUmVkQmxhY2tUcmVlCisKK2NsYXNz
IFJlZEJsYWNrVHJlZVRlc3RzIHsKK3ByaXZhdGU6CisgICAgUmVkQmxhY2tUcmVlVGVzdHMoKSB7
IH0KKyAgICAKK3B1YmxpYzoKKyAgICBzdGF0aWMgdm9pZCBydW5UZXN0cygpCisgICAgeworICAg
ICAgICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIiKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REcml2
ZXIoIip4QHkheiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2EiKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithKnhAeSF6IikpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0RHJpdmVyKCIrYSphQGEhYSIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2Er
YiIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERyaXZlcigiK2ErYitjIikpOworICAgICAgICBS
VU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdERy
aXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkIikpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrZStmK2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oiKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3REcml2ZXIoIithK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28rcCtxK3Ircyt0K3Urdit4K3kreiphKmIqYypk
KmUqZipnKmgqaSpqKmsqbCptKm4qbypwKnEqcipzKnQqdSp2KncqeCp5KnohYSFiIWMhZCFlIWYh
ZyFoIWkhaiFrIWwhbSFuIW8hcCFxIXIhcyF0IXUhdiF3IXgheSF6IikpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0RHJpdmVyKCIrZCtkK20rd0BkQG1Ad0BhQGdAcSIpKTsKKyAgICAgICAgUlVOX1RF
U1QodGVzdERyaXZlcigiK2QrZCtkK2QrZCtkK2QrZCtkK2QrZitmK2YrZitmK2YrZitoK2graStq
K2srbCttK28rcCtxK3IrekBhQGJAY0BkQGVAZkBnQGhAaUBqQGtAbEBtQG5Ab0BwQHFAckBzQHRA
dUB2QHdAeEB5QHoiKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB1bnNpZ25lZCBj
b3VudGVyOworICAgIAorICAgIHN0cnVjdCBQYWlyIHsKKyAgICAgICAgY2hhciBrZXk7CisgICAg
ICAgIHVuc2lnbmVkIHZhbHVlOworICAgICAgICAKKyAgICAgICAgUGFpcigpIHsgfQorICAgICAg
ICAKKyAgICAgICAgUGFpcihjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgICAgICAgICA6
IGtleShrZXkpCisgICAgICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYWlyJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleSA9PSBvdGhlci5rZXk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhaXImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5IDwgb3RoZXIua2V5
OworICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIFZlY3RvcjxQYWlyLCAxNj4g
UGFpclZlY3RvcjsKKyAgICAKKyAgICBzdGF0aWMgUGFpclZlY3RvciBmaW5kRXhhY3QoUGFpclZl
Y3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciByZXN1
bHQ7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNW
ZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5k
ZXgpLmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhc1ZlY3Rvci5h
dChpbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQocmVzdWx0
LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZW1vdmUoUGFpclZlY3RvciYgYXNWZWN0
b3IsIHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGFzVmVjdG9yLmF0KGluZGV4KSA9IGFz
VmVjdG9yLmxhc3QoKTsKKyAgICAgICAgYXNWZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KKyAg
ICAKKyAgICBzdGF0aWMgUGFpclZlY3RvciBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoUGFp
clZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgY2hhciBiZXN0S2V5
ID0gMDsgLy8gYXNzaWdubWVudCB0byBtYWtlIGdjYyBoYXBweQorICAgICAgICBib29sIGZvdW5k
S2V5ID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAoYXNWZWN0
b3IuYXQoaW5kZXgpLmtleSA+PSBrZXkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXNWZWN0b3Iu
YXQoaW5kZXgpLmtleSA8IGJlc3RLZXkgfHwgIWZvdW5kS2V5KSB7CisgICAgICAgICAgICAgICAg
ICAgIGZvdW5kS2V5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYmVzdEtleSA9IGFzVmVj
dG9yLmF0KGluZGV4KS5rZXk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBQYWlyVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgCisg
ICAgICAgIGlmICghZm91bmRLZXkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGZpbmRFeGFjdChhc1ZlY3RvciwgYmVzdEtleSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIGFzc2VydEZvdW5kQW5kUmVtb3ZlKFBhaXJWZWN0b3ImIGFz
VmVjdG9yLCBjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgc2l6ZV90IGZvdW5kSW5kZXggPSAwOyAvLyBt
YWtlIGNvbXBpbGVycyBoYXBweQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5CisgICAgICAgICAgICAg
ICAgICAgICYmIGFzVmVjdG9yLmF0KGluZGV4KS52YWx1ZSA9PSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICBURVNUX0FTU0VSVCghZm91bmQpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmb3Vu
ZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBURVNUX0FTU0VSVChmb3VuZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJlbW92ZShhc1ZlY3RvciwgZm91bmRJbmRleCk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgZGVsaWJlcmF0ZWx5IHBhc3NlcyBhIGNvcHkgb2YgdGhlIHZlY3Rvci4KKyAgICBz
dGF0aWMgdm9pZCBhc3NlcnRFcXVhbChSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+JiBhc1Ry
ZWUsIFBhaXJWZWN0b3IgYXNWZWN0b3IpCisgICAgeworICAgICAgICBmb3IgKFJlZEJsYWNrVHJl
ZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIGN1cnJlbnQgPSBhc1RyZWUuZmlyc3QoKTsgY3VycmVu
dDsgY3VycmVudCA9IGFzVHJlZS5zdWNjZXNzb3IoY3VycmVudCkpCisgICAgICAgICAgICBhc3Nl
cnRGb3VuZEFuZFJlbW92ZShhc1ZlY3RvciwgY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoUmVk
QmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBSZWRCbGFja1RyZWU8Y2hhciwgdW5z
aWduZWQ+OjpOb2RlKiBub2RlLCBQYWlyVmVjdG9yIGZvdW5kVmFsdWVzLCBjaGFyIGtleSkKKyAg
ICB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChu
b2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxj
aGFyLCB1bnNpZ25lZD46Ok5vZGUqIHByZXZOb2RlID0gbm9kZTsKKyAgICAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICAgICBub2RlID0gcHJldk5vZGU7CisgICAgICAgICAgICAgICAgcHJldk5v
ZGUgPSBhc1RyZWUucHJlZGVjZXNzb3IocHJldk5vZGUpOworICAgICAgICAgICAgfSB3aGlsZSAo
cHJldk5vZGUgJiYgcHJldk5vZGUtPmtleSA9PSBrZXkpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICBURVNU
X0FTU0VSVCghcHJldk5vZGUgfHwgcHJldk5vZGUtPmtleSA8IGtleSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShm
b3VuZFZhbHVlcywgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbm9kZSA9IGFzVHJlZS5zdWNjZXNzb3Iobm9kZSk7CisgICAgICAgICAg
ICAgICAgVEVTVF9BU1NFUlQoIW5vZGUgfHwgbm9kZS0+a2V5ID49IGtleSk7CisgICAgICAgICAg
ICB9IHdoaWxlIChub2RlICYmIG5vZGUtPmtleSA9PSBrZXkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBURVNUX0FTU0VSVChmb3VuZFZhbHVlcy5pc0VtcHR5KCkpOworICAgIH0KKyAg
ICAKKyAgICAvLyBUaGUgY29udHJvbCBzdHJpbmcgaXMgYSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBv
ZiBjb21tYW5kcy4gRWFjaAorICAgIC8vIGNvbW1hbmQgaXMgdHdvIGNoYXJhY3RlcnMsIHdpdGgg
dGhlIGZpcnN0IGlkZW50aWZ5aW5nIHRoZSBvcGVyYXRpb24KKyAgICAvLyBhbmQgdGhlIHNlY29u
ZCBnaXZpbmcgYSBrZXkuIFRoZSBjb21tYW5kcyBhcmU6CisgICAgLy8gICt4ICBBZGQgeAorICAg
IC8vICAqeCAgRmluZCBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAorICAgIC8vICBAeCAgRmluZCBh
bGwgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBzbWFsbGVzdCBrZXkgdGhhdCBpcyBncmVhdGVyIHRo
YW4gb3IgZXF1YWwgdG8geAorICAgIC8vICAheCAgUmVtb3ZlIGFsbCBlbGVtZW50cyBlcXVhbCB0
byB4CisgICAgc3RhdGljIHZvaWQgdGVzdERyaXZlcihjb25zdCBjaGFyKiBjb250cm9sU3RyaW5n
KQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciBhc1ZlY3RvcjsKKyAgICAgICAgUmVkQmxhY2tU
cmVlPGNoYXIsIHVuc2lnbmVkPiBhc1RyZWU7CisgICAgICAgIAorICAgICAgICBmb3IgKGNvbnN0
IGNoYXIqIGN1cnJlbnQgPSBjb250cm9sU3RyaW5nOyAqY3VycmVudDsgY3VycmVudCArPSAyKSB7
CisgICAgICAgICAgICBjaGFyIGNvbW1hbmQgPSBjdXJyZW50WzBdOworICAgICAgICAgICAgY2hh
ciBrZXkgPSBjdXJyZW50WzFdOworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSArK2NvdW50
ZXI7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChjb21tYW5kKTsKKyAgICAgICAg
ICAgIEFTU0VSVChrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGNvbW1h
bmQpIHsKKyAgICAgICAgICAgIGNhc2UgJysnOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tU
cmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IG5ldyBSZWRCbGFja1RyZWU8Y2hhciwg
dW5zaWduZWQ+OjpOb2RlOworICAgICAgICAgICAgICAgIG5vZGUtPmtleSA9IGtleTsKKyAgICAg
ICAgICAgICAgICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGFzVHJlZS5p
bnNlcnQobm9kZSk7CisgICAgICAgICAgICAgICAgYXNWZWN0b3IuYXBwZW5kKFBhaXIoa2V5LCB2
YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgY2FzZSAnKic6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFj
a1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRFeGFjdChrZXkp
OworICAgICAgICAgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgICAgICAgICBURVNUX0FT
U0VSVF9FUVVBTChub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZVZh
bHVlc0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KSwga2V5KTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2Fz
ZSAnQCc6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpO
b2RlKiBub2RlID0gYXNUcmVlLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChrZXkpOworICAg
ICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJU
KG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRTYW1lVmFsdWVz
Rm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9y
LCBrZXkpLCBub2RlLT5rZXkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgICAgICBURVNUX0FTU0VSVChmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoYXNWZWN0b3Is
IGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyEnOiB7CisgICAgICAgICAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIs
IHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJU
X0VRVUFMKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydEZv
dW5kQW5kUmVtb3ZlKGFzVmVjdG9yLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJU
KGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisj
aWZuZGVmIE5ERUJVRworICAgICAgICAgICAgYXNUcmVlLmNoZWNrQ29uc2lzdGVuY3koKTsKKyNl
bmRpZgorICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoYXNUcmVlLnNpemUoKSwgYXNWZWN0
b3Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVxdWFsKGFzVHJlZSwgYXNWZWN0b3IpOwor
ICAgICAgICB9CisgICAgfQorfTsKKwordW5zaWduZWQgUmVkQmxhY2tUcmVlVGVzdHM6OmNvdW50
ZXI7CisKKy8vIFRlc3RzIGZvciBNZXRhQWxsb2NhdG9yCisKK2NsYXNzIE1ldGFBbGxvY2F0b3JU
ZXN0cyB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JUZXN0cygpIHsgfQorCitwdWJsaWM6
CisgICAgc3RhdGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyAgICAgICAgUlVOX1RFU1QodGVz
dE5vdGhpbmcoKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RBbGxvY1plcm8oKSk7CisgICAgICAg
IFJVTl9URVNUKHRlc3RPbmVBbGxvYygzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0T25lQWxs
b2MoNjQpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdE9uZUFsbG9jKHBhZ2VTaXplKCkqMikpOwor
ICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMCkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgMCkpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgNjQsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDY0LCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RS
ZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVw
ZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIsIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFJlcGVh
dEFsbG9jRnJlZSgzMiwgNjQsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRB
bGxvY0ZyZWUoNjQsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVwZWF0QWxs
b2NGcmVlKHBhZ2VTaXplKCkgKiAyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmVw
ZWF0QWxsb2NGcmVlKDMyLCBwYWdlU2l6ZSgpICogMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0
ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCkgKiAyLCAzMiwgMCkpOworICAgICAgICBSVU5f
VEVTVCh0ZXN0UmVwZWF0QWxsb2NGcmVlKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgKiAyLCAwKSk7
CisgICAgICAgIFJVTl9URVNUKHRlc3RSZXBlYXRBbGxvY0ZyZWUocGFnZVNpemUoKSAqIDIsIHBh
Z2VTaXplKCksIDApKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgz
MiwgMzIsIDEyOCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMy
LCA2NCwgMTI4KSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoNjQs
IDMyLCAxMjgpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwg
cGFnZVNpemUoKSAtIDMyLCBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaW1w
bGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFnZVNpemUoKSAqIDIpKTsKKyAg
ICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShwYWdlU2l6ZSgpLCAzMiwgcGFn
ZVNpemUoKSAqIDIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShw
YWdlU2l6ZSgpLCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpICogMikpOworICAgICAgICBSVU5fVEVT
VCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNU
KHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAzMiwgMCkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgcGFnZVNpemUoKSAtIDMyLCAzMiwg
cGFnZVNpemUoKSAtIDY0LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RklGT0FsbG9j
KEVhZ2VyRmlsbCwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZPQWxsb2Mo
RWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAwKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RGSUZPQWxs
b2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAzMiwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0
RklGT0FsbG9jKEVhZ2VyRmlsbCwgcGFnZVNpemUoKSAtIDMyLCAzMiwgcGFnZVNpemUoKSAtIDY0
LCA2NCwgMCkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RmlsbEhlYXAoMzIsIGRlZmF1bHRQYWdl
c0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMikpOworICAgICAgICBSVU5fVEVTVCh0ZXN0RmlsbEhl
YXAocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwKSk7CisgICAgICAgIFJVTl9URVNUKHRl
c3RGaWxsSGVhcChwYWdlU2l6ZSgpICogMiwgZGVmYXVsdFBhZ2VzSW5IZWFwIC8gMikpOworICAg
ICAgICBSVU5fVEVTVCh0ZXN0UmlnaHRBbGxvY2F0aW9uKDMyLCBwYWdlU2l6ZSgpLCAzMiwgcGFn
ZVNpemUoKSkpOworICAgICAgICBSVU5fVEVTVCh0ZXN0UmlnaHRBbGxvY2F0aW9uKHBhZ2VTaXpl
KCkgLyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSkpOworICAgICAg
ICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKSk7CisgICAg
ICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVjaykp
OworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZpdCg2NCwgNjQsIDEwMCwgRG9udFJ1blNhbml0
eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwgMywgUnVuU2Fu
aXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQoOTYsIDY0LCAxMCwgRG9u
dFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RCZXN0Rml0KDk2LCA2NCwg
MTAwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdEJlc3RGaXQo
OTYsIDk2LCAzLCBSdW5TYW5pdHlDaGVjaykpOworICAgICAgICBSVU5fVEVTVCh0ZXN0QmVzdEZp
dCg5NiwgOTYsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgUlVOX1RFU1QodGVz
dEJlc3RGaXQoOTYsIDk2LCA4MCwgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIFJVTl9U
RVNUKHRlc3RTaHJpbmsoNjQsIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFn
ZVNpemUoKSwgMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgpLCBw
YWdlU2l6ZSgpIC0gMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgp
ICogMiwgMzIpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6ZSgpICogMiwg
cGFnZVNpemUoKSArIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmsocGFnZVNpemUo
KSAqIDIsIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgUlVOX1RFU1QodGVzdFNocmluayhwYWdlU2l6
ZSgpICogMiwgcGFnZVNpemUoKSAtIDMyKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RTaHJpbmso
cGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKiAyIC0gMzIpKTsKKyAgICAgICAgUlVOX1RFU1Qo
dGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwLCBk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3RE
ZW1hbmRBbGxvY0NvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCoyLCBkZWZh
dWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFJVTl9URVNUKHRlc3REZW1h
bmRBbGxvY0RvbnRDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAqMiwgZGVm
YXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgZW51bSBTYW5pdHlDaGVja01vZGUgeyBSdW5TYW5pdHlDaGVjaywgRG9udFJ1blNhbml0eUNo
ZWNrIH07CisgICAgCisgICAgZW51bSBIZWFwR3Jvd3RoTW9kZSB7IERvbnRHcm93SGVhcCwgRm9y
VGVzdERlbWFuZEFsbG9jQ29hbGVzY2UsIEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZSB9
OworICAgIAorICAgIHN0YXRpYyBIZWFwR3Jvd3RoTW9kZSBjdXJyZW50SGVhcEdyb3d0aE1vZGU7
CisgICAgc3RhdGljIHNpemVfdCBhbGxvd0FsbG9jYXRlUGFnZXM7CisgICAgc3RhdGljIHNpemVf
dCByZXF1ZXN0ZWROdW1QYWdlczsKKworICAgIGNsYXNzIFNpbXBsZVRlc3RBbGxvY2F0b3I6IHB1
YmxpYyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNpbXBsZVRlc3RBbGxv
Y2F0b3IoKQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKQorICAgICAgICB7CisgICAg
ICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkpLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB+U2ltcGxlVGVzdEFsbG9jYXRvcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3JEZXN0cm95ZWQpOwor
ICAgICAgICAgICAgYWxsb2NhdG9yRGVzdHJveWVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFn
ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAoY3VycmVudEhlYXBHcm93dGhNb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIERvbnRHcm93SGVhcDoKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRm9yVGVzdERlbWFuZEFs
bG9jQ29hbGVzY2U6CisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2Fs
ZXNjZTogeworICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKGFsbG93QWxsb2NhdGVQYWdlcyk7
CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoYWxsb3dBbGxvY2F0ZVBhZ2VzID49IG51bVBh
Z2VzKTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IG51bVBhZ2VzOworICAg
ICAgICAgICAgICAgIG51bVBhZ2VzID0gYWxsb3dBbGxvY2F0ZVBhZ2VzOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAgICAgICAgICBp
ZiAoY3VycmVudEhlYXBHcm93dGhNb2RlID09IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKQor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2Ug
KyBkZWZhdWx0UGFnZXNJbkhlYXAgKyBvZmZzZXQpICogcGFnZVNpemUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gMDsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnRlciA9IDA7IGNvdW50ZXIg
PCBudW1QYWdlcyArIG9mZnNldDsgKytjb3VudGVyKSB7CisgICAgICAgICAgICAgICAgICAgIHBh
Z2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Ynl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRlciA8IHBhZ2VTaXplKCk7ICsrYnl0ZUNvdW50ZXIp
CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFkZGl0aW9u
YWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVh
bCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIHRoZSBwYWdlIHNob3VsZCBiZSBib3RoIGZyZWUgYW5kIHVubWFwcGVkLgorICAgICAgICAg
ICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFn
ZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNzID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAgICAg
ICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRk
cmVzcykpKTsKKyAgICAgICAgICAgIHBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlIG9mIG9iamVjdHMgYXQgdGhp
cyBwb2ludCwgYnV0IGl0IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgLy8gYmUgbWFwcGVkLgor
ICAgICAgICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90IGFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJlc3MgPCByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyArK2FkZHJlc3MpCisg
ICAgICAgICAgICAgICAgVEVTVF9BU1NFUlQoIWJ5dGVTdGF0ZShyZWludGVycHJldF9jYXN0PHZv
aWQqPihhZGRyZXNzKSkpOworICAgICAgICAgICAgcGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJhc2VQYWdlID0gMTsKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZGVmYXVsdFBhZ2VzSW5IZWFwID0gMTAwOworICAgIAorICAgIHN0YXRp
YyB1bnNpZ25lZCBhZGRpdGlvbmFsUGFnZXNJbkhlYXA7CisgICAgCisgICAgc3RhdGljIFZlY3Rv
cjxib29sLCAwPiogbWVtb3J5TWFwOworICAgIHN0YXRpYyBWZWN0b3I8Ym9vbCwgMD4qIHBhZ2VN
YXA7CisgICAgc3RhdGljIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOworICAgIAorICAgIHN0YXRp
YyBTaW1wbGVUZXN0QWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgCisgICAgc3RhdGljIHZvaWQg
dGVzdE5vdGhpbmcoKQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgdGhhdCBjcmVhdGluZyBhbmQg
ZGVzdHJveWluZyBhbiBhbGxvY2F0b3Igd29ya3MuCisgICAgICAgIAorICAgICAgICBzZXRVcCgp
OworICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0
QWxsb2NaZXJvKCkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoYXQgYWxsb2NhdGluZyBhIHpl
cm8tbGVuZ3RoIGJsb2NrIHJldHVybnMgMCBhbmQKKyAgICAgICAgLy8gZG9lcyBub3QgY2hhbmdl
IGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworCisgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICog
cGFnZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsLT5zdGFydCgpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
ZnJlZShmaW5hbCk7CisKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gVGVz
dHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6IGFsbG9jYXRlIG9uZSB0aGluZyBhbmQgZnJlZSBp
dC4gQWxzbworICAgICAgICAvLyB2ZXJpZmllcyB0aGF0IHRoZSBzdGF0ZSBvZiBwYWdlcyBpcyBj
b3JyZWN0LgorICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemUpOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUt
PnNpemVJbkJ5dGVzKCksIHNpemUpOworICAgICAgICBURVNUX0FTU0VSVChwYWdlU3RhdGUoYmFz
ZVBhZ2UpKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgY29u
ZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoaGFuZGxl
KTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRp
YyB2b2lkIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc2l6ZV90IGZpcnN0U2l6ZSwgLi4uKQorICAgIHsK
KyAgICAgICAgLy8gVGVzdHMgcmlnaHQtY29hbGVzY2luZyBieSByZXBlYXRlZGx5IGFsbG9jYXRp
bmcgYW5kIGZyZWVpbmcuIFRoZSBpZGVhCisgICAgICAgIC8vIGlzIHRoYXQgaWYgeW91IGFsbG9j
YXRlIHNvbWV0aGluZyBhbmQgdGhlbiBmcmVlIGl0LCB0aGVuIHRoZSBoZWFwIHNob3VsZAorICAg
ICAgICAvLyBsb29rIGlkZW50aWNhbCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhlIGFsbG9jYXRp
b24gZHVlIHRvIGEgcmlnaHQtY29hbGVzY2UKKyAgICAgICAgLy8gb2YgdGhlIGZyZWVkIGNodW5r
IGFuZCB0aGUgYWxyZWFkeS1mcmVlIG1lbW9yeSwgYW5kIHNvIHN1YnNlcXVlbnQKKyAgICAgICAg
Ly8gYWxsb2NhdGlvbnMgc2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3Qgb25lLgor
ICAgICAgICAKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxl
KTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAg
ICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAg
ICAgICAgdmFfc3RhcnQoYXJnTGlzdCwgZmlyc3RTaXplKTsKKyAgICAgICAgd2hpbGUgKHNpemVf
dCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBzaXplX3QpKSB7CisgICAgICAgICAgICBo
YW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9F
UVVBTChoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICog
cGFnZVNpemUoKSkpOworICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXpl
SW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZp
cm0oaGFuZGxlKTsKKyAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgfQorICAgICAg
ICB2YV9lbmQoYXJnTGlzdCk7CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHNpemVfdCBmaXJz
dFNpemUsIHNpemVfdCBzZWNvbmRTaXplLCBzaXplX3QgdGhpcmRTaXplKQorICAgIHsKKyAgICAg
ICAgLy8gQWxsb2NhdGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0U2l6ZSwgdGhlbiBzb21ldGhp
bmcgb2Ygc2l6ZSBzZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAgICAvLyBmcmVlcyB0aGUgZmly
c3QgYWxsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5kIHRoZW4gYXR0ZW1wdHMgdG8g
YWxsb2NhdGUgdGhlCisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRpbmcgdGhhdCBpdCBhbGxvY2F0
ZWQgYXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAgICAgICAgCisgICAgICAgIC8v
IE5vdGUgdGhhdCB0aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFsbG9jYXRpb24sIHdoaWNoIHdp
bGwgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8gVGh1cyB0aGUgY29ycmVjdCB3
YXkgb2YgcnVubmluZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgc2Vjb25kU2l6ZSBpcwor
ICAgICAgICAvLyBwaWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IG5ldmVyIHN0cmFkZGxlcyBh
IHBhZ2UuCisgICAgICAgIAorICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJU
X0VRVUFMKGZpcnN0SGFuZGxlLT5zaXplSW5CeXRlcygpLCBmaXJzdFNpemUpOworICAgICAgICAK
KyAgICAgICAgY29uZmlybShmaXJzdEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJt
YXJrKGZpcnN0SGFuZGxlKTsKKworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRI
YW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
c2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkgKyBmaXJzdFNpemUpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vj
b25kSGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAg
IGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7Cisg
ICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAg
ICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oc2Vjb25k
SGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFuZGxlKTsKKyAg
ICAgICAgCisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNv
bmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhl
YXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTCh0aGlyZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHRo
aXJkSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0aGlyZFNpemUpOworICAgICAgICAKKyAgICAgICAg
Y29uZmlybSh0aGlyZEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHRoaXJk
SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUodGhpcmRIYW5kbGUpOworICAgICAgICAK
KyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgZW51bSBUZXN0RklGT0FsbG9j
TW9kZSB7IEZpbGxBdEVuZCwgRWFnZXJGaWxsIH07CisgICAgc3RhdGljIHZvaWQgdGVzdEZJRk9B
bGxvYyhUZXN0RklGT0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAgeworICAgICAgICAvLyBUaGlz
IHdpbGwgdGVzdCB0aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVzY2UgKGZyZWVpbmcgdGhlIGxl
ZnQtbW9zdAorICAgICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hlbiB0aGUgY2h1bmsgdG8gdGhl
IHJpZ2h0IG9mIGl0IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAgIC8vIGZ1bGx5IGV4ZXJjaXNl
IGxlZnQtY29hbGVzY2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiBJbiBFYWdlckZpbGwKKyAgICAg
ICAgLy8gbW9kZSwgdGhpcyBhbHNvIHRlc3RzIHBlcmZlY3QtZml0IGFsbG9jYXRpb24gYW5kIG5v
LWNvYWxlc2NpbmcgZnJlZS4KKyAgICAgICAgCisgICAgICAgIHNldFVwKCk7CisKKyAgICAgICAg
c2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TWV0YUFsbG9j
YXRvckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAgICAgIAorICAgICAgICB2YV9saXN0IGFyZ0xp
c3Q7CisgICAgICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIG1vZGUpOworICAgICAgICB3aGlsZSAoc2l6
ZV90IHNpemVJbkJ5dGVzID0gdmFfYXJnKGFyZ0xpc3QsIHNpemVfdCkpIHsKKyAgICAgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAg
ICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplKSk7CisgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVz
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICAg
ICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKKyAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBzaXpl
SW5CeXRlczsKKyAgICAgICAgfQorICAgICAgICB2YV9lbmQoYXJnTGlzdCk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzLnNpemUoKTsg
KytpbmRleCkKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlcy5hdChpbmRleCkpOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHNpemVTb0ZhciA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQg
aW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBzaXplU29GYXIgKz0gaGFuZGxlcy5hdChpbmRleCktPnNpemVJbkJ5dGVzKCk7CisgICAgICAg
ICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEVh
Z2VyRmlsbCkgeworICAgICAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9
IGFsbG9jYXRlKHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
aGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRv
dGFsU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaGFuZGxlcy5zaXpl
KCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGVz
Lmxhc3QoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25m
aXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25m
aXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgc2l6ZVNv
RmFyLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChzaXplU29GYXIgPT0gdG90YWxTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZp
cm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAp
ICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gRmls
bEF0RW5kKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbEhhbmRsZSA9
IGFsbG9jYXRlKHRvdGFsU2l6ZSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5h
bEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdl
U2l6ZSgpKSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbEhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSwgdG90YWxTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmly
bShmaW5hbEhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhmaW5hbEhh
bmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoZmluYWxIYW5kbGUpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgdm9pZCB0ZXN0RmlsbEhlYXAoc2l6ZV90IHNpemVJbkJ5dGVzLCBzaXplX3QgbnVtQWxs
b2NhdGlvbnMpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVmVj
dG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAgICAKKyAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdGUoc2l6ZUluQnl0ZXMsIERvbnRSdW5T
YW5pdHlDaGVjaykpOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAg
CisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKSk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQWxs
b2NhdGlvbnM7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBE
b250UnVuU2FuaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAg
ICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lk
IHRlc3RSaWdodEFsbG9jYXRpb24oc2l6ZV90IGZpcnN0TGVmdFNpemUsIHNpemVfdCBmaXJzdFJp
Z2h0U2l6ZSwgc2l6ZV90IHNlY29uZExlZnRTaXplLCBzaXplX3Qgc2Vjb25kUmlnaHRTaXplKQor
ICAgIHsKKyAgICAgICAgc2V0VXAoKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUqIGZpcnN0TGVmdCA9IGFsbG9jYXRlKGZpcnN0TGVmdFNpemUpOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChmaXJzdExlZnQtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogZmlyc3RSaWdodCA9IGFsbG9jYXRlKGZpcnN0UmlnaHRTaXplKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoZmlyc3RSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRMZWZ0ID0gYWxsb2NhdGUo
c2Vjb25kTGVmdFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRMZWZ0LT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBm
aXJzdExlZnQtPnNpemVJbkJ5dGVzKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIHNlY29uZFJpZ2h0ID0gYWxsb2NhdGUoc2Vjb25kUmlnaHRTaXplKTsKKyAgICAg
ICAgVEVTVF9BU1NFUlRfRVFVQUwoc2Vjb25kUmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSAtIGZp
cnN0UmlnaHQtPnNpemVJbkJ5dGVzKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RM
ZWZ0KTsKKyAgICAgICAgZnJlZShmaXJzdFJpZ2h0KTsKKyAgICAgICAgZnJlZShzZWNvbmRMZWZ0
KTsKKyAgICAgICAgZnJlZShzZWNvbmRSaWdodCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VT
aXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAg
ICAgICBmcmVlKGZpbmFsKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3RCZXN0Rml0KHNpemVfdCBmaXJzdFNpemUsIHNpemVf
dCBzdGVwLCB1bnNpZ25lZCBudW1TbG90cywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9k
ZSkKKyAgICB7CisgICAgICAgIHNldFVwKCk7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TWV0
YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXNUb0ZyZWU7CisgICAgICAgIFZlY3RvcjxNZXRh
QWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgVmVjdG9yPHZvaWQqLCAwPiBs
b2NhdGlvbnM7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHRvRnJlZSA9IGFsbG9jYXRlKHNp
emUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRvRnJlZS0+c3RhcnQoKSAhPSBoYW5kbGVzLmxh
c3QoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlc1RvRnJlZS5hcHBlbmQo
dG9GcmVlKTsKKyAgICAgICAgICAgICAgICAgICAgdG9GcmVlID0gYWxsb2NhdGUoc2l6ZSwgc2Fu
aXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZyYWdnZXIgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5
Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZyYWdnZXItPnN0YXJ0
KCksIHRvRnJlZS0+ZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2NhdGlvbnMu
YXBwZW5kKHRvRnJlZS0+c3RhcnQoKSk7CisKKyAgICAgICAgICAgIGhhbmRsZXNUb0ZyZWUuYXBw
ZW5kKHRvRnJlZSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChmcmFnZ2VyKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc2l6ZSArPSBzdGVwOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBU1NFUlQobG9jYXRpb25zLnNpemUoKSA9PSBudW1TbG90cyk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzVG9GcmVlLnNp
emUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlc1RvRnJlZS5hdChpbmRleCks
IHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBzaXplID0gZmlyc3RTaXplOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90czsgKytpbmRl
eCkgeworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogYmVzdEZpdCA9IGFsbG9jYXRl
KHNpemUgLSAzMiwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
VEVTVF9BU1NFUlQoYmVzdEZpdC0+c3RhcnQoKSA9PSBsb2NhdGlvbnMuYXQoaW5kZXgpCisgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBiZXN0Rml0LT5lbmQoKSA9PSByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9jYXRpb25zLmF0KGluZGV4KSkg
KyBzaXplKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IHNtYWxsID0gYWxsb2NhdGUoMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBpZiAo
YmVzdEZpdC0+c3RhcnQoKSA9PSBsb2NhdGlvbnMuYXQoaW5kZXgpKQorICAgICAgICAgICAgICAg
IFRFU1RfQVNTRVJUX0VRVUFMKHNtYWxsLT5zdGFydCgpLCBiZXN0Rml0LT5lbmQoKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoc21hbGwtPmVu
ZCgpLCBiZXN0Rml0LT5zdGFydCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZShi
ZXN0Rml0LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgZnJlZShzbWFsbCwgc2FuaXR5
Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSArPSBzdGVwOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXgg
PCBudW1TbG90czsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlcy5hdChpbmRleCks
IHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCksIHNhbml0
eUNoZWNrTW9kZSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGZpbmFsLT5zdGFydCgpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
CisgICAgICAgIGZyZWUoZmluYWwsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAg
ICB0ZWFyRG93bigpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCB0ZXN0U2hyaW5rKHNp
emVfdCBmaXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplKQorICAgIHsKKyAgICAgICAgc2V0VXAo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSB0aGluZyB0aGF0IHdpbGwgYmUg
c2hydW5rCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKGZp
cnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBTaHJpbmsgaXQsIGFuZCBtYWtlIHN1cmUg
dGhhdCBvdXIgc3RhdGUgcmVmbGVjdHMgdGhlIHNocmlua2FnZS4KKyAgICAgICAgbm90aWZ5RnJl
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oaGFu
ZGxlLT5zdGFydCgpKSArIHNlY29uZFNpemUpLCBmaXJzdFNpemUgLSBzZWNvbmRTaXplKTsKKyAg
ICAgICAgCisgICAgICAgIGhhbmRsZS0+c2hyaW5rKHNlY29uZFNpemUpOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNlY29uZFNpemUpOworICAgICAg
ICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0
aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0eS4KKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9jYXRv
ci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICAK
KyAgICAgICAgLy8gQWxsb2NhdGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgaGVhcC4KKyAgICAgICAg
TWV0YUFsbG9jYXRvckhhbmRsZSogcmVtYWluZGVyID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5I
ZWFwICogcGFnZVNpemUoKSAtIHNlY29uZFNpemUpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVB
TChyZW1haW5kZXItPnN0YXJ0KCksIGhhbmRsZS0+ZW5kKCkpOworICAgICAgICAKKyAgICAgICAg
ZnJlZShyZW1haW5kZXIpOworICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAg
ICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBlbXB0eSBhbmQgZmluaXNoIHVwLgorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVh
cCAqIHBhZ2VTaXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChmaW5hbC0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIAorICAgICAgICBmcmVlKGZpbmFsKTsKKyAgICAgICAgCisgICAgICAgIHRlYXJEb3duKCk7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHNp
emVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdlcywgc2l6ZV90IHNlY29uZFNpemUpCisgICAg
eworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFsbG9j
YXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxl
ID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIFRFU1RfQVNTRVJUKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoIWFs
bG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRl
c3REZW1hbmRBbGxvY0NvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1Q
YWdlczsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRs
ZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgVEVTVF9BU1NFUlQo
Y3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIFRFU1RfQVNT
RVJUX0VRVUFMKGFsbG93QWxsb2NhdGVQYWdlcywgMCk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VR
VUFMKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBh
Z2VTaXplKCkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnN0YXJ0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVh
cCkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9
IDA7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShz
ZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShhbGxvY2F0ZSgoZGVmYXVsdFBh
Z2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAg
dGVhckRvd24oKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgdGVzdERlbWFuZEFsbG9j
RG9udENvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdlcywgc2l6ZV90IHNl
Y29uZFNpemUpCisgICAgeworICAgICAgICBzZXRVcCgpOworICAgICAgICAKKyAgICAgICAgZnJl
ZShhbGxvY2F0ZShmaXJzdFNpemUpKTsKKyAgICAgICAgZnJlZShhbGxvY2F0ZShkZWZhdWx0UGFn
ZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0b3It
PmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7
CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFs
bG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2Nh
dG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIFRFU1RfQVNTRVJUKCFhbGxvY2F0
b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVt
YW5kQWxsb2NEb250Q29hbGVzY2U7CisgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBh
Z2VzOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxl
ID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVChj
dXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAgVEVTVF9BU1NF
UlRfRVFVQUwoYWxsb3dBbGxvY2F0ZVBhZ2VzLCAwKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFV
QUwocmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRTaXplICsgcGFnZVNpemUoKSAtIDEpIC8gcGFn
ZVNpemUoKSk7CisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKHNlY29uZEhhbmRsZS0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFw
ICsgMSkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICByZXF1ZXN0ZWROdW1QYWdl
cyA9IDA7CisgICAgICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0
ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworCisgICAg
ICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAg
ICAgIAorICAgICAgICBURVNUX0FTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBh
Z2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAg
Zmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBzZWNvbmRIYW5kbGUg
PSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoZmlyc3RI
YW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNp
emUoKSkpOworICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChzZWNvbmRIYW5kbGUtPnN0YXJ0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCAr
IDEpICogcGFnZVNpemUoKSkpOworICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAg
ZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgdGVhckRvd24oKTsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIHZvaWQgc2V0VXAoKQorICAgIHsKKyAgICAgICAgbWVtb3J5TWFw
ID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICBwYWdlTWFwID0gbmV3IFZlY3Rvcjxi
b29sLCAwPigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdlID0gYmFzZVBh
Z2U7IHBhZ2UgPCBiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcDsgKytwYWdlKSB7CisgICAg
ICAgICAgICBwYWdlTWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBieXRlSW5QYWdlID0gMDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkK
KyAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBhbGxvY2F0b3JEZXN0cm95ZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGN1
cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAgICAgYWxsb3dBbGxvY2F0
ZVBhZ2VzID0gMDsKKyAgICAgICAgYWRkaXRpb25hbFBhZ2VzSW5IZWFwID0gMDsKKyAgICAgICAg
CisgICAgICAgIGFsbG9jYXRvciA9IG5ldyBTaW1wbGVUZXN0QWxsb2NhdG9yKCk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyB2b2lkIHRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIFRFU1RfQVNT
RVJUKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBURVNU
X0FTU0VSVF9FUVVBTChhbGxvd0FsbG9jYXRlUGFnZXMsIDApOworICAgICAgICBURVNUX0FTU0VS
VF9FUVVBTChyZXF1ZXN0ZWROdW1QYWdlcywgMCk7CisgICAgICAgIAorICAgICAgICAvLyBtZW1v
cnkgc2hvdWxkIGJlIGZyZWUuCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdl
OyBwYWdlIDwgYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAg
ICAgICAgVEVTVF9BU1NFUlQoIXBhZ2VTdGF0ZShwYWdlKSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5Q
YWdlKQorICAgICAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUocGFnZSAqIHBhZ2VT
aXplKCkgKyBieXRlSW5QYWdlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5P
VEU6IHRoaXMgYXV0b21hdGljYWxseSB0ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3IgZGlkIG5vdCBs
ZWFrCisgICAgICAgIC8vIG1lbW9yeSwgc28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBhcmUgcnVubmlu
ZyB3aXRoICFkZWZpbmVkKE5ERUJVRykuCisgICAgICAgIC8vIFNlZSBNZXRhQWxsb2NhdG9yOjpt
X21hbGxvY0JhbGFuY2UuCisgICAgICAgIGRlbGV0ZSBhbGxvY2F0b3I7CisgICAgICAgIAorICAg
ICAgICBURVNUX0FTU0VSVChhbGxvY2F0b3JEZXN0cm95ZWQpOworICAgICAgICAKKyAgICAgICAg
ZGVsZXRlIG1lbW9yeU1hcDsKKyAgICAgICAgZGVsZXRlIHBhZ2VNYXA7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBNZXRhQWxsb2NhdG9ySGFuZGxlKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAg
ICB7CisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRvci0+YWxs
b2NhdGUoc2l6ZUluQnl0ZXMpLmxlYWtSZWYoKTsKKyAgICAgICAgVEVTVF9BU1NFUlQoaGFuZGxl
KTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXpl
SW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAgIHVpbnRwdHJf
dCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0
cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3Vy
cmVudEJ5dGUpIHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUKCFieXRlU3RhdGUoY3VycmVudEJ5
dGUpKTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkgPSB0cnVlOworICAgICAg
ICAgICAgVEVTVF9BU1NFUlQocGFnZVN0YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5Q2hlY2tNb2RlID09IFJ1blNh
bml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAg
IHJldHVybiBoYW5kbGU7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIGZyZWUoTWV0YUFs
bG9jYXRvckhhbmRsZSogaGFuZGxlLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlID0g
UnVuU2FuaXR5Q2hlY2spCisgICAgeworICAgICAgICBURVNUX0FTU0VSVChoYW5kbGUpOworICAg
ICAgICAKKyAgICAgICAgbm90aWZ5RnJlZShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSk7CisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChzYW5pdHlDaGVja01vZGUgPT0gUnVuU2FuaXR5Q2hlY2spCisgICAgICAgICAgICBzYW5pdHlD
aGVjaygpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBub3RpZnlGcmVlKHZvaWQqIHN0
YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCisgICAgeworICAgICAgICB1aW50cHRyX3Qgc3RhcnRC
eXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KTsKKyAgICAgICAgdWludHB0
cl90IGVuZEJ5dGUgPSBzdGFydEJ5dGUgKyBzaXplSW5CeXRlczsKKyAgICAgICAgZm9yICh1aW50
cHRyX3QgY3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytj
dXJyZW50Qnl0ZSkgeworICAgICAgICAgICAgVEVTVF9BU1NFUlQoYnl0ZVN0YXRlKGN1cnJlbnRC
eXRlKSk7CisgICAgICAgICAgICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgc2FuaXR5Q2hlY2soKQorICAgIHsK
KyNpZm5kZWYgTkRFQlVHCisgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGFsbG9jYXRvci0+Ynl0
ZXNSZXNlcnZlZCgpIC0gYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBhbGxvY2F0b3ItPmRl
YnVnRnJlZVNwYWNlU2l6ZSgpKTsKKyNlbmRpZgorICAgICAgICBURVNUX0FTU0VSVF9FUVVBTChh
bGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSwgKGRlZmF1bHRQYWdlc0luSGVhcCArIGFkZGl0aW9u
YWxQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgVEVTVF9BU1NFUlRfRVFVQUwo
YWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBieXRlc0FsbG9jYXRlZCgpKTsKKyAgICAgICAg
VEVTVF9BU1NFUlRfRVFVQUwoYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpLCBieXRlc0NvbW1p
dHRlZCgpKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgY29uZmlybShNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAgIGNv
bmZpcm0oc3RhcnRCeXRlLCBzdGFydEJ5dGUgKyBoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRydWUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCBjb25maXJtSGlnaFdhdGVybWFyayhNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICBjb25maXJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPmVuZCgpKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBh
Z2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgc3RhdGljIHZvaWQgY29uZmlybSh1aW50cHRyX3Qgc3RhcnRCeXRlLCB1aW50cHRyX3Qg
ZW5kQnl0ZSwgYm9vbCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJl
bnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUp
IHsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSks
IHZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICBURVNUX0FT
U0VSVChwYWdlU3RhdGUoY3VycmVudEJ5dGUgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgdWludHB0cl90IGZpcnN0RnJlZVBhZ2Ug
PSAoc3RhcnRCeXRlICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAgICAg
IHVpbnRwdHJfdCBsYXN0RnJlZVBhZ2UgPSAoZW5kQnl0ZSAtIHBhZ2VTaXplKCkpIC8gcGFnZVNp
emUoKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRQYWdlID0gZmlyc3RGcmVl
UGFnZTsgY3VycmVudFBhZ2UgPD0gbGFzdEZyZWVQYWdlOyArK2N1cnJlbnRQYWdlKQorICAgICAg
ICAgICAgICAgIFRFU1RfQVNTRVJUKCFwYWdlU3RhdGUoY3VycmVudFBhZ2UpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBzdGF0aWMgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkKKyAgICB7
CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBtZW1vcnlNYXAtPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
aWYgKG1lbW9yeU1hcC0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBz
aXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VNYXAtPnNpemUo
KTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKHBhZ2VNYXAtPmF0KGluZGV4KSkKKyAgICAg
ICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICog
cGFnZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIGJvb2wmIGJ5dGVTdGF0ZSh2b2lk
KiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ5dGVTdGF0ZShyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYWRkcmVzcykpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCYg
Ynl0ZVN0YXRlKHVpbnRwdHJfdCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IGJ5
dGVJbmRleCA9IGFkZHJlc3MgLSBiYXNlUGFnZSAqIHBhZ2VTaXplKCk7CisgICAgICAgIHJldHVy
biBtZW1vcnlNYXAtPmF0KGJ5dGVJbmRleCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBib29s
JiBwYWdlU3RhdGUodWludHB0cl90IHBhZ2UpCisgICAgeworICAgICAgICB1aW50cHRyX3QgcGFn
ZUluZGV4ID0gcGFnZSAtIGJhc2VQYWdlOworICAgICAgICByZXR1cm4gcGFnZU1hcC0+YXQocGFn
ZUluZGV4KTsKKyAgICB9Cit9OworCitNZXRhQWxsb2NhdG9yVGVzdHM6OkhlYXBHcm93dGhNb2Rl
IE1ldGFBbGxvY2F0b3JUZXN0czo6Y3VycmVudEhlYXBHcm93dGhNb2RlOworc2l6ZV90IE1ldGFB
bGxvY2F0b3JUZXN0czo6YWxsb3dBbGxvY2F0ZVBhZ2VzOworc2l6ZV90IE1ldGFBbGxvY2F0b3JU
ZXN0czo6cmVxdWVzdGVkTnVtUGFnZXM7Cit1bnNpZ25lZCBNZXRhQWxsb2NhdG9yVGVzdHM6OmFk
ZGl0aW9uYWxQYWdlc0luSGVhcDsKK1ZlY3Rvcjxib29sLCAwPiogTWV0YUFsbG9jYXRvclRlc3Rz
OjptZW1vcnlNYXA7CitWZWN0b3I8Ym9vbCwgMD4qIE1ldGFBbGxvY2F0b3JUZXN0czo6cGFnZU1h
cDsKK2Jvb2wgTWV0YUFsbG9jYXRvclRlc3RzOjphbGxvY2F0b3JEZXN0cm95ZWQ7CitNZXRhQWxs
b2NhdG9yVGVzdHM6OlNpbXBsZVRlc3RBbGxvY2F0b3IqIE1ldGFBbGxvY2F0b3JUZXN0czo6YWxs
b2NhdG9yOworCisvLyBSZWdyZXNzaW9uIHRlc3RzIGZvciBNZXRhQWxsb2NhdG9yIC0gc2ltdWxh
dGVzIGNhc2VzIHRoYXQgd2UndmUgc2VlbiBmYWlsIGluIHRoZQorLy8gcGFzdC4KKworY2xhc3Mg
TWV0YUFsbG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzIHsKK3ByaXZhdGU6CisgICAgTWV0YUFs
bG9jYXRvcjY0Yml0UmVncmVzc2lvblRlc3RzKCkgeyB9CisgICAgCitwdWJsaWM6CisgICAgc3Rh
dGljIHZvaWQgcnVuVGVzdHMoKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBSVU5f
VEVTVChydW5UcmVlUm9vdENvcnJ1cHRpb25UZXN0KCkpOworI2VuZGlmCisgICAgfQorCitwcml2
YXRlOgorI2lmIENQVShYODZfNjQpCisgICAgY2xhc3MgTnVsbFRlc3RBbGxvY2F0b3I6IHB1Ymxp
YyBNZXRhQWxsb2NhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIE51bGxUZXN0QWxsb2NhdG9y
KCkKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikgLy8gbWF0Y2hlcyBGaXhlZFZNUG9v
bEFsbG9jYXRvcgorICAgICAgICB7CisgICAgICAgICAgICBhZGRGcmVzaEZyZWVTcGFjZShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPigweDQ0MDMzOWMwMTAwMGxsdSksIDEwMjQgKiAxMDI0ICogMTAy
NCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVO
ZXdTcGFjZShzaXplX3QmKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQq
KQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgc3RhdGljIHZvaWQgcnVuVHJlZVJvb3RDb3JydXB0aW9uVGVzdCgpCisgICAgeworICAgICAg
ICBOdWxsVGVzdEFsbG9jYXRvciBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICB7CisgICAg
ICAgICAgICBWZWN0b3I8UmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+LCAwPiBoYW5kbGVzOwor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDczNikpOworICAg
ICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDE1NTIwKSk7CisgICAg
ICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMTAyNCkpOworICAgICAg
ICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDU3NikpOworICAgICAgICAg
ICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdG9yLmFsbG9jYXRlKDI5NzYpKTsKKyAgICAgICAgICAg
IGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSg0ODApKTsKKyAgICAgICAgICAgIGhh
bmRsZXMuYXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgyMjQwKSk7CisgICAgICAgICAgICBoYW5k
bGVzLmFwcGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoOTYpKTsKKyAgICAgICAgICAgIGhhbmRsZXMu
YXBwZW5kKGFsbG9jYXRvci5hbGxvY2F0ZSgzNDg4KSk7CisgICAgICAgICAgICBoYW5kbGVzLmFw
cGVuZChhbGxvY2F0b3IuYWxsb2NhdGUoMzg0KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQoNiktPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KDB4NDQwMzc5YzAwMTAwbGx1KSk7CisgICAgICAgICAgICBURVNUX0FTU0VSVF9F
UVVBTChoYW5kbGVzLmF0KDYpLT5zaXplSW5CeXRlcygpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDIy
NDApKTsKKyAgICAgICAgICAgIFRFU1RfQVNTRVJUX0VRVUFMKGhhbmRsZXMuYXQoOCktPnN0YXJ0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KDB4NDQwMzM5YzA1ZDYwbGx1KSk7CisgICAgICAg
ICAgICBURVNUX0FTU0VSVF9FUVVBTChoYW5kbGVzLmF0KDgpLT5zaXplSW5CeXRlcygpLCBzdGF0
aWNfY2FzdDxzaXplX3Q+KDM0ODgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxl
cy5hdCg2KS5jbGVhcigpOworICAgICAgICAgICAgaGFuZGxlcy5hdCg4KS5jbGVhcigpOworICAg
ICAgICB9CisgICAgfQorI2VuZGlmCit9OworCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAg
ICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKworICAgIFJVTl9TVUlURShSZWRCbGFja1Ry
ZWVUZXN0czo6cnVuVGVzdHMoKSk7CisgICAgUlVOX1NVSVRFKE1ldGFBbGxvY2F0b3JUZXN0czo6
cnVuVGVzdHMoKSk7CisgICAgUlVOX1NVSVRFKE1ldGFBbGxvY2F0b3I2NGJpdFJlZ3Jlc3Npb25U
ZXN0czo6cnVuVGVzdHMoKSk7CisgICAgcHJpbnRmKCJBbGwgdGVzdHMgcGFzc2VkLlxuIik7Cisg
ICAgcmV0dXJuIDA7Cit9CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtl
TGlzdHMudHh0CShyZXZpc2lvbiA5NDEwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
Q01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgU0VUKFdURl9I
RUFERVJTCiAgICAgTWFsbG9jWm9uZVN1cHBvcnQuaAogICAgIE1hdGhFeHRyYXMuaAogICAgIE1l
c3NhZ2VRdWV1ZS5oCisgICAgTWV0YUFsbG9jYXRvci5jcHAKKyAgICBNZXRhQWxsb2NhdG9yLmgK
KyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlLmgKICAgICBOb25Db3B5aW5nU29ydC5oCiAgICAgVGhy
ZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oCiAgICAgTm9uY29weWFibGUuaApAQCAtNjksNiArNzIs
NyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBQb3NzaWJseU51bGwuaAogICAgIFJhbmRvbU51bWJl
ci5oCiAgICAgUmFuZG9tTnVtYmVyU2VlZC5oCisgICAgUmVkQmxhY2tUcmVlLmgKICAgICBSZWZD
b3VudGVkLmgKICAgICBSZWZDb3VudGVkTGVha0NvdW50ZXIuaAogICAgIFJlZlB0ci5oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhl
IG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMi
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIk1ldGFBbGxvY2F0b3IuaCIKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxl
KE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cykKKyAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisg
ICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChhbGxvY2F0b3Ip
OworICAgIEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKK30KKworTWV0
YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQoreworICAgIGlmICghbV9h
bGxvY2F0b3IpCisgICAgICAgIHJldHVybjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1f
YWxsb2NhdG9yLT5tX2xvY2spOworICAgIGlmIChtX3NpemVJbkJ5dGVzKSB7CisgICAgICAgIG1f
YWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMp
OworICAgICAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKG1f
c3RhcnQsIG1fc2l6ZUluQnl0ZXMpOworICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2NhdG9ySGFu
ZGxlOjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdTaXpl
SW5CeXRlcyA8PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW1fYWxsb2NhdG9yKSB7
CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5t
X2xvY2spOworCisgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91bmRVcChuZXdT
aXplSW5CeXRlcyk7CisgICAgCisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUlu
Qnl0ZXMpOworICAgIAorICAgIGlmIChuZXdTaXplSW5CeXRlcyA9PSBtX3NpemVJbkJ5dGVzKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgdWludHB0cl90IGZyZWVTdGFydCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihtX3N0YXJ0KSArIG5ld1NpemVJbkJ5dGVzOworICAgIHNpemVf
dCBmcmVlU2l6ZSA9IG1fc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKKyAgICB1aW50cHRy
X3QgZnJlZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOworICAgIAorICAgIHVpbnRwdHJfdCBm
aXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+bV9wYWdl
U2l6ZSAtIDEpICYgfihtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpOworICAgIGlmIChmaXJz
dENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVFbmQpCisgICAgICAgIG1fYWxsb2NhdG9yLT5kZWNy
ZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVs
eUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3Rh
cnQpKTsKKyAgICAKKyAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFu
ZGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICAK
KyAgICBtX3NpemVJbkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7Cit9CisKK01ldGFBbGxvY2F0b3I6
Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKQorICAgIDogbV9hbGxvY2F0
aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKKyAgICAsIG1fcGFnZVNpemUocGFnZVNpemUo
KSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fYnl0ZXNSZXNlcnZlZCgwKQor
ICAgICwgbV9ieXRlc0NvbW1pdHRlZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbWFsbG9j
QmFsYW5jZSgwKQorI2VuZGlmCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisg
ICAgLCBtX251bUFsbG9jYXRpb25zKDApCisgICAgLCBtX251bUZyZWVzKDApCisjZW5kaWYKK3sK
KyAgICBtX2xvY2suSW5pdCgpOworICAgIAorICAgIGZvciAobV9sb2dQYWdlU2l6ZSA9IDA7IG1f
bG9nUGFnZVNpemUgPCAzMjsgKyttX2xvZ1BhZ2VTaXplKSB7CisgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90Pigx
KSA8PCBtX2xvZ1BhZ2VTaXplID09IG1fcGFnZVNpemUpOworICAgIAorICAgIGZvciAobV9sb2dB
bGxvY2F0aW9uR3JhbnVsZSA9IDA7IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPCAzMjsgKyttX2xv
Z0FsbG9jYXRpb25HcmFudWxlKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KDEp
IDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90
PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOwor
fQorCitNZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCit7CisgICAgZm9yIChGcmVlU3Bh
Y2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7IG5vZGU7KSB7CisgICAg
ICAgIEZyZWVTcGFjZU5vZGUqIG5leHQgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29yKG5v
ZGUpOworICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgICAgICBm
cmVlRnJlZVNwYWNlTm9kZShub2RlKTsKKyAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgfQorI2lm
bmRlZiBOREVCVUcKKyAgICBBU1NFUlQoIW1fbWFsbG9jQmFsYW5jZSk7CisjZW5kaWYKK30KKwor
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2NhdG9yOjphbGxvY2F0ZShz
aXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2sp
OworCisgICAgaWYgKCFzaXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
c2l6ZUluQnl0ZXMgPSByb3VuZFVwKHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICB2b2lkKiBzdGFy
dCA9IGZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZUluQnl0ZXMpOworICAgIGlmICghc3RhcnQp
IHsKKyAgICAgICAgc2l6ZV90IHJlcXVlc3RlZE51bWJlck9mUGFnZXMgPSAoc2l6ZUluQnl0ZXMg
KyBtX3BhZ2VTaXplIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgc2l6ZV90IG51bWJl
ck9mUGFnZXMgPSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzOworICAgICAgICAKKyAgICAgICAgc3Rh
cnQgPSBhbGxvY2F0ZU5ld1NwYWNlKG51bWJlck9mUGFnZXMpOworICAgICAgICBpZiAoIXN0YXJ0
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobnVtYmVy
T2ZQYWdlcyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKKyAgICAgICAgCisgICAgICAgIHNp
emVfdCByb3VuZGVkVXBTaXplID0gbnVtYmVyT2ZQYWdlcyA8PCBtX2xvZ1BhZ2VTaXplOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKHJvdW5kZWRVcFNpemUgPj0gc2l6ZUluQnl0ZXMpOworICAg
ICAgICAKKyAgICAgICAgbV9ieXRlc1Jlc2VydmVkICs9IHJvdW5kZWRVcFNpemU7CisgICAgICAg
IAorICAgICAgICBpZiAocm91bmRlZFVwU2l6ZSA+IHNpemVJbkJ5dGVzKSB7CisgICAgICAgICAg
ICB2b2lkKiBmcmVlU3BhY2VTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBz
aXplX3QgZnJlZVNwYWNlU2l6ZSA9IHJvdW5kZWRVcFNpemUgLSBzaXplSW5CeXRlczsKKyAgICAg
ICAgICAgIGFkZEZyZWVTcGFjZShmcmVlU3BhY2VTdGFydCwgZnJlZVNwYWNlU2l6ZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgaW5jcmVtZW50UGFnZU9jY3VwYW5jeShzdGFydCwgc2l6ZUluQnl0
ZXMpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWQgKz0gc2l6ZUluQnl0ZXM7CisjaWYgRU5BQkxFKE1F
VEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1BbGxvY2F0aW9ucysrOworI2VuZGlmCisg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHRoaXMsIHN0YXJ0LCBz
aXplSW5CeXRlcykpOworfQorCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIE1ldGFBbGxvY2F0
b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1f
bG9jayk7CisgICAgU3RhdGlzdGljcyByZXN1bHQ7CisgICAgcmVzdWx0LmJ5dGVzQWxsb2NhdGVk
ID0gbV9ieXRlc0FsbG9jYXRlZDsKKyAgICByZXN1bHQuYnl0ZXNSZXNlcnZlZCA9IG1fYnl0ZXNS
ZXNlcnZlZDsKKyAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgPSBtX2J5dGVzQ29tbWl0dGVkOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIE1ldGFBbGxvY2F0b3I6OmZpbmRBbmRSZW1v
dmVGcmVlU3BhY2Uoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIEZyZWVTcGFjZU5vZGUqIG5v
ZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKHNpemVJ
bkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIEFTU0VSVChub2RlLT5rZXkgPj0gc2l6ZUluQnl0ZXMpOworICAgIAorICAgIG1fZnJlZVNw
YWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgCisgICAgdm9pZCogcmVzdWx0OworICAgIAor
ICAgIGlmIChub2RlLT5rZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgLy8gRWFzeSBjYXNl
OiBwZXJmZWN0IGZpdCwgc28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50aXJlbHkuCisgICAgICAg
IHJlc3VsdCA9IG5vZGUtPnZhbHVlOworICAgICAgICAKKyAgICAgICAgbV9mcmVlU3BhY2VTdGFy
dEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRB
ZGRyZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7CisgICAgICAgIGZyZWVGcmVl
U3BhY2VOb2RlKG5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFRyeSB0byBiZSBhIGdv
b2QgY2l0aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNodW5rIG9mIG1lbW9yeQor
ICAgICAgICAvLyBzdHJhZGRsZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3NpYmxlLCBidXQgb25seSBp
bnNvZmFyIGFzIGRvaW5nIHNvIHdpbGwKKyAgICAgICAgLy8gbm90IGluY3JlYXNlIGZyYWdtZW50
YXRpb24uIFRoZSBpbnR1aXRpb24gaXMgdGhhdCBtaW5pbWl6aW5nCisgICAgICAgIC8vIGZyYWdt
ZW50YXRpb24gaXMgYSBzdHJpY3RseSBoaWdoZXIgcHJpb3JpdHkgdGhhbiBtaW5pbWl6aW5nIHRo
ZSBudW1iZXIKKyAgICAgICAgLy8gb2YgY29tbWl0dGVkIHBhZ2VzLCBzaW5jZSBpbiB0aGUgbG9u
ZyBydW4sIHNtYWxsZXIgZnJhZ21lbnRhdGlvbiBtZWFucworICAgICAgICAvLyBmZXdlciBjb21t
aXR0ZWQgcGFnZXMgYW5kIGZld2VyIGZhaWx1cmVzIGluIGdlbmVyYWwuCisgICAgICAgIAorICAg
ICAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5v
ZGUtPnZhbHVlKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2Ug
PSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAt
IDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgICAgIHVpbnRwdHJfdCBsYXN0UGFnZUZv
ckxlZnRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1
ZSkgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHVpbnRwdHJf
dCBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVzKSA+PiBtX2xvZ1BhZ2VT
aXplOworICAgICAgICAKKyAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gLSBm
aXJzdFBhZ2UgKyAxIDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uICsg
MSkgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQgc2lkZSBvZiB0aGUgcmV0
dXJuZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmlnaHQuCisgICAgICAgICAg
ICByZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVl
U3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+
dmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obm9kZS0+dmFsdWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3Bh
Y2VTdGFydEFkZHJlc3NNYXAuYWRkKG5vZGUtPnZhbHVlLCBub2RlKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSByaWdodCBzaXplIG9mIHRoZSByZXR1
cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSBsZWZ0OworICAgICAgICAgICAg
CisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5IC0gc2l6ZUluQnl0ZXMp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVt
b3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihu
b2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9k
ZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRy
ZXNzTWFwLmFkZChyZXN1bHQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJl
bGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisjaWYgRU5B
QkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1GcmVlcysrOworI2VuZGlmCisg
ICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBzaXplSW5CeXRlczsKKyAgICBhZGRGcmVlU3BhY2Uoc3Rh
cnQsIHNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVT
cGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0ZXM7
CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9CisKK3NpemVfdCBNZXRh
QWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBT
cGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7Cisg
ICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7
IG5vZGU7IG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29yKG5vZGUpKQorICAgICAg
ICByZXN1bHQgKz0gbm9kZS0+a2V5OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIENS
QVNIKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjph
ZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB2b2lk
KiBlbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhhc2hNYXA8dm9pZCosIEZyZWVT
cGFjZU5vZGUqPjo6aXRlcmF0b3IgbGVmdE5laWdoYm9yID0gbV9mcmVlU3BhY2VFbmRBZGRyZXNz
TWFwLmZpbmQoc3RhcnQpOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRl
cmF0b3IgcmlnaHROZWlnaGJvciA9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmZpbmQoZW5k
KTsKKyAgICAKKyAgICBpZiAobGVmdE5laWdoYm9yICE9IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01h
cC5lbmQoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ug
d2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFuZAorICAgICAgICAv
LyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCisgICAgICAgIAorICAg
ICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkgKyBsZWZ0TmVpZ2hib3ItPnNlY29u
ZC0+a2V5KSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgCisgICAgICAgIEZyZWVT
cGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgIAorICAg
ICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFsdWU7CisgICAgICAgIHNpemVfdCBs
ZWZ0U2l6ZSA9IGxlZnROb2RlLT5rZXk7CisgICAgICAgIHZvaWQqIGxlZnRFbmQgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obGVmdFN0YXJ0KSAr
IGxlZnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZWZ0RW5kID09IHN0YXJ0KTsK
KyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobGVmdE5vZGUpOwor
ICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKGxlZnRFbmQpOworICAgICAg
ICAKKyAgICAgICAgLy8gTm93IGNoZWNrIGlmIHRoZXJlIGlzIGFsc28gc29tZXRoaW5nIHRvIGNv
YWxlc2NlIHdpdGggb24gdGhlIHJpZ2h0LgorICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAgICAgLy8gRnJlZWlu
ZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4gQ29hbGVzY2UgYm90aCBs
ZWZ0IGFuZAorICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1vdmluZyB0aGUgcmlnaHQg
bmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+dmFsdWUgPT0gcmlnaHROZWlnaGJvci0+Zmlyc3QpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiByaWdodE5vZGUgPSByaWdo
dE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgICAgICB2b2lkKiByaWdodFN0YXJ0ID0gcmlnaHRO
ZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBzaXplX3QgcmlnaHRTaXplID0gcmlnaHROb2Rl
LT5rZXk7CisgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0ID09IGVuZCk7Cisg
ICAgICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJbkJ5dGVzICsgcmlnaHRT
aXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNl
U2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRB
ZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5k
QWRkcmVzc01hcC5yZW1vdmUocmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBm
cmVlRnJlZVNwYWNlTm9kZShyaWdodE5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBs
ZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzICsgcmlnaHRTaXplOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAg
ICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmlnaHRFbmQsIGxlZnROb2RlKTsKKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlZnROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobGVm
dE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChlbmQsIGxl
ZnROb2RlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhbm5vdCBjb2Fs
ZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxlc2NlIHdpdGggcmlnaHQu
CisgICAgICAgIAorICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0
QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2Rl
ID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9
IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJp
Z2h0Tm9kZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9j
YXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdo
dFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBl
bmQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyaWdodEVuZCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVz
ICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
ZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgcmlnaHROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICByaWdo
dE5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlU2l6ZU1hcC5pbnNlcnQocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3Rh
cnRBZGRyZXNzTWFwLmFkZChzdGFydCwgcmlnaHROb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIC8vIE5vdGhpbmcgdG8gY29hbGVzY2Ugd2l0aCwgc28gY3JlYXRlIGEgbmV3IGZy
ZWUgc3BhY2Ugbm9kZSBhbmQgYWRkIGl0LgorICAgICAgICAgICAgCisgICAgICAgICAgICBGcmVl
U3BhY2VOb2RlKiBub2RlID0gYWxsb2NGcmVlU3BhY2VOb2RlKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG5vZGUtPmtleSA9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+dmFs
dWUgPSBzdGFydDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFw
Lmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFk
ZChzdGFydCwgbm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRk
KGVuZCwgbm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6
aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMp
Cit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJfdCBsYXN0UGFnZSA9IChy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXplSW5CeXRlcyAtIDEpID4+
IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3QgcGFnZSA9IGZpcnN0UGFn
ZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhhc2hNYXA8dWludHB0cl90
LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFwLmZpbmQocGFnZSk7
CisgICAgICAgIGlmIChpdGVyID09IG1fcGFnZU9jY3VwYW5jeU1hcC5lbmQoKSkgeworICAgICAg
ICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLmFkZChwYWdlLCAxKTsKKyAgICAgICAgICAgIG1fYnl0
ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeU5lZWRQYWdlKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgIH0KK30KKwordm9pZCBNZXRh
QWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBz
aXplSW5CeXRlcykKK3sKKyAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGFkZHJlc3MpID4+IG1fbG9nUGFnZVNpemU7CisgICAgdWludHB0cl90IGxh
c3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIHNpemVJbkJ5
dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBmb3IgKHVpbnRwdHJfdCBwYWdl
ID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKKyAgICAgICAgSGFzaE1h
cDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAu
ZmluZChwYWdlKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVu
ZCgpKTsKKyAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7CisgICAgICAgICAgICBtX3Bh
Z2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRl
ZCAtPSBtX3BhZ2VTaXplOworICAgICAgICAgICAgbm90aWZ5UGFnZUlzRnJlZShyZWludGVycHJl
dF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworc2l6ZV90IE1ldGFBbGxvY2F0b3I6OnJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKQor
eworICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpIC0gbV9hbGxvY2F0
aW9uR3JhbnVsZSA8PSBzaXplSW5CeXRlcykKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4g
KHNpemVJbkJ5dGVzICsgbV9hbGxvY2F0aW9uR3JhbnVsZSAtIDEpICYgfihtX2FsbG9jYXRpb25H
cmFudWxlIC0gMSk7Cit9CisKK01ldGFBbGxvY2F0b3I6OkZyZWVTcGFjZU5vZGUqIE1ldGFBbGxv
Y2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbWFs
bG9jQmFsYW5jZSsrOworI2VuZGlmCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZyZWVTcGFjZU5v
ZGUqPihmYXN0TWFsbG9jKHNpemVvZihGcmVlU3BhY2VOb2RlKSkpOworfQorCit2b2lkIE1ldGFB
bGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUqIG5vZGUpCit7CisjaWZu
ZGVmIE5ERUJVRworICAgIG1fbWFsbG9jQmFsYW5jZS0tOworI2VuZGlmCisgICAgZmFzdEZyZWUo
bm9kZSk7Cit9CisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgTWV0
YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQoreworICAgIHByaW50ZigibnVtIGFsbG9jYXRpb25z
ID0gJXUsIG51bSBmcmVlcyA9ICV1XG4iLCBtX251bUFsbG9jYXRpb25zLCBtX251bUZyZWVzKTsK
K30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvcl9oCisjZGVmaW5lIFdURl9NZXRhQWxs
b2NhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlQmxvY2suaD4KKyNpbmNsdWRl
IDx3dGYvUmVkQmxhY2tUcmVlLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RDU3BpbkxvY2suaD4KKworbmFtZXNw
YWNlIFdURiB7CisKKyNkZWZpbmUgRU5BQkxFX01FVEFfQUxMT0NBVE9SX1BST0ZJTEUgMAorCitj
bGFzcyBNZXRhQWxsb2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2Nh
dG9yKTsKK3B1YmxpYzoKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9u
R3JhbnVsZSk7CisgICAgCisgICAgdmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOworICAgIAorICAg
IFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5
dGVzKTsKKyAgICAKKyAgICAvLyBOb24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcgYWxsb2Nh
dG9yIHN0YXRpc3RpY3MuCisgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4gbV9i
eXRlc0FsbG9jYXRlZDsgfQorICAgIHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1cm4gbV9i
eXRlc1Jlc2VydmVkOyB9CisgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkKCkgeyByZXR1cm4gbV9i
eXRlc0NvbW1pdHRlZDsgfQorICAgIAorICAgIC8vIEF0b21pYyBtZXRob2QgZm9yIGdldHRpbmcg
YWxsb2NhdG9yIHN0YXRpc3RpY3MuCisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICBz
aXplX3QgYnl0ZXNBbGxvY2F0ZWQ7CisgICAgICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOworICAg
ICAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQ7CisgICAgfTsKKyAgICBTdGF0aXN0aWNzIGN1cnJl
bnRTdGF0aXN0aWNzKCk7CisKKyAgICAvLyBBZGQgbW9yZSBmcmVlIHNwYWNlIHRvIHRoZSBhbGxv
Y2F0b3IuIENhbGwgdGhpcyBkaXJlY3RseSBmcm9tCisgICAgLy8gdGhlIGNvbnN0cnVjdG9yIGlm
IHlvdSB3aXNoIHRvIG9wZXJhdGUgdGhlIGFsbG9jYXRvciB3aXRoaW4gYQorICAgIC8vIGZpeGVk
IHBvb2wuCisgICAgdm9pZCBhZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzKTsKKworICAgIC8vIFRoaXMgaXMgbWVhbnQgb25seSBmb3IgaW1wbGVtZW50aW5n
IHRlc3RzLiBOZXZlciBjYWxsIHRoaXMgaW4gcmVsZWFzZQorICAgIC8vIGJ1aWxkcy4KKyAgICBz
aXplX3QgZGVidWdGcmVlU3BhY2VTaXplKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NB
VE9SX1BST0ZJTEUpCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICB2b2lkIGR1
bXBQcm9maWxlKCkgeyB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIAorICAgIC8vIEFsbG9j
YXRlIG5ldyB2aXJ0dWFsIHNwYWNlLCBidXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4g
bW9yZQorICAgIC8vIHBhZ2VzIHRoYW4gd2UgYXNrZWQsIGluIHdoaWNoIGNhc2UgbnVtUGFnZXMg
aXMgY2hhbmdlZC4KKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBu
dW1QYWdlcykgPSAwOworICAgIAorICAgIC8vIENvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBVbmNvbW1p
dCBhIHBhZ2UuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkg
PSAwOworICAgIAorICAgIC8vIE5PVEU6IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNh
bGxlZCBkdXJpbmcgYWxsb2NhdG9yCisgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVz
ZSBhIE1ldGFBbGxvY2F0b3IgY2Fubm90IGRpZSBzbyBsb25nCisgICAgLy8gYXMgdGhlcmUgYXJl
IEhhbmRsZXMgdGhhdCByZWZlciB0byBpdC4KKworcHJpdmF0ZToKKyAgICAKKyAgICBmcmllbmQg
Y2xhc3MgTWV0YUFsbG9jYXRvckhhbmRsZTsKKyAgICAKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJl
ZTxzaXplX3QsIHZvaWQqPiBUcmVlOworICAgIHR5cGVkZWYgVHJlZTo6Tm9kZSBGcmVlU3BhY2VO
b2RlOworICAgIAorICAgIC8vIFJlbW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4g
VGhpcyBpcyBlZmZlY3RpdmVseQorICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNl
cHQgdGhhdCBpdCBkb2VzIG5vdCBtYXJrIHRoZQorICAgIC8vIHJldHVybmVkIHNwYWNlIGFzIGJl
aW5nIGluLXVzZS4KKyAgICB2b2lkKiBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXpl
SW5CeXRlcyk7CisKKyAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIG1lbW9yeSBmcm9tIGFuIGFs
bG9jYXRpb24gaXMgZnJlZWQuCisgICAgdm9pZCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5k
bGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gVGhpcyBp
cyB0aGUgbG93LWxldmVsIGltcGxlbWVudGF0aW9uIG9mIGFkZGluZyBmcmVlIHNwYWNlOyBpdAor
ICAgIC8vIGlzIGNhbGxlZCBmcm9tIGJvdGggYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxl
IGFuZCBmcm9tCisgICAgLy8gYWRkRnJlc2hGcmVlU3BhY2UuCisgICAgdm9pZCBhZGRGcmVlU3Bh
Y2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTWFuYWdl
bWVudCBvZiB1c2VkIHNwYWNlLgorICAgIAorICAgIHZvaWQgaW5jcmVtZW50UGFnZU9jY3VwYW5j
eSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIHZvaWQgZGVjcmVtZW50
UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAor
ICAgIC8vIFV0aWxpdGllcy4KKyAgICAKKyAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUlu
Qnl0ZXMpOworICAgIAorICAgIEZyZWVTcGFjZU5vZGUqIGFsbG9jRnJlZVNwYWNlTm9kZSgpOwor
ICAgIHZvaWQgZnJlZUZyZWVTcGFjZU5vZGUoRnJlZVNwYWNlTm9kZSopOworICAgIAorICAgIHNp
emVfdCBtX2FsbG9jYXRpb25HcmFudWxlOworICAgIHVuc2lnbmVkIG1fbG9nQWxsb2NhdGlvbkdy
YW51bGU7CisgICAgc2l6ZV90IG1fcGFnZVNpemU7CisgICAgdW5zaWduZWQgbV9sb2dQYWdlU2l6
ZTsKKyAgICAKKyAgICBUcmVlIG1fZnJlZVNwYWNlU2l6ZU1hcDsKKyAgICBIYXNoTWFwPHZvaWQq
LCBGcmVlU3BhY2VOb2RlKj4gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXA7CisgICAgSGFzaE1h
cDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcDsKKyAgICBI
YXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90PiBtX3BhZ2VPY2N1cGFuY3lNYXA7CisgICAgCisgICAg
c2l6ZV90IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKKyAg
ICBzaXplX3QgbV9ieXRlc0NvbW1pdHRlZDsKKyAgICAKKyAgICBTcGluTG9jayBtX2xvY2s7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgc2l6ZV90IG1fbWFsbG9jQmFsYW5jZTsKKyNlbmRpZgorCisj
aWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdW5zaWduZWQgbV9udW1BbGxv
Y2F0aW9uczsKKyAgICB1bnNpZ25lZCBtX251bUZyZWVzOworI2VuZGlmCit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFdURl9NZXRhQWxsb2NhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9j
YXRvckhhbmRsZV9oCisjZGVmaW5lIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKworI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBNZXRhQWxsb2Nh
dG9yOworCitjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRh
QWxsb2NhdG9ySGFuZGxlPiB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0
YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAg
ICAgICAgOiBtX2FsbG9jYXRvcigwKQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgICAg
ICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFTU0VSVChzdGFy
dCk7CisgICAgfQorICAgIAorcHVibGljOgorICAgIH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7Cisg
ICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gY3JlYXRlU2Vs
Zk1hbmFnZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZShzdGFydCwgc2l6
ZUluQnl0ZXMpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCogc3RhcnQoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fc3RhcnQ7CisgICAgfQorICAgIAorICAgIHZvaWQqIGVuZCgpCisgICAgewor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9zaXplSW5CeXRlcyk7CisgICAgfQorICAgICAgICAKKyAg
ICBzaXplX3Qgc2l6ZUluQnl0ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0
ZXM7CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0
ZXMpOworICAgIAorICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICB7CisgICAgICAgIHJldHVybiAh
IW1fYWxsb2NhdG9yOworICAgIH0KKyAgICAgICAgCisgICAgTWV0YUFsbG9jYXRvciogYWxsb2Nh
dG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CisgICAgICAgIHJldHVy
biBtX2FsbG9jYXRvcjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBN
ZXRhQWxsb2NhdG9yOworICAgIAorICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAg
IHZvaWQqIG1fc3RhcnQ7CisgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Cit9OworCit9CisKKyNl
bmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEJhc2VkIG9uIFJlZC1CbGFjayB0
cmVlIGltcGxlbWVudGF0aW9uIGJ5IEVtaW4gTWFydGluaWFuCisgKiAtIGh0dHA6Ly93d3cubWl0
LmVkdS9+ZW1pbi9zb3VyY2VfY29kZS9pbmRleC5odG1sICAgICAgICAgCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWRCbGFj
a1RyZWVfaAorI2RlZmluZSBSZWRCbGFja1RyZWVfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFRoaXMgaW1wbGVtZW50cyBhIHJlZC1ibGFjayB0cmVlIHdpdGggdGhlIGZvbGxvd2luZyBw
cm9wZXJ0aWVzOgorLy8gLSBUaGUgYWxsb2NhdGlvbiBvZiBub2RlcyBpbiB0aGUgdHJlZSBpcyBl
bnRpcmVseSB1cCB0byB0aGUgdXNlci4KKy8vIC0gSWYgeW91IGFyZSBpbiBwb3NzZXNzaW9uIG9m
IGEgcG9pbnRlciB0byBhIG5vZGUsIHlvdSBjYW4gZGVsZXRlCisvLyAgIGl0IGZyb20gdGhlIHRy
ZWUuIFRoZSB0cmVlIHdpbGwgc3Vic2VxdWVudGx5IG5vIGxvbmdlciBoYXZlIGEKKy8vICAgcmVm
ZXJlbmNlIHRvIHRoaXMgbm9kZS4KKy8vIC0gVGhlIGtleSB0eXBlIG11c3QgaW1wbGVtZW50IG9w
ZXJhdG9yPCBhbmQgPT0uCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZh
bHVlVHlwZT4KK2NsYXNzIFJlZEJsYWNrVHJlZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UmVkQmxhY2tUcmVlKTsKK3B1YmxpYzoKKyAgICBjbGFzcyBSYXdOb2RlIHsKKyAgICAgICAgZnJp
ZW5kIGNsYXNzIFJlZEJsYWNrVHJlZTsKKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoZXNl
IG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBzaW5nbGUKKyAg
ICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEgYnVnIGluIHRo
ZSBjb21waWxlci4KKyAgICAgICAgUmF3Tm9kZSogcGFyZW50KCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBSYXdOb2RlKiBzZXRQYXJlbnQoUmF3Tm9kZSogbmV3UGFyZW50KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9wYXJlbnQgPSBuZXdQYXJlbnQ7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIGJvb2wgaXNSZWQoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9yZWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgc2V0UmVkKGJvb2wg
dmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZCA9IHZhbHVlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBtX2xlZnQ7CisgICAgICAgIFJhd05v
ZGUqIG1fcmlnaHQ7CisgICAgICAgIFJhd05vZGUqIG1fcGFyZW50OworICAgICAgICBib29sIG1f
cmVkOworICAgIH07CisgICAgCisgICAgY2xhc3MgTm9kZTogcHVibGljIFJhd05vZGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgS2V5VHlwZSBrZXk7CisgICAgICAgIFZhbHVlVHlwZSB2YWx1ZTsK
KyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZSgpCisgICAgeworICAgICAgICBtX25pbFNl
bnRpbmVsLnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAgICAgIG1fbmlsU2VudGluZWwu
bV9sZWZ0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1fbmlsU2VudGluZWwubV9yaWdodCA9
ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVsLnNldFJlZChmYWxzZSk7Cisg
ICAgICAgIAorICAgICAgICBtX3Jvb3Quc2V0UGFyZW50KCZtX25pbFNlbnRpbmVsKTsKKyAgICAg
ICAgbV9yb290Lm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jvb3QubV9yaWdo
dCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jvb3Quc2V0UmVkKGZhbHNlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBpbnNlcnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGluc2Vy
dEhlbHAobm9kZSk7CisKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5vZGU7CisgICAgICAgIFJhd05v
ZGUqIHk7CisgICAgICAgIAorICAgICAgICB4LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgIHdoaWxl
ICh4LT5wYXJlbnQoKS0+aXNSZWQoKSkgeworICAgICAgICAgICAgaWYgKHgtPnBhcmVudCgpID09
IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgeSA9IHgt
PnBhcmVudCgpLT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICBpZiAoeS0+aXNS
ZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAg
ICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAg
ICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fcmlnaHQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxlZnRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAg
ICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIH0g
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHkgPSB4LT5wYXJlbnQoKS0+
cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAoeS0+aXNSZWQoKSkgeworICAg
ICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50
KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5w
YXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHRS
b3RhdGUoeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeC0+
cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgp
LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRl
KHgtPnBhcmVudCgpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgfSAKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICByb290KCktPm1fbGVmdC0+c2V0UmVkKGZhbHNlKTsKKyAg
ICAgICAgCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgICAg
IEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcmVtb3Zl
KE5vZGUqIHopCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICBSYXdOb2RlKiB4
OworCisgICAgICAgIHkgPSAoei0+bV9sZWZ0ID09IG5pbFNlbnRpbmVsKCkgfHwgei0+bV9yaWdo
dCA9PSBuaWxTZW50aW5lbCgpKSA/IHogOiBzdWNjZXNzb3JJbnRlcm5hbCh6KTsKKyAgICAgICAg
eCA9IHktPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpID8geS0+bV9yaWdodCA6IHktPm1fbGVmdDsK
KyAgICAgICAgaWYgKHJvb3QoKSA9PSB4LT5zZXRQYXJlbnQoeS0+cGFyZW50KCkpKQorICAgICAg
ICAgICAgcm9vdCgpLT5tX2xlZnQgPSB4OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAgICAgICAgICAgeS0+cGFyZW50KCkt
Pm1fbGVmdCA9IHg7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeS0+cGFyZW50
KCktPm1fcmlnaHQgPSB4OworICAgICAgICB9CisgICAgICAgIGlmICh5ICE9IHopIHsKKyAgICAg
ICAgICAgIEFTU0VSVCh5ICE9IG5pbFNlbnRpbmVsKCkpOworCisgICAgICAgICAgICBpZiAoIXkt
PmlzUmVkKCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAoeCk7CisgIAorICAgICAgICAg
ICAgeS0+bV9sZWZ0ID0gei0+bV9sZWZ0OworICAgICAgICAgICAgeS0+bV9yaWdodCA9IHotPm1f
cmlnaHQ7CisgICAgICAgICAgICB5LT5zZXRQYXJlbnQoei0+cGFyZW50KCkpOworICAgICAgICAg
ICAgeS0+c2V0UmVkKHotPmlzUmVkKCkpOworICAgICAgICAgICAgei0+bV9sZWZ0LT5zZXRQYXJl
bnQoei0+bV9yaWdodC0+c2V0UGFyZW50KHkpKTsKKyAgICAgICAgICAgIGlmICh6ID09IHotPnBh
cmVudCgpLT5tX2xlZnQpCisgICAgICAgICAgICAgICAgei0+cGFyZW50KCktPm1fbGVmdCA9IHk7
IAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHotPnBhcmVudCgpLT5tX3JpZ2h0
ID0geTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICgheS0+aXNSZWQoKSkKKyAg
ICAgICAgICAgICAgICByZW1vdmVGaXhVcCh4KTsKKyAgICAgICAgfQorICAKKyAgICAgICAgQVNT
RVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlz
UmVkKCkpOworCisgICAgICAgIHJldHVybiB6OworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaXJz
dCgpCisgICAgeworICAgICAgICBSYXdOb2RlKiBub2RlID0gcm9vdCgpLT5tX2xlZnQ7CisgICAg
ICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5t
X2xlZnQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAgICBub2RlID0gbmV4dDsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBsYXN0KCkKKyAgICB7CisgICAgICAgIFJh
d05vZGUqIG5vZGUgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2Vu
dGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm1fcmlnaHQ7CisgICAgICAgICAgICBp
ZiAobmV4dCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUo
bm9kZSk7CisgICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBOb2RlKiBzdWNjZXNzb3IoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFJhd05vZGUq
IHJlc3VsdCA9IHN1Y2Nlc3NvckludGVybmFsKG5vZGUpOworICAgICAgICBpZiAocmVzdWx0ID09
IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGFz
Tm9kZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBwcmVkZWNlc3NvcihOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5vZGU7CisgICAgICAgIFJhd05vZGUq
IHk7CisKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0gKHkgPSB4LT5tX2xlZnQpKSB7Cisg
ICAgICAgICAgICB3aGlsZSAoeS0+bV9yaWdodCAhPSBuaWxTZW50aW5lbCgpKQorICAgICAgICAg
ICAgICAgIHkgPSB5LT5tX3JpZ2h0OworICAgICAgICAgICAgcmV0dXJuIGFzTm9kZSh5KTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgeSA9IHgtPnBhcmVudCgpOworICAgICAgICB3aGls
ZSAoeCA9PSB5LT5tX2xlZnQpIHsgCisgICAgICAgICAgICBpZiAoeSA9PSByb290KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB4ID0geTsKKyAgICAgICAgICAgIHkg
PSB5LT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSA9PSBuaWxTZW50aW5lbCgp
KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBhc05vZGUoeSk7CisgICAg
fQorICAgIAorICAgIE5vZGUqIGZpbmRFeGFjdChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgewor
ICAgICAgICBSYXdOb2RlKiB4ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIGlmICh4ID09IG5p
bFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKCEoYXNO
b2RlKHgpLT5rZXkgPT0ga2V5KSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZSh4KS0+a2V5ID4g
a2V5KQorICAgICAgICAgICAgICAgIHggPSB4LT5tX2xlZnQ7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeCA9IHgtPm1fcmlnaHQ7CisgICAgICAgICAgICBpZiAoeCA9PSBuaWxT
ZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBhc05vZGUoeCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlbW92ZShjb25zdCBL
ZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBOb2RlKiByZXN1bHQgPSBmaW5kRXhhY3Qoa2V5
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIHJlbW92ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaW5kTGVhc3RH
cmVhdGVyVGhhbk9yRXF1YWwoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3
Tm9kZSogY3VycmVudCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiBiZXN0ID0g
MDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbmlsU2VudGluZWwoKSkgeworICAgICAgICAg
ICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gYXNOb2RlKGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5
IDwga2V5KQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX3JpZ2h0OworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fbGVmdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKGJlc3QpOworICAgIH0KKyAgICAKKyAgICBOb2Rl
KiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsK
KyAgICAgICAgUmF3Tm9kZSogY3VycmVudCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdO
b2RlKiBiZXN0ID0gMDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbmlsU2VudGluZWwoKSkg
eworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5ID09IGtleSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYXNOb2RlKGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKGFzTm9kZShj
dXJyZW50KS0+a2V5IDwga2V5KSB7CisgICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7Cisg
ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fbGVmdDsKKyAgICAgICAgICAgIH0g
ZWxzZSAKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9yaWdodDsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKGJlc3QpOworICAgIH0KKyAgICAKKyAgICAvLyBU
aGlzIGlzIGFuIE8obikgb3BlcmF0aW9uLgorICAgIHNpemVfdCBzaXplKCkKKyAgICB7CisgICAg
ICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBmaXJz
dCgpOyBjdXJyZW50OyBjdXJyZW50ID0gc3VjY2Vzc29yKGN1cnJlbnQpKQorICAgICAgICAgICAg
cmVzdWx0Kys7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIC8vIFRo
aXMgaXMgYW4gTygxKSBvcGVyYXRpb24uCisgICAgYm9vbCBpc0VtcHR5KCkKKyAgICB7CisgICAg
ICAgIHJldHVybiByb290KCktPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpOworICAgIH0KKyAgICAK
KyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5l
bCgpLT5pc1JlZCgpKTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uocm9vdCgpLT5t
X2xlZnQpOworICAgICAgICBBU1NFUlQocm9vdCgpLT5tX3JpZ2h0ID09IG5pbFNlbnRpbmVsKCkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJU
cmVlIGF0ICVwOlxuIiwgdGhpcyk7CisgICAgICAgIGR1bXBSZWN1cnNlKHJvb3QoKS0+bV9sZWZ0
KTsKKyAgICAgICAgcHJpbnRmKCIgICByb290OiAlcCwgJXAsICVwXG4iLCByb290KCktPm1fbGVm
dCwgcm9vdCgpLT5tX3JpZ2h0LCByZWludGVycHJldF9jYXN0PHZvaWQqPihyb290KCktPnBhcmVu
dEFuZFJlZCkpOworICAgICAgICBwcmludGYoIiAgICBuaWw6ICVwLCAlcCwgJXBcbiIsIG5pbFNl
bnRpbmVsKCktPm1fbGVmdCwgbmlsU2VudGluZWwoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4obmlsU2VudGluZWwoKS0+cGFyZW50QW5kUmVkKSk7CisgICAgfQorI2VuZGlmCisK
K3ByaXZhdGU6CisgICAgdm9pZCBsZWZ0Um90YXRlKFJhd05vZGUqIHgpCisgICAgeworICAgICAg
ICBSYXdOb2RlKiB5OworCisgICAgICAgIHkgPSB4LT5tX3JpZ2h0OworICAgICAgICB4LT5tX3Jp
Z2h0ID0geS0+bV9sZWZ0OworCisgICAgICAgIGlmICh5LT5tX2xlZnQgIT0gbmlsU2VudGluZWwo
KSkKKyAgICAgICAgICAgIHktPm1fbGVmdC0+c2V0UGFyZW50KHgpOworICAKKyAgICAgICAgeS0+
c2V0UGFyZW50KHgtPnBhcmVudCgpKTsKKworICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQoKS0+
bV9sZWZ0KQorICAgICAgICAgICAgeC0+cGFyZW50KCktPm1fbGVmdCA9IHk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX3JpZ2h0ID0geTsKKyAgICAgICAgeS0+bV9s
ZWZ0ID0geDsKKyAgICAgICAgeC0+c2V0UGFyZW50KHkpOworCisgICAgICAgIEFTU0VSVCghbmls
U2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgcmlnaHRSb3RhdGUo
UmF3Tm9kZSogeSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHg7CisKKyAgICAgICAgeCA9IHkt
Pm1fbGVmdDsKKyAgICAgICAgeS0+bV9sZWZ0ID0geC0+bV9yaWdodDsKKworICAgICAgICBpZiAo
bmlsU2VudGluZWwoKSAhPSB4LT5tX3JpZ2h0KQorICAgICAgICAgICAgeC0+bV9yaWdodC0+c2V0
UGFyZW50KHkpOworCisgICAgICAgIHgtPnNldFBhcmVudCh5LT5wYXJlbnQoKSk7CisgICAgICAg
IGlmICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAgICAgICB5LT5wYXJlbnQoKS0+
bV9sZWZ0ID0geDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeS0+cGFyZW50KCktPm1fcmln
aHQgPSB4OworICAgICAgICB4LT5tX3JpZ2h0ID0geTsKKyAgICAgICAgeS0+c2V0UGFyZW50KHgp
OworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgaW5zZXJ0SGVscChOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSog
eDsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgCisgICAgICAgIHotPm1fbGVmdCA9IHotPm1fcmln
aHQgPSBuaWxTZW50aW5lbCgpOworICAgICAgICB5ID0gcm9vdCgpOworICAgICAgICB4ID0gcm9v
dCgpLT5tX2xlZnQ7CisgICAgICAgIHdoaWxlICh4ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAg
ICAgICAgIHkgPSB4OworICAgICAgICAgICAgaWYgKHotPmtleSA8IGFzTm9kZSh4KS0+a2V5KQor
ICAgICAgICAgICAgICAgIHggPSB4LT5tX2xlZnQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeCA9IHgtPm1fcmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgei0+c2V0UGFyZW50
KHkpOworICAgICAgICBpZiAoeSA9PSByb290KCkgfHwgei0+a2V5IDwgYXNOb2RlKHkpLT5rZXkp
CisgICAgICAgICAgICB5LT5tX2xlZnQgPSB6OworICAgICAgICBlbHNlCisgICAgICAgICAgICB5
LT5tX3JpZ2h0ID0gejsKKworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkp
OworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlKiBzdWNjZXNzb3JJbnRlcm5hbChSYXdOb2RlKiB4
KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAgCisgICAgICAgIGlmIChuaWxT
ZW50aW5lbCgpICE9ICh5ID0geC0+bV9yaWdodCkpIHsKKyAgICAgICAgICAgIHdoaWxlICh5LT5t
X2xlZnQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICB5ID0geS0+bV9sZWZ0Owor
ICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHkgPSB4
LT5wYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKHggPT0geS0+bV9yaWdodCkgeworICAgICAgICAg
ICAgeCA9IHk7CisgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHkgPT0gcm9vdCgpKQorICAgICAgICAgICAgcmV0dXJuIG5pbFNlbnRpbmVsKCk7Cisg
ICAgICAgIHJldHVybiB5OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZUZpeFVwKFJhd05v
ZGUqIHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiByZWFsUm9vdCA9IHJvb3QoKS0+bV9sZWZ0
OworICAgICAgICBSYXdOb2RlKiB3OworICAgICAgICAKKyAgICAgICAgd2hpbGUgKCF4LT5pc1Jl
ZCgpICYmIHJlYWxSb290ICE9IHgpIHsKKyAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgp
LT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7Cisg
ICAgICAgICAgICAgICAgaWYgKHctPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdy0+
c2V0UmVkKDApOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUp
OworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+
aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAg
ICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB3LT5tX2xlZnQtPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdo
dFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9y
aWdodDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3LT5zZXRS
ZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQo
KS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVk
KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0
OworICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IHctPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRS
ZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgtPnBhcmVudCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSAmJiAhdy0+
bV9sZWZ0LT5pc1JlZCgpKSB7IAorICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXctPm1fbGVmdC0+aXNSZWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxlZnRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50
KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3
LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAgICAgICAgICB4LT5w
YXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5z
ZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQo
KSk7CisgICAgICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeC0+c2V0UmVkKGZhbHNlKTsKKwor
ICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2Vu
dGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICB2b2lk
IGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKFJhd05vZGUqIG5vZGUpCisgICAgeworICAgICAgICBp
ZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAobm9kZS0+aXNSZWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX2xlZnQtPmlz
UmVkKCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX3JpZ2h0LT5pc1JlZCgpKTsKKyAg
ICAgICAgfQorICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX2xlZnQpOwor
ICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5tX3JpZ2h0KTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBkdW1wUmVjdXJzZShSYXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
cHJpbnRmKCIgICBub2RlOiAlcFxuIiwgbm9kZSk7CisgICAgICAgIHByaW50ZigiICAgICAgY29s
b3IgPSAlc1xuIiwgbm9kZS0+aXNSZWQoKSA/ICJyZWQiIDogImJsYWNrIik7CisgICAgICAgIHBy
aW50ZigiICAgICAgbGVmdCAgPSAlcFxuIiwgbm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRm
KCIgICAgICByaWdodCA9ICVwXG4iLCBub2RlLT5tX3JpZ2h0KTsKKyAgICAgICAgZHVtcFJlY3Vy
c2Uobm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7Cisg
ICAgfQorI2VuZGlmCisgICAgCisgICAgUmF3Tm9kZSogcm9vdCgpCisgICAgeworICAgICAgICBy
ZXR1cm4gJm1fcm9vdDsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogbmlsU2VudGluZWwoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuICZtX25pbFNlbnRpbmVsOworICAgIH0KKyAgICAKKyAgICBO
b2RlKiBhc05vZGUoUmF3Tm9kZSogcmF3Tm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChyYXdO
b2RlICE9IHJvb3QoKSk7CisgICAgICAgIEFTU0VSVChyYXdOb2RlICE9IG5pbFNlbnRpbmVsKCkp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZSo+KHJhd05vZGUpOworICAgIH0KKyAg
ICAKKyAgICBSYXdOb2RlIG1fcm9vdDsKKyAgICBSYXdOb2RlIG1fbmlsU2VudGluZWw7Cit9Owor
Cit9CisKKyNlbmRpZgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnBy
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJKHJldmlz
aW9uIDk0MTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9IYXNoVGFibGUu
Y3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5UaHJlYWQuY3BwIFwKKyAgICB3
dGYvTWV0YUFsbG9jYXRvci5jcHAgXAogICAgIHd0Zi9OdWxsUHRyLmNwcCBcCiAgICAgd3RmL09T
UmFuZG9tU291cmNlLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDk0MTA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0MjksNyArMjQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgYmFja3RyYWNrKCk7CiAKICAgICAg
ICAgLy8gTGluayAmIGZpbmFsaXplIHRoZSBjb2RlLgotICAgICAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoKmdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAg
ICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAg
bV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKICAgICAgICAg
aml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICAgICAgaml0T2Jq
ZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDExICs2NSwxMSBAQCBwdWJs
aWM6CiAKICAgICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0
LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVH
RVhQX1RSQUNJTkcpCi0gICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLm1fY29kZS5l
eGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVm
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxMDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEt
MDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhl
Y3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAor
ICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQs
IGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJl
cXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQg
dGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGly
ZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5v
ciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFu
Z2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2Ug
Y291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93
dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOiBBZGRlZC4KKwogMjAxMS0wOC0yOSAgTWFyayBIYWhu
ZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVuemlwIGluaXRpYWxp
emF0aW9uIGxpc3RzIGFuZCBjb25zdHJ1Y3RvcnMgaW4gSlNDZWxsIGhpZXJhcmNoeSAoMy83KQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxs
b2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0Zvcndh
cmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JI
YW5kbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MTA4
KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjIgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUg
aW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2Vk
IGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9y
CisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRl
IG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1
YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhl
ciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgor
ICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2Ug
YSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgTm8gbmV3IHRl
c3RzLCBzaW5jZSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4KKworICAgICAgICAqIEZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorCiAyMDExLTA4LTMw
ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgcmVmYWN0b3IgYm94
LW9yZGluYWwtZ3JvdXAgaGFuZGxpbmcgc28gd2UgZG9uJ3QgdGltZW91dCBvbiBsYXJnZSB2YWx1
ZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2Nh
dG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRl
cnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJD
b3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZXRhQWxsb2NhdG9y
SGFuZGxlLmg+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106049</attachid>
            <date>2011-09-01 15:45:34 -0700</date>
            <delta_ts>2011-09-01 15:57:29 -0700</delta_ts>
            <desc>the patch - changed unit tests to use TestWebKitAPI</desc>
            <filename>metaalloc_patch_22.diff</filename>
            <type>text/plain</type>
            <size>225477</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAyIEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
Ojpyb3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VO
b2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5
dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZl
ZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpSYXdOb2RlOjpzZXRSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmZpcnN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3Qp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVh
bCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVx
dWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0
SGVscCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZHVtcFJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJv
b3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjphc05vZGUpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDgtMzAgIEFhcm9uIENvbHdlbGwgIDxhY29sd2Vs
bEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIE1lZGlhU291cmNlIEFQSSB0byBIVE1MTWVk
aWFFbGVtZW50CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQkocmV2aXNpb24gOTQxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtNTA5LDYgKzUwOSw5IEBAIGphdmFzY3JpcHRjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWF0aEV4dHJhcy5oIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ENS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTUQ1LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRv
ci5jcHAgXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oIFwKKwlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL3d0Zi9NZXNzYWdlUXVldWUuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9Ob25Db3B5aW5nU29ydC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL05v
bmNvcHlhYmxlLmggXApAQCAtNTQxLDYgKzU0NCw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMg
Kz0gXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmNwcCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SYW5kb21OdW1iZXIuaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9SYW5kb21OdW1iZXJTZWVkLmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvUmVkQmxhY2tUcmVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRl
ZC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5j
cHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmgg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lv
biA5NDE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwMyw2ICs0MDMsMTMgQEAgX19aTjNXVEYxMmNyZWF0ZVRocmVhZEVQ
RlB2UzBfRVMwX1BLYwogX19aTjNXVEYxMmRldGFjaFRocmVhZEVqCiBfX1pOM1dURjEyaXNNYWlu
VGhyZWFkRXYKIF9fWk4zV1RGMTJyYW5kb21OdW1iZXJFdgorX19aTjNXVEYxM01ldGFBbGxvY2F0
b3IxN2FkZEZyZXNoRnJlZVNwYWNlRVB2bQorX19aTjNXVEYxM01ldGFBbGxvY2F0b3IxN2ZyZWVG
cmVlU3BhY2VOb2RlRVBOU18xMlJlZEJsYWNrVHJlZUltUHZFNE5vZGVFCitfX1pOM1dURjEzTWV0
YUFsbG9jYXRvcjE4ZGVidWdGcmVlU3BhY2VTaXplRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9y
OGFsbG9jYXRlRW0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yQzJFbQorX19aTjNXVEYxM01ldGFB
bGxvY2F0b3JEMUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckQyRXYKIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzcsNiArNDQ0LDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNiw2ICs1MjUsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzU3LDYgKzc1NywxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTg5Nyw2ICs5MDksMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDExICs1MSwxNSBAQAogCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVj
aW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07
CiAJCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9
OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9
IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CisJCTBGOTYz
QjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyog
TWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0Iy
RTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAy
RDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkM4MTUx
NTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0
MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovOyB9OwogCQkwRkM4MTUwQTE0
MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87
IH07CisJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4
RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07
CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjRE
MTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9z
aXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkx
NDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAw
MDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTU1Myw3ICs1NTcsNyBA
QAogCQlCQzE4QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTM5NkE2MENEMjkzMzEwMEI1
QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDMThDNDZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1BhY2tlZENhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REE0Nzk2
NTBDRkJDRjU2MDA5MzI4QTAgLyogVENQYWNrZWRDYWNoZS5oICovOyB9OwogCQlCQzE4QzQ2RDBF
MTZGNUNEMDBCMzQ0NjAgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFw
LmggKi87IH07Ci0JCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgw
QTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovOyB9OworCQlCQzE4QzQ2RTBFMTZGNUNEMDBC
MzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU0MUJENkYwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ2RjBF
MTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENzEwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lz
dGVtQWxsb2MuaCAqLzsgfTsKIAkJQkMxOEM0NzAwRTE2RjVDRDAwQjM0NDYwIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc5
MjIwRDZDOTVDRDAwRkVBM0JBIC8qIFRocmVhZGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDcxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBU
aHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFCN0M4QkQwREEzQTMzNjAwNzRCMERDIC8qIFRocmVhZFNwZWNpZmljLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczOCwxMSArNzQy
LDE1IEBACiAJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBs
aW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJF
MTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJs
ZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTQxNDA1
MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzAsNiArMTY3OCwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAq
LywKKwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAor
CQkJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkw
NkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIw
MDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmlj
b2RlICovLApAQCAtMjI1MSw2ICsyMjYzLDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2
NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5
ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJl
ZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTQzLDcgKzI1NTksNiBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50
YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QzBFMTZGNUNEMDBCMzQ0NjAg
LyogVENQYWNrZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkQwRTE2RjVDRDAw
QjM0NDYwIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NkUwRTE2RjVD
RDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZGMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzFF
REVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjNCRDMxRUQxMjY3MzU3NzAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODYyLDYgKzI4NzcsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNC
MkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDk0MTY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikK
IAorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgInN0ZGludC5oIgogI2luY2x1
ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg+CkBAIC0x
MjgsMTkgKzEyOSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJMYWJlbChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFi
bGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRv
cikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
Q29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
ICghbV9pbmRleCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgdm9p
ZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhnbG9iYWxEYXRhLCBtX2luZGV4KTsKKyAgICAg
ICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBnbG9iYWxEYXRh
LmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CiAKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQt
PnN0YXJ0KCksIHJlc3VsdC0+c2l6ZUluQnl0ZXMoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBt
ZW1jcHkocmVzdWx0LCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICBtZW1jcHkocmVz
dWx0LT5zdGFydCgpLCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBy
ZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIGxhYmVsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDk0MTY0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDIyICs2OSw4IEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2VuZGlmCiAKIHB1YmxpYzoK
LSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIq
IG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQotICAgICAg
ICA6IG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKDAp
Ci0gICAgICAgICwgbV9jb2RlKDApCi0gICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKLSAgICAg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAs
IG1fY29tcGxldGVkKGZhbHNlKQotI2VuZGlmCi0gICAgewotICAgICAgICBsaW5rQ29kZSgpOwot
ICAgIH0KLQotICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlciogbWFzbSwgRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQotICAgICAgICA6
IG1fZXhlY3V0YWJsZVBvb2woYWxsb2NhdG9yLnBvb2xGb3JTaXplKGdsb2JhbERhdGEsIG1hc20t
Pm1fYXNzZW1ibGVyLmNvZGVTaXplKCkpKQotICAgICAgICAsIG1fc2l6ZSgwKQorICAgIExpbmtC
dWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAg
ICAgICAgOiBtX3NpemUoMCkKICAgICAgICAgLCBtX2NvZGUoMCkKICAgICAgICAgLCBtX2Fzc2Vt
YmxlcihtYXNtKQogICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKQEAgLTE4NSwx
NCArMTcxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigp
OwogCi0gICAgICAgIHJldHVybiBDb2RlUmVmKG1fY29kZSwgbV9leGVjdXRhYmxlUG9vbCwgbV9z
aXplKTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmaW5hbGl6ZUNvZGVBZGRlbmR1
bSgpCi0gICAgewotICAgICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7Ci0KLSAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkxhYmVsKGNvZGUoKSk7CisgICAgICAgIHJldHVybiBDb2RlUmVmKG1f
ZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgfQogCiAgICAgQ29kZVB0ciB0cmFtcG9saW5lQXQoTGFi
ZWwgbGFiZWwpCkBAIC0yMzIsMTQgKzIxMSwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX2NvZGUpOwogI2lmICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgICAg
IG1fY29kZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9i
YWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERh
dGEpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpOwogICAgICAg
ICBtX3NpemUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICAgICAg
QVNTRVJUKG1fY29kZSk7CiAjZWxzZQogICAgICAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBtX2Fz
c2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKLSAgICAgICAgbV9jb2RlID0gKHVpbnQ4
X3QqKW1fZXhlY3V0YWJsZVBvb2wtPmFsbG9jKCptX2dsb2JhbERhdGEsIGluaXRpYWxTaXplKTsK
LSAgICAgICAgaWYgKCFtX2NvZGUpCisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xv
YmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV9nbG9iYWxEYXRhLCBpbml0
aWFsU2l6ZSk7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpOworICAgICAgICBBU1NFUlQobV9jb2RlKTsKICAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWFrZVdyaXRhYmxlKG1fY29kZSwgaW5pdGlhbFNpemUpOwogICAgICAgICB1aW50OF90
KiBpbkRhdGEgPSAodWludDhfdCopbV9hc3NlbWJsZXItPnVubGlua2VkQ29kZSgpOwogICAgICAg
ICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9jb2RlKTsK
QEAgLTI5Nyw3ICsyODEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGp1bXBzVG9MaW5rLmNsZWFy
KCk7CiAgICAgICAgIG1fc2l6ZSA9IHdyaXRlUHRyICsgaW5pdGlhbFNpemUgLSByZWFkUHRyOwot
ICAgICAgICBtX2V4ZWN1dGFibGVQb29sLT50cnlTaHJpbmsobV9jb2RlLCBpbml0aWFsU2l6ZSwg
bV9zaXplKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5LT5zaHJpbmsobV9zaXplKTsKIAog
I2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAgICAgIGR1bXBMaW5rU3RhdGlzdGljcyhtX2Nv
ZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwpAQCAtMzY2LDcgKzM1MCw3IEBAIHByaXZhdGU6CiAg
ICAgfQogI2VuZGlmCiAgICAgCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFi
bGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVN
ZW1vcnk7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBtX2NvZGU7CiAgICAgTWFjcm9B
c3NlbWJsZXIqIG1fYXNzZW1ibGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiA5NDE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwyMiArMTk5LDU5IEBAIHByaXZhdGU6CiAvLyBw
b2ludGVyIHRvIHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0byB0aGUgcG9vbCBmcm9tIHdp
dGhpbiB3aGljaCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB7Citwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgZGFu
Z2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAorICAgIC8vIHRvIGJlIGVhc3kg
dG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KKyAgICBleHBs
aWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIp
CisgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCisgICAgeworICAgICAgICBBU1NFUlQobV9j
b2RlUHRyKTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKQot
ICAgICAgICA6IG1fc2l6ZSgwKQogICAgIHsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAsIG1fZXhl
Y3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
ZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZU1lbW9yeSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPmlzTWFuYWdlZCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSk7CisgICAgICAgIEFT
U0VSVChtX2NvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4g
eW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMgdG8gY29kZSB0aGF0IGlzCisgICAgLy8g
YWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNh
bGx5IHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IGNvZGVQdHIgaXMgaW1tb3J0YWwuCisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVQdHI7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmICgh
bV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBtX2V4ZWN1dGFibGVNZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1fY29kZTsKLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhl
Y3V0YWJsZVBvb2w7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSw5ICsxNTk1LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYi5tX29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAgfQogICAgIAotICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1
dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAg
ICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSk7CiAgICAg
fQogCiAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7IG1f
Zm9ybWF0dGVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkBAIC0xOTM5LDkgKzE5MzksOSBA
QCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KTsgfQogICAgICAgICB2b2lkKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CiAKLSAgICAgICAgdm9pZCog
ZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
YWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4
ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIGFsbG9jYXRv
cik7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0
YSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFi
ZWwgcmV3aW5kVG8pIHsgbV9idWZmZXIucmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk0
MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0
cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9Ci0gICAg
ICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUo
KS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUq
IGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1l
bW9yeSgpOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9u
IDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgU3RydWN0dXJlQ2hhaW47CiAKICNpZiBFTkFCTEUoSklUKQotICAgIHR5cGVkZWYgQ29kZUxv
Y2F0aW9uTGFiZWwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBl
OworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKIAogICAgIC8vIFN0cnVjdHVyZSB1c2VkIGJ5IG9w
X2dldF9ieV9pZF9zZWxmX2xpc3QgYW5kIG9wX2dldF9ieV9pZF9wcm90b19saXN0IGluc3RydWN0
aW9uIHRvIGhvbGQgZGF0YSBvZmYgdGhlIG1haW4gb3Bjb2RlIHN0cmVhbS4KICAgICBzdHJ1Y3Qg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiA5NDE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwogICAgICAgICB9IHU7CiAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3R1YlJvdXRpbmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViUm91dGluZTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlKEpJVENvZGUmIGVudHJ5CiAgICAgLy8gR2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHByb2dy
YW0uCiAgICAgY29tcGlsZUJvZHkoKTsKICAgICAvLyBMaW5rCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9j
YXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
ICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgZW50cnkgPSBKSVRDb2RlKGxpbmtCdWZmZXIuZmlu
YWxpemVDb2RlKCksIEpJVENvZGU6OkRGR0pJVCk7CiB9CkBAIC05ODYsNyArOTg2LDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogCiAKICAgICAvLyA9PT0gTGlu
ayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9n
bG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICAKICAg
ICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sg
b3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0MTY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1
ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCYgc3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6
ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nl
c3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKS0+ZXhlY3V0YWJsZVBvb2woKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgIAog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0K
IAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNzYsMTUgKzE3Niwx
NCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAog
ICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKICAgICAgICAgbGlua1Jlc3RvcmVTY3Jh
dGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAKICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3Ry
dWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
OwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQ
cm90b0J1aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbik7CkBAIC0zMjQsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdAogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxp
c3Q7CkBAIC0zNTAsMjEgKzM0OSwyMSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsK
KyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwog
ICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKICAgICAgICAg
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90b0JlZ2luKTsK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAg
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9i
YWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50
cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJv
dXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0
KCkpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7
CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNDE5LDE4ICs0MTgsMTgg
QEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChsaXN0
SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNT
RVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKICAgICAg
ICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8s
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxh
c3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAg
ICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NDgsMTggKzU0NywxNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDIgKzI3LDExMSBAQAogCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjZW5kaWYK
KwogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKIAot
RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNp
emVfdCBzaXplKQorY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFB
bGxvY2F0b3IgeworcHVibGljOgorICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAg
ICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAz
MiBieXRlcworICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJlYWxsb2NhdGUgYW55IG1lbW9yeSBo
ZXJlLgorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5EZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXNlcnZhdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXNlcnZhdGlvbnMuYXQoaSkuZGVhbGxvY2F0ZSgp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFj
ZShzaXplX3QmIG51bVBhZ2VzKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld051bVBhZ2VzID0g
KCgobnVtUGFnZXMgKiBwYWdlU2l6ZSgpICsgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpF
IC0gMSkgLyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgKiBKSVRfQUxMT0NBVE9SX0xB
UkdFX0FMTE9DX1NJWkUpICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChuZXdOdW1QYWdlcyA+PSBudW1QYWdlcyk7CisgICAgICAgIAorICAg
ICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgUGFnZVJlc2Vy
dmF0aW9uIHJlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKG51bVBhZ2VzICog
cGFnZVNpemUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xf
V1JJVEFCTEUsIHRydWUpOworICAgICAgICBpZiAoIXJlc2VydmF0aW9uKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQocmVzZXJ2YXRp
b24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2UoKTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAg
eworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCksIEVYRUNVVEFC
TEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxQYWdlUmVzZXJ2YXRpb24sIDE2PiByZXNlcnZhdGlvbnM7Cit9OworCitzdGF0aWMgRGVtYW5k
RXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOworCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQogewotICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29k
ZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgIGlmICghYWxsb2Nh
dGlvbikKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gYWxsb2NhdGlvbjsKKyAgICBBU1NF
UlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRh
YmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBhbGxvY2F0aW9uLmRlYWxs
b2NhdGUoKTsKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwog
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9Ci0gICAgCisKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNp
emVJbkJ5dGVzKQoreworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogc2l6ZV90
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0gICAgcmV0dXJu
IDA7Ci19IAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7Cit9CiAKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGUoKQoreworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUoKTsKK30KICNl
bmRpZgogCisjZW5kaWYgLy8gRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKwog
I2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogCiAjaWYgT1MoV0lORE9XUykgfHwg
T1MoU1lNQklBTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA5NDE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTEwMiwx
MjAgKzEwMywyNyBAQCBpbmxpbmUgc2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplCiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEV4ZWN1dGFibGVQb29sPiB7Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKLSAgICB0eXBlZGVmIFBhZ2VBbGxvY2F0aW9uIEFsbG9jYXRpb247Ci0j
ZWxzZQotICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgQWxsb2Nh
dGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgICAgIDogbV9iYXNlKGJhc2Up
Ci0gICAgICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCogYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX2Jhc2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1fYmFzZTsKLSAg
ICAgICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB9OwotI2VuZGlmCi0gICAgdHlwZWRlZiBWZWN0b3I8
QWxsb2NhdGlvbiwgMj4gQWxsb2NhdGlvbkxpc3Q7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVQb29sKGdsb2Jh
bERhdGEsIG4pKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBhbGxvYyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZVB0ciA8PSBtX2Vu
ZCk7Ci0KLSAgICAgICAgLy8gUm91bmQgJ24nIHVwIHRvIGEgbXVsdGlwbGUgb2Ygd29yZCBzaXpl
OyBpZiBhbGwgYWxsb2NhdGlvbnMgYXJlIG9mCi0gICAgICAgIC8vIHdvcmQgc2l6ZWQgcXVhbnRp
dGllcywgdGhlbiBhbGwgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQuCi0g
ICAgICAgIG4gPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgc2l6ZW9mKHZvaWQqKSk7Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obikgPCAobV9lbmQgLSBtX2ZyZWVQdHIp
KSB7Ci0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVQdHI7Ci0gICAgICAgICAgICBt
X2ZyZWVQdHIgKz0gbjsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBJbnN1ZmZpY2llbnQgc3BhY2UgdG8gYWxsb2NhdGUgaW4gdGhlIGV4aXN0aW5n
IHBvb2wKLSAgICAgICAgLy8gc28gd2UgbmVlZCBhbGxvY2F0ZSBpbnRvIGEgbmV3IHBvb2wKLSAg
ICAgICAgcmV0dXJuIHBvb2xBbGxvY2F0ZShnbG9iYWxEYXRhLCBuKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCB0cnlTaHJpbmsodm9pZCogYWxsb2NhdGlvbiwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0
aW9uKSArIG9sZFNpemUgIT0gbV9mcmVlUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyByb3VuZFVwQWxs
b2NhdGlvblNpemUobmV3U2l6ZSwgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgfQotCi0gICAgfkV4ZWN1
dGFibGVQb29sKCkKLSAgICB7Ci0gICAgICAgIEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBlbmQg
PSBtX3Bvb2xzLmVuZCgpOwotICAgICAgICBmb3IgKEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBw
dHIgPSBtX3Bvb2xzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgRXhl
Y3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoKnB0cik7Ci0gICAgfQotCi0gICAgc2l6ZV90IGF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIChtX3Bvb2xzLnNpemUoKSA+IDEpID8gMCA6IG1fZW5k
IC0gbV9mcmVlUHRyOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEFsbG9jYXRpb24gc3lzdGVt
QWxsb2Moc2l6ZV90IG4pOwotICAgIHN0YXRpYyB2b2lkIHN5c3RlbVJlbGVhc2UoQWxsb2NhdGlv
biYgYWxsb2MpOwotCi0gICAgRXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG4p
OwotCi0gICAgdm9pZCogcG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQot
ICAgIGNoYXIqIG1fZnJlZVB0cjsKLSAgICBjaGFyKiBtX2VuZDsKLSAgICBBbGxvY2F0aW9uTGlz
dCBtX3Bvb2xzOwotfTsKK3R5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU7CiAKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0g
UHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0g
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewot
ICAgICAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29s
ID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NBVE9SX0xBUkdF
X0FMTE9DX1NJWkUpOwotI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAgICB9CisgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cihKU0dsb2JhbERhdGEmKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb2Nh
dG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKKyAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICBzdGF0aWMg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBwb29sRm9yU2l6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQot
ICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc21hbGwgYWxsb2Nh
dG9yCi0gICAgICAgIEFTU0VSVChtX3NtYWxsQWxsb2NhdGlvblBvb2wpOwotICAgICAgICBpZiAo
biA8IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwotCi0gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlz
IGxhcmdlLCB3ZSBqdXN0IHByb3ZpZGUgYSB1bnNoYXJlZCBhbGxvY2F0b3IKLSAgICAgICAgaWYg
KG4gPiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4g
RXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBuKTsKLQotICAgICAgICAvLyBDcmVh
dGUgYSBuZXcgYWxsb2NhdG9yCi0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbCA9
IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmV3IGFsbG9jYXRvciB3aWxsIHJlc3Vs
dCBpbiBtb3JlIGZyZWUgc3BhY2UgdGhhbiBpbgotICAgICAgICAvLyB0aGUgY3VycmVudCBzbWFs
bCBhbGxvY2F0b3IsIHRoZW4gd2Ugd2lsbCB1c2UgaXQgaW5zdGVhZAotICAgICAgICBpZiAoKHBv
b2wtPmF2YWlsYWJsZSgpIC0gbikgPiBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgp
KQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29sID0gcG9vbDsKLSAgICAgICAgcmV0
dXJuIHBvb2wucmVsZWFzZSgpOwotICAgIH0KKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAK
ICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCBtYWtl
V3JpdGFibGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMzQ4LDUwICsyNTYsOSBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2
b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0dGluZyk7CiAj
ZW5kaWYKLQotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29s
OwogfTsKIAotaW5saW5lIEV4ZWN1dGFibGVQb29sOjpFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3Vu
ZFVwQWxsb2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlvbiBtZW0gPSBz
eXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghbWVtLmJhc2UoKSkgewotICAgICAgICBy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgbWVtID0gc3lzdGVt
QWxsb2MoYWxsb2NTaXplKTsKLSAgICB9Ci0gICAgbV9wb29scy5hcHBlbmQobWVtKTsKLSAgICBt
X2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWVtLmJhc2UoKSk7Ci0gICAgaWYgKCFtX2Zy
ZWVQdHIpCi0gICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIG1fZW5k
ID0gbV9mcmVlUHRyICsgYWxsb2NTaXplOwotICAgIGRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIo
KTsKLX0KLQotaW5saW5lIHZvaWQqIEV4ZWN1dGFibGVQb29sOjpwb29sQWxsb2NhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0g
cm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIAotICAgIEFsbG9jYXRp
b24gcmVzdWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIXJlc3VsdC5iYXNl
KCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0
LmJhc2UoKSkKLSAgICAgICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQobV9lbmQgPj0gbV9mcmVlUHRyKTsKLSAgICBpZiAoKGFsbG9j
U2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAg
ICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0aW9uIHBvb2wKLSAgICAgICAgbV9mcmVlUHRyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgbjsKLSAgICAgICAgbV9lbmQgPSBzdGF0
aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBhbGxvY1NpemU7Ci0gICAgfQotCi0gICAg
bV9wb29scy5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsKLX0KLQot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUo
QVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA5NDE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAogI2luY2x1ZGUg
PGVycm5vLmg+CiAKLSNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4u
aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIApAQCAtNDYsNDgxICs0NSwxMDUgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jZGVmaW5lIFR3b1Bvdyhu
KSAoMXVsbCA8PCBuKQotCi1jbGFzcyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgewotcHVibGlj
OgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGJsb2Nr
U2l6ZSwgdW5zaWduZWQgbG9nMkJsb2NrU2l6ZSkKLSAgICAgICAgOiBtX2Jsb2NrU2l6ZShibG9j
a1NpemUpCi0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2tTaXplID09IFR3b1Bvdyhsb2cyQmxv
Y2tTaXplKSk7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5l
ZWRlZCB0byBob2xkIHNpemUuCi0gICAgICAgIHNpemVfdCBibG9ja01hc2sgPSBibG9ja1NpemUg
LSAxOwotICAgICAgICBtX2Jsb2NrQ291bnQgPSAoc2l6ZSArIGJsb2NrTWFzaykgPj4gbG9nMkJs
b2NrU2l6ZTsKLQotICAgICAgICAvLyBBbGlnbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdv
ID49IG1fYmxvY2tDb3VudC4KLSAgICAgICAgbV9ibG9ja0FsaWdubWVudCA9IDE7Ci0gICAgICAg
IHdoaWxlIChtX2Jsb2NrQWxpZ25tZW50IDwgbV9ibG9ja0NvdW50KQotICAgICAgICAgICAgbV9i
bG9ja0FsaWdubWVudCArPSBtX2Jsb2NrQWxpZ25tZW50OwotICAgIH0KLQotICAgIHNpemVfdCBi
bG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrU2l6ZTsgfQotICAgIHNpemVfdCBibG9j
a0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0NvdW50OyB9Ci0gICAgc2l6ZV90IGJsb2Nr
QWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0FsaWdubWVudDsgfQotCi0gICAgc2l6
ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tTaXplICogbV9ibG9ja0Nv
dW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9ibG9ja1NpemU7Ci0gICAgc2l6
ZV90IG1fYmxvY2tDb3VudDsKLSAgICBzaXplX3QgbV9ibG9ja0FsaWdubWVudDsKLX07Ci0KLXRl
bXBsYXRlPHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlTGVhZiB7
Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IDEyOyAvLyAyXjEyID09IHBhZ2VzaXpl
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lv
blNpemUgKyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9u
U2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCByZWdpb25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NF
UlQoZW50cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVMZWFm
X2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJsZUxlYWYoKQot
ICAgICAgICA6IG1fYWxsb2NhdGVkKDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxvY2F0aW9u
VGFibGVMZWFmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0gc3VicmVnaW9u
U2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAgICAgIHNpemVfdCBhbGln
bm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50
ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBj
aGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAo
KDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAv
LyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICgh
KG1fYWxsb2NhdGVkICYgbWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2FsbG9jYXRlZCB8PSBt
YXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkpIDw8
IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8PD0g
YWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9Ci0K
LSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mm
IHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkg
PT0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24gPj4g
bG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9j
a0NvdW50KCk7Ci0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkg
PDwgZW50cnk7Ci0KLSAgICAgICAgQVNTRVJUKChtX2FsbG9jYXRlZCAmIG1hc2spID09IG1hc2sp
OwotICAgICAgICBtX2FsbG9jYXRlZCAmPSB+bWFzazsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1w
dHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX2FsbG9jYXRlZDsKLSAgICB9Ci0KLSAgICBi
b29sIGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gIX5tX2FsbG9jYXRlZDsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lv
blNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFz
c0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRh
YmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQg
PSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAg
Iik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyUwMTZsbHhdXG4iLCAoaW50KXBh
cmVudE9mZnNldCwgbV9hbGxvY2F0ZWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IEJpdEZpZWxkIG1fYWxsb2NhdGVkOwotfTsKLQotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWw+
Ci1jbGFzcyBMYXp5QWxsb2NhdGlvblRhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gTmV4dExldmVsOjplbnRyaWVzOwotCi0g
ICAgTGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgICAgIDogbV9wdHIoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgfkxhenlBbGxvY2F0aW9uVGFibGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
RW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3B0cikKLSAgICAgICAg
ICAgIG1fcHRyID0gbmV3IE5leHRMZXZlbCgpOwotICAgICAgICByZXR1cm4gbV9wdHItPmFsbG9j
YXRlKHNpemVDbGFzcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwg
QWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZnJlZShsb2NhdGlvbiwgc2l6ZUNsYXNzKTsKLSAg
ICAgICAgaWYgKG1fcHRyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3B0cjsK
LSAgICAgICAgICAgIG1fcHRyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNF
bXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIW1fcHRyOwotICAgIH0KLQotICAgIGJvb2wg
aXNGdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciAmJiBtX3B0ci0+aXNGdWxsKCk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOZXh0TGV2ZWw6OnNpemUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBk
dW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmR1bXAocGFyZW50T2Zmc2V0
LCBpbmRlbnQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4g
TmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5l
eHRMZXZlbCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWwsIHVuc2lnbmVk
IGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5IHsKLSAgICB0eXBl
ZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZzJTdWJyZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSAr
IGxvZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0g
VHdvUG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lv
blNpemUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBlbnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRy
aWVzIDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeV9l
bnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnko
KQotICAgICAgICA6IG1fZnVsbCgwKQotICAgICAgICAsIG1faGFzU3ViYWxsb2NhdGlvbigwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghaXNGdWxsKCkpOwotCi0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJy
ZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSwgYml0ICs9IGJpdCkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2Z1bGwgJiBiaXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fc3ViYWxsb2NhdGlvbnNb
aV0uYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBkaWRuJ3QgYWxyZWFk
eSBoYXZlIGEgc3VicmVnaW9uLCBpdCBkb2VzIG5vdyEKLSAgICAgICAgICAgICAgICAgICAgbV9o
YXNTdWJhbGxvY2F0aW9uIHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWlycm9yIHRo
ZSBzdWJhbGxvY2F0aW9uJ3MgZnVsbCBiaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N1
YmFsbG9jYXRpb25zW2ldLmlzRnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mdWxs
IHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpICogc3VicmVnaW9uU2l6ZSkg
fCBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBIGJsb2NrIGlzIGFs
bG9jYXRlZCBpZiBlaXRoZXIgaXQgaXMgZnVsbHkgYWxsb2NhdGVkIG9yIGNvbnRhaW5zIHN1YmFs
bG9jYXRpb25zLgotICAgICAgICBCaXRGaWVsZCBhbGxvY2F0ZWQgPSBtX2Z1bGwgfCBtX2hhc1N1
YmFsbG9jYXRpb247Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9j
a0FsaWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3Vu
dCgpOwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVl
IGJsb2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8
PCAoYWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxp
Z25tZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBp
ICs9IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEoYWxsb2NhdGVkICYgbWFzaykpIHsK
LSAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gbWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4g
KGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlv
biwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAg
IHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwotCi0gICAgICAg
IGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAg
ICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGVudHJ5OwotICAgICAgICAgICAgbV9zdWJhbGxvY2F0
aW9uc1tlbnRyeV0uZnJlZShsb2NhdGlvbiAmIChzdWJyZWdpb25TaXplIC0gMSksIHNpemVDbGFz
cyk7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3ViYWxsb2NhdGlvbiBpcyBub3cgZW1w
dHkuCi0gICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlvbiAmPSB+Yml0OwotICAgICAgICAgICAg
Ly8gTm8gbmVlZCB0byBjaGVjaywgaXQgY2xlYXJseSBpc24ndCBmdWxsIGFueSBtb3JlIQotICAg
ICAgICAgICAgbV9mdWxsICY9IH5iaXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
aXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAgICAgQml0Rmll
bGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsKLSAgICAgICAgICAgIEFT
U0VSVCgobV9mdWxsICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoIShtX2hh
c1N1YmFsbG9jYXRpb24gJiBtYXNrKSk7Ci0gICAgICAgICAgICBtX2Z1bGwgJj0gfm1hc2s7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICEobV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBib29sIGlz
RnVsbCgpCi0gICAgeyAgIAotICAgICAgICByZXR1cm4gIX5tX2Z1bGw7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwot
ICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXpl
KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCBzdWJyZWdpb25TaXplKSB7
Ci0gICAgICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gTmV4dExl
dmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLnNpemUo
KSA8IE5leHRMZXZlbDo6c2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzaXplQ2xhc3M7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXpl
LCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5E
RUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5k
ZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7
ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiUwOHg6IFsiLCAoaW50KXBhcmVudE9mZnNldCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxk
IGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIGNoYXIgYyA9IG1faGFzU3ViYWxsb2NhdGlv
biAmIGJpdAotICAgICAgICAgICAgICAgID8gKG1fZnVsbCAmIGJpdCA/ICdOJyA6ICduJykKLSAg
ICAgICAgICAgICAgICA6IChtX2Z1bGwgJiBiaXQgPyAnRicgOiAnLScpOwotICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlYyIsIGMpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiXVxuIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7
ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IHBhcmVudE9mZnNldCB8IChzdWJyZWdpb25TaXplICogaSk7Ci0g
ICAgICAgICAgICBpZiAobV9oYXNTdWJhbGxvY2F0aW9uICYgYml0KQotICAgICAgICAgICAgICAg
IG1fc3ViYWxsb2NhdGlvbnNbaV0uZHVtcChvZmZzZXQsIGluZGVudCArIDEpOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsIG1fc3ViYWxsb2NhdGlv
bnNbZW50cmllc107Ci0gICAgLy8gU3VicmVnaW9ucyBleGlzdCBpbiBvbmUgb2YgZm91ciBzdGF0
ZXM6Ci0gICAgLy8gKDEpIGVtcHR5IChib3RoIGJpdHMgY2xlYXIpCi0gICAgLy8gKDIpIGZ1bGx5
IGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBhbGxvY2F0aW9uIChtX2Z1bGwgc2V0KQotICAgIC8vICgz
KSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKG1faGFzU3ViYWxs
b2NhdGlvbiBzZXQpCi0gICAgLy8gKDQpIGZ1bGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9j
YXRpb25zIChib3RoIGJpdHMgc2V0KQotICAgIEJpdEZpZWxkIG1fZnVsbDsKLSAgICBCaXRGaWVs
ZCBtX2hhc1N1YmFsbG9jYXRpb247Ci19OwotCi0KLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlTGVh
Zjw2PiBQYWdlVGFibGVzMjU2S0I7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxQ
YWdlVGFibGVzMjU2S0IsIDY+IFBhZ2VUYWJsZXMxNk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFi
bGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDE+IFBhZ2VU
YWJsZXMzMk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRp
b25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDY+IFBhZ2VUYWJsZXMxR0I7Ci0KICNpZiBDUFUoQVJN
KQotdHlwZWRlZiBQYWdlVGFibGVzMTZNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BV
KFg4Nl82NCkKLXR5cGVkZWYgUGFnZVRhYmxlczFHQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CiAj
ZWxzZQotdHlwZWRlZiBQYWdlVGFibGVzMzJNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0
aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogI2VuZGlm
CiAKLQotY2xhc3MgRml4ZWRWTVBvb2xBbGxvY2F0b3IKLXsKK2NsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgotICAgIEZp
eGVkVk1Qb29sQWxsb2NhdG9yKCkKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQorICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcwogICAgIHsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMyNTZLQjo6c2l6
ZSgpID09IDI1NiAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczE2TUI6OnNpemUo
KSA9PSAxNiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMzMk1COjpz
aXplKCkgPT0gMzIgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMUdC
OjpzaXplKCkgPT0gMTAyNCAqIDEwMjQgKiAxMDI0KTsKLQotICAgICAgICBtX3Jlc2VydmF0aW9u
ID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoRml4ZWRWTVBvb2xQYWdl
VGFibGVzOjpzaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9Q
T09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZh
dGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxsb2NhdG9yOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNpZiAhRU5B
QkxFKElOVEVSUFJFVEVSKQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgaWYgKCFt
X3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgorICAgICAgICBpZiAo
bV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgp
ID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNl
cnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
LSAKLSAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyhzaXplX3QgcmVxdWVzdGVk
U2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShyZXF1ZXN0ZWRT
aXplKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplQ2xhc3Muc2l6ZSgpOwotICAgICAgICBB
U1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPj0gRml4ZWRWTVBvb2xQYWdlVGFibGVz
OjpzaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0gICAgICAgIGlmIChtX3BhZ2VzLmlzRnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBtX3BhZ2VzLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0g
bm90Rm91bmQpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0KLSAgICAgICAgdm9pZCogcG9pbnRlciA9IG9mZnNldFRvUG9pbnRlcihvZmZzZXQp
OwotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwb2ludGVyLCBzaXplKTsKLSAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKHBvaW50ZXIsIHNpemUpOwotICAgIH0K
LQotICAgIHZvaWQgZnJlZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKQogICAgIHsKLSAgICAgICAgdm9pZCogcG9pbnRlciA9IGFsbG9jYXRpb24uYmFzZSgpOwot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGFsbG9jYXRpb24uc2l6ZSgpOwotICAgICAgICBBU1NFUlQo
c2l6ZSk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwb2ludGVyLCBzaXplKTsK
LQotICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JT
aXplKHNpemUpOwotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLnNpemUoKSA9PSBzaXplKTsKLSAg
ICAgICAgbV9wYWdlcy5mcmVlKHBvaW50ZXJUb09mZnNldChwb2ludGVyKSwgc2l6ZUNsYXNzKTsK
KyAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9j
YXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZWQoKQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzZXJ2YXRpb24uY29t
bWl0dGVkKCk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkp
OwogICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAh
IW1fcmVzZXJ2YXRpb247CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFn
ZVNpemUoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFz
cyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gRml4ZWRW
TVBvb2xQYWdlVGFibGVzOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9pZCog
b2Zmc2V0VG9Qb2ludGVyKHNpemVfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZh
dGlvbi5iYXNlKCkpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9pbnRlclRvT2Zm
c2V0KHZvaWQqIHBvaW50ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlcikgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRp
b247Ci0gICAgRml4ZWRWTVBvb2xQYWdlVGFibGVzIG1fcGFnZXM7CiB9OwogCitzdGF0aWMgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CiAKLXN0YXRpYyBTcGluTG9j
ayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIEZpeGVkVk1Qb29sQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSAwOwotCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRp
YWxpemVBbGxvY2F0b3IoKQoreworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7Cit9CiAKLXNpemVfdCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQorRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tIb2xkZXIoJnNwaW5sb2NrKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yID8gYWxs
b2NhdG9yLT5hbGxvY2F0ZWQoKSA6IDA7Ci19ICAgCisgICAgQVNTRVJUKGFsbG9jYXRvcik7Cit9
CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sQWxsb2NhdG9yKCk7Ci0gICAgcmV0
dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgpOworICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNS
ZXNlcnZlZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJl
c3N1cmUoKQogewotICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCB0YWtlIHRoZSBzcGluIGxv
Y2sgaGVyZSwgYnV0IHdlIGRvbid0IGNhcmUgaWYgd2UgZ2V0IHN0YWxlIGRhdGEuCi0gICAgLy8g
VGhpcyBpcyBvbmx5IHJlYWxseSBhIGhldXJpc3RpYyBhbnl3YXkuCi0gICAgcmV0dXJuIGFsbG9j
YXRvciAmJiAoYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA+IChGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6
OnNpemUoKSAvIDIpKTsKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3Mg
PSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgcmV0dXJuIHN0YXRpc3RpY3Mu
Ynl0ZXNBbGxvY2F0ZWQgPiBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLyAyOwogfQogCi1FeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90
IHNpemUpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5
dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAg
QVNTRVJUKGFsbG9jYXRvcik7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Moc2l6ZSk7Cisg
ICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxs
b2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIGNoYXIgYnVm
WzI3XTsKKyAgICAgICAgdGltZV90IGN1cnJlbnRUaW1lOworICAgICAgICB0aW1lKCZjdXJyZW50
VGltZSk7CisgICAgICAgIGN0aW1lX3IoJmN1cnJlbnRUaW1lLCBidWYpOworICAgICAgICBwcmlu
dGYoIiVzOiBJJ20gZ2l2aW5nIGhlciBhbGwgc2hlJ3MgZ290LCBDYXB0YWluIVxuIiwgYnVmKTsK
KyAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworfQorCitzaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNv
dW50KCkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOwogfQogCi12
b2lkIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0
aW9uJiBhbGxvY2F0aW9uKSAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3Zv
aWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogewotICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAgQVNTRVJUKGFsbG9jYXRvcik7Ci0gICAg
YWxsb2NhdG9yLT5mcmVlKGFsbG9jYXRpb24pOworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUo
KTsKIH0KKyNlbmRpZgogCiB9CiAKIAotI2VuZGlmIC8vIEhBVkUoQVNTRU1CTEVSKQorI2VuZGlm
IC8vIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcgQEAgSklUQ29kZSBK
SVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogCiAgICAgQVNTRVJUKG1fam1wVGFibGUu
aXNFbXB0eSgpKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVHJhbnNsYXRlIHZQ
QyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRj
aCB0YWJsZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgp
OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQxNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
MjAgKzIyMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxl
UG9vbCwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFt
cG9saW5lcykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VK
SVQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxE
YXRhLCB0cmFtcG9saW5lcyk7CisgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEsIHRyYW1wb2xpbmVzKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBDb2RlUHRyIGNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCisgICAgICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVD
VElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
YykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVB0cigpOworICAgICAgICAgICAgICAgIHJldHVy
biBDb2RlUmVmKCk7CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDApOwotICAgICAg
ICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoZXhlY3V0YWJsZVBv
b2wsIGdsb2JhbERhdGEsIGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuYyk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZWJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CkBAIC0yNzQsOSArMjc0LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1
YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOwogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1Yklu
Zm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1
cmVDaGFpbiosIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpOwog
Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgVHJh
bXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpOworICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpT
R2xvYmFsRGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBm
YWxzZSk7Ci0gICAgICAgIENvZGVQdHIgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEs
IE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpOworICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcyk7CiAKICAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKQEAgLTEwMzQsNyAr
MTAzNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjZW5kaWYKICAgICAgICAgV2Vha1Jh
bmRvbSBtX3JhbmRvbUdlbmVyYXRvcjsKLSAgICAgICAgc3RhdGljIENvZGVQdHIgc3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpOworICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogCiAgICAg
aW5saW5lIHZvaWQgSklUOjplbWl0X29wX2xvb3AoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiA5NDE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NiwxMiArNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBvcGVy
YXRvciAhKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5tX2Nv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiAhbV9yZWY7CiAgICAg
ICAgIH0KIAogICAgICAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5j
b2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl
IG9mZnNldCBpbiBieXRlcyBvZiAncG9pbnRlckludG9Db2RlJyBpbnRvCkBAIC02OSw3ICs2OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBibG9jayBvZiBjb2RlLiAgSXQgaXMgQVNT
RVJUZWQgdGhhdCBubyBjb2RlYmxvY2sgPjRnYiBpbiBzaXplLgogICAgICAgICB1bnNpZ25lZCBv
ZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29k
ZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0
PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0gcmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsK
ICAgICAgICAgfQpAQCAtNzcsMjQgKzc3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyBFeGVjdXRlIHRoZSBjb2RlIQogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBleGVjdXRlKFJlZ2lz
dGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
VmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkKiBzdGFydCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2Nv
ZGUuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmRhdGFM
b2NhdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHNpemUoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fc2l6ZTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jl
Zi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYu
c2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGdldEV4ZWN1dGFi
bGVQb29sKCkKKyAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZ2V0RXhlY3V0YWJsZU1l
bW9yeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2V4ZWN1dGFibGVQ
b29sLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkKQEAgLTEwNCw5
ICsxMDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBIb3N0IGZ1bmN0aW9ucyBh
cmUgYSBiaXQgc3BlY2lhbDsgdGhleSBoYXZlIGEgbV9jb2RlIHBvaW50ZXIgYnV0IHRoZXkKICAg
ICAgICAgLy8gZG8gbm90IGluZGl2aWR1bGx5IHJlZiB0aGUgZXhlY3V0YWJsZSBwb29sIGNvbnRh
aW5pbmcgdGhlIHRyYW1wb2xpbmUuCi0gICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlv
bihDb2RlUHRyIGNvZGUpCisgICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlvbihDb2Rl
UmVmIGNvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUuZGF0
YUxvY2F0aW9uKCksIDAsIDAsIEhvc3RDYWxsVGh1bmspOworICAgICAgICAgICAgcmV0dXJuIEpJ
VENvZGUoY29kZSwgSG9zdENhbGxUaHVuayk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNs
ZWFyKCkKQEAgLTExNiw4ICsxMTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUsIEpJVFR5cGUgaml0VHlwZSkK
LSAgICAgICAgICAgIDogbV9yZWYoY29kZSwgZXhlY3V0YWJsZVBvb2wsIHNpemUpCisgICAgICAg
IEpJVENvZGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVt
b3J5LCBKSVRUeXBlIGppdFR5cGUpCisgICAgICAgICAgICA6IG1fcmVmKGV4ZWN1dGFibGVNZW1v
cnkpCiAgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMo
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCitQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFt
cG9saW5lcykKIHsKICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKICAgICBMYWJlbCBz
b2Z0TW9kQmVnaW4gPSBhbGlnbigpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMz
Q2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMyk7CiAKICAg
ICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAg
Y2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+
ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNl
czFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsQ29tcGlsZUNjb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsK
KyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSA9IGZp
bmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVh
bENhbGwgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENhbGxCZWdpbik7CiAgICAg
dHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5l
QXQodmlydHVhbENvbnN0cnVjdEJlZ2luKTsKQEAgLTE3NSw2ICsxNzUsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9N
T0RVTE8pCiAgICAgdHJhbXBvbGluZXMtPmN0aVNvZnRNb2R1bG8gPSBwYXRjaEJ1ZmZlci50cmFt
cG9saW5lQXQoc29mdE1vZEJlZ2luKTsKICNlbmRpZgorICAgIAorICAgIHJldHVybiBleGVjdXRh
YmxlTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAogSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb25zdHJ1Y3Qp
CkBAIC0zMTIsMTAgKzMxNCw5IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5h
dGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwogfQogCi1KSVQ6OkNvZGVQdHIgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4g
ZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24g
ZnVuYykKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBu
YXRpdmVDYWxsOwotICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7CiAKICAgICBl
bWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2spOwogCkBAIC00NDcsMTIgKzQ0OCwxMCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2CiAgICAgcmV0KCk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3Ry
dWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJz
IG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMsIGV4ZWN1dGFibGVQb29sKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhuYXRpdmVD
YWxsLCBGdW5jdGlvblB0cihmdW5jKSk7Ci0gICAgcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
Ci0KLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7
CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQxNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAot
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVj
dXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRy
YW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiB7
CiAgICAgLy8gKDIpIFRoZSBzZWNvbmQgZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBh
Y2Nlc3MgZm9yIHN0cmluZyBsZW5ndGgKICAgICBMYWJlbCBzdHJpbmdMZW5ndGhCZWdpbiA9IGFs
aWduKCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFj
aGluZVRyYW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFrZVRhaWxS
ZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKIAogICAgIC8vIEFsbCB0cmFtcG9s
aW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0
aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2Nh
dG9yKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbCkpOwpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUNUSU1hY2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlQ29uc3Ry
dWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKIAogICAgIENv
ZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1
dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJs
ZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHBhdGNo
QnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CiAgICAgdHJhbXBvbGlu
ZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZp
cnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOwpAQCAtMTczLDYgKzE3Myw4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZl
Q2FsbCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDYWxsVGh1bmspOwogICAgIHRy
YW1wb2xpbmVzLT5jdGlOYXRpdmVDb25zdHJ1Y3QgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQo
bmF0aXZlQ29uc3RydWN0VGh1bmspOwogICAgIHRyYW1wb2xpbmVzLT5jdGlTdHJpbmdMZW5ndGhU
cmFtcG9saW5lID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHN0cmluZ0xlbmd0aEJlZ2luKTsK
KyAgICAKKyAgICByZXR1cm4gZXhlY3V0YWJsZU1lbW9yeS5yZWxlYXNlKCk7CiB9CiAKIEpJVDo6
TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBib29sIGlzQ29uc3RydWN0KQpAQCAtMjkxLDkgKzI5Myw5IEBAIEpJVDo6TGFiZWwg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5r
OwogfQogCi1KSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFz
c1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4sIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZl
RnVuY3Rpb24pCitKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKIHsKLSAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICByZXR1cm4gQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gOTQxNjQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21ldGhvZF9jaGVj
ayhJbnN0cgogICAgIG1fYnl0ZWNvZGVPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwogfQogCi1KSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29k
ZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVz
OwpAQCAtMTkzLDggKzE5Myw4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1
YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0
KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwg
cG9vbCk7Ci0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0KTsKKyAgICByZXR1cm4g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIzMiw3ICsyMzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25D
ZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVj
awogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
KSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOwotICAgIGVtaXRO
YWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcikpOworICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDApOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92
YWwpKTsKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlk
VHJhbnNpdGlvCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwog
ICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rp
b25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRf
YnlfaWRfZmFpbCkpOwogICAgIApAQCAtNTUwLDEwICs1NTAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxs
c1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxv
YykpOwogICAgIH0KICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZSgpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJu
QWRkcmVzcywgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1Ry
YW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJS
b3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQpAQCAtNjA2LDcgKzYwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2wo
KSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAg
ICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTYxNywx
MyArNjE2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFj
ayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0
ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJl
bDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNr
IGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25K
dW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBh
dGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAg
ICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02NjYsNyArNjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5m
b3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
bG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0g
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdl
dEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjg0LDEzICs2ODIsMTIgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIH0KIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRk
ZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8g
Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVy
VG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3By
b3RvX2xpc3QpKTsKQEAgLTcyMyw3ICs3MjAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkU2VsZkxpc3QoCiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+
ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3Rv
cjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTcz
MSw3ICs3MjgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAg
ICAgICAgIH0KICAgICB9ICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGlj
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3Jw
aGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGwpOwogICAgIApAQCAtNzQwLDE0ICs3MzcsMTQgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAgIAogICAgIC8vIEZp
bmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJh
bmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNh
Y2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC03ODcsNyArNzg0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIAogICAgIEp1bXAgc3Vj
Y2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtNzk1LDIxICs3OTIsMjEgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0
aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMx
LCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBs
YXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsK
ICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0
aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3Qg
Y2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg1NCw3ICs4NTEsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGlu
aykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1f
Y2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAg
ICAgIGlmIChpdGVyLT50bykKQEAgLTg2MiwyMiArODU5LDIyIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZS5jb2RlKCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09m
RmFpbCwgbGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdl
IGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90
b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVj
dHVyZSwgY2hhaW4pOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTky
MSw3ICs5MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAg
ICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCByZWdUMCwg
Y2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxD
YWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2Nh
bGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTkzNSwx
MyArOTMyLDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFj
ayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0
ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJl
bDsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gOTQxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotSklUOjpDb2Rl
UHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIEpTSW50
ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTc3LDggKzc3LDggQEAg
SklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEt
PmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2Vk
Q2FsbChDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9i
eV92YWwpKTsKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgp
OwogICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRy
KGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lk
X2ZhaWwpKTsKIApAQCAtNTY0LDEwICs1NjQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9t
LCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAg
IH0KICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRy
eUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywg
ZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUo
cmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQpAQCAt
NjE1LDcgKzYxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4K
ICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CiAgICAgSnVt
cCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFVzZSB0aGUg
cGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBv
cmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjI2LDEzICs2MjUsMTIgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZFB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVh
dGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAg
IHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJS
b3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJ
bmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0
Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY3Myw3
ICs2NzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAg
fSBlbHNlCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1Qw
LCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRh
YmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMpOwogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02
OTAsMTMgKzY4OCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3Ry
CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNo
IHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUg
aW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nh
c2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZv
LT5zdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
LgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKQEAgLTcyNiw3ICs3
MjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAg
IGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QwLCBzdHJ1Y3R1cmUsIGNhY2hlZE9m
ZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2wo
KSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAog
ICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikgewpAQCAtNzM2LDcgKzczMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRTZWxmTGlzdCgKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9y
cGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29k
ZSgpKTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9
IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRH
ZXRCeUlkU2xvd0Nhc2VDYWxsKTsKIApAQCAtNzQ1LDE0ICs3NDIsMTQgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNv
ZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSk7CiAKICAgICAv
LyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0
aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJ
ZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxh
YmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJDb2RlLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNzkxLDcgKzc4OCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKIAogICAgIEp1bXAgc3VjY2Vz
cyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykg
ewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2Fs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTgwMSwyMCAr
Nzk4LDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICB9
CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzMiwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQ
dXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgq
bV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBz
dHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRo
ZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2Up
OwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODU3LDcgKzg1NCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNl
dChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlz
LCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICBpZiAobmVlZHNTdHViTGluaykg
ewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2Fs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTg2NywyMiAr
ODY0LDIyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICB9
CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGlu
ZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIg
d2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHBy
b3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3Ry
dWN0dXJlLCBjaGFpbik7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7CiAKICAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRv
U2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MjUs
NyArOTIyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAg
ICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zm
c2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgp
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAg
ICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsg
KytpdGVyKSB7CkBAIC05NDEsMTMgKzkzOCwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7
CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxs
IGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gZW50cnlMYWJlbDsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7
CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRo
ZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1
bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zm
c2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk0
MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1Nyw4ICs3NTcsOCBAQCBKSVRUaHVua3M6OkpJVFRodW5rcyhKU0dsb2JhbERh
dGEqIGdsb2JhCiAgICAgaWYgKCFnbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1w
b2xpbmVzKGdsb2JhbERhdGEsICZtX2V4ZWN1dGFibGVQb29sLCAmbV90cmFtcG9saW5lU3RydWN0
dXJlKTsKLSAgICBBU1NFUlQobV9leGVjdXRhYmxlUG9vbCk7CisgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gSklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEsICZtX3Ry
YW1wb2xpbmVTdHJ1Y3R1cmUpOworICAgIEFTU0VSVCghIW1fZXhlY3V0YWJsZU1lbW9yeSk7CiAj
aWYgQ1BVKEFSTV9USFVNQjIpCiAgICAgLy8gVW5mb3J0dW5hdGUgdGhlIGFybSBjb21waWxlciBk
b2VzIG5vdCBsaWtlIHRoZSB1c2Ugb2Ygb2Zmc2V0b2Ygb24gSklUU3RhY2tGcmFtZSAoc2luY2Ug
aXQgY29udGFpbnMgbm9uIFBPRCB0eXBlcyksCiAgICAgLy8gYW5kIHRoZSBPQkpFQ1RfT0ZGU0VU
T0YgbWFjcm8gZG9lcyBub3QgYXBwZWFyIGNvbnN0YW50aXNoIGVub3VnaCBmb3IgaXQgdG8gYmUg
aGFwcHkgd2l0aCBpdHMgdXNlIGluIENPTVBJTEVfQVNTRVJUCkBAIC0xNjA4LDcgKzE2MDgsNyBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICAgICAgaWYg
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAg
ICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1
YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAg
ICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0x
NjM0LDEyICsxNjM0LDEyIEBAIHN0YXRpYyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IGcKICAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8t
PnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQo
KSk7Ci0gICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
OwogICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0
dXJlTGlzdCwgMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0
dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgICAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0OgpAQCAtMzU3MiwxMSAr
MzU3MiwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgdG9fCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvT2Jq
ZWN0KGNhbGxGcmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpj
dGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8
Q1RJU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5l
cmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBzdGQ6OnBhaXI8Q1RJU3R1Yk1h
cDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKICAgICBpZiAoZW50cnkuc2Vjb25kKQotICAgICAgICBl
bnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBv
b2wuZ2V0KCkpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2Jh
bERhdGEpOwogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCkBAIC0zNTg0LDcg
KzM1ODQsNyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAg
ICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9
IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+KCkpOwogICAgIGlmICghKmVudHJ5LmZpcnN0LT5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZp
cnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmds
b2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgbV9leGVjdXRh
YmxlUG9vbCwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgY3RpTmF0aXZlQ29uc3RydWN0KCksIGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQu
c2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJ
VDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOwogICAgIHJldHVy
biBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQogCkBAIC0zNTkyLDggKzM1OTIsOCBAQCBO
YXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAgICAgc3RkOjpwYWly
PEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0
aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwogICAg
IGlmICghKmVudHJ5LmZpcnN0LT5zZWNvbmQpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRh
LCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAg
ICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJs
ZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgY3RpTmF0aXZlQ29uc3RydWN0
KCksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjb2RlID0gZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xv
YmFsRGF0YSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY29kZSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NDE2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjk0LDcgKzI5NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0KCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3Ry
dWN0dXJlLmN0aU5hdGl2ZUNvbnN0cnVjdDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3RpU29mdE1vZHVsbygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlTb2Z0
TW9kdWxvOyB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVN0dWIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1YihKU0dsb2JhbERhdGEqLCBUaHVua0dlbmVyYXRv
cik7CiAKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2Jh
bERhdGEqLCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RG
dW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9y
KTsKQEAgLTMwMiwxMSArMzAyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNs
ZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiBDVElTdHViTWFw
OworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gQ1RJU3R1Yk1hcDsKICAgICAgICAgQ1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxOYXRpdmVGdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRh
YmxlPiA+IEhvc3RGdW5jdGlvblN0dWJNYXA7CiAgICAgICAgIE93blB0cjxIb3N0RnVuY3Rpb25T
dHViTWFwPiBtX2hvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxl
UG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIAogICAgICAgICBUcmFtcG9saW5lU3RydWN0dXJl
IG1fdHJhbXBvbGluZVN0cnVjdHVyZTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDk0MTY0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNwZWNp
YWxpemVkVGh1bmtKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBUaGlzQXJndW1lbnQgPSAtMTsKLSAgICAgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVChpbnQgZXhwZWN0ZWRBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKKyAgICAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVChp
bnQgZXhwZWN0ZWRBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICAg
ICAgOiBtX2V4cGVjdGVkQXJnQ291bnQoZXhwZWN0ZWRBcmdDb3VudCkKICAgICAgICAgICAgICwg
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAsIG1fcG9vbChwb29sKQogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG51
bWJlciBvZiBhcmd1bWVudHMKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQgKiAoaW50KXNpemVvZihSZWdpc3RlcikpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRB
cmdDb3VudCArIDEpKSk7CkBAIC0xMjMsMTMgKzEyMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZmluYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZmFsbGJhY2spCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmaW5h
bGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxs
YmFjaykKICAgICAgICAgewotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihnbG9i
YWxEYXRhLCB0aGlzLCBtX3Bvb2wuZ2V0KCkpOworICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
bV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJzdCwgbV9jYWxsc1tpXS5zZWNvbmQp
OwotICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsK
KyAgICAgICAgICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMgZnBS
ZWdpc3RlcjAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CkBAIC0xNjMsNyArMTYyLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBpbnQgbV9leHBlY3RlZEFyZ0NvdW50OwogICAg
ICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBtX3Bvb2w7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2ZhaWx1
cmVzOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENhbGwsIEZ1bmN0aW9uUHRyPiA+IG1fY2Fs
bHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywyNiArNjMsMjYgQEAg
c3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1bgogICAgIGppdC5hcHBlbmRG
YWlsdXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7Cisg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgc3RyaW5nQ2hh
ckxvYWQoaml0KTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hh
ckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9v
bCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwg
Z2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFs
RGF0YSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0KTsKICAgICBjaGFyVG9TdHJpbmcoaml0LCBn
bG9iYWxEYXRhLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJuSlND
ZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXpl
KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wp
OworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIC8vIGxv
YWQgY2hhciBjb2RlCiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICBjaGFyVG9TdHJpbmcoaml0LCBnbG9iYWxEYXRhLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTkwLDExICs5MCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dFNxcnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIAog
ICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwpA
QCAtMTc4LDEyICsxNzgsMTIgQEAgZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKTsKIGRl
ZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKTsKIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFw
cGVyKGNlaWwpOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOwor
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihm
bG9vcikgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5J
bnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5rKCZq
aXQpOwpAQCAtMTk3LDExICsxOTcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1
bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgx
LCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9i
YWxEYXRhKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQu
bG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1
bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBA
IC0yMjAsMTEgKzIyMCwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0NvbnN0
YW50CiBzdGF0aWMgY29uc3QgZG91YmxlIG9uZUNvbnN0YW50ID0gMS4wOwogc3RhdGljIGNvbnN0
IGRvdWJsZSBuZWdhdGl2ZUhhbGZDb25zdGFudCA9IC0wLjU7CiAgICAgCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3VuZCkg
fHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwKTsKQEAgLTIzOSwzNyArMjM5LDM3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3Vu
ZFRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0
YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBw
ZXIoZXhwKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2Fs
bCgpKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJs
ZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAo
IVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEsIHBvb2wpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAg
ICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKTsK
ICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAg
IHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9v
bCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYg
KCFqaXQuc3VwcG9ydHNEb3VibGVCaXRvcHMoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwog
ICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
bm9uSW50SnVtcCk7CiAgICAgaml0LnJzaGlmdDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDEpOwpAQCAtMjg2LDExICsyODYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1Ro
dW5rR2VuZXJhdG9yKAogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRh
YmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MiwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMiwgZ2xv
YmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAKICAgICBqaXQubG9hZERvdWJs
ZSgmb25lQ29uc3RhbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5s
b2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiA5NDE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSwy
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKICAgICBjbGFz
cyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKLSAgICBjbGFzcyBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI7CisgICAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwog
Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgKCpUaHVua0dlbmVyYXRvcikoSlNH
bG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSos
IEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNlaWxUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9v
bCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxv
Z1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhl
Y3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7
CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoSlNH
bG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTQxNjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3Myw3ICsxNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBFeGVjdXRh
YmxlQmFzZSBCYXNlOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgc3RhdGljIE5hdGl2ZUV4
ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorICAg
ICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBpZiAoIWNhbGxUaHVuaykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CShyZXZpc2lvbiA5NDE2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTMgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAKKyNp
bmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1
ZGUgImR0b2EuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisjaW5jbHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNTMsNiArNTQsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nT25jZSgpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUo
KTsKICNlbmRpZgogICAgIEpTR2xvYmFsRGF0YTo6c3RvcmVWUHRycygpOworICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKTsKICNpZiBFTkFCTEUoSlNDX01VTFRJ
UExFX1RIUkVBRFMpCiAgICAgUmVnaXN0ZXJGaWxlOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmNwcAkocmV2aXNpb24gOTQxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDYgQEAgSlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgZW1wdHlMaXN0KG5l
dyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICwgZXhl
Y3V0YWJsZUFsbG9jYXRvcigqdGhpcykKLSAgICAsIHJlZ2V4QWxsb2NhdG9yKCp0aGlzKQogI2Vu
ZGlmCiAgICAgLCBsZXhlcihuZXcgTGV4ZXIodGhpcykpCiAgICAgLCBwYXJzZXIobmV3IFBhcnNl
cikKQEAgLTQ0MCw2ICs0MzksOSBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkK
IHZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgaW50ZXJwcmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgogfQog
CiB2b2lkIEpTR2xvYmFsRGF0YTo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0
MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVj
dXRhYmxlQWxsb2NhdG9yOwotICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIHJlZ2V4QWxsb2Nh
dG9yOwogI2VuZGlmCiAKICNpZiAhRU5BQkxFKEpJVCkKQEAgLTIxNiw3ICsyMTUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIE93blB0cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHVi
KHRoaXMsIGdlbmVyYXRvcik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTQxNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBA
IFNFVChXVEZfSEVBREVSUwogICAgIE1hbGxvY1pvbmVTdXBwb3J0LmgKICAgICBNYXRoRXh0cmFz
LmgKICAgICBNZXNzYWdlUXVldWUuaAorICAgIE1ldGFBbGxvY2F0b3IuY3BwCisgICAgTWV0YUFs
bG9jYXRvci5oCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCiAgICAgTm9uQ29weWluZ1NvcnQu
aAogICAgIFRocmVhZFJlc3RyaWN0aW9uVmVyaWZpZXIuaAogICAgIE5vbmNvcHlhYmxlLmgKQEAg
LTY5LDYgKzcyLDcgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgUG9zc2libHlOdWxsLmgKICAgICBS
YW5kb21OdW1iZXIuaAogICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJlZEJsYWNrVHJlZS5o
CiAgICAgUmVmQ291bnRlZC5oCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmgKICAgICBSZWZQ
dHIuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNZXRhQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9j
YXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCisgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgLCBtX3N0YXJ0
KHN0YXJ0KQorICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICBBU1NFUlQoc3RhcnQpOworICAgIEFTU0VSVChzaXplSW5CeXRlcyk7
Cit9CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKK3sKKyAg
ICBpZiAoIW1fYWxsb2NhdG9yKQorICAgICAgICByZXR1cm47CisgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBpZiAobV9zaXplSW5CeXRlcykgewor
ICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShtX3N0YXJ0LCBtX3Np
emVJbkJ5dGVzKTsKKyAgICAgICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZyb21SZWxlYXNl
ZEhhbmRsZShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVzKTsKKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFs
bG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKK3sKKyAgICBBU1NF
UlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKCFtX2Fs
bG9jYXRvcikgeworICAgICAgICBtX3NpemVJbkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2Fs
bG9jYXRvci0+bV9sb2NrKTsKKworICAgIG5ld1NpemVJbkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJv
dW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIAorICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8
PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAobmV3U2l6ZUluQnl0ZXMgPT0gbV9zaXpl
SW5CeXRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHVpbnRwdHJfdCBmcmVlU3RhcnQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBuZXdTaXplSW5CeXRlczsK
KyAgICBzaXplX3QgZnJlZVNpemUgPSBtX3NpemVJbkJ5dGVzIC0gbmV3U2l6ZUluQnl0ZXM7Cisg
ICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3RhcnQgKyBmcmVlU2l6ZTsKKyAgICAKKyAgICB1
aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0
b3ItPm1fcGFnZVNpemUgLSAxKSAmIH4obV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKTsKKyAg
ICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBmcmVlRW5kKQorICAgICAgICBtX2FsbG9j
YXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZvaWQqPihmaXJz
dENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVseUZyZWVQYWdl
IC0gZnJlZVN0YXJ0KSk7CisgICAgCisgICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZyb21S
ZWxlYXNlZEhhbmRsZShyZWludGVycHJldF9jYXN0PHZvaWQqPihmcmVlU3RhcnQpLCBmcmVlU2l6
ZSk7CisgICAgCisgICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworfQorCitNZXRh
QWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSkKKyAgICA6
IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51bGUpCisgICAgLCBtX3BhZ2VTaXpl
KHBhZ2VTaXplKCkpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCisgICAgLCBtX2J5dGVzUmVz
ZXJ2ZWQoMCkKKyAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX21hbGxvY0JhbGFuY2UoMCkKKyNlbmRpZgorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQorICAgICwgbV9udW1BbGxvY2F0aW9ucygwKQorICAgICwgbV9udW1GcmVlcygwKQor
I2VuZGlmCit7CisgICAgbV9sb2NrLkluaXQoKTsKKyAgICAKKyAgICBmb3IgKG1fbG9nUGFnZVNp
emUgPSAwOyBtX2xvZ1BhZ2VTaXplIDwgMzI7ICsrbV9sb2dQYWdlU2l6ZSkgeworICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ1BhZ2VTaXplID09IG1fcGFnZVNpemUp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXplKTsKKyAgICAKKyAgICBm
b3IgKG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPSAwOyBtX2xvZ0FsbG9jYXRpb25HcmFudWxlIDwg
MzI7ICsrbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51
bGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25H
cmFudWxlKTsKK30KKworUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2Nh
dG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2xvY2spOworCisgICAgaWYgKCFzaXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgc2l6ZUluQnl0ZXMgPSByb3VuZFVwKHNpemVJbkJ5dGVzKTsKKyAgICAK
KyAgICB2b2lkKiBzdGFydCA9IGZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZUluQnl0ZXMpOwor
ICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAgc2l6ZV90IHJlcXVlc3RlZE51bWJlck9mUGFnZXMg
PSAoc2l6ZUluQnl0ZXMgKyBtX3BhZ2VTaXplIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAg
ICAgc2l6ZV90IG51bWJlck9mUGFnZXMgPSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzOworICAgICAg
ICAKKyAgICAgICAgc3RhcnQgPSBhbGxvY2F0ZU5ld1NwYWNlKG51bWJlck9mUGFnZXMpOworICAg
ICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQobnVtYmVyT2ZQYWdlcyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKKyAgICAg
ICAgCisgICAgICAgIHNpemVfdCByb3VuZGVkVXBTaXplID0gbnVtYmVyT2ZQYWdlcyA8PCBtX2xv
Z1BhZ2VTaXplOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKHJvdW5kZWRVcFNpemUgPj0gc2l6
ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgbV9ieXRlc1Jlc2VydmVkICs9IHJvdW5kZWRV
cFNpemU7CisgICAgICAgIAorICAgICAgICBpZiAocm91bmRlZFVwU2l6ZSA+IHNpemVJbkJ5dGVz
KSB7CisgICAgICAgICAgICB2b2lkKiBmcmVlU3BhY2VTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7
CisgICAgICAgICAgICBzaXplX3QgZnJlZVNwYWNlU2l6ZSA9IHJvdW5kZWRVcFNpemUgLSBzaXpl
SW5CeXRlczsKKyAgICAgICAgICAgIGFkZEZyZWVTcGFjZShmcmVlU3BhY2VTdGFydCwgZnJlZVNw
YWNlU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaW5jcmVtZW50UGFnZU9jY3VwYW5jeShz
dGFydCwgc2l6ZUluQnl0ZXMpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWQgKz0gc2l6ZUluQnl0ZXM7
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1BbGxvY2F0aW9u
cysrOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxl
KHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcykpOworfQorCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0
aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKK3sKKyAgICBTcGluTG9ja0hv
bGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgU3RhdGlzdGljcyByZXN1bHQ7CisgICAgcmVzdWx0
LmJ5dGVzQWxsb2NhdGVkID0gbV9ieXRlc0FsbG9jYXRlZDsKKyAgICByZXN1bHQuYnl0ZXNSZXNl
cnZlZCA9IG1fYnl0ZXNSZXNlcnZlZDsKKyAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgPSBtX2J5
dGVzQ29tbWl0dGVkOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIE1ldGFBbGxvY2F0
b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIEZy
ZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmluZExlYXN0R3JlYXRlclRo
YW5PckVxdWFsKHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIEFTU0VSVChub2RlLT5rZXkgPj0gc2l6ZUluQnl0ZXMpOworICAg
IAorICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgCisgICAgdm9pZCog
cmVzdWx0OworICAgIAorICAgIGlmIChub2RlLT5rZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAg
ICAgLy8gRWFzeSBjYXNlOiBwZXJmZWN0IGZpdCwgc28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50
aXJlbHkuCisgICAgICAgIHJlc3VsdCA9IG5vZGUtPnZhbHVlOworICAgICAgICAKKyAgICAgICAg
bV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAg
bV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7Cisg
ICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFRyeSB0byBiZSBhIGdvb2QgY2l0aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNo
dW5rIG9mIG1lbW9yeQorICAgICAgICAvLyBzdHJhZGRsZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3Np
YmxlLCBidXQgb25seSBpbnNvZmFyIGFzIGRvaW5nIHNvIHdpbGwKKyAgICAgICAgLy8gbm90IGlu
Y3JlYXNlIGZyYWdtZW50YXRpb24uIFRoZSBpbnR1aXRpb24gaXMgdGhhdCBtaW5pbWl6aW5nCisg
ICAgICAgIC8vIGZyYWdtZW50YXRpb24gaXMgYSBzdHJpY3RseSBoaWdoZXIgcHJpb3JpdHkgdGhh
biBtaW5pbWl6aW5nIHRoZSBudW1iZXIKKyAgICAgICAgLy8gb2YgY29tbWl0dGVkIHBhZ2VzLCBz
aW5jZSBpbiB0aGUgbG9uZyBydW4sIHNtYWxsZXIgZnJhZ21lbnRhdGlvbiBtZWFucworICAgICAg
ICAvLyBmZXdlciBjb21taXR0ZWQgcGFnZXMgYW5kIGZld2VyIGZhaWx1cmVzIGluIGdlbmVyYWwu
CisgICAgICAgIAorICAgICAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50
cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVl
KSArIG5vZGUtPmtleSAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgICAgIHVpbnRw
dHJfdCBsYXN0UGFnZUZvckxlZnRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihub2RlLT52YWx1ZSkgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7Cisg
ICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gPSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVz
KSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICAKKyAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVm
dEFsbG9jYXRpb24gLSBmaXJzdFBhZ2UgKyAxIDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmln
aHRBbGxvY2F0aW9uICsgMSkgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQg
c2lkZSBvZiB0aGUgcmV0dXJuZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmln
aHQuCisgICAgICAgICAgICByZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAg
ICAgICAgICAgbm9kZS0+dmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAg
ICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuYWRkKG5vZGUtPnZhbHVlLCBub2RlKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSByaWdodCBz
aXplIG9mIHRoZSByZXR1cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSBsZWZ0
OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5
IC0gc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9m
cmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChyZXN1bHQsIG5vZGUpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRk
RnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMpCit7CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1GcmVl
cysrOworI2VuZGlmCisgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBzaXplSW5CeXRlczsKKyAgICBh
ZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9y
OjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorewor
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBtX2J5dGVzUmVzZXJ2ZWQg
Kz0gc2l6ZUluQnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9
CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgc2l6ZV90
IHJlc3VsdCA9IDA7CisgICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VT
aXplTWFwLmZpcnN0KCk7IG5vZGU7IG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29y
KG5vZGUpKQorICAgICAgICByZXN1bHQgKz0gbm9kZS0+a2V5OworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cykKK3sKKyAgICB2b2lkKiBlbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhhc2hN
YXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgbGVmdE5laWdoYm9yID0gbV9mcmVl
U3BhY2VFbmRBZGRyZXNzTWFwLmZpbmQoc3RhcnQpOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVT
cGFjZU5vZGUqPjo6aXRlcmF0b3IgcmlnaHROZWlnaGJvciA9IG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLmZpbmQoZW5kKTsKKyAgICAKKyAgICBpZiAobGVmdE5laWdoYm9yICE9IG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3
ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUs
IGFuZAorICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAu
CisgICAgICAgIAorICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkgKyBsZWZ0
TmVpZ2hib3ItPnNlY29uZC0+a2V5KSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAg
CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7
CisgICAgICAgIAorICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFsdWU7Cisg
ICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5rZXk7CisgICAgICAgIHZvaWQqIGxl
ZnRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obGVmdFN0YXJ0KSArIGxlZnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZWZ0
RW5kID09IHN0YXJ0KTsKKyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1v
dmUobGVmdE5vZGUpOworICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKGxl
ZnRFbmQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGNoZWNrIGlmIHRoZXJlIGlzIGFsc28g
c29tZXRoaW5nIHRvIGNvYWxlc2NlIHdpdGggb24gdGhlIHJpZ2h0LgorICAgICAgICBpZiAocmln
aHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAg
ICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4g
Q29hbGVzY2UgYm90aCBsZWZ0IGFuZAorICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1v
dmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+dmFsdWUgPT0gcmlnaHROZWln
aGJvci0+Zmlyc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiBy
aWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgICAgICB2b2lkKiByaWdo
dFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBzaXplX3QgcmlnaHRT
aXplID0gcmlnaHROb2RlLT5rZXk7CisgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0
KSArIHJpZ2h0U2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyaWdodFN0
YXJ0ID09IGVuZCk7CisgICAgICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJ
bkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1f
ZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmlnaHRFbmQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmcmVlRnJlZVNwYWNlTm9kZShyaWdodE5vZGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzICsgcmlnaHRTaXplOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnRO
b2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmlnaHRFbmQs
IGxlZnROb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlZnROb2RlLT5rZXkg
Kz0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6
ZU1hcC5pbnNlcnQobGVmdE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNz
TWFwLmFkZChlbmQsIGxlZnROb2RlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxl
c2NlIHdpdGggcmlnaHQuCisgICAgICAgIAorICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAgICAgRnJlZVNwYWNl
Tm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9p
ZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90
IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmln
aHRTdGFydCkgKyByaWdodFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQo
cmlnaHRTdGFydCA9PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyaWdodEVuZCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0
KSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmlnaHROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICByaWdodE5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQocmlnaHROb2RlKTsKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChzdGFydCwgcmlnaHROb2RlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gY29hbGVzY2Ugd2l0aCwgc28g
Y3JlYXRlIGEgbmV3IGZyZWUgc3BhY2Ugbm9kZSBhbmQgYWRkIGl0LgorICAgICAgICAgICAgCisg
ICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiBub2RlID0gYWxsb2NGcmVlU3BhY2VOb2RlKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmtleSA9IHNpemVJbkJ5dGVzOworICAgICAg
ICAgICAgbm9kZS0+dmFsdWUgPSBzdGFydDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9m
cmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3Rh
cnRBZGRyZXNzTWFwLmFkZChzdGFydCwgbm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXAuYWRkKGVuZCwgbm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
TWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJf
dCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXpl
SW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3Qg
cGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhh
c2hNYXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5
TWFwLmZpbmQocGFnZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fcGFnZU9jY3VwYW5jeU1hcC5l
bmQoKSkgeworICAgICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLmFkZChwYWdlLCAxKTsKKyAg
ICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5v
dGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6
ZSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgIH0K
K30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFk
ZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpID4+IG1fbG9nUGFnZVNpemU7Cisg
ICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRy
ZXNzKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBmb3Ig
KHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsK
KyAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Bh
Z2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdl
T2NjdXBhbmN5TWFwLmVuZCgpKTsKKyAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7Cisg
ICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAg
bV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOworICAgICAgICAgICAgbm90aWZ5UGFnZUlz
RnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworc2l6ZV90IE1ldGFBbGxvY2F0b3I6OnJvdW5kVXAoc2l6ZV90
IHNpemVJbkJ5dGVzKQoreworICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIC0gbV9hbGxvY2F0aW9uR3JhbnVsZSA8PSBzaXplSW5CeXRlcykKKyAgICAgICAgQ1JBU0go
KTsKKyAgICByZXR1cm4gKHNpemVJbkJ5dGVzICsgbV9hbGxvY2F0aW9uR3JhbnVsZSAtIDEpICYg
fihtX2FsbG9jYXRpb25HcmFudWxlIC0gMSk7Cit9CisKK01ldGFBbGxvY2F0b3I6OkZyZWVTcGFj
ZU5vZGUqIE1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSgpCit7CisjaWZuZGVmIE5E
RUJVRworICAgIG1fbWFsbG9jQmFsYW5jZSsrOworI2VuZGlmCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEZyZWVTcGFjZU5vZGUqPihmYXN0TWFsbG9jKHNpemVvZihGcmVlU3BhY2VOb2RlKSkpOwor
fQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUq
IG5vZGUpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbWFsbG9jQmFsYW5jZS0tOworI2VuZGlm
CisgICAgZmFzdEZyZWUobm9kZSk7Cit9CisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQoreworICAgIHByaW50Zigi
bnVtIGFsbG9jYXRpb25zID0gJXUsIG51bSBmcmVlcyA9ICV1XG4iLCBtX251bUFsbG9jYXRpb25z
LCBtX251bUZyZWVzKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvcl9oCisjZGVm
aW5lIFdURl9NZXRhQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNs
dWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvckhhbmRsZS5oIgorI2luY2x1
ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAiUGFnZUJsb2NrLmgiCisjaW5jbHVkZSAiUmVk
QmxhY2tUcmVlLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJlZlB0ci5o
IgorI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUg
RU5BQkxFX01FVEFfQUxMT0NBVE9SX1BST0ZJTEUgMAorCitjbGFzcyBNZXRhQWxsb2NhdG9yIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKK3B1YmxpYzoKKyAgICAK
KyAgICBNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSk7CisgICAgCisgICAg
dmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOworICAgIAorICAgIFBhc3NSZWZQdHI8TWV0YUFsbG9j
YXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBO
b24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCisgICAg
c2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQorICAg
IHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CisgICAg
c2l6ZV90IGJ5dGVzQ29tbWl0dGVkKCkgeyByZXR1cm4gbV9ieXRlc0NvbW1pdHRlZDsgfQorICAg
IAorICAgIC8vIEF0b21pYyBtZXRob2QgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3Mu
CisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQ7
CisgICAgICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOworICAgICAgICBzaXplX3QgYnl0ZXNDb21t
aXR0ZWQ7CisgICAgfTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCk7CisKKyAg
ICAvLyBBZGQgbW9yZSBmcmVlIHNwYWNlIHRvIHRoZSBhbGxvY2F0b3IuIENhbGwgdGhpcyBkaXJl
Y3RseSBmcm9tCisgICAgLy8gdGhlIGNvbnN0cnVjdG9yIGlmIHlvdSB3aXNoIHRvIG9wZXJhdGUg
dGhlIGFsbG9jYXRvciB3aXRoaW4gYQorICAgIC8vIGZpeGVkIHBvb2wuCisgICAgdm9pZCBhZGRG
cmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKworICAgIC8v
IFRoaXMgaXMgbWVhbnQgb25seSBmb3IgaW1wbGVtZW50aW5nIHRlc3RzLiBOZXZlciBjYWxsIHRo
aXMgaW4gcmVsZWFzZQorICAgIC8vIGJ1aWxkcy4KKyAgICBzaXplX3QgZGVidWdGcmVlU3BhY2VT
aXplKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9p
ZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkgeyB9CisjZW5k
aWYKKworcHJvdGVjdGVkOgorICAgIAorICAgIC8vIEFsbG9jYXRlIG5ldyB2aXJ0dWFsIHNwYWNl
LCBidXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4gbW9yZQorICAgIC8vIHBhZ2VzIHRo
YW4gd2UgYXNrZWQsIGluIHdoaWNoIGNhc2UgbnVtUGFnZXMgaXMgY2hhbmdlZC4KKyAgICB2aXJ0
dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykgPSAwOworICAgIAor
ICAgIC8vIENvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZv
aWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBVbmNvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkgPSAwOworICAgIAorICAgIC8vIE5P
VEU6IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCBkdXJpbmcgYWxsb2NhdG9y
CisgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1ldGFBbGxvY2F0b3IgY2Fu
bm90IGRpZSBzbyBsb25nCisgICAgLy8gYXMgdGhlcmUgYXJlIEhhbmRsZXMgdGhhdCByZWZlciB0
byBpdC4KKworcHJpdmF0ZToKKyAgICAKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvckhh
bmRsZTsKKyAgICAKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxzaXplX3QsIHZvaWQqPiBUcmVl
OworICAgIHR5cGVkZWYgVHJlZTo6Tm9kZSBGcmVlU3BhY2VOb2RlOworICAgIAorICAgIC8vIFJl
bW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBpcyBlZmZlY3RpdmVseQor
ICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBt
YXJrIHRoZQorICAgIC8vIHJldHVybmVkIHNwYWNlIGFzIGJlaW5nIGluLXVzZS4KKyAgICB2b2lk
KiBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBU
aGlzIGlzIGNhbGxlZCB3aGVuIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRpb24gaXMgZnJlZWQuCisg
ICAgdm9pZCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgbG93LWxldmVsIGltcGxl
bWVudGF0aW9uIG9mIGFkZGluZyBmcmVlIHNwYWNlOyBpdAorICAgIC8vIGlzIGNhbGxlZCBmcm9t
IGJvdGggYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlIGFuZCBmcm9tCisgICAgLy8gYWRk
RnJlc2hGcmVlU3BhY2UuCisgICAgdm9pZCBhZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTWFuYWdlbWVudCBvZiB1c2VkIHNwYWNlLgor
ICAgIAorICAgIHZvaWQgaW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpOworICAgIHZvaWQgZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBh
ZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFV0aWxpdGllcy4KKyAg
ICAKKyAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEZy
ZWVTcGFjZU5vZGUqIGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgIHZvaWQgZnJlZUZyZWVTcGFj
ZU5vZGUoRnJlZVNwYWNlTm9kZSopOworICAgIAorICAgIHNpemVfdCBtX2FsbG9jYXRpb25HcmFu
dWxlOworICAgIHVuc2lnbmVkIG1fbG9nQWxsb2NhdGlvbkdyYW51bGU7CisgICAgc2l6ZV90IG1f
cGFnZVNpemU7CisgICAgdW5zaWduZWQgbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBUcmVlIG1f
ZnJlZVNwYWNlU2l6ZU1hcDsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4gbV9m
cmVlU3BhY2VTdGFydEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9k
ZSo+IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcDsKKyAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6
ZV90PiBtX3BhZ2VPY2N1cGFuY3lNYXA7CisgICAgCisgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0
ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKKyAgICBzaXplX3QgbV9ieXRlc0NvbW1p
dHRlZDsKKyAgICAKKyAgICBTcGluTG9jayBtX2xvY2s7CisKKyNpZm5kZWYgTkRFQlVHCisgICAg
c2l6ZV90IG1fbWFsbG9jQmFsYW5jZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NB
VE9SX1BST0ZJTEUpCisgICAgdW5zaWduZWQgbV9udW1BbGxvY2F0aW9uczsKKyAgICB1bnNpZ25l
ZCBtX251bUZyZWVzOworI2VuZGlmCit9OworCitpbmxpbmUgTWV0YUFsbG9jYXRvcjo6fk1ldGFB
bGxvY2F0b3IoKQoreworICAgIGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNl
U2l6ZU1hcC5maXJzdCgpOyBub2RlOykgeworICAgICAgICBGcmVlU3BhY2VOb2RlKiBuZXh0ID0g
bV9mcmVlU3BhY2VTaXplTWFwLnN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VT
aXplTWFwLnJlbW92ZShub2RlKTsKKyAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7Cisg
ICAgICAgIG5vZGUgPSBuZXh0OworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFt
X21hbGxvY0JhbGFuY2UpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gV1RGX01ldGFBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKyNkZWZp
bmUgV1RGX01ldGFBbGxvY2F0b3JIYW5kbGVfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3I7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3JIYW5k
bGU6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+IHsKK3ByaXZhdGU6Cisg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSh2b2lkKiBzdGFy
dCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgICAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgICAg
ICwgbV9zdGFydChzdGFydCkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAg
fk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBjcmVhdGVTZWxmTWFuYWdlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRh
QWxsb2NhdG9ySGFuZGxlKHN0YXJ0LCBzaXplSW5CeXRlcykpOworICAgIH0KKyAgICAKKyAgICB2
b2lkKiBzdGFydCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydDsKKyAgICB9CisgICAg
CisgICAgdm9pZCogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5
dGVzKTsKKyAgICB9CisgICAgICAgIAorICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9zaXplSW5CeXRlczsKKyAgICB9CisgICAgICAgIAorICAgIHZvaWQg
c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAgYm9vbCBpc01hbmFnZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7CisgICAgfQorICAgICAgICAK
KyAgICBNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
YWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3I7CisgICAgCisgICAgTWV0YUFs
bG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgdm9pZCogbV9zdGFydDsKKyAgICBzaXplX3QgbV9z
aXplSW5CeXRlczsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogQmFzZWQgb24gUmVkLUJsYWNrIHRyZWUgaW1wbGVtZW50YXRpb24gYnkgRW1pbiBNYXJ0
aW5pYW4KKyAqIC0gaHR0cDovL3d3dy5taXQuZWR1L35lbWluL3NvdXJjZV9jb2RlL2luZGV4Lmh0
bWwgICAgICAgICAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFJlZEJsYWNrVHJlZV9oCisjZGVmaW5lIFJlZEJsYWNrVHJlZV9o
CisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBhIHJlZC1ibGFjayB0cmVlIHdp
dGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorLy8gLSBUaGUgYWxsb2NhdGlvbiBvZiBub2Rl
cyBpbiB0aGUgdHJlZSBpcyBlbnRpcmVseSB1cCB0byB0aGUgdXNlci4KKy8vIC0gSWYgeW91IGFy
ZSBpbiBwb3NzZXNzaW9uIG9mIGEgcG9pbnRlciB0byBhIG5vZGUsIHlvdSBjYW4gZGVsZXRlCisv
LyAgIGl0IGZyb20gdGhlIHRyZWUuIFRoZSB0cmVlIHdpbGwgc3Vic2VxdWVudGx5IG5vIGxvbmdl
ciBoYXZlIGEKKy8vICAgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZS4KKy8vIC0gVGhlIGtleSB0eXBl
IG11c3QgaW1wbGVtZW50IG9wZXJhdG9yPCBhbmQgPT0uCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIFJlZEJsYWNrVHJlZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUmVkQmxhY2tUcmVlKTsKK3B1YmxpYzoKKyAgICBjbGFzcyBSYXdO
b2RlIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlZEJsYWNrVHJlZTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE5PVEU6IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVk
IGludG8gYSBzaW5nbGUKKyAgICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8g
cmV2ZWFsIGEgYnVnIGluIHRoZSBjb21waWxlci4KKyAgICAgICAgUmF3Tm9kZSogcGFyZW50KCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBzZXRQYXJlbnQoUmF3Tm9kZSogbmV3UGFyZW50
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQgPSBuZXdQYXJlbnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNSZWQoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9yZWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgc2V0UmVkKGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3JlZCA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBtX2xl
ZnQ7CisgICAgICAgIFJhd05vZGUqIG1fcmlnaHQ7CisgICAgICAgIFJhd05vZGUqIG1fcGFyZW50
OworICAgICAgICBib29sIG1fcmVkOworICAgIH07CisgICAgCisgICAgY2xhc3MgTm9kZTogcHVi
bGljIFJhd05vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgS2V5VHlwZSBrZXk7CisgICAgICAg
IFZhbHVlVHlwZSB2YWx1ZTsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZSgpCisgICAg
eworICAgICAgICBtX25pbFNlbnRpbmVsLnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAg
ICAgIG1fbmlsU2VudGluZWwubV9sZWZ0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1fbmls
U2VudGluZWwubV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVs
LnNldFJlZChmYWxzZSk7CisgICAgICAgIAorICAgICAgICBtX3Jvb3Quc2V0UGFyZW50KCZtX25p
bFNlbnRpbmVsKTsKKyAgICAgICAgbV9yb290Lm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAg
ICAgICBtX3Jvb3QubV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jvb3Quc2V0
UmVkKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIGluc2VydEhlbHAobm9kZSk7CisKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5v
ZGU7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAgIAorICAgICAgICB4LT5zZXRSZWQodHJ1
ZSk7CisgICAgICAgIHdoaWxlICh4LT5wYXJlbnQoKS0+aXNSZWQoKSkgeworICAgICAgICAgICAg
aWYgKHgtPnBhcmVudCgpID09IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAg
ICAgICAgICAgICAgeSA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAg
ICAgICAgICBpZiAoeS0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQo
KS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50
KCktPm1fcmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOwor
ICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOwor
ICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAo
eS0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fbGVmdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmlnaHRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAg
ICAgfSAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByb290KCktPm1fbGVmdC0+
c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+
aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAg
CisgICAgTm9kZSogcmVtb3ZlKE5vZGUqIHopCisgICAgeworICAgICAgICBSYXdOb2RlKiB5Owor
ICAgICAgICBSYXdOb2RlKiB4OworCisgICAgICAgIHkgPSAoei0+bV9sZWZ0ID09IG5pbFNlbnRp
bmVsKCkgfHwgei0+bV9yaWdodCA9PSBuaWxTZW50aW5lbCgpKSA/IHogOiBzdWNjZXNzb3JJbnRl
cm5hbCh6KTsKKyAgICAgICAgeCA9IHktPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpID8geS0+bV9y
aWdodCA6IHktPm1fbGVmdDsKKyAgICAgICAgaWYgKHJvb3QoKSA9PSB4LT5zZXRQYXJlbnQoeS0+
cGFyZW50KCkpKQorICAgICAgICAgICAgcm9vdCgpLT5tX2xlZnQgPSB4OworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAgICAg
ICAgICAgeS0+cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeS0+cGFyZW50KCktPm1fcmlnaHQgPSB4OworICAgICAgICB9CisgICAgICAgIGlm
ICh5ICE9IHopIHsKKyAgICAgICAgICAgIEFTU0VSVCh5ICE9IG5pbFNlbnRpbmVsKCkpOworCisg
ICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAo
eCk7CisgIAorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gei0+bV9sZWZ0OworICAgICAgICAgICAg
eS0+bV9yaWdodCA9IHotPm1fcmlnaHQ7CisgICAgICAgICAgICB5LT5zZXRQYXJlbnQoei0+cGFy
ZW50KCkpOworICAgICAgICAgICAgeS0+c2V0UmVkKHotPmlzUmVkKCkpOworICAgICAgICAgICAg
ei0+bV9sZWZ0LT5zZXRQYXJlbnQoei0+bV9yaWdodC0+c2V0UGFyZW50KHkpKTsKKyAgICAgICAg
ICAgIGlmICh6ID09IHotPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAgICAgICAgICAgei0+cGFy
ZW50KCktPm1fbGVmdCA9IHk7IAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHot
PnBhcmVudCgpLT5tX3JpZ2h0ID0geTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICgheS0+aXNSZWQoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVGaXhVcCh4KTsKKyAgICAgICAg
fQorICAKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQo
IW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworCisgICAgICAgIHJldHVybiB6OworICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBmaXJzdCgpCisgICAgeworICAgICAgICBSYXdOb2RlKiBub2RlID0gcm9v
dCgpLT5tX2xlZnQ7CisgICAgICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJhd05v
ZGUqIG5leHQgPSBub2RlLT5tX2xlZnQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAg
ICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBsYXN0KCkK
KyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAg
aWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm1fcmln
aHQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBzdWNjZXNzb3IoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIHJlc3VsdCA9IHN1Y2Nlc3NvckludGVybmFsKG5vZGUpOworICAg
ICAgICBpZiAocmVzdWx0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIGFzTm9kZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBw
cmVkZWNlc3NvcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5vZGU7
CisgICAgICAgIFJhd05vZGUqIHk7CisKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0gKHkg
PSB4LT5tX2xlZnQpKSB7CisgICAgICAgICAgICB3aGlsZSAoeS0+bV9yaWdodCAhPSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgICAgIHkgPSB5LT5tX3JpZ2h0OworICAgICAgICAgICAgcmV0
dXJuIGFzTm9kZSh5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgeSA9IHgtPnBhcmVu
dCgpOworICAgICAgICB3aGlsZSAoeCA9PSB5LT5tX2xlZnQpIHsgCisgICAgICAgICAgICBpZiAo
eSA9PSByb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB4ID0g
eTsKKyAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
eSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBhc05vZGUoeSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZpbmRFeGFjdChjb25zdCBLZXlU
eXBlJiBrZXkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4ID0gcm9vdCgpLT5tX2xlZnQ7Cisg
ICAgICAgIGlmICh4ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgd2hpbGUgKCEoYXNOb2RlKHgpLT5rZXkgPT0ga2V5KSkgeworICAgICAgICAgICAgaWYg
KGFzTm9kZSh4KS0+a2V5ID4ga2V5KQorICAgICAgICAgICAgICAgIHggPSB4LT5tX2xlZnQ7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fcmlnaHQ7CisgICAgICAg
ICAgICBpZiAoeCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoeCk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBOb2RlKiByZXN1
bHQgPSBmaW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHJlbW92ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAg
ICBOb2RlKiBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoY29uc3QgS2V5VHlwZSYga2V5KQor
ICAgIHsKKyAgICAgICAgUmF3Tm9kZSogY3VycmVudCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAg
ICBSYXdOb2RlKiBiZXN0ID0gMDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbmlsU2VudGlu
ZWwoKSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5ID09IGtleSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKGFz
Tm9kZShjdXJyZW50KS0+a2V5IDwga2V5KQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5tX3JpZ2h0OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmVzdCA9
IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fbGVmdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKGJlc3QpOworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoY29uc3QgS2V5
VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogY3VycmVudCA9IHJvb3QoKS0+bV9s
ZWZ0OworICAgICAgICBSYXdOb2RlKiBiZXN0ID0gMDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQg
IT0gbmlsU2VudGluZWwoKSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5
ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKGN1cnJlbnQpOworICAgICAg
ICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5IDwga2V5KSB7CisgICAgICAgICAgICAgICAg
YmVzdCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fbGVm
dDsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC0+bV9yaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKGJlc3QpOworICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIE8obikgb3BlcmF0aW9uLgorICAgIHNpemVfdCBz
aXplKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKE5v
ZGUqIGN1cnJlbnQgPSBmaXJzdCgpOyBjdXJyZW50OyBjdXJyZW50ID0gc3VjY2Vzc29yKGN1cnJl
bnQpKQorICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gTygxKSBvcGVyYXRpb24uCisgICAgYm9vbCBpc0Vt
cHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByb290KCktPm1fbGVmdCA9PSBuaWxTZW50aW5l
bCgpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAg
QVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eVJlY3Vyc2Uocm9vdCgpLT5tX2xlZnQpOworICAgICAgICBBU1NFUlQocm9vdCgpLT5tX3JpZ2h0
ID09IG5pbFNlbnRpbmVsKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoKQorICAgIHsK
KyAgICAgICAgcHJpbnRmKCJUcmVlIGF0ICVwOlxuIiwgdGhpcyk7CisgICAgICAgIGR1bXBSZWN1
cnNlKHJvb3QoKS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRmKCIgICByb290OiAlcCwgJXAsICVw
XG4iLCByb290KCktPm1fbGVmdCwgcm9vdCgpLT5tX3JpZ2h0LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihyb290KCktPnBhcmVudEFuZFJlZCkpOworICAgICAgICBwcmludGYoIiAgICBuaWw6ICVw
LCAlcCwgJXBcbiIsIG5pbFNlbnRpbmVsKCktPm1fbGVmdCwgbmlsU2VudGluZWwoKS0+bV9yaWdo
dCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmlsU2VudGluZWwoKS0+cGFyZW50QW5kUmVkKSk7
CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBsZWZ0Um90YXRlKFJhd05vZGUq
IHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworCisgICAgICAgIHkgPSB4LT5tX3JpZ2h0
OworICAgICAgICB4LT5tX3JpZ2h0ID0geS0+bV9sZWZ0OworCisgICAgICAgIGlmICh5LT5tX2xl
ZnQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHktPm1fbGVmdC0+c2V0UGFyZW50KHgp
OworICAKKyAgICAgICAgeS0+c2V0UGFyZW50KHgtPnBhcmVudCgpKTsKKworICAgICAgICBpZiAo
eCA9PSB4LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgeC0+cGFyZW50KCktPm1fbGVm
dCA9IHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX3JpZ2h0ID0g
eTsKKyAgICAgICAgeS0+bV9sZWZ0ID0geDsKKyAgICAgICAgeC0+c2V0UGFyZW50KHkpOworCisg
ICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgcmlnaHRSb3RhdGUoUmF3Tm9kZSogeSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHg7
CisKKyAgICAgICAgeCA9IHktPm1fbGVmdDsKKyAgICAgICAgeS0+bV9sZWZ0ID0geC0+bV9yaWdo
dDsKKworICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSB4LT5tX3JpZ2h0KQorICAgICAgICAg
ICAgeC0+bV9yaWdodC0+c2V0UGFyZW50KHkpOworCisgICAgICAgIHgtPnNldFBhcmVudCh5LT5w
YXJlbnQoKSk7CisgICAgICAgIGlmICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAg
ICAgICB5LT5wYXJlbnQoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
eS0+cGFyZW50KCktPm1fcmlnaHQgPSB4OworICAgICAgICB4LT5tX3JpZ2h0ID0geTsKKyAgICAg
ICAgeS0+c2V0UGFyZW50KHgpOworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNS
ZWQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0SGVscChOb2RlKiB6KQorICAgIHsK
KyAgICAgICAgUmF3Tm9kZSogeDsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgCisgICAgICAgIHot
Pm1fbGVmdCA9IHotPm1fcmlnaHQgPSBuaWxTZW50aW5lbCgpOworICAgICAgICB5ID0gcm9vdCgp
OworICAgICAgICB4ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIHdoaWxlICh4ICE9IG5pbFNl
bnRpbmVsKCkpIHsKKyAgICAgICAgICAgIHkgPSB4OworICAgICAgICAgICAgaWYgKHotPmtleSA8
IGFzTm9kZSh4KS0+a2V5KQorICAgICAgICAgICAgICAgIHggPSB4LT5tX2xlZnQ7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fcmlnaHQ7CisgICAgICAgIH0KKyAg
ICAgICAgei0+c2V0UGFyZW50KHkpOworICAgICAgICBpZiAoeSA9PSByb290KCkgfHwgei0+a2V5
IDwgYXNOb2RlKHkpLT5rZXkpCisgICAgICAgICAgICB5LT5tX2xlZnQgPSB6OworICAgICAgICBl
bHNlCisgICAgICAgICAgICB5LT5tX3JpZ2h0ID0gejsKKworICAgICAgICBBU1NFUlQoIW5pbFNl
bnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlKiBzdWNjZXNzb3JJ
bnRlcm5hbChSYXdOb2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAg
CisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9ICh5ID0geC0+bV9yaWdodCkpIHsKKyAgICAg
ICAgICAgIHdoaWxlICh5LT5tX2xlZnQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAg
ICB5ID0geS0+bV9sZWZ0OworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKHggPT0geS0+bV9y
aWdodCkgeworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpKQorICAgICAgICAgICAgcmV0dXJu
IG5pbFNlbnRpbmVsKCk7CisgICAgICAgIHJldHVybiB5OworICAgIH0KKyAgICAKKyAgICB2b2lk
IHJlbW92ZUZpeFVwKFJhd05vZGUqIHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiByZWFsUm9v
dCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiB3OworICAgICAgICAKKyAgICAg
ICAgd2hpbGUgKCF4LT5pc1JlZCgpICYmIHJlYWxSb290ICE9IHgpIHsKKyAgICAgICAgICAgIGlm
ICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAgICB3ID0geC0+cGFy
ZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHctPmlzUmVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdy0+c2V0UmVkKDApOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJl
bnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgtPnBh
cmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVk
KCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0
UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5p
c1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5tX2xlZnQtPnNldFJlZChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByaWdodFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcg
PSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAg
ICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
dy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0
ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHcgPSB4
LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHctPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90
YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5t
X2xlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdo
dC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5pc1JlZCgpKSB7IAorICAgICAgICAgICAgICAgICAg
ICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXctPm1f
bGVmdC0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0
UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAg
ICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByaWdo
dFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeC0+
c2V0UmVkKGZhbHNlKTsKKworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAg
ICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorI2lmbmRl
ZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKFJhd05vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAobm9kZS0+aXNSZWQoKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFub2RlLT5tX2xlZnQtPmlzUmVkKCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX3Jp
Z2h0LT5pc1JlZCgpKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJz
ZShub2RlLT5tX2xlZnQpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5t
X3JpZ2h0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wUmVjdXJzZShSYXdOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcHJpbnRmKCIgICBub2RlOiAlcFxuIiwgbm9kZSk7CisgICAgICAg
IHByaW50ZigiICAgICAgY29sb3IgPSAlc1xuIiwgbm9kZS0+aXNSZWQoKSA/ICJyZWQiIDogImJs
YWNrIik7CisgICAgICAgIHByaW50ZigiICAgICAgbGVmdCAgPSAlcFxuIiwgbm9kZS0+bV9sZWZ0
KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICByaWdodCA9ICVwXG4iLCBub2RlLT5tX3JpZ2h0KTsK
KyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uo
bm9kZS0+bV9yaWdodCk7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgUmF3Tm9kZSogcm9vdCgp
CisgICAgeworICAgICAgICByZXR1cm4gJm1fcm9vdDsKKyAgICB9CisgICAgCisgICAgUmF3Tm9k
ZSogbmlsU2VudGluZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX25pbFNlbnRpbmVsOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBhc05vZGUoUmF3Tm9kZSogcmF3Tm9kZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYXdOb2RlICE9IHJvb3QoKSk7CisgICAgICAgIEFTU0VSVChyYXdOb2Rl
ICE9IG5pbFNlbnRpbmVsKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZSo+KHJh
d05vZGUpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlIG1fcm9vdDsKKyAgICBSYXdOb2RlIG1f
bmlsU2VudGluZWw7Cit9OworCit9CisKKyNlbmRpZgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3d0Zi5wcmkJKHJldmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5U
aHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFsbG9jYXRvci5jcHAgXAogICAgIHd0Zi9OdWxsUHRy
LmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJl
YWRRdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJl
dmlzaW9uIDk0MTY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgYmFj
a3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZpbmFsaXplIHRoZSBjb2RlLgotICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJl
Z2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5r
QnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgp
KTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gOTQxNjQpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKICAgICB9
CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0
dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCAqZ2V0QWRk
cigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQxNjQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRv
IGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRy
b2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxs
b2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFs
bG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGlu
ZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsg
bmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0
aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0
byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOiBBZGRlZC4KKwogMjAx
MS0wOC0yOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVuemlwIGluaXRpYWxpemF0aW9uIGxpc3RzIGFuZCBjb25zdHJ1Y3RvcnMgaW4gSlNDZWxs
IGhpZXJhcmNoeSAoMy83KQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wOS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBleGVjdXRhYmxlIGFsbG9jYXRvciBtYWtlcyBp
dCBkaWZmaWN1bHQgdG8gZnJlZSBpbmRpdmlkdWFsCisgICAgICAgIGNodW5rcyBvZiBleGVjdXRh
YmxlIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjYzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIEludHJvZHVjZWQgYSBiZXN0LWZpdCwgYmFsYW5jZWQtdHJlZSBiYXNlZCBhbGxv
Y2F0b3IuIFRoZSBhbGxvY2F0b3IKKyAgICAgICAgcmVxdWlyZWQgYSBiYWxhbmNlZCB0cmVlIHRo
YXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5IGFuZCB0aGF0CisgICAgICAgIHBlcm1pdHMgdGhl
IHJlbW92YWwgb2YgaW5kaXZpZHVhbCBub2RlcyBkaXJlY3RseSAoYXMgb3Bwb3NlZCB0byBieQor
ICAgICAgICBrZXkpOyBuZWl0aGVyIEFWTFRyZWUgbm9yIFdlYkNvcmUncyBQT0RSZWRCbGFja1Ry
ZWUgc3VwcG9ydGVkIHRoaXMuCisgICAgICAgIENoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gZXhl
Y3V0YWJsZSBjb2RlIHRvIHVzZSBhIHJlZmVyZW5jZSBjb3VudGVkCisgICAgICAgIGhhbmRsZS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0
b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjpmaW5kRXhhY3QpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6UGFpcjo6cmVtb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OmZpbmRM
ZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjph
c3NlcnRGb3VuZEFuZFJlbW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3Nl
cnRFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3NlcnRTYW1lVmFsdWVz
Rm9yS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OnRlc3REcml2ZXIpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAxMS0wOS0wMSAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoTlJXVCk6IExlYWtzIFZp
ZXdlciBjYW4ndCBsb2FkIGxlYWtzIGZyb20gdGVzdCBydW5zIHRoYXQgdXNlZCBOUldUCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQxNjQpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNyw2ICs3LDggQEAKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLworCQkwRkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzZD
NENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovOyB9OworCQkwRkM2QzRD
RjE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyog
TWV0YUFsbG9jYXRvci5jcHAgKi87IH07CiAJCTFBMDJDODRGMTI1RDRBODQwMEUzRjRCRCAvKiBG
aW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLzsgfTsKIAkJMUEwMkM4NzAxMjVE
NENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0QTVFMDBFM0Y0QkQgLyogZmluZC5o
dG1sICovOyB9OwogCQkxQTVGRUZERDEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVhdGVKYXZhU2Ny
aXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
NUZFRkRDMTI3MEUyQTMwMDBFMjkyMSAvKiBFdmFsdWF0ZUphdmFTY3JpcHQuY3BwICovOyB9OwpA
QCAtMTIzLDYgKzEyNSw4IEBACiAvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwRkM2QzRDQjE0
MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFJlZEJsYWNrVHJlZS5jcHA7IHBhdGggPSBXVEYvUmVkQmxhY2tUcmVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNkM0Q0UxNDEwMzRBRDAwNUI3
RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gTWV0YUFsbG9jYXRvci5jcHA7IHBhdGggPSBXVEYvTWV0YUFsbG9jYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBm
aW5kLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTVGRUZEQzEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVh
dGVKYXZhU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2
YWx1YXRlSmF2YVNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTIs
NiArMzU2LDggQEAKIAkJQkM5MDk2NDYxMjU1NjE4OTAwMDgzNzU2IC8qIFdURiAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZDNkM0Q0UxNDEwMzRBRDAw
NUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGQzZDNENCMTQxMDI3RTAwMDVC
N0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJCUMwMTM2M0M3MTNDMzk5NzMwMEVGMzk2
NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICovLAogCQkJCUJDOTA5NjRCMTI1NTYxQkYwMDA4Mzc1
NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi8sCiAJCQkJMzcyMDBCOTExM0ExNjIzMDAwN0E0RkFEIC8q
IFZlY3RvclJldmVyc2UuY3BwICovLApAQCAtNTU4LDYgKzU2NCw4IEBACiAJCQkJQzA4NTg3RkMx
M0ZFQzM5QjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDMDg1ODgwMDEzRkVDM0E2MDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RTd2l6emxl
ci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3REM2NzhEMTQwRDdDNTAwMEFCQ0NEQiAvKiBET01S
YW5nZU9mU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDNkM0Q0MxNDEwMjdFMDAwNUI3
RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM2QzRDRjE0MTAz
NEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCShyZXZp
c2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAor
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQor
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZlY3Rvci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisK
K2NsYXNzIE1ldGFBbGxvY2F0b3JUZXN0OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6
CisgICAgZW51bSBTYW5pdHlDaGVja01vZGUgeyBSdW5TYW5pdHlDaGVjaywgRG9udFJ1blNhbml0
eUNoZWNrIH07CisgICAgCisgICAgZW51bSBIZWFwR3Jvd3RoTW9kZSB7IERvbnRHcm93SGVhcCwg
Rm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2UsIEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNj
ZSB9OworICAgIAorICAgIEhlYXBHcm93dGhNb2RlIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZTsKKyAg
ICBzaXplX3QgYWxsb3dBbGxvY2F0ZVBhZ2VzOworICAgIHNpemVfdCByZXF1ZXN0ZWROdW1QYWdl
czsKKworICAgIGNsYXNzIFNpbXBsZVRlc3RBbGxvY2F0b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNpbXBsZVRlc3RBbGxvY2F0b3IoTWV0YUFsbG9jYXRv
clRlc3QqIHBhcmVudCkKKyAgICAgICAgICAgIDogTWV0YUFsbG9jYXRvcigzMikKKyAgICAgICAg
ICAgICwgbV9wYXJlbnQocGFyZW50KQorICAgICAgICB7CisgICAgICAgICAgICBhZGRGcmVzaEZy
ZWVTcGFjZShyZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpLCBk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdmlydHVhbCB+U2ltcGxlVGVzdEFsbG9jYXRvcigpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKCFtX3BhcmVudC0+YWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAg
ICAgIG1fcGFyZW50LT5hbGxvY2F0b3JEZXN0cm95ZWQgPSB0cnVlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1Q
YWdlcykKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChtX3BhcmVudC0+Y3VycmVudEhl
YXBHcm93dGhNb2RlKSB7CisgICAgICAgICAgICBjYXNlIERvbnRHcm93SGVhcDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgRm9y
VGVzdERlbWFuZEFsbG9jQ29hbGVzY2U6CisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRB
bGxvY0RvbnRDb2FsZXNjZTogeworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKG1fcGFyZW50
LT5hbGxvd0FsbG9jYXRlUGFnZXMpOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKG1fcGFy
ZW50LT5hbGxvd0FsbG9jYXRlUGFnZXMgPj0gbnVtUGFnZXMpOworICAgICAgICAgICAgICAgIG1f
cGFyZW50LT5yZXF1ZXN0ZWROdW1QYWdlcyA9IG51bVBhZ2VzOworICAgICAgICAgICAgICAgIG51
bVBhZ2VzID0gbV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlczsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICB1bnNpZ25lZCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgaWYgKG1f
cGFyZW50LT5jdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVz
Y2UpCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNl
UGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIG9mZnNldCkgKiBwYWdlU2l6ZSgpKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2Vz
ID0gMDsKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+Y3VycmVudEhlYXBHcm93dGhNb2RlID0g
RG9udEdyb3dIZWFwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGNvdW50ZXIgPSAwOyBjb3VudGVyIDwgbnVtUGFnZXMgKyBvZmZzZXQ7ICsrY291bnRlcikg
eworICAgICAgICAgICAgICAgICAgICBtX3BhcmVudC0+cGFnZU1hcC0+YXBwZW5kKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlQ291bnRlciA9IDA7IGJ5dGVD
b3VudGVyIDwgcGFnZVNpemUoKTsgKytieXRlQ291bnRlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcGFyZW50LT5tZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fcGFyZW50LT5hZGRpdGlvbmFs
UGFnZXNJbkhlYXAgKz0gbnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIENSQVNIKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyB0aGUgcGFnZSBzaG91bGQgYmUgYm90aCBmcmVlIGFuZCB1bm1hcHBlZC4KKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKCFtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90IGFk
ZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJlc3MgPCByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyArK2FkZHJlc3MpCisg
ICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5ieXRlU3RhdGUocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYWRkcmVzcykpKTsKKyAgICAgICAgICAgIG1fcGFyZW50LT5wYWdlU3Rh
dGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkgPSB0cnVl
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlz
RnJlZSh2b2lkKiBwYWdlKQorICAgICAgICB7CisgICAgICAgICAgICAvLyB0aGUgcGFnZSBzaG91
bGQgYmUgZnJlZSBvZiBvYmplY3RzIGF0IHRoaXMgcG9pbnQsIGJ1dCBpdCBzaG91bGQgc3RpbGwK
KyAgICAgICAgICAgIC8vIGJlIG1hcHBlZC4KKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKG1fcGFy
ZW50LT5wYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNp
emUoKSkpOworICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihwYWdlKTsgYWRkcmVzcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihwYWdlKSArIHBhZ2VTaXplKCk7ICsrYWRkcmVzcykKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRSghbV9wYXJlbnQtPmJ5dGVTdGF0ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRy
ZXNzKSkpOworICAgICAgICAgICAgbV9wYXJlbnQtPnBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIE1ldGFBbGxvY2F0b3JUZXN0KiBtX3BhcmVudDsK
KyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJhc2VQYWdlID0gMTsKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZGVmYXVsdFBhZ2VzSW5IZWFwID0gMTAwOworICAgIAorICAg
IHVuc2lnbmVkIGFkZGl0aW9uYWxQYWdlc0luSGVhcDsKKyAgICAKKyAgICBWZWN0b3I8Ym9vbCwg
MD4qIG1lbW9yeU1hcDsKKyAgICBWZWN0b3I8Ym9vbCwgMD4qIHBhZ2VNYXA7CisgICAgYm9vbCBh
bGxvY2F0b3JEZXN0cm95ZWQ7CisgICAgCisgICAgU2ltcGxlVGVzdEFsbG9jYXRvciogYWxsb2Nh
dG9yOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICBtZW1v
cnlNYXAgPSBuZXcgVmVjdG9yPGJvb2wsIDA+KCk7CisgICAgICAgIHBhZ2VNYXAgPSBuZXcgVmVj
dG9yPGJvb2wsIDA+KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIHBhZ2UgPSBi
YXNlUGFnZTsgcGFnZSA8IGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwOyArK3BhZ2UpIHsK
KyAgICAgICAgICAgIHBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGJ5dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5Q
YWdlKQorICAgICAgICAgICAgICAgIG1lbW9yeU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAgICAg
fQorCisgICAgICAgIGFsbG9jYXRvckRlc3Ryb3llZCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRG9udEdyb3dIZWFwOworICAgICAgICBhbGxvd0Fs
bG9jYXRlUGFnZXMgPSAwOworICAgICAgICBhZGRpdGlvbmFsUGFnZXNJbkhlYXAgPSAwOworICAg
ICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IDA7CisgICAgICAgIAorICAgICAgICBhbGxvY2F0b3Ig
PSBuZXcgU2ltcGxlVGVzdEFsbG9jYXRvcih0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKGN1cnJlbnRIZWFw
R3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBFWFBFQ1RfRVEoYWxsb3dBbGxv
Y2F0ZVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKKyAgICAgICAgRVhQRUNUX0VRKHJl
cXVlc3RlZE51bVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIG1lbW9yeSBzaG91bGQgYmUgZnJlZS4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdl
ID0gYmFzZVBhZ2U7IHBhZ2UgPCBiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcDsgKytwYWdl
KSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghcGFnZVN0YXRlKHBhZ2UpKTsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgYnl0ZUluUGFnZSA9IDA7IGJ5dGVJblBhZ2UgPCBwYWdlU2l6ZSgp
OyArK2J5dGVJblBhZ2UpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWJ5dGVTdGF0ZShw
YWdlICogcGFnZVNpemUoKSArIGJ5dGVJblBhZ2UpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgLy8gTk9URTogdGhpcyBhdXRvbWF0aWNhbGx5IHRlc3RzIHRoYXQgdGhlIGFsbG9jYXRv
ciBkaWQgbm90IGxlYWsKKyAgICAgICAgLy8gbWVtb3J5LCBzbyBsb25nIGFzIHRoZXNlIHRlc3Rz
IGFyZSBydW5uaW5nIHdpdGggIWRlZmluZWQoTkRFQlVHKS4KKyAgICAgICAgLy8gU2VlIE1ldGFB
bGxvY2F0b3I6Om1fbWFsbG9jQmFsYW5jZS4KKyAgICAgICAgZGVsZXRlIGFsbG9jYXRvcjsKKyAg
ICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKGFsbG9jYXRvckRlc3Ryb3llZCk7CisgICAgICAg
IAorICAgICAgICBkZWxldGUgbWVtb3J5TWFwOworICAgICAgICBkZWxldGUgcGFnZU1hcDsKKyAg
ICB9CisgICAgCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogYWxsb2NhdGUoc2l6ZV90IHNpemVJ
bkJ5dGVzLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlID0gUnVuU2FuaXR5Q2hlY2sp
CisgICAgeworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzKS5sZWFrUmVmKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKGhh
bmRsZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5
dGVzKTsKKyAgICAgICAgCisgICAgICAgIHVpbnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oaGFuZGxlLT5zdGFydCgpKTsKKyAgICAgICAgdWludHB0cl90IGVu
ZEJ5dGUgPSBzdGFydEJ5dGUgKyBzaXplSW5CeXRlczsKKyAgICAgICAgZm9yICh1aW50cHRyX3Qg
Y3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytjdXJyZW50
Qnl0ZSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkp
OworICAgICAgICAgICAgYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSA9IHRydWU7CisgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShwYWdlU3RhdGUoY3VycmVudEJ5dGUgLyBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzYW5pdHlDaGVja01vZGUgPT0gUnVuU2FuaXR5
Q2hlY2spCisgICAgICAgICAgICBzYW5pdHlDaGVjaygpOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIGhhbmRsZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmcmVlKE1ldGFBbGxvY2F0b3JIYW5k
bGUqIGhhbmRsZSwgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9IFJ1blNhbml0eUNo
ZWNrKQorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFuZGxlKTsKKyAgICAgICAgCisgICAg
ICAgIG5vdGlmeUZyZWUoaGFuZGxlLT5zdGFydCgpLCBoYW5kbGUtPnNpemVJbkJ5dGVzKCkpOwor
ICAgICAgICBoYW5kbGUtPmRlcmVmKCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5Q2hl
Y2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBub3RpZnlGcmVlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUlu
Qnl0ZXMpCisgICAgeworICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHN0YXJ0KTsKKyAgICAgICAgdWludHB0cl90IGVuZEJ5dGUgPSBzdGFy
dEJ5dGUgKyBzaXplSW5CeXRlczsKKyAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudEJ5dGUg
PSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytjdXJyZW50Qnl0ZSkgeworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUoYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSk7CisgICAgICAgICAg
ICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBzYW5pdHlDaGVjaygpCisgICAgeworI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
RVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpIC0gYWxsb2NhdG9yLT5ieXRlc0Fs
bG9jYXRlZCgpLCBhbGxvY2F0b3ItPmRlYnVnRnJlZVNwYWNlU2l6ZSgpKTsKKyNlbmRpZgorICAg
ICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCksIChkZWZhdWx0UGFnZXNJ
bkhlYXAgKyBhZGRpdGlvbmFsUGFnZXNJbkhlYXApICogcGFnZVNpemUoKSk7CisgICAgICAgIEVY
UEVDVF9FUShhbGxvY2F0b3ItPmJ5dGVzQWxsb2NhdGVkKCksIGJ5dGVzQWxsb2NhdGVkKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpLCBieXRlc0NvbW1p
dHRlZCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb25maXJtKE1ldGFBbGxvY2F0b3JIYW5k
bGUqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4oaGFuZGxlLT5zdGFydCgpKTsKKyAgICAgICAgY29uZmlybShz
dGFydEJ5dGUsIHN0YXJ0Qnl0ZSArIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgdHJ1ZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgY29uZmlybUhpZ2hXYXRlcm1hcmsoTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgY29uZmlybShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4oaGFuZGxlLT5lbmQoKSksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBw
YWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgfQorICAgICAgICAgICAgICAgIAorICAgIHZvaWQgY29u
ZmlybSh1aW50cHRyX3Qgc3RhcnRCeXRlLCB1aW50cHRyX3QgZW5kQnl0ZSwgYm9vbCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBj
dXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIEVYUEVD
VF9FUShieXRlU3RhdGUoY3VycmVudEJ5dGUpLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAodmFs
dWUpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFnZVN0YXRlKGN1cnJlbnRCeXRlIC8g
cGFnZVNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAg
ICAgIHVpbnRwdHJfdCBmaXJzdEZyZWVQYWdlID0gKHN0YXJ0Qnl0ZSArIHBhZ2VTaXplKCkgLSAx
KSAvIHBhZ2VTaXplKCk7CisgICAgICAgICAgICB1aW50cHRyX3QgbGFzdEZyZWVQYWdlID0gKGVu
ZEJ5dGUgLSBwYWdlU2l6ZSgpKSAvIHBhZ2VTaXplKCk7CisgICAgICAgICAgICBmb3IgKHVpbnRw
dHJfdCBjdXJyZW50UGFnZSA9IGZpcnN0RnJlZVBhZ2U7IGN1cnJlbnRQYWdlIDw9IGxhc3RGcmVl
UGFnZTsgKytjdXJyZW50UGFnZSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghcGFnZVN0
YXRlKGN1cnJlbnRQYWdlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5
dGVzQWxsb2NhdGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBtZW1vcnlNYXAtPnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgaWYgKG1lbW9yeU1hcC0+YXQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZCgpCisgICAgeworICAgICAgICBzaXpl
X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
cGFnZU1hcC0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAocGFnZU1hcC0+YXQo
aW5kZXgpKQorICAgICAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiByZXN1bHQgKiBwYWdlU2l6ZSgpOworICAgIH0KKyAgICAKKyAgICBib29sJiBieXRlU3Rh
dGUodm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBieXRlU3RhdGUocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpKTsKKyAgICB9CisgICAgCisgICAgYm9vbCYg
Ynl0ZVN0YXRlKHVpbnRwdHJfdCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IGJ5
dGVJbmRleCA9IGFkZHJlc3MgLSBiYXNlUGFnZSAqIHBhZ2VTaXplKCk7CisgICAgICAgIHJldHVy
biBtZW1vcnlNYXAtPmF0KGJ5dGVJbmRleCk7CisgICAgfQorICAgIAorICAgIGJvb2wmIHBhZ2VT
dGF0ZSh1aW50cHRyX3QgcGFnZSkKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBwYWdlSW5kZXgg
PSBwYWdlIC0gYmFzZVBhZ2U7CisgICAgICAgIHJldHVybiBwYWdlTWFwLT5hdChwYWdlSW5kZXgp
OworICAgIH0KKworICAgIC8vIFRlc3QgaGVscGVycworCisgICAgdm9pZCB0ZXN0T25lQWxsb2Mo
c2l6ZV90IHNpemUpCisgICAgeworICAgICAgICAvLyBUZXN0cyB0aGUgbW9zdCBiYXNpYyBiZWhh
dmlvcjogYWxsb2NhdGUgb25lIHRoaW5nIGFuZCBmcmVlIGl0LiBBbHNvCisgICAgICAgIC8vIHZl
cmlmaWVzIHRoYXQgdGhlIHN0YXRlIG9mIHBhZ2VzIGlzIGNvcnJlY3QuCisgICAgICAgIAorICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFz
ZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5
dGVzKCksIHNpemUpOworICAgICAgICBFWFBFQ1RfVFJVRShwYWdlU3RhdGUoYmFzZVBhZ2UpKTsK
KyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hX
YXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCB0ZXN0UmVwZWF0QWxsb2NGcmVlKHNpemVfdCBmaXJzdFNpemUsIC4u
LikKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHJpZ2h0LWNvYWxlc2NpbmcgYnkgcmVwZWF0ZWRs
eSBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nLiBUaGUgaWRlYQorICAgICAgICAvLyBpcyB0aGF0IGlm
IHlvdSBhbGxvY2F0ZSBzb21ldGhpbmcgYW5kIHRoZW4gZnJlZSBpdCwgdGhlbiB0aGUgaGVhcCBz
aG91bGQKKyAgICAgICAgLy8gbG9vayBpZGVudGljYWwgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHRo
ZSBhbGxvY2F0aW9uIGR1ZSB0byBhIHJpZ2h0LWNvYWxlc2NlCisgICAgICAgIC8vIG9mIHRoZSBm
cmVlZCBjaHVuayBhbmQgdGhlIGFscmVhZHktZnJlZSBtZW1vcnksIGFuZCBzbyBzdWJzZXF1ZW50
CisgICAgICAgIC8vIGFsbG9jYXRpb25zIHNob3VsZCBiZWhhdmUgdGhlIHNhbWUgYXMgdGhlIGZp
cnN0IG9uZS4KKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9
IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0YXJ0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAg
ICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBmaXJzdFNpemUpOworICAgICAgICAK
KyAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayho
YW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAKKyAgICAg
ICAgdmFfbGlzdCBhcmdMaXN0OworICAgICAgICB2YV9zdGFydChhcmdMaXN0LCBmaXJzdFNpemUp
OworICAgICAgICB3aGlsZSAoc2l6ZV90IHNpemVJbkJ5dGVzID0gdmFfYXJnKGFyZ0xpc3QsIGlu
dCkpIHsKKyAgICAgICAgICAgIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBj
b25maXJtKGhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIH0KKyAg
ICAgICAgdmFfZW5kKGFyZ0xpc3QpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RTaW1wbGVG
dWxsQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUsIHNpemVfdCB0
aGlyZFNpemUpCisgICAgeworICAgICAgICAvLyBBbGxvY2F0ZXMgc29tZXRoaW5nIG9mIHNpemUg
Zmlyc3RTaXplLCB0aGVuIHNvbWV0aGluZyBvZiBzaXplIHNlY29uZFNpemUsIGFuZCB0aGVuCisg
ICAgICAgIC8vIGZyZWVzIHRoZSBmaXJzdCBhbGxvY2F0aW9uLCBhbmQgdGhlbiB0aGUgc2Vjb25k
LCBhbmQgdGhlbiBhdHRlbXB0cyB0byBhbGxvY2F0ZSB0aGUKKyAgICAgICAgLy8gdGhpcmQsIGFz
c2VydGluZyB0aGF0IGl0IGFsbG9jYXRlZCBhdCB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBoZWFw
LgorICAgICAgICAKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdGVzdCBtYXkgY2F1c2Ugcmln
aHQtYWxsb2NhdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgdGVzdCB0byBmYWlsLgorICAgICAg
ICAvLyBUaHVzIHRoZSBjb3JyZWN0IHdheSBvZiBydW5uaW5nIHRoaXMgdGVzdCBpcyB0byBlbnN1
cmUgdGhhdCBzZWNvbmRTaXplIGlzCisgICAgICAgIC8vIHBpY2tlZCBpbiBzdWNoIGEgd2F5IHRo
YXQgaXQgbmV2ZXIgc3RyYWRkbGVzIGEgcGFnZS4KKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAg
RVhQRUNUX0VRKGZpcnN0SGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0SGFuZGxlLT5z
aXplSW5CeXRlcygpLCBmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShmaXJz
dEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGZpcnN0SGFuZGxlKTsKKwor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNv
bmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RTaXplKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNlY29uZFNpemUp
OworICAgICAgICAKKyAgICAgICAgY29uZmlybShmaXJzdEhhbmRsZSk7CisgICAgICAgIGNvbmZp
cm0oc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFu
ZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAgICAKKyAg
ICAgICAgY29uZmlybShzZWNvbmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFy
ayhzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOwor
ICAgICAgICAKKyAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChiYXNlUGFn
ZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIAor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiB0aGlyZEhhbmRsZSA9IGFsbG9jYXRlKHRoaXJk
U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUSh0aGlyZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVYUEVDVF9F
USh0aGlyZEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgdGhpcmRTaXplKTsKKyAgICAgICAgCisgICAg
ICAgIGNvbmZpcm0odGhpcmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayh0
aGlyZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKHRoaXJkSGFuZGxlKTsKKyAgICB9
CisgICAgCisgICAgZW51bSBUZXN0RklGT0FsbG9jTW9kZSB7IEZpbGxBdEVuZCwgRWFnZXJGaWxs
IH07CisgICAgdm9pZCB0ZXN0RklGT0FsbG9jKFRlc3RGSUZPQWxsb2NNb2RlIG1vZGUsIC4uLikK
KyAgICB7CisgICAgICAgIC8vIFRoaXMgd2lsbCB0ZXN0IHRoZSBzaW1wbGUgY2FzZSBvZiBuby1j
b2FsZXNjZSAoZnJlZWluZyB0aGUgbGVmdC1tb3N0CisgICAgICAgIC8vIGNodW5rIGluIG1lbW9y
eSB3aGVuIHRoZSBjaHVuayB0byB0aGUgcmlnaHQgb2YgaXQgaXMgYWxsb2NhdGVkKSBhbmQKKyAg
ICAgICAgLy8gZnVsbHkgZXhlcmNpc2UgbGVmdC1jb2FsZXNjaW5nIGFuZCBmdWxsLWNvYWxlc2Np
bmcuIEluIEVhZ2VyRmlsbAorICAgICAgICAvLyBtb2RlLCB0aGlzIGFsc28gdGVzdHMgcGVyZmVj
dC1maXQgYWxsb2NhdGlvbiBhbmQgbm8tY29hbGVzY2luZyBmcmVlLgorICAgICAgICAKKyAgICAg
ICAgc2l6ZV90IHRvdGFsU2l6ZSA9IDA7CisgICAgICAgIAorICAgICAgICBWZWN0b3I8TWV0YUFs
bG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAgICAgIAorICAgICAgICB2YV9saXN0IGFy
Z0xpc3Q7CisgICAgICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIG1vZGUpOworICAgICAgICB3aGlsZSAo
c2l6ZV90IHNpemVJbkJ5dGVzID0gdmFfYXJnKGFyZ0xpc3QsIGludCkpIHsKKyAgICAgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSkpOworICAgICAgICAgICAgRVhQ
RUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdh
dGVybWFyayhoYW5kbGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVzLmFwcGVu
ZChoYW5kbGUpOworICAgICAgICAgICAgdG90YWxTaXplICs9IHNpemVJbkJ5dGVzOworICAgICAg
ICB9CisgICAgICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4KQorICAgICAg
ICAgICAgY29uZmlybShoYW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgIAorICAgICAgICBzaXpl
X3Qgc2l6ZVNvRmFyID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgaGFuZGxlcy5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIHNpemVTb0ZhciArPSBo
YW5kbGVzLmF0KGluZGV4KS0+c2l6ZUluQnl0ZXMoKTsKKyAgICAgICAgICAgIGZyZWUoaGFuZGxl
cy5hdChpbmRleCkpOworICAgICAgICAgICAgaWYgKG1vZGUgPT0gRWFnZXJGaWxsKSB7CisgICAg
ICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6ZVNv
RmFyKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVy
cHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplU29GYXIpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBi
YXNlUGFnZSAqIHBhZ2VTaXplKCkgKyB0b3RhbFNpemUsIHRydWUpOworICAgICAgICAgICAgICAg
IGlmIChpbmRleCA8IGhhbmRsZXMuc2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgY29u
ZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlcy5sYXN0KCkpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQ
YWdlICogcGFnZVNpemUoKSArIHNpemVTb0ZhciwgZmFsc2UpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoc2l6ZVNvRmFyID09IHRvdGFsU2l6ZSk7
CisgICAgICAgIAorICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgKGJhc2VQ
YWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChtb2RlID09IEZpbGxBdEVuZCkgeworICAgICAgICAgICAgTWV0YUFsbG9j
YXRvckhhbmRsZSogZmluYWxIYW5kbGUgPSBhbGxvY2F0ZSh0b3RhbFNpemUpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKGZpbmFsSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShmaW5hbEhh
bmRsZS0+c2l6ZUluQnl0ZXMoKSwgdG90YWxTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgY29uZmlybShmaW5hbEhhbmRsZSk7CisgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFy
ayhmaW5hbEhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoZmluYWxIYW5k
bGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdEZpbGxIZWFwKHNpemVf
dCBzaXplSW5CeXRlcywgc2l6ZV90IG51bUFsbG9jYXRpb25zKQorICAgIHsKKyAgICAgICAgVmVj
dG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAgICAKKyAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoYWxsb2NhdGUoc2l6ZUluQnl0ZXMsIERvbnRSdW5T
YW5pdHlDaGVjaykpOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAg
CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKSk7
CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQWxs
b2NhdGlvbnM7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBE
b250UnVuU2FuaXR5Q2hlY2spOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB0ZXN0UmlnaHRBbGxvY2F0aW9uKHNpemVfdCBmaXJzdExlZnRT
aXplLCBzaXplX3QgZmlyc3RSaWdodFNpemUsIHNpemVfdCBzZWNvbmRMZWZ0U2l6ZSwgc2l6ZV90
IHNlY29uZFJpZ2h0U2l6ZSkKKyAgICB7CisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZp
cnN0TGVmdCA9IGFsbG9jYXRlKGZpcnN0TGVmdFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoZmly
c3RMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0Umln
aHQgPSBhbGxvY2F0ZShmaXJzdFJpZ2h0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdFJp
Z2h0LT5lbmQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBh
Z2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIHNlY29uZExlZnQgPSBhbGxvY2F0ZShzZWNvbmRMZWZ0U2l6ZSk7CisgICAgICAg
IEVYUEVDVF9FUShzZWNvbmRMZWZ0LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBmaXJzdExlZnQtPnNpemVJbkJ5dGVzKCkpKTsKKyAgICAg
ICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZFJpZ2h0ID0gYWxsb2NhdGUo
c2Vjb25kUmlnaHRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZFJpZ2h0LT5lbmQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAq
IHBhZ2VTaXplKCkgLSBmaXJzdFJpZ2h0LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAg
ICAgICBmcmVlKGZpcnN0TGVmdCk7CisgICAgICAgIGZyZWUoZmlyc3RSaWdodCk7CisgICAgICAg
IGZyZWUoc2Vjb25kTGVmdCk7CisgICAgICAgIGZyZWUoc2Vjb25kUmlnaHQpOworICAgICAgICAK
KyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFn
ZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgCisgICAgICAgIGZyZWUoZmluYWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RCZXN0
Rml0KHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBzdGVwLCB1bnNpZ25lZCBudW1TbG90cywgU2Fu
aXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSkKKyAgICB7CisgICAgICAgIFZlY3RvcjxNZXRh
QWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlc1RvRnJlZTsKKyAgICAgICAgVmVjdG9yPE1ldGFB
bGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAgICBWZWN0b3I8dm9pZCosIDA+IGxv
Y2F0aW9uczsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzaXplID0gZmlyc3RTaXplOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90czsgKytpbmRleCkg
eworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogdG9GcmVlID0gYWxsb2NhdGUoc2l6
ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIGlmICghaGFuZGxlcy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICB3aGlsZSAodG9GcmVlLT5zdGFydCgpICE9IGhhbmRsZXMubGFz
dCgpLT5lbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0
b0ZyZWUpOworICAgICAgICAgICAgICAgICAgICB0b0ZyZWUgPSBhbGxvY2F0ZShzaXplLCBzYW5p
dHlDaGVja01vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZnJhZ2dlciA9IGFsbG9jYXRlKDMyLCBzYW5pdHlD
aGVja01vZGUpOworICAgICAgICAgICAgRVhQRUNUX0VRKGZyYWdnZXItPnN0YXJ0KCksIHRvRnJl
ZS0+ZW5kKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKHRv
RnJlZS0+c3RhcnQoKSk7CisKKyAgICAgICAgICAgIGhhbmRsZXNUb0ZyZWUuYXBwZW5kKHRvRnJl
ZSk7CisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChmcmFnZ2VyKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgc2l6ZSArPSBzdGVwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBB
U1NFUlQobG9jYXRpb25zLnNpemUoKSA9PSBudW1TbG90cyk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzVG9GcmVlLnNpemUoKTsgKytp
bmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlc1RvRnJlZS5hdChpbmRleCksIHNhbml0eUNo
ZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBzaXplID0gZmlyc3RTaXplOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90czsgKytpbmRleCkgeworICAg
ICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogYmVzdEZpdCA9IGFsbG9jYXRlKHNpemUgLSAz
Miwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRVhQRUNUX1RS
VUUoYmVzdEZpdC0+c3RhcnQoKSA9PSBsb2NhdGlvbnMuYXQoaW5kZXgpCisgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBiZXN0Rml0LT5lbmQoKSA9PSByZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obG9jYXRpb25zLmF0KGluZGV4KSkgKyBzaXplKSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNtYWxsID0g
YWxsb2NhdGUoMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBpZiAoYmVzdEZpdC0+
c3RhcnQoKSA9PSBsb2NhdGlvbnMuYXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIEVYUEVDVF9F
UShzbWFsbC0+c3RhcnQoKSwgYmVzdEZpdC0+ZW5kKCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIEVYUEVDVF9FUShzbWFsbC0+ZW5kKCksIGJlc3RGaXQtPnN0YXJ0KCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGJlc3RGaXQsIHNhbml0eUNoZWNrTW9kZSk7
CisgICAgICAgICAgICBmcmVlKHNtYWxsLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzaXplICs9IHN0ZXA7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KQorICAg
ICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAg
ICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVs
dFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmluYWwsIHNhbml0eUNoZWNr
TW9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdFNocmluayhzaXplX3QgZmlyc3RTaXpl
LCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSB0aGlu
ZyB0aGF0IHdpbGwgYmUgc2hydW5rCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRs
ZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICAvLyBTaHJpbmsgaXQs
IGFuZCBtYWtlIHN1cmUgdGhhdCBvdXIgc3RhdGUgcmVmbGVjdHMgdGhlIHNocmlua2FnZS4KKyAg
ICAgICAgbm90aWZ5RnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oaGFuZGxlLT5zdGFydCgpKSArIHNlY29uZFNpemUpLCBmaXJzdFNpemUgLSBz
ZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIGhhbmRsZS0+c2hyaW5rKHNlY29uZFNpemUp
OworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsK
KyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICAvLyBB
c3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBub3QgZW1wdHkuCisgICAgICAgIEVYUEVDVF9UUlVFKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIEFsbG9jYXRlIHRoZSByZW1haW5kZXIgb2YgdGhlIGhlYXAuCisg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHJlbWFpbmRlciA9IGFsbG9jYXRlKGRlZmF1bHRQ
YWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLSBzZWNvbmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VR
KHJlbWFpbmRlci0+c3RhcnQoKSwgaGFuZGxlLT5lbmQoKSk7CisgICAgICAgIAorICAgICAgICBm
cmVlKHJlbWFpbmRlcik7CisgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IC8vIEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIGVtcHR5IGFuZCBmaW5pc2ggdXAuCisgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAg
ICAgICBmcmVlKGZpbmFsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0RGVtYW5kQWxsb2ND
b2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNvbmRT
aXplKQorICAgIHsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRl
ZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RT
aXplKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRl
KHNlY29uZFNpemUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUo
KGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
CisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0NvYWxl
c2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgCisg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29u
ZFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoY3VycmVudEhlYXBHcm93dGhN
b2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIEVYUEVDVF9FUShhbGxvd0FsbG9jYXRlUGFn
ZXMsIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpOworICAgICAgICBFWFBFQ1RfRVEocmVxdWVzdGVk
TnVtUGFnZXMsIChzZWNvbmRTaXplICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7Cisg
ICAgICAgIAorICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IDA7CisgICAgICAgIAorICAgICAg
ICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgZnJlZShhbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMp
ICogcGFnZVNpemUoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3REZW1hbmRBbGxvY0Rv
bnRDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3QgbnVtUGFnZXMsIHNpemVfdCBzZWNv
bmRTaXplKQorICAgIHsKKyAgICAgICAgZnJlZShhbGxvY2F0ZShmaXJzdFNpemUpKTsKKyAgICAg
ICAgZnJlZShhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAg
KyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAor
ICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhl
YXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50
SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U7CisgICAgICAg
IGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgTWV0YUFs
bG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBFWFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdy
b3dIZWFwKTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQYWdlcywgc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSk7CisgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWROdW1QYWdlcywgKHNl
Y29uZFNpemUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNU
X0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQ
YWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwICsgMSkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAor
ICAgICAgICByZXF1ZXN0ZWROdW1QYWdlcyA9IDA7CisgICAgICAgIAorICAgICAgICBFWFBFQ1Rf
VFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMp
ICogcGFnZVNpemUoKSkpOworCisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAgICBm
cmVlKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2Nh
dG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUo
KSkpOworICAgICAgICAKKyAgICAgICAgZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUp
OworICAgICAgICBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAg
RVhQRUNUX0VRKGZpcnN0SGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+
c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2Vz
SW5IZWFwICsgMSkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOwor
ICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAgfQorfTsKKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBFbXB0eSkKK3sKKyAgICAvLyBUZXN0cyB0aGF0IGNyZWF0aW5nIGFuZCBkZXN0
cm95aW5nIGFuIGFsbG9jYXRvciB3b3Jrcy4KK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0
LCBBbGxvY1plcm8pICAgIAoreworICAgIC8vIFRlc3RzIHRoYXQgYWxsb2NhdGluZyBhIHplcm8t
bGVuZ3RoIGJsb2NrIHJldHVybnMgMCBhbmQKKyAgICAvLyBkb2VzIG5vdCBjaGFuZ2UgYW55dGhp
bmcgaW4gbWVtb3J5LgorICAgIAorICAgIEFTU0VSVCghYWxsb2NhdG9yLT5hbGxvY2F0ZSgwKSk7
CisgICAgCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0
UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgIGZy
ZWUoZmluYWwpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIE9uZUFsbG9jMzIpCit7
CisgICAgdGVzdE9uZUFsbG9jKDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBP
bmVBbGxvYzY0KQoreworICAgIHRlc3RPbmVBbGxvYyg2NCk7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgT25lQWxsb2NUd29QYWdlcykKK3sKKyAgICB0ZXN0T25lQWxsb2MocGFnZVNp
emUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJl
ZTMyVHdpY2UpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDApOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVGhlbjY0KQoreworICAg
IHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWU2NFRoZW4zMikKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NG
cmVlKDY0LCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxs
b2NGcmVlMzJUd2ljZVRoZW42NCkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwg
NjQsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMy
VGhlbjY0VHdpY2UpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDY0LCAwKTsK
K30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWU2NFRoZW4zMlRo
ZW42NCkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgNjQsIDApOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVGhyaWNlKQoreworICAg
IHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlMzJUaGVuNjRUaGVuMzIpCit7CisgICAgdGVzdFJl
cGVhdEFsbG9jRnJlZSgzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSZXBlYXRBbGxvY0ZyZWU2NFRoZW4zMlR3aWNlKQoreworICAgIHRlc3RSZXBlYXRBbGxv
Y0ZyZWUoNjQsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVw
ZWF0QWxsb2NGcmVlVHdvUGFnZXNUaGVuMzIpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZShz
dGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgKiAyKSwgMzIsIDApOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVGhlblR3b1BhZ2VzKQoreworICAgIHRl
c3RSZXBlYXRBbGxvY0ZyZWUoMzIsIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAqIDIpLCAw
KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWVQYWdlVGhl
blR3b1BhZ2VzKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGljX2Nhc3Q8aW50Pihw
YWdlU2l6ZSgpKSwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIDApOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZVR3b1BhZ2VzVGhlblBhZ2Up
Cit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZShzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkg
KiAyKSwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpKSwgMCk7Cit9CisKK1RFU1RfRihNZXRh
QWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlMzJQbHVzMzJUaGVuMTI4KQoreworICAg
IHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIDMyLCAxMjgpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1czY0VGhlbjEyOCkKK3sKKyAgICB0
ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCA2NCwgMTI4KTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2U2NFBsdXMzMlRoZW4xMjgpCit7CisgICAgdGVz
dFNpbXBsZUZ1bGxDb2FsZXNjZSg2NCwgMzIsIDEyOCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2Nh
dG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlMzJQbHVzUGFnZUxlc3MzMlRoZW5QYWdlKQorewor
ICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFnZVNpemUo
KSk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlMzJQ
bHVzUGFnZUxlc3MzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2Nl
KDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkgKiAyKTsKK30KKworVEVTVF9GKE1ldGFB
bGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2VQYWdlUGx1czMyVGhlblR3b1BhZ2VzKQor
eworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkg
KiAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2VQ
YWdlUGx1c1BhZ2VUaGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShw
YWdlU2l6ZSgpLCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRh
QWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0RW5kMzJUd2ljZSkKK3sKKyAgICB0ZXN0RklG
T0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBGSUZPQWxsb2NGaWxsQXRFbmQzMlRocmljZSkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEZp
bGxBdEVuZCwgMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
RklGT0FsbG9jRmlsbEF0RW5kMzJGb3VyVGltZXMpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxs
QXRFbmQsIDMyLCAzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0
LCBGSUZPQWxsb2NGaWxsQXRFbmRQYWdlTGVzczMyVGhlbjMyVGhlblBhZ2VMZXNzNjRUaGVuNjQp
Cit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIHN0YXRpY19jYXN0PGludD4ocGFnZVNp
emUoKSAtIDMyKSwgMzIsIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAtIDY0KSwgNjQsIDAp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0VhZ2VyRmlsbDMyVHdp
Y2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwgMCk7Cit9CisKK1RF
U1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRWFnZXJGaWxsMzJUaHJpY2UpCit7Cisg
ICAgdGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0VhZ2VyRmlsbDMyRm91clRpbWVzKQoreworICAg
IHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRWFnZXJGaWxsUGFnZUxlc3MzMlRoZW4zMlRo
ZW5QYWdlTGVzczY0VGhlbjY0KQoreworICAgIHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxsLCBzdGF0
aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgLSAzMiksIDMyLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VT
aXplKCkgLSA2NCksIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGaWxs
SGVhcDMyKQoreworICAgIHRlc3RGaWxsSGVhcCgzMiwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFn
ZVNpemUoKSAvIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGaWxsSGVhcFBh
Z2UpCit7CisgICAgdGVzdEZpbGxIZWFwKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCk7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXBUd29QYWdlcykKK3sKKyAg
ICB0ZXN0RmlsbEhlYXAocGFnZVNpemUoKSAqIDIsIGRlZmF1bHRQYWdlc0luSGVhcCAvIDIpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJpZ2h0QWxsb2NhdGlvbjMyVGhlblBhZ2VU
aGVuMzJUaGVuUGFnZSkKK3sKKyAgICB0ZXN0UmlnaHRBbGxvY2F0aW9uKDMyLCBwYWdlU2l6ZSgp
LCAzMiwgcGFnZVNpemUoKSk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmlnaHRB
bGxvY2F0aW9uUXVhcnRlclBhZ2VUaGVuUGFnZVRoZW5RdWFydGVyUGFnZVRoZW5QYWdlKQorewor
ICAgIHRlc3RSaWdodEFsbG9jYXRpb24ocGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCksIHBhZ2VT
aXplKCkgLyA0LCBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBC
ZXN0Rml0NjRQbHVzNjRUaHJpY2UpCit7CisgICAgdGVzdEJlc3RGaXQoNjQsIDY0LCAzLCBSdW5T
YW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1
czY0VGVuVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoNjQsIDY0LCAxMCwgRG9udFJ1blNhbml0
eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0NjRQbHVzNjRI
dW5kcmVkVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoNjQsIDY0LCAxMDAsIERvbnRSdW5TYW5p
dHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1czY0
VGhyaWNlKQoreworICAgIHRlc3RCZXN0Rml0KDk2LCA2NCwgMywgUnVuU2FuaXR5Q2hlY2spOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM2NFRlblRpbWVzKQor
eworICAgIHRlc3RCZXN0Rml0KDk2LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1czY0SHVuZHJlZFRpbWVzKQor
eworICAgIHRlc3RCZXN0Rml0KDk2LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQor
CitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM5NlRocmljZSkKK3sKKyAg
ICB0ZXN0QmVzdEZpdCg5NiwgOTYsIDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1l
dGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzOTZUZW5UaW1lcykKK3sKKyAgICB0ZXN0QmVz
dEZpdCg5NiwgOTYsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM5NkVpZ2h0eVRpbWVzKQoreworICAgIHRlc3RCZXN0
Rml0KDk2LCA5NiwgODAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgU2hyaW5rNjRUbzMyKQoreworICAgIHRlc3RTaHJpbmsoNjQsIDMyKTsKK30K
KworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtQYWdlVG8zMikKK3sKKyAgICB0ZXN0
U2hyaW5rKHBhZ2VTaXplKCksIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBT
aHJpbmtQYWdlVG9QYWdlTGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSwgcGFn
ZVNpemUoKSAtIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtUd29Q
YWdlc1RvMzIpCit7CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgpICogMiwgMzIpOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2VzVG9QYWdlUGx1czMyKQorewor
ICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKyAzMik7Cit9CisKK1RF
U1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUb1BhZ2UpCit7CisgICAgdGVz
dFNocmluayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSk7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUb1BhZ2VMZXNzMzIpCit7CisgICAgdGVzdFNocmlu
ayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSAtIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBTaHJpbmtUd29QYWdlc1RvVHdvUGFnZXNMZXNzMzIpCit7CisgICAgdGVzdFNo
cmluayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSAqIDIgLSAzMik7Cit9CisKK1RFU1RfRihN
ZXRhQWxsb2NhdG9yVGVzdCwgRGVtYW5kQWxsb2NDb2FsZXNjZVBhZ2VUaGVuRG91YmxlSGVhcCkK
K3sKKyAgICB0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJ
bkhlYXAsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIERlbWFuZEFsbG9jQ29hbGVzY2VQYWdlVGhlblRyaXBsZUhlYXApCit7
CisgICAgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5I
ZWFwICogMiwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7Cit9CisKK1RFU1RfRihN
ZXRhQWxsb2NhdG9yVGVzdCwgRGVtYW5kQWxsb2NEb250Q29hbGVzY2VQYWdlVGhlbkRvdWJsZUhl
YXApCit7CisgICAgdGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1
bHRQYWdlc0luSGVhcCwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvUmVkQmxhY2tUcmVlLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgUmVkQmxhY2tUcmVlVGVzdDog
cHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIHVuc2lnbmVkIG1fY291bnRlcjsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgbV9jb3VudGVy
ID0gMDsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHN0cnVjdCBQYWlyIHsKKyAgICAgICAgY2hhciBrZXk7CisgICAgICAg
IHVuc2lnbmVkIHZhbHVlOworICAgICAgICAKKyAgICAgICAgUGFpcigpIHsgfQorICAgICAgICAK
KyAgICAgICAgUGFpcihjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgICAgICAgICA6IGtl
eShrZXkpCisgICAgICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQYWlyJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleSA9PSBvdGhlci5rZXk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IFBhaXImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5IDwgb3RoZXIua2V5Owor
ICAgICAgICB9CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIFZlY3RvcjxQYWlyLCAxNj4gUGFp
clZlY3RvcjsKKyAgICAKKyAgICBQYWlyVmVjdG9yIGZpbmRFeGFjdChQYWlyVmVjdG9yJiBhc1Zl
Y3RvciwgY2hhciBrZXkpCisgICAgeworICAgICAgICBQYWlyVmVjdG9yIHJlc3VsdDsKKyAgICAg
ICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5zaXpl
KCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID09
IGtleSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGFzVmVjdG9yLmF0KGluZGV4KSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydChyZXN1bHQuYmVnaW4oKSwg
cmVzdWx0LmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHZvaWQgcmVtb3ZlKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBzaXplX3QgaW5kZXgp
CisgICAgeworICAgICAgICBhc1ZlY3Rvci5hdChpbmRleCkgPSBhc1ZlY3Rvci5sYXN0KCk7Cisg
ICAgICAgIGFzVmVjdG9yLnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgCisgICAgUGFpclZlY3Rv
ciBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIg
a2V5KQorICAgIHsKKyAgICAgICAgY2hhciBiZXN0S2V5ID0gMDsgLy8gYXNzaWdubWVudCB0byBt
YWtlIGdjYyBoYXBweQorICAgICAgICBib29sIGZvdW5kS2V5ID0gZmFsc2U7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA+PSBrZXkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA8IGJlc3RLZXkg
fHwgIWZvdW5kS2V5KSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kS2V5ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICAgICAgYmVzdEtleSA9IGFzVmVjdG9yLmF0KGluZGV4KS5rZXk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBQYWlyVmVjdG9yIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIGlmICghZm91bmRLZXkpCisg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZpbmRF
eGFjdChhc1ZlY3RvciwgYmVzdEtleSk7CisgICAgfQorICAgIAorICAgIHZvaWQgYXNzZXJ0Rm91
bmRBbmRSZW1vdmUoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5LCB1bnNpZ25lZCB2YWx1
ZSkKKyAgICB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICBz
aXplX3QgZm91bmRJbmRleCA9IDA7IC8vIG1ha2UgY29tcGlsZXJzIGhhcHB5CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5z
aXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgp
LmtleSA9PSBrZXkKKyAgICAgICAgICAgICAgICAgICAgJiYgYXNWZWN0b3IuYXQoaW5kZXgpLnZh
bHVlID09IHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFmb3VuZCk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIGZvdW5kSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KGZvdW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVtb3ZlKGFzVmVjdG9yLCBmb3Vu
ZEluZGV4KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgcGFzc2VzIGEg
Y29weSBvZiB0aGUgdmVjdG9yLgorICAgIHZvaWQgYXNzZXJ0RXF1YWwoUmVkQmxhY2tUcmVlPGNo
YXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBQYWlyVmVjdG9yIGFzVmVjdG9yKQorICAgIHsKKyAgICAg
ICAgZm9yIChSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBjdXJyZW50ID0gYXNU
cmVlLmZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBhc1RyZWUuc3VjY2Vzc29yKGN1cnJlbnQp
KQorICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoYXNWZWN0b3IsIGN1cnJlbnQtPmtl
eSwgY3VycmVudC0+dmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydFNhbWVWYWx1
ZXNGb3JLZXkoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBSZWRCbGFja1Ry
ZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlLCBQYWlyVmVjdG9yIGZvdW5kVmFsdWVzLCBj
aGFyIGtleSkKKyAgICB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEobm9kZS0+a2V5LCBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBSZWRCbGFja1Ry
ZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBwcmV2Tm9kZSA9IG5vZGU7CisgICAgICAgICAgICBk
byB7CisgICAgICAgICAgICAgICAgbm9kZSA9IHByZXZOb2RlOworICAgICAgICAgICAgICAgIHBy
ZXZOb2RlID0gYXNUcmVlLnByZWRlY2Vzc29yKHByZXZOb2RlKTsKKyAgICAgICAgICAgIH0gd2hp
bGUgKHByZXZOb2RlICYmIHByZXZOb2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgRVhQRUNUX0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgIEVYUEVDVF9U
UlVFKCFwcmV2Tm9kZSB8fCBwcmV2Tm9kZS0+a2V5IDwga2V5KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIGFzc2VydEZvdW5kQW5kUmVtb3ZlKGZvdW5k
VmFsdWVzLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBub2RlID0gYXNUcmVlLnN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRSghbm9kZSB8fCBub2RlLT5rZXkgPj0ga2V5KTsKKyAgICAgICAgICAgIH0g
d2hpbGUgKG5vZGUgJiYgbm9kZS0+a2V5ID09IGtleSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEVYUEVDVF9UUlVFKGZvdW5kVmFsdWVzLmlzRW1wdHkoKSk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoZSBjb250cm9sIHN0cmluZyBpcyBhIG51bGwtdGVybWluYXRlZCBsaXN0IG9mIGNv
bW1hbmRzLiBFYWNoCisgICAgLy8gY29tbWFuZCBpcyB0d28gY2hhcmFjdGVycywgd2l0aCB0aGUg
Zmlyc3QgaWRlbnRpZnlpbmcgdGhlIG9wZXJhdGlvbgorICAgIC8vIGFuZCB0aGUgc2Vjb25kIGdp
dmluZyBhIGtleS4gVGhlIGNvbW1hbmRzIGFyZToKKyAgICAvLyAgK3ggIEFkZCB4CisgICAgLy8g
ICp4ICBGaW5kIGFsbCBlbGVtZW50cyBlcXVhbCB0byB4CisgICAgLy8gIEB4ICBGaW5kIGFsbCBl
bGVtZW50cyB0aGF0IGhhdmUgdGhlIHNtYWxsZXN0IGtleSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBv
ciBlcXVhbCB0byB4CisgICAgLy8gICF4ICBSZW1vdmUgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgK
KyAgICB2b2lkIHRlc3REcml2ZXIoY29uc3QgY2hhciogY29udHJvbFN0cmluZykKKyAgICB7Cisg
ICAgICAgIFBhaXJWZWN0b3IgYXNWZWN0b3I7CisgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1
bnNpZ25lZD4gYXNUcmVlOworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBjaGFyKiBjdXJy
ZW50ID0gY29udHJvbFN0cmluZzsgKmN1cnJlbnQ7IGN1cnJlbnQgKz0gMikgeworICAgICAgICAg
ICAgY2hhciBjb21tYW5kID0gY3VycmVudFswXTsKKyAgICAgICAgICAgIGNoYXIga2V5ID0gY3Vy
cmVudFsxXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKyttX2NvdW50ZXI7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChjb21tYW5kKTsKKyAgICAgICAgICAgIEFTU0VS
VChrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAg
ICAgICAgICAgIGNhc2UgJysnOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIs
IHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IG5ldyBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+
OjpOb2RlOworICAgICAgICAgICAgICAgIG5vZGUtPmtleSA9IGtleTsKKyAgICAgICAgICAgICAg
ICBub2RlLT52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIGFzVHJlZS5pbnNlcnQobm9k
ZSk7CisgICAgICAgICAgICAgICAgYXNWZWN0b3IuYXBwZW5kKFBhaXIoa2V5LCB2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgY2FzZSAnKic6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hh
ciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRFeGFjdChrZXkpOworICAgICAg
ICAgICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+
a2V5LCBrZXkpOworICAgICAgICAgICAgICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVl
LCBub2RlLCBmaW5kRXhhY3QoYXNWZWN0b3IsIGtleSksIGtleSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgJ0AnOiB7CisgICAgICAg
ICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJl
ZS5maW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZSkgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShub2RlLT5rZXkgPj0ga2V5
KTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUsIG5v
ZGUsIGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChhc1ZlY3Rvciwga2V5KSwgbm9kZS0+a2V5
KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RS
VUUoZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9yLCBrZXkpLmlzRW1wdHkoKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlICchJzogeworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7
CisgICAgICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUq
IG5vZGUgPSBhc1RyZWUucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2Rl
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+a2V5LCBrZXkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoYXNWZWN0b3IsIG5v
ZGUtPmtleSwgbm9kZS0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoZmluZEV4YWN0KGFzVmVjdG9yLCBrZXkp
LmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgICAg
ICBhc1RyZWUuY2hlY2tDb25zaXN0ZW5jeSgpOworI2VuZGlmCisgICAgICAgICAgICBFWFBFQ1Rf
RVEoYXNUcmVlLnNpemUoKSwgYXNWZWN0b3Iuc2l6ZSgpKTsKKyAgICAgICAgICAgIGFzc2VydEVx
dWFsKGFzVHJlZSwgYXNWZWN0b3IpOworICAgICAgICB9CisgICAgfQorfTsKKworVEVTVF9GKFJl
ZEJsYWNrVHJlZVRlc3QsIEVtcHR5KQoreworICAgIHRlc3REcml2ZXIoIiIpOworfQorCitURVNU
X0YoUmVkQmxhY2tUcmVlVGVzdCwgRW1wdHlHZXRGaW5kUmVtb3ZlKQoreworICAgIHRlc3REcml2
ZXIoIip4QHkheiIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgU2luZ2xlQWRkKQor
eworICAgIHRlc3REcml2ZXIoIithIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBT
aW5nbGVBZGRHZXRGaW5kUmVtb3ZlTm90Rm91bmQpCit7CisgICAgdGVzdERyaXZlcigiK2EqeEB5
IXoiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFNpbmdsZUFkZEdldEZpbmRSZW1v
dmUpCit7CisgICAgdGVzdERyaXZlcigiK2EqYUBhIWEiKTsKK30KKworVEVTVF9GKFJlZEJsYWNr
VHJlZVRlc3QsIFR3b0FkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYiIpOworfQorCitURVNU
X0YoUmVkQmxhY2tUcmVlVGVzdCwgVGhyZWVBZGRzKQoreworICAgIHRlc3REcml2ZXIoIithK2Ir
YyIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgRm91ckFkZHMpCit7CisgICAgdGVz
dERyaXZlcigiK2ErYitjK2QiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIExvdHNP
ZlJlcGVhdEFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBMb3RzT2ZS
ZXBlYXRBbmRVbmlxdWVBZGRzKQoreworICAgIHRlc3REcml2ZXIoIithK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28rcCtxK3Ircyt0K3Ur
dit4K3kreiIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgTG90c09mUmVwZWF0QW5k
VW5pcXVlQWRkc0FuZEdldHNBbmRSZW1vdmVzKQoreworICAgIHRlc3REcml2ZXIoIithK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCtlK2YrZytoK2kraitrK2wrbStuK28rcCtx
K3Ircyt0K3Urdit4K3kreiphKmIqYypkKmUqZipnKmgqaSpqKmsqbCptKm4qbypwKnEqcipzKnQq
dSp2KncqeCp5KnohYSFiIWMhZCFlIWYhZyFoIWkhaiFrIWwhbSFuIW8hcCFxIXIhcyF0IXUhdiF3
IXgheSF6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBTaW1wbGVCZXN0Rml0U2Vh
cmNoKQoreworICAgIHRlc3REcml2ZXIoIitkK2QrbSt3QGRAbUB3QGFAZ0BxIik7Cit9CisKK1RF
U1RfRihSZWRCbGFja1RyZWVUZXN0LCBCaWdnZXJCZXN0Rml0U2VhcmNoKQoreworICAgIHRlc3RE
cml2ZXIoIitkK2QrZCtkK2QrZCtkK2QrZCtkK2YrZitmK2YrZitmK2YraCtoK2kraitrK2wrbStv
K3ArcStyK3pAYUBiQGNAZEBlQGZAZ0BoQGlAakBrQGxAbUBuQG9AcEBxQHJAc0B0QHVAdkB3QHhA
eUB6Iik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106052</attachid>
            <date>2011-09-01 15:57:29 -0700</date>
            <delta_ts>2011-09-01 16:45:00 -0700</delta_ts>
            <desc>the patch - fix conflicts</desc>
            <filename>metaalloc_patch_23.diff</filename>
            <type>text/plain</type>
            <size>225566</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAyIEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
Ojpyb3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VO
b2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5
dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZl
ZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpSYXdOb2RlOjpzZXRSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmZpcnN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3Qp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVh
bCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVx
dWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0
SGVscCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZHVtcFJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJv
b3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjphc05vZGUpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDktMDEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0By
aW0uY29tPgogCiAgICAgICAgIFFOWCBHQ0MgZGlzdHJpYnV0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB2
YXNwcmludGYoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDk0MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMCw2ICs1MTAsOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTm9uQ29weWluZ1NvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9O
b25jb3B5YWJsZS5oIFwKQEAgLTU0Miw2ICs1NDUsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyU2VlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1JlZEJsYWNrVHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50
ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNp
b24gOTQzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDEzIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRF
UEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFp
blRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVl
RnJlZVNwYWNlTm9kZUVQTlNfMTJSZWRCbGFja1RyZWVJbVB2RTROb2RlRQorX19aTjNXVEYxM01l
dGFBbGxvY2F0b3IxOGRlYnVnRnJlZVNwYWNlU2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRv
cjhhbGxvY2F0ZUVtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckMyRW0KK19fWk4zV1RGMTNNZXRh
QWxsb2NhdG9yRDFFdgorX19aTjNXVEYxM01ldGFBbGxvY2F0b3JEMkV2CiBfX1pOM1dURjEzU3Ry
aW5nQnVpbGRlcjExcmVpZnlTdHJpbmdFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxMXNocmlu
a1RvRml0RXYKIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTVyZXNlcnZlQ2FwYWNpdHlFagpAQCAt
NDM3LDYgKzQ0NCw4IEBAIF9fWk4zV1RGMThjYWxjdWxhdGVVVENPZmZzZXRFdgogX19aTjNXVEYx
OGNoYXJhY3RlcnNUb0RvdWJsZUVQS3RtUGJTMl8KIF9fWk4zV1RGMThkYXRlVG9EYXlzRnJvbTE5
NzBFaWlpCiBfX1pOM1dURjE4bW9udGhGcm9tRGF5SW5ZZWFyRWliCitfX1pOM1dURjE5TWV0YUFs
bG9jYXRvckhhbmRsZTZzaHJpbmtFbQorX19aTjNXVEYxOU1ldGFBbGxvY2F0b3JIYW5kbGVEMUV2
CiBfX1pOM1dURjE5aW5pdGlhbGl6ZVRocmVhZGluZ0V2CiBfX1pOM1dURjIwZXF1YWxJZ25vcmlu
Z051bGxpdHlFUE5TXzEwU3RyaW5nSW1wbEVTMV8KIF9fWk4zV1RGMjBmYXN0TWFsbG9jU3RhdGlz
dGljc0V2CkBAIC01MTYsNiArNTI1LDcgQEAgX19aTjNXVEY4SW50ZXJuYWwyMWZhc3RNYWxsb2NN
YXRjaEZhaWxlZAogX19aTjNXVEY4ZmFzdEZyZWVFUHYKIF9fWk4zV1RGOG1zVG9ZZWFyRWQKIF9f
Wk4zV1RGOG51bGxBdG9tRQorX19aTjNXVEY4cGFnZVNpemVFdgogX19aTjNXVEY4c3RhckF0b21F
CiBfX1pOM1dURjh0ZXh0QXRvbUUKIF9fWk4zV1RGOUJ5dGVBcnJheTZjcmVhdGVFbQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qL1dURi9XVEYudmNwcm9qCShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHdvcmtpbmcgY29weSkK
QEAgLTc2MSw2ICs3NjEsMTggQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRp
dmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5jcHAiCisJCQk+CisJCTwvRmlsZT4KKwkJ
PEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE1ldGFBbGxvY2F0b3IuaCIKKwkJCT4K
KwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9j
YXRvckhhbmRsZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHd0ZlxNRDUuY3BwIgogCQkJPgogCQk8L0ZpbGU+CkBAIC05MDEsNiArOTEzLDEwIEBA
CiAJCQk+CiAJCTwvRmlsZT4KIAkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFJl
ZEJsYWNrVHJlZS5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCiAJCQlSZWxhdGl2ZVBhdGg9
Ii4uXC4uXHd0ZlxSZWZDb3VudGVkLmgiCiAJCQk+CiAJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC01MSwxMSArNTEsMTUgQEAKIAkJMEYyOTQ3OUMxMjZFNjk4QzAwQjNBQkY1IC8qIERl
Y2ltYWxOdW1iZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyOTQ3OUIxMjZFNjk4QzAwQjNBQkY1IC8qIERlY2ltYWxOdW1iZXIuY3BwICovOyB9
OwogCQkwRjc3MDA5MDE0MDJGREU0MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA4RTE0MDJGREQ2
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBs
aW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsg
fTsKKwkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAw
MDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
OTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3Mg
PSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OworCQkwRjk2
M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRs
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNC
MkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDODE1
MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyog
VlRhYmxlU3BlY3RydW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwotCQkwRkM4MTUxNjE0MDUxMUI1MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTIx
NDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCAqLzsgfTsKIAkJMEZDODE1MEEx
NDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAv
KiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmll
clN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICov
OyB9OworCQkwRkM4MTUxNTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTEx
OEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFi
bGVTcGVjdHJ1bS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovOyB9
OwogCQkxNDAwMDY3NzEyQTZGNzgzMDA2NEQxMjMgLyogT1NBbGxvY2F0b3IuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MDAwNjc2MTJBNkY3ODMwMDY0
RDEyMyAvKiBPU0FsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTE0MDAwNjkzMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBv
c2l4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0
MDAwNjkyMTJBNkY5RTEwMDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLzsgfTsKIAkJ
MTQwNTY2QzQxMDdFQzI1NTAwNURCQzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDMDg5NEQ1MEZBRkJBMkQw
MDAwMTg2NSAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgKi87IH07CkBAIC01NTQsNyArNTU4LDcg
QEAKIAkJQkMxOEM0NkIwRTE2RjVDRDAwQjM0NDYwIC8qIFN5bWJvbFRhYmxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNEEzOTZBNjBDRDI5MzMxMDBC
NUI0RkYgLyogU3ltYm9sVGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ2QzBFMTZGNUNEMDBCMzQ0NjAgLyogVENQYWNrZWRDYWNo
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNURBNDc5
NjUwQ0ZCQ0Y1NjAwOTMyOEEwIC8qIFRDUGFja2VkQ2FjaGUuaCAqLzsgfTsKIAkJQkMxOEM0NkQw
RTE2RjVDRDAwQjM0NDYwIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENkUwOEU4MEExNzAwMkNCRUU3IC8qIFRDUGFnZU1h
cC5oICovOyB9OwotCQlCQzE4QzQ2RTBFMTZGNUNEMDBCMzQ0NjAgLyogVENTcGluTG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENkYwOEU4
MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsgfTsKKwkJQkMxOEM0NkUwRTE2RjVDRDAw
QjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1NDFCRDZGMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2NrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NkYw
RTE2RjVDRDAwQjM0NDYwIC8qIFRDU3lzdGVtQWxsb2MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDcxMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1N5
c3RlbUFsbG9jLmggKi87IH07CiAJCUJDMThDNDcwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUaHJlYWRp
bmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUU3
OTIyMEQ2Qzk1Q0QwMEZFQTNCQSAvKiBUaHJlYWRpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ3MTBFMTZGNUNEMDBCMzQ0NjAgLyog
VGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUxQjdDOEJEMERBM0EzMzYwMDc0QjBEQyAvKiBUaHJlYWRTcGVjaWZpYy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MzksMTEgKzc0
MywxNSBAQAogCQkwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEZWNpbWFsTnVtYmVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOEUxNDAyRkRENjAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1w
bGluZ0NvdW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY3NzAwOTExNDAy
RkYyODAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTYW1wbGluZ0NvdW50ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAv
KiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0Iy
RTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFi
bGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFi
bGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQzgxNTE0MTQw
NTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAz
IC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV3JpdGVCYXJyaWVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkM4MTUxMjE0MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVlRhYmxlU3BlY3RydW0uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkM4MTUxNDE0MDUxMThEMDBDRkE2MDMgLyogVlRhYmxlU3Bl
Y3RydW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVlRhYmxlU3BlY3RydW0u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2NzYxMkE2Rjc4MzAwNjREMTIz
IC8qIE9TQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE9TQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MDAwNjkyMTJBNkY5RTEw
MDY0RDEyMyAvKiBPU0FsbG9jYXRvclBvc2l4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IE9TQWxsb2NhdG9yUG9zaXguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xNjcyLDYgKzE2ODAsMTAgQEAKIAkJNjUxNjJFRjEwOEU2QTIx
QzAwNzU1NkNEIC8qIHd0ZiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCisJCQkJMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUu
aCAqLywKKwkJCQkwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAg
Ki8sCisJCQkJMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLywK
KwkJCQkwRjk2M0IyNjEzRjc1Mzk5MDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJ
MDZEMzU4QTAwREFBRDlDNDAwM0IxNzRFIC8qIG1hYyAqLywKIAkJCQk4NjU2NTczRTExNUJFMzUy
MDAyOTFGNDAgLyogdGV4dCAqLywKIAkJCQlFMTk1Njc4RDA5RTdDRjEyMDBCODlEMTMgLyogdW5p
Y29kZSAqLywKQEAgLTIyNTQsNiArMjI2NiwxMCBAQAogCQkJCTg2RDNCMkM0MTAxNTZCREUwMDI4
NjVFNyAvKiBBUk1Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ1MEZEREVB
OTgwMDA2RUVDMiAvKiBBUk12N0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMz
RTYwRTE2RjVDRDAwQjM0NDYwIC8qIEFycmF5Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzQjI3MTNGNzUzQkIwMDAyRDlCMiAvKiBS
ZWRCbGFja1RyZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYw
MyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MEExNDA0M0JG
NTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTYzQjM4MTNGQzZGRTkwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovLApA
QCAtMjU0Niw3ICsyNTYyLDYgQEAKIAkJCQlBNzg0QTI2NDExRDE2NjIyMDA1Nzc2QUMgLyogU3lu
dGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkMwRTE2RjVDRDAwQjM0NDYw
IC8qIFRDUGFja2VkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZEMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBUQ1BhZ2VNYXAuaCBpbiBIZWFkZXJzICovLAotCQkJCUJDMThDNDZFMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2RjBF
MTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcx
RURFQTYxMTY5RTBEMzAwNUU0MjYyIC8qIFRlcm1pbmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUYzQkQzMUVEMTI2NzM1NzcwMDY1NDY3RiAvKiBUZXh0UG9zaXRpb24uaCBpbiBIZWFkZXJzICov
LApAQCAtMjg2Niw2ICsyODgxLDcgQEAKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAorCQkJCTBGOTYz
QjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3Vw
cG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiA5NDM1
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIp
CiAKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgpAQCAt
MTI4LDE5ICsxMjksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gQXNz
ZW1ibGVyTGFiZWwobV9pbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkKiBleGVjdXRh
YmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0
b3IpCisgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJs
ZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1faW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHZv
aWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2MoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CisgICAg
ICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xvYmFsRGF0
YS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKGdsb2JhbERhdGEsIG1faW5kZXgpOwogCiAg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAg
ICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgbV9pbmRl
eCk7CisgICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0
LT5zdGFydCgpLCByZXN1bHQtPnNpemVJbkJ5dGVzKCkpOwogCi0gICAgICAgICAgICByZXR1cm4g
bWVtY3B5KHJlc3VsdCwgbV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgbWVtY3B5KHJl
c3VsdC0+c3RhcnQoKSwgbV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
cmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCBsYWJlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiA5NDM1NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwyMiArNjksOCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6
Ci0gICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVy
KiBtYXNtLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCkKLSAgICAg
ICAgOiBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZSgw
KQotICAgICAgICAsIG1fY29kZSgwKQotICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCi0gICAg
ICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
LCBtX2NvbXBsZXRlZChmYWxzZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgbGlua0NvZGUoKTsK
LSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9B
c3NlbWJsZXIqIG1hc20sIEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAg
OiBtX2V4ZWN1dGFibGVQb29sKGFsbG9jYXRvci5wb29sRm9yU2l6ZShnbG9iYWxEYXRhLCBtYXNt
LT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpKSkKLSAgICAgICAgLCBtX3NpemUoMCkKKyAgICBMaW5r
QnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisg
ICAgICAgIDogbV9zaXplKDApCiAgICAgICAgICwgbV9jb2RlKDApCiAgICAgICAgICwgbV9hc3Nl
bWJsZXIobWFzbSkKICAgICAgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCkBAIC0xODUs
MTQgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24o
KTsKIAotICAgICAgICByZXR1cm4gQ29kZVJlZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBvb2wsIG1f
c2l6ZSk7Ci0gICAgfQotCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluYWxpemVDb2RlQWRkZW5k
dW0oKQotICAgIHsKLSAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwotCi0gICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZVJlZiht
X2V4ZWN1dGFibGVNZW1vcnkpOwogICAgIH0KIAogICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExh
YmVsIGxhYmVsKQpAQCAtMjMyLDE0ICsyMTEsMTkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IEFTU0VSVCghbV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQotICAgICAg
ICBtX2NvZGUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xv
YmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1l
bW9yeSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxE
YXRhKTsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fY29kZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKICAgICAg
ICAgbV9zaXplID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgICAg
IEFTU0VSVChtX2NvZGUpOwogI2Vsc2UKICAgICAgICAgc2l6ZV90IGluaXRpYWxTaXplID0gbV9h
c3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7Ci0gICAgICAgIG1fY29kZSA9ICh1aW50
OF90KiltX2V4ZWN1dGFibGVQb29sLT5hbGxvYygqbV9nbG9iYWxEYXRhLCBpbml0aWFsU2l6ZSk7
Ci0gICAgICAgIGlmICghbV9jb2RlKQorICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2ds
b2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fZ2xvYmFsRGF0YSwgaW5p
dGlhbFNpemUpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKTsKKyAgICAgICAgQVNTRVJUKG1fY29kZSk7CiAgICAgICAgIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6Om1ha2VXcml0YWJsZShtX2NvZGUsIGluaXRpYWxTaXplKTsKICAgICAgICAgdWludDhf
dCogaW5EYXRhID0gKHVpbnQ4X3QqKW1fYXNzZW1ibGVyLT51bmxpbmtlZENvZGUoKTsKICAgICAg
ICAgdWludDhfdCogb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7
CkBAIC0yOTcsNyArMjgxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBqdW1wc1RvTGluay5jbGVh
cigpOwogICAgICAgICBtX3NpemUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsK
LSAgICAgICAgbV9leGVjdXRhYmxlUG9vbC0+dHJ5U2hyaW5rKG1fY29kZSwgaW5pdGlhbFNpemUs
IG1fc2l6ZSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7CiAK
ICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwogICAgICAgICBkdW1wTGlua1N0YXRpc3RpY3MobV9j
b2RlLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKQEAgLTM2Niw3ICszNTAsNyBAQCBwcml2YXRlOgog
ICAgIH0KICNlbmRpZgogICAgIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRh
YmxlUG9vbDsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxl
TWVtb3J5OwogICAgIHNpemVfdCBtX3NpemU7CiAgICAgdm9pZCogbV9jb2RlOwogICAgIE1hY3Jv
QXNzZW1ibGVyKiBtX2Fzc2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gOTQz
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMjIgKzE5OSw1OSBAQCBwcml2YXRlOgogLy8g
cG9pbnRlciB0byB0aGUgY29kZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3
aXRoaW4gd2hpY2ggaXQKIC8vIHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgeworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCdzIGRh
bmdlcm91cyBlbm91Z2ggdGhhdCB3ZSB3YW50IHVzZXMgb2YgaXQKKyAgICAvLyB0byBiZSBlYXN5
IHRvIGZpbmQgLSBoZW5jZSB0aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cuCisgICAgZXhw
bGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
KQorICAgICAgICA6IG1fY29kZVB0cihjb2RlUHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Y29kZVB0cik7CisgICAgfQorCiBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkK
LSAgICAgICAgOiBtX3NpemUoMCkKICAgICB7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQ
b29sLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX2V4
ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IGV4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnkt
PnN0YXJ0KCkpCisgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVNZW1vcnkp
CisgICAgeworICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7
CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOworICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgb25seSB3aGVu
IHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcworICAgIC8v
IGFscmVhZHkgYmVpbmcga2VwdCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGlj
YWxseSB0aGlzIG1lYW5zCisgICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgorICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZU1lbW9y
eUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9leGVjdXRhYmxlTWVtb3J5LmdldCgpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlUHRyOwor
ICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAo
IW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9leGVjdXRhYmxlTWVtb3J5LT5zaXplSW5CeXRlcygpOwogICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvZGVQdHI7IH0KIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4
ZWN1dGFibGVQb29sOwotICAgIHNpemVfdCBtX3NpemU7Citwcml2YXRlOgorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBtX2NvZGVQdHI7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZp
c2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTUsOSArMTU5NSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGIubV9vZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICB2b2lk
KiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29s
KiBhbGxvY2F0b3IpCisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVj
dXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAg
ICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAg
IH0KIAogICAgIHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBt
X2Zvcm1hdHRlci5yZXdpbmRUb0xhYmVsKHJld2luZFRvKTsgfQpAQCAtMTkzOSw5ICsxOTM5LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCk7IH0KICAgICAgICAgdm9pZCog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogCi0gICAgICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBl
eGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0
b3IpOworICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERh
dGEpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxh
YmVsIHJld2luZFRvKSB7IG1fYnVmZmVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5
NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5B
QkxFKEpJVCkKICAgICAgICAgSklUQ29kZSYgZ2V0SklUQ29kZSgpIHsgcmV0dXJuIG1faXNDb25z
dHJ1Y3RvciA/IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ29uc3RydWN0
KCkgOiBvd25lckV4ZWN1dGFibGUoKS0+Z2VuZXJhdGVkSklUQ29kZUZvckNhbGwoKTsgfQotICAg
ICAgICBFeGVjdXRhYmxlUG9vbCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2Rl
KCkuZ2V0RXhlY3V0YWJsZVBvb2woKTsgfQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
KiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVN
ZW1vcnkoKTsgfQogI2VuZGlmCiAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSogb3duZXJFeGVj
dXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9vd25lckV4ZWN1dGFibGUuZ2V0KCk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lv
biA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNs
YXNzIFN0cnVjdHVyZUNoYWluOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVmIENvZGVM
b2NhdGlvbkxhYmVsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlw
ZTsKKyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGU7CiAKICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBv
cF9nZXRfYnlfaWRfc2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVj
dGlvbiB0byBob2xkIGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gOTQz
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgfSBwdXRCeUlkUmVwbGFjZTsKICAgICAgICAgfSB1OwogCi0gICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHN0dWJSb3V0aW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
c3R1YlJvdXRpbmU7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9u
OwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW47CiAgICAgfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05MjgsNyArOTI4LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29t
cGlsZShKSVRDb2RlJiBlbnRyeQogICAgIC8vIEdlbmVyYXRlIHRoZSBib2R5IG9mIHRoZSBwcm9n
cmFtLgogICAgIGNvbXBpbGVCb2R5KCk7CiAgICAgLy8gTGluawotICAgIExpbmtCdWZmZXIgbGlu
a0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxv
Y2F0b3IpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsK
ICAgICBsaW5rKGxpbmtCdWZmZXIpOwogICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZp
bmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQpOwogfQpAQCAtOTg2LDcgKzk4Niw3IEBAIHZv
aWQgSklUQ29tcGlsZXI6OmNvbXBpbGVGdW5jdGlvbihKSVRDb2QKIAogCiAgICAgLy8gPT09IExp
bmsgPT09Ci0gICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1f
Z2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgCiAg
ICAgLy8gRklYTUU6IHN3aXRjaCB0aGUgcmVnaXN0ZXIgZmlsZSBjaGVjayAmIGFyaXR5IGNoZWNr
IG92ZXIgdG8gREZHT3BlcnRhaW9uIHN0eWxlIGNhbGxzLCBub3QgSklUIHN0dWJzLgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCShyZXZpc2lvbiA5NDM1NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIHZvaWQgbGlua1Jlc3RvcmVTY3JhdGNoKExpbmtC
dWZmZQogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNj
cmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8u
Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93
Q2FzZSkpOwogfQogCi1zdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFp
biogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xv
d0Nhc2VMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwmIHN0dWJSb3V0aW5lKQorc3RhdGljIHZvaWQg
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0
dWJJbmZvJiBzdHViSW5mbywgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIHNp
emVfdCBvZmZzZXQsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBDb2RlTG9jYXRpb25MYWJlbCBzdWNj
ZXNzTGFiZWwsIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlTGFiZWwsIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiYgc3R1YlJvdXRpbmUpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0g
JmV4ZWMtPmdsb2JhbERhdGEoKTsKIApAQCAtMTMzLDExICsxMzMsMTEgQEAgc3RhdGljIHZvaWQg
Z2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YgogICAgIAogICAgIGVtaXRSZXN0b3JlU2NyYXRj
aChzdHViSml0LCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc2NyYXRjaEdQUiwgc3VjY2VzcywgZmFp
bCwgZmFpbHVyZUNhc2VzKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9i
YWxEYXRhLCAmc3R1YkppdCwgZXhlYy0+Y29kZUJsb2NrKCktPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAK
ICAgICBsaW5rUmVzdG9yZVNjcmF0Y2gocGF0Y2hCdWZmZXIsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMsIHN1Y2Nlc3NMYWJlbCwgc2xvd0Nhc2VMYWJl
bCk7CiAgICAgCi0gICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRl
bmR1bSgpOworICAgIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9
CiAKIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
YmFzZVZhbHVlLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIGNvbnN0IFByb3BlcnR5
U2xvdCYgc2xvdCwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQpAQCAtMTc2LDE1ICsxNzYs
MTQgQEAgc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAK
ICAgICAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNo
LCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAg
ICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVC
bG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Kmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgCiAgICAgICAgIGxpbmtSZXN0b3JlU2Ny
YXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN0dWJJbmZvLCBzdWNjZXNz
LCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAg
ICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgc3R1YkluZm8u
c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCiAgICAg
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBlbnRyeUxhYmVsKTsKKyAgICAgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0QnlJZCk7CiAgICAg
ICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIzMSw3ICsyMzAsNyBAQCBzdGF0aWMgYm9v
bCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKICAgICAKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBzdHViSW5mby5zdHViUm91
dGluZSk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlk
UHJvdG9CdWlsZExpc3QpOwogICAgIAogICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmds
b2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90
eXBlQ2hhaW4pOwpAQCAtMzI0LDcgKzMyMyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJ
RExpc3QoRXhlY1N0YXQKICAgICAKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBhY2Nl
c3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgQVNTRVJUKCFzdHViSW5mby5zdHViUm91dGlu
ZSk7Ci0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCksIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9s
eW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5k
ZWx0YUNhbGxUb1Nsb3dDYXNlKSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0
cnVjdHVyZS5nZXQoKSk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkU2VsZkxpc3QocG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBwb2x5bW9y
cGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVM
aXN0OwpAQCAtMzUwLDIxICszNDksMjEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlz
dChFeGVjU3RhdAogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc3VjY2Vz
cyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAKLSAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQsIGNvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7
CisgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsK
ICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9s
eW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lOwor
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxh
YmVsKHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91
dGluZS5jb2RlKCkpOwogICAgICAgICBBU1NFUlQoISFsYXN0UHJvdG9CZWdpbik7CiAgICAgICAg
IAogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKHdyb25nU3RydWN0LCBsYXN0UHJvdG9CZWdpbik7
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAg
IAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJS
b3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIAotICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmdsb2JhbERhdGEs
IGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7Cisg
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVj
dHVyZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgICAgICAKICAgICAgICAg
aWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDA4LDcgKzQwNyw3IEBAIHN0YXRpYyBib29sIHRyeUJ1
aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAoc3R1YkluZm8uYWNjZXNzVHlwZSA9PSBh
Y2Nlc3NfZ2V0X2J5X2lkX2NoYWluKSB7CiAgICAgICAgIEFTU0VSVCghIXN0dWJJbmZvLnN0dWJS
b3V0aW5lKTsKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUsIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmJh
c2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZvLnUuZ2V0QnlJZENoYWluLmNoYWluLmdl
dCgpKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
OwogICAgICAgICBzdHViSW5mby5pbml0R2V0QnlJZFByb3RvTGlzdChwb2x5bW9ycGhpY1N0cnVj
dHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChzdHViSW5mby5hY2Nl
c3NUeXBlID0gYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0KTsKQEAgLTQxOSwxOCArNDE4LDE4
IEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdChFeGUKICAgICBpZiAobGlz
dEluZGV4IDwgUE9MWU1PUlBISUNfTElTVF9DQUNIRV9TSVpFKSB7CiAgICAgICAgIHN0dWJJbmZv
LnUuZ2V0QnlJZFByb3RvTGlzdC5saXN0U2l6ZSsrOwogICAgICAgICAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxp
c3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgICAgIEFT
U0VSVCghIWxhc3RQcm90b0JlZ2luKTsKIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRy
eUxhYmVsOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAg
ICAgIAotICAgICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBs
YXN0UHJvdG9CZWdpbiwgZW50cnlMYWJlbCk7CisgICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFj
Y2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBz
dHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBzdHViUm91dGluZSk7CiAgICAg
ICAgIAotICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5z
ZXQoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWws
IHN0cnVjdHVyZSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0
SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgICAgIAogICAgICAgICBDb2RlTG9jYXRpb25KdW1w
IGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIg
cmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJ
WkUgLSAxKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNTQ4LDE4ICs1NDcsMTcgQEAg
c3RhdGljIGJvb2wgdHJ5Q2FjaGVQdXRCeUlEKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICAgICAgc3VjY2VzcyA9IHN0dWJKaXQuanVtcCgpOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1
YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0KTsKICAgICAgICAgICAgIHBhdGNo
QnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSk7CiAgICAgICAgICAgICBpZiAobmVlZFRv
UmVzdG9yZVNjcmF0Y2gpCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJl
LCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0
YUNhbGxUb1Nsb3dDYXNlKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcGF0
Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5s
YWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAg
IAotICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGlu
ZSA9IGVudHJ5TGFiZWw7CisgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8uc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlUHV0QnlJZEZ1bmN0
aW9uKHNsb3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8u
aW5pdFB1dEJ5SWRUcmFuc2l0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDQyICsyNywxMTEgQEAKIAogI2lu
Y2x1ZGUgIkV4ZWN1dGFibGVBbGxvY2F0b3IuaCIKIAorI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FM
TE9DQVRPUl9ERU1BTkQpCisjaW5jbHVkZSA8d3RmL01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRl
IDx3dGYvUGFnZVJlc2VydmF0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZNVGFncy5oPgorI2VuZGlm
CisKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCit1c2luZyBuYW1lc3BhY2UgV1RGOworCiBuYW1l
c3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCiAK
LUV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1BbGxvYyhz
aXplX3Qgc2l6ZSkKK2NsYXNzIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3I6IHB1YmxpYyBNZXRh
QWxsb2NhdG9yIHsKK3B1YmxpYzoKKyAgICBEZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAg
ICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlvbnMgdG8g
MzIgYnl0ZXMKKyAgICB7CisgICAgICAgIC8vIERvbid0IHByZWFsbG9jYXRlIGFueSBtZW1vcnkg
aGVyZS4KKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+RGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRv
cigpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzZXJ2YXRpb25z
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgcmVzZXJ2YXRpb25zLmF0KGkpLmRlYWxsb2NhdGUo
KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3Bh
Y2Uoc2l6ZV90JiBudW1QYWdlcykKKyAgICB7CisgICAgICAgIHNpemVfdCBuZXdOdW1QYWdlcyA9
ICgoKG51bVBhZ2VzICogcGFnZVNpemUoKSArIEpJVF9BTExPQ0FUT1JfTEFSR0VfQUxMT0NfU0la
RSAtIDEpIC8gSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFICogSklUX0FMTE9DQVRPUl9M
QVJHRV9BTExPQ19TSVpFKSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQobmV3TnVtUGFnZXMgPj0gbnVtUGFnZXMpOworICAgICAgICAKKyAg
ICAgICAgbnVtUGFnZXMgPSBuZXdOdW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIFBhZ2VSZXNl
cnZhdGlvbiByZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZShudW1QYWdlcyAq
IHBhZ2VTaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09M
X1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgaWYgKCFyZXNlcnZhdGlvbikKKyAgICAgICAgICAg
IENSQVNIKCk7CisgICAgICAgIAorICAgICAgICByZXNlcnZhdGlvbnMuYXBwZW5kKHJlc2VydmF0
aW9uKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiByZXNlcnZhdGlvbi5iYXNlKCk7CisgICAg
fQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQorICAg
IHsKKyAgICAgICAgT1NBbGxvY2F0b3I6OmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgpLCBFWEVDVVRB
QkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKQorICAgIHsKKyAgICAgICAgT1NBbGxvY2F0b3I6
OmRlY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8UGFnZVJlc2VydmF0aW9uLCAxNj4gcmVzZXJ2YXRpb25zOworfTsKKworc3RhdGljIERlbWFu
ZEV4ZWN1dGFibGVBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKwordm9pZCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCkKIHsKLSAgICBQYWdlQWxsb2NhdGlvbiBhbGxvY2F0
aW9uID0gUGFnZUFsbG9jYXRpb246OmFsbG9jYXRlKHNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENv
ZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKLSAgICBpZiAoIWFsbG9j
YXRpb24pCi0gICAgICAgIENSQVNIKCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRpb247CisgICAgQVNT
RVJUKCFhbGxvY2F0b3IpOworICAgIGFsbG9jYXRvciA9IG5ldyBEZW1hbmRFeGVjdXRhYmxlQWxs
b2NhdG9yKCk7CiB9CiAKLXZvaWQgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoRXhlY3V0
YWJsZVBvb2w6OkFsbG9jYXRpb24mIGFsbG9jYXRpb24pCitFeGVjdXRhYmxlQWxsb2NhdG9yOjpF
eGVjdXRhYmxlQWxsb2NhdG9yKEpTR2xvYmFsRGF0YSYpCiB7Ci0gICAgYWxsb2NhdGlvbi5kZWFs
bG9jYXRlKCk7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7CiB9CiAKIGJvb2wgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCisK
IGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6dW5kZXJNZW1vcnlQcmVzc3VyZSgpCiB7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQotICAgIAorCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBz
aXplSW5CeXRlcykKK3sKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0
ID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKIHNpemVf
dCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQogewotICAgIHJldHVy
biAwOwotfSAKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOworfQogCisj
aWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7Cit9CiAj
ZW5kaWYKIAorI2VuZGlmIC8vIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9ERU1BTkQpCisK
ICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKIAogI2lmIE9TKFdJTkRPV1MpIHx8
IE9TKFNZTUJJQU4pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1
dGFibGVBbGxvY2F0b3IuaAkocmV2aXNpb24gOTQzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2luY2x1ZGUgPHN0ZGRlZi5oPiAvLyBmb3IgcHRyZGlmZl90CiAjaW5jbHVkZSA8bGlt
aXRzPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisjaW5jbHVkZSA8d3RmL01ldGFBbGxv
Y2F0b3JIYW5kbGUuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUFsbG9jYXRpb24uaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0xMDIs
MTIwICsxMDMsMjcgQEAgaW5saW5lIHNpemVfdCByb3VuZFVwQWxsb2NhdGlvblNpemUoc2l6ZQog
CiBuYW1lc3BhY2UgSlNDIHsKIAotY2xhc3MgRXhlY3V0YWJsZVBvb2wgOiBwdWJsaWMgUmVmQ291
bnRlZDxFeGVjdXRhYmxlUG9vbD4gewotcHVibGljOgotI2lmIEVOQUJMRShFWEVDVVRBQkxFX0FM
TE9DQVRPUl9ERU1BTkQpCi0gICAgdHlwZWRlZiBQYWdlQWxsb2NhdGlvbiBBbGxvY2F0aW9uOwot
I2Vsc2UKLSAgICBjbGFzcyBBbGxvY2F0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFsbG9j
YXRpb24odm9pZCogYmFzZSwgc2l6ZV90IHNpemUpCi0gICAgICAgICAgICA6IG1fYmFzZShiYXNl
KQotICAgICAgICAgICAgLCBtX3NpemUoc2l6ZSkKLSAgICAgICAgewotICAgICAgICB9Ci0gICAg
ICAgIHZvaWQqIGJhc2UoKSB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICAgICAgc2l6ZV90IHNpemUo
KSB7IHJldHVybiBtX3NpemU7IH0KLSAgICAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiAhbV9iYXNlOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICB2b2lkKiBtX2Jhc2U7Ci0g
ICAgICAgIHNpemVfdCBtX3NpemU7Ci0gICAgfTsKLSNlbmRpZgotICAgIHR5cGVkZWYgVmVjdG9y
PEFsbG9jYXRpb24sIDI+IEFsbG9jYXRpb25MaXN0OwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RXhlY3V0YWJsZVBvb2w+IGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBu
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFeGVjdXRhYmxlUG9vbChnbG9i
YWxEYXRhLCBuKSk7Ci0gICAgfQotCi0gICAgdm9pZCogYWxsb2MoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBzaXplX3QgbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2ZyZWVQdHIgPD0gbV9l
bmQpOwotCi0gICAgICAgIC8vIFJvdW5kICduJyB1cCB0byBhIG11bHRpcGxlIG9mIHdvcmQgc2l6
ZTsgaWYgYWxsIGFsbG9jYXRpb25zIGFyZSBvZgotICAgICAgICAvLyB3b3JkIHNpemVkIHF1YW50
aXRpZXMsIHRoZW4gYWxsIHN1YnNlcXVlbnQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGlnbmVkLgot
ICAgICAgICBuID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHNpemVvZih2b2lkKikpOwotCi0g
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG4pIDwgKG1fZW5kIC0gbV9mcmVlUHRy
KSkgewotICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gbV9mcmVlUHRyOwotICAgICAgICAgICAg
bV9mcmVlUHRyICs9IG47Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gSW5zdWZmaWNpZW50IHNwYWNlIHRvIGFsbG9jYXRlIGluIHRoZSBleGlzdGlu
ZyBwb29sCi0gICAgICAgIC8vIHNvIHdlIG5lZWQgYWxsb2NhdGUgaW50byBhIG5ldyBwb29sCi0g
ICAgICAgIHJldHVybiBwb29sQWxsb2NhdGUoZ2xvYmFsRGF0YSwgbik7Ci0gICAgfQotICAgIAot
ICAgIHZvaWQgdHJ5U2hyaW5rKHZvaWQqIGFsbG9jYXRpb24sIHNpemVfdCBvbGRTaXplLCBzaXpl
X3QgbmV3U2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2Nh
dGlvbikgKyBvbGRTaXplICE9IG1fZnJlZVB0cikKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGFsbG9jYXRpb24pICsgcm91bmRVcEFs
bG9jYXRpb25TaXplKG5ld1NpemUsIHNpemVvZih2b2lkKikpOwotICAgIH0KLQotICAgIH5FeGVj
dXRhYmxlUG9vbCgpCi0gICAgewotICAgICAgICBBbGxvY2F0aW9uTGlzdDo6aXRlcmF0b3IgZW5k
ID0gbV9wb29scy5lbmQoKTsKLSAgICAgICAgZm9yIChBbGxvY2F0aW9uTGlzdDo6aXRlcmF0b3Ig
cHRyID0gbV9wb29scy5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIEV4
ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKCpwdHIpOwotICAgIH0KLQotICAgIHNpemVfdCBh
dmFpbGFibGUoKSBjb25zdCB7IHJldHVybiAobV9wb29scy5zaXplKCkgPiAxKSA/IDAgOiBtX2Vu
ZCAtIG1fZnJlZVB0cjsgfQotCi1wcml2YXRlOgotICAgIHN0YXRpYyBBbGxvY2F0aW9uIHN5c3Rl
bUFsbG9jKHNpemVfdCBuKTsKLSAgICBzdGF0aWMgdm9pZCBzeXN0ZW1SZWxlYXNlKEFsbG9jYXRp
b24mIGFsbG9jKTsKLQotICAgIEV4ZWN1dGFibGVQb29sKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBu
KTsKLQotICAgIHZvaWQqIHBvb2xBbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgbik7Ci0K
LSAgICBjaGFyKiBtX2ZyZWVQdHI7Ci0gICAgY2hhciogbV9lbmQ7Ci0gICAgQWxsb2NhdGlvbkxp
c3QgbV9wb29sczsKLX07Cit0eXBlZGVmIFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZSBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlOwogCiBjbGFzcyBFeGVjdXRhYmxlQWxsb2NhdG9yIHsKICAgICBlbnVt
IFByb3RlY3Rpb25TZXR0aW5nIHsgV3JpdGFibGUsIEV4ZWN1dGFibGUgfTsKIAogcHVibGljOgot
ICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQotICAgIHsK
LSAgICAgICAgaWYgKGlzVmFsaWQoKSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9v
bCA9IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJH
RV9BTExPQ19TSVpFKTsKLSNpZiAhRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBDUkFTSCgpOwotI2VuZGlmCi0gICAgfQorICAgIEV4ZWN1dGFibGVBbGxvY2F0
b3IoSlNHbG9iYWxEYXRhJik7CisgICAgCisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUFsbG9j
YXRvcigpOwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCB1
bmRlck1lbW9yeVByZXNzdXJlKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BS
T0ZJTEUpCisgICAgc3RhdGljIHZvaWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAgc3RhdGlj
IHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KKyNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxFeGVjdXRh
YmxlUG9vbD4gcG9vbEZvclNpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikK
LSAgICB7Ci0gICAgICAgIC8vIFRyeSB0byBmaXQgaW4gdGhlIGV4aXN0aW5nIHNtYWxsIGFsbG9j
YXRvcgotICAgICAgICBBU1NFUlQobV9zbWFsbEFsbG9jYXRpb25Qb29sKTsKLSAgICAgICAgaWYg
KG4gPCBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgpKQotICAgICAgICAgICAgcmV0
dXJuIG1fc21hbGxBbGxvY2F0aW9uUG9vbDsKLQotICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBp
cyBsYXJnZSwgd2UganVzdCBwcm92aWRlIGEgdW5zaGFyZWQgYWxsb2NhdG9yCi0gICAgICAgIGlm
IChuID4gSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKQotICAgICAgICAgICAgcmV0dXJu
IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbik7Ci0KLSAgICAgICAgLy8gQ3Jl
YXRlIGEgbmV3IGFsbG9jYXRvcgotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IHBvb2wg
PSBFeGVjdXRhYmxlUG9vbDo6Y3JlYXRlKGdsb2JhbERhdGEsIEpJVF9BTExPQ0FUT1JfTEFSR0Vf
QUxMT0NfU0laRSk7Ci0KLSAgICAgICAgLy8gSWYgdGhlIG5ldyBhbGxvY2F0b3Igd2lsbCByZXN1
bHQgaW4gbW9yZSBmcmVlIHNwYWNlIHRoYW4gaW4KLSAgICAgICAgLy8gdGhlIGN1cnJlbnQgc21h
bGwgYWxsb2NhdG9yLCB0aGVuIHdlIHdpbGwgdXNlIGl0IGluc3RlYWQKLSAgICAgICAgaWYgKChw
b29sLT5hdmFpbGFibGUoKSAtIG4pID4gbV9zbWFsbEFsbG9jYXRpb25Qb29sLT5hdmFpbGFibGUo
KSkKLSAgICAgICAgICAgIG1fc21hbGxBbGxvY2F0aW9uUG9vbCA9IHBvb2w7Ci0gICAgICAgIHJl
dHVybiBwb29sLnJlbGVhc2UoKTsKLSAgICB9CisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBhbGxvY2F0ZShKU0dsb2JhbERhdGEmLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwog
CiAjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgc3RhdGljIHZvaWQgbWFr
ZVdyaXRhYmxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZSkKQEAgLTM0OCw1MCArMjU2LDkgQEAg
cHJpdmF0ZToKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMg
dm9pZCByZXByb3RlY3RSZWdpb24odm9pZCosIHNpemVfdCwgUHJvdGVjdGlvblNldHRpbmcpOwog
I2VuZGlmCi0KLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fc21hbGxBbGxvY2F0aW9uUG9v
bDsKIH07CiAKLWlubGluZSBFeGVjdXRhYmxlUG9vbDo6RXhlY3V0YWJsZVBvb2woSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0gcm91
bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIEFsbG9jYXRpb24gbWVtID0g
c3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIW1lbS5iYXNlKCkpIHsKLSAgICAgICAg
cmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIG1lbSA9IHN5c3Rl
bUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgfQotICAgIG1fcG9vbHMuYXBwZW5kKG1lbSk7Ci0gICAg
bV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1lbS5iYXNlKCkpOwotICAgIGlmICghbV9m
cmVlUHRyKQotICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAgICBtX2Vu
ZCA9IG1fZnJlZVB0ciArIGFsbG9jU2l6ZTsKLSAgICBkZXByZWNhdGVkVHVybk9mZlZlcmlmaWVy
KCk7Ci19Ci0KLWlubGluZSB2b2lkKiBFeGVjdXRhYmxlUG9vbDo6cG9vbEFsbG9jYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4pCi17Ci0gICAgc2l6ZV90IGFsbG9jU2l6ZSA9
IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShuLCBwYWdlU2l6ZSgpKTsKLSAgICAKLSAgICBBbGxvY2F0
aW9uIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgaWYgKCFyZXN1bHQuYmFz
ZSgpKSB7Ci0gICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOwotICAg
ICAgICByZXN1bHQgPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgICAgICBpZiAoIXJlc3Vs
dC5iYXNlKCkpCi0gICAgICAgICAgICBDUkFTSCgpOyAvLyBGYWlsZWQgdG8gYWxsb2NhdGUKLSAg
ICB9Ci0gICAgCi0gICAgQVNTRVJUKG1fZW5kID49IG1fZnJlZVB0cik7Ci0gICAgaWYgKChhbGxv
Y1NpemUgLSBuKSA+IHN0YXRpY19jYXN0PHNpemVfdD4obV9lbmQgLSBtX2ZyZWVQdHIpKSB7Ci0g
ICAgICAgIC8vIFJlcGxhY2UgYWxsb2NhdGlvbiBwb29sCi0gICAgICAgIG1fZnJlZVB0ciA9IHN0
YXRpY19jYXN0PGNoYXIqPihyZXN1bHQuYmFzZSgpKSArIG47Ci0gICAgICAgIG1fZW5kID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgYWxsb2NTaXplOwotICAgIH0KLQotICAg
IG1fcG9vbHMuYXBwZW5kKHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdC5iYXNlKCk7Ci19Ci0K
LX0KK30gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkgJiYgRU5BQkxF
KEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkocmV2aXNpb24gOTQz
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEwICszMSw5IEBACiAKICNpbmNsdWRl
IDxlcnJuby5oPgogCi0jaW5jbHVkZSAiVENTcGluTG9jay5oIgogI2luY2x1ZGUgPHN5cy9tbWFu
Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8d3RmL0FWTFRyZWUuaD4KKyNpbmNs
dWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24u
aD4KICNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CiAKQEAgLTQ2LDQ4MSArNDUsMTA1IEBAIHVzaW5n
IG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotI2RlZmluZSBUd29Qb3co
bikgKDF1bGwgPDwgbikKLQotY2xhc3MgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHsKLXB1Ymxp
YzoKLSAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6ZV90IHNpemUsIHNpemVfdCBibG9j
a1NpemUsIHVuc2lnbmVkIGxvZzJCbG9ja1NpemUpCi0gICAgICAgIDogbV9ibG9ja1NpemUoYmxv
Y2tTaXplKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGJsb2NrU2l6ZSA9PSBUd29Qb3cobG9nMkJs
b2NrU2l6ZSkpOwotCi0gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyBu
ZWVkZWQgdG8gaG9sZCBzaXplLgotICAgICAgICBzaXplX3QgYmxvY2tNYXNrID0gYmxvY2tTaXpl
IC0gMTsKLSAgICAgICAgbV9ibG9ja0NvdW50ID0gKHNpemUgKyBibG9ja01hc2spID4+IGxvZzJC
bG9ja1NpemU7Ci0KLSAgICAgICAgLy8gQWxpZ24gdG8gdGhlIHNtYWxsZXN0IHBvd2VyIG9mIHR3
byA+PSBtX2Jsb2NrQ291bnQuCi0gICAgICAgIG1fYmxvY2tBbGlnbm1lbnQgPSAxOwotICAgICAg
ICB3aGlsZSAobV9ibG9ja0FsaWdubWVudCA8IG1fYmxvY2tDb3VudCkKLSAgICAgICAgICAgIG1f
YmxvY2tBbGlnbm1lbnQgKz0gbV9ibG9ja0FsaWdubWVudDsKLSAgICB9Ci0KLSAgICBzaXplX3Qg
YmxvY2tTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja1NpemU7IH0KLSAgICBzaXplX3QgYmxv
Y2tDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tDb3VudDsgfQotICAgIHNpemVfdCBibG9j
a0FsaWdubWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tBbGlnbm1lbnQ7IH0KLQotICAgIHNp
emVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2Jsb2NrU2l6ZSAqIG1fYmxvY2tD
b3VudDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgc2l6ZV90IG1fYmxvY2tTaXplOwotICAgIHNp
emVfdCBtX2Jsb2NrQ291bnQ7Ci0gICAgc2l6ZV90IG1fYmxvY2tBbGlnbm1lbnQ7Ci19OwotCi10
ZW1wbGF0ZTx1bnNpZ25lZCBsb2cyRW50cmllcz4KLWNsYXNzIEFsbG9jYXRpb25UYWJsZUxlYWYg
ewotICAgIHR5cGVkZWYgdWludDY0X3QgQml0RmllbGQ7Ci0KLXB1YmxpYzoKLSAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbG9nMlN1YnJlZ2lvblNpemUgPSAxMjsgLy8gMl4xMiA9PSBwYWdlc2l6
ZQotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyUmVnaW9uU2l6ZSA9IGxvZzJTdWJyZWdp
b25TaXplICsgbG9nMkVudHJpZXM7Ci0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHN1YnJlZ2lv
blNpemUgPSBUd29Qb3cobG9nMlN1YnJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCBzaXpl
X3QgcmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyUmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGVudHJpZXMgPSBUd29Qb3cobG9nMkVudHJpZXMpOwotICAgIENPTVBJTEVfQVNT
RVJUKGVudHJpZXMgPD0gKHNpemVvZihCaXRGaWVsZCkgKiA4KSwgQWxsb2NhdGlvblRhYmxlTGVh
Zl9lbnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVMZWFmKCkK
LSAgICAgICAgOiBtX2FsbG9jYXRlZCgwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlv
blRhYmxlTGVhZigpCi0gICAgewotICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0K
LSAgICBzaXplX3QgYWxsb2NhdGUoQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3Mp
Ci0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpID09IHN1YnJlZ2lv
blNpemUpOwotICAgICAgICBBU1NFUlQoIWlzRnVsbCgpKTsKLQotICAgICAgICBzaXplX3QgYWxp
Z25tZW50ID0gc2l6ZUNsYXNzLmJsb2NrQWxpZ25tZW50KCk7Ci0gICAgICAgIHNpemVfdCBjb3Vu
dCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAgIC8vIFVzZSB0aGlzIG1hc2sgdG8g
Y2hlY2sgZm9yIHNwYW5zIG9mIGZyZWUgYmxvY2tzLgotICAgICAgICBCaXRGaWVsZCBtYXNrID0g
KCgxdWxsIDw8IGNvdW50KSAtIDEpIDw8IChhbGlnbm1lbnQgLSBjb3VudCk7Ci0KLSAgICAgICAg
Ly8gU3RlcCBpbiB1bml0cyBvZiBhbGlnbm1lbnQgc2l6ZS4KLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGVudHJpZXM7IGkgKz0gYWxpZ25tZW50KSB7Ci0gICAgICAgICAgICBpZiAo
IShtX2FsbG9jYXRlZCAmIG1hc2spKSB7Ci0gICAgICAgICAgICAgICAgbV9hbGxvY2F0ZWQgfD0g
bWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8
PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9
IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQot
Ci0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNz
JiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgp
ID09IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAgIHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+
IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxv
Y2tDb3VudCgpOwotICAgICAgICBCaXRGaWVsZCBtYXNrID0gKCgxdWxsIDw8IGNvdW50KSAtIDEp
IDw8IGVudHJ5OwotCi0gICAgICAgIEFTU0VSVCgobV9hbGxvY2F0ZWQgJiBtYXNrKSA9PSBtYXNr
KTsKLSAgICAgICAgbV9hbGxvY2F0ZWQgJj0gfm1hc2s7Ci0gICAgfQotCi0gICAgYm9vbCBpc0Vt
cHR5KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV9hbGxvY2F0ZWQ7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc0Z1bGwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICF+bV9hbGxvY2F0ZWQ7Ci0gICAg
fQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdp
b25TaXplOwotICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xh
c3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25U
YWJsZVNpemVDbGFzcyhzaXplLCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0g
ICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0
ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAg
ICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwOHg6IFslMDE2bGx4XVxuIiwgKGludClw
YXJlbnRPZmZzZXQsIG1fYWxsb2NhdGVkKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBCaXRGaWVsZCBtX2FsbG9jYXRlZDsKLX07Ci0KLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVs
PgotY2xhc3MgTGF6eUFsbG9jYXRpb25UYWJsZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW50cmllcyA9IE5leHRMZXZlbDo6ZW50cmllczsKLQot
ICAgIExhenlBbGxvY2F0aW9uVGFibGUoKQotICAgICAgICA6IG1fcHRyKDApCi0gICAgewotICAg
IH0KLQotICAgIH5MYXp5QWxsb2NhdGlvblRhYmxlKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChp
c0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVT
aXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIGlmICghbV9wdHIpCi0gICAgICAg
ICAgICBtX3B0ciA9IG5ldyBOZXh0TGV2ZWwoKTsKLSAgICAgICAgcmV0dXJuIG1fcHRyLT5hbGxv
Y2F0ZShzaXplQ2xhc3MpOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRpb24s
IEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmZyZWUobG9jYXRpb24sIHNpemVDbGFzcyk7Ci0g
ICAgICAgIGlmIChtX3B0ci0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBkZWxldGUgbV9wdHI7
Ci0gICAgICAgICAgICBtX3B0ciA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlz
RW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX3B0cjsKLSAgICB9Ci0KLSAgICBib29s
IGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wdHIgJiYgbV9wdHItPmlzRnVsbCgp
OwotICAgIH0KLQotICAgIHN0YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1
cm4gTmV4dExldmVsOjpzaXplKCk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQg
ZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkKLSAgICB7
Ci0gICAgICAgIEFTU0VSVChtX3B0cik7Ci0gICAgICAgIG1fcHRyLT5kdW1wKHBhcmVudE9mZnNl
dCwgaW5kZW50KTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVT
aXplQ2xhc3MgY2xhc3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IE5leHRMZXZlbDo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBO
ZXh0TGV2ZWwqIG1fcHRyOwotfTsKLQotdGVtcGxhdGU8Y2xhc3MgTmV4dExldmVsLCB1bnNpZ25l
ZCBsb2cyRW50cmllcz4KLWNsYXNzIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSB7Ci0gICAgdHlw
ZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IE5leHRMZXZlbDo6bG9nMlJlZ2lvblNpemU7Ci0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lvblNpemUg
KyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9uU2l6ZSA9
IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCByZWdp
b25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZW50
cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnlf
ZW50cmllc19maXRfaW5fQml0RmllbGQpOwotCi0gICAgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5
KCkKLSAgICAgICAgOiBtX2Z1bGwoMCkKLSAgICAgICAgLCBtX2hhc1N1YmFsbG9jYXRpb24oMCkK
LSAgICB7Ci0gICAgfQotCi0gICAgfkFsbG9jYXRpb25UYWJsZURpcmVjdG9yeSgpCi0gICAgewot
ICAgICAgICBBU1NFUlQoaXNFbXB0eSgpKTsKLSAgICB9Ci0KLSAgICBzaXplX3QgYWxsb2NhdGUo
QWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NF
UlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotICAgICAgICBBU1NF
UlQoIWlzRnVsbCgpKTsKLQotICAgICAgICBpZiAoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDwgc3Vi
cmVnaW9uU2l6ZSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2ksIGJpdCArPSBiaXQpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9mdWxsICYgYml0KQotICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgICAgICBzaXplX3QgbG9jYXRpb24gPSBtX3N1YmFsbG9jYXRpb25z
W2ldLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9
IG5vdEZvdW5kKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgZGlkbid0IGFscmVh
ZHkgaGF2ZSBhIHN1YnJlZ2lvbiwgaXQgZG9lcyBub3chCi0gICAgICAgICAgICAgICAgICAgIG1f
aGFzU3ViYWxsb2NhdGlvbiB8PSBiaXQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE1pcnJvciB0
aGUgc3ViYWxsb2NhdGlvbidzIGZ1bGwgYml0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9z
dWJhbGxvY2F0aW9uc1tpXS5pc0Z1bGwoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVs
bCB8PSBiaXQ7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSAqIHN1YnJlZ2lvblNpemUp
IHwgbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gQSBibG9jayBpcyBh
bGxvY2F0ZWQgaWYgZWl0aGVyIGl0IGlzIGZ1bGx5IGFsbG9jYXRlZCBvciBjb250YWlucyBzdWJh
bGxvY2F0aW9ucy4KLSAgICAgICAgQml0RmllbGQgYWxsb2NhdGVkID0gbV9mdWxsIHwgbV9oYXNT
dWJhbGxvY2F0aW9uOwotCi0gICAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzaXplQ2xhc3MuYmxv
Y2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291
bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBjaGVjayBmb3Igc3BhbnMgb2YgZnJl
ZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkg
PDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAvLyBTdGVwIGluIHVuaXRzIG9mIGFs
aWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsg
aSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICghKGFsbG9jYXRlZCAmIG1hc2spKSB7
Ci0gICAgICAgICAgICAgICAgbV9mdWxsIHw9IG1hc2s7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IChpICsgKGFsaWdubWVudCAtIGNvdW50KSkgPDwgbG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBtYXNrIDw8PSBhbGlnbm1lbnQ7Ci0gICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShzaXplX3QgbG9jYXRp
b24sIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKHNpemVDbGFzcy5ibG9ja1NpemUoKSA8PSBzdWJyZWdpb25TaXplKTsKLQotICAgICAg
ICBzaXplX3QgZW50cnkgPSBsb2NhdGlvbiA+PiBsb2cyU3VicmVnaW9uU2l6ZTsKLQotICAgICAg
ICBpZiAoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDwgc3VicmVnaW9uU2l6ZSkgewotICAgICAgICAg
ICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBlbnRyeTsKLSAgICAgICAgICAgIG1fc3ViYWxsb2Nh
dGlvbnNbZW50cnldLmZyZWUobG9jYXRpb24gJiAoc3VicmVnaW9uU2l6ZSAtIDEpLCBzaXplQ2xh
c3MpOwotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHN1YmFsbG9jYXRpb24gaXMgbm93IGVt
cHR5LgotICAgICAgICAgICAgaWYgKG1fc3ViYWxsb2NhdGlvbnNbZW50cnldLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICBtX2hhc1N1YmFsbG9jYXRpb24gJj0gfmJpdDsKLSAgICAgICAgICAg
IC8vIE5vIG5lZWQgdG8gY2hlY2ssIGl0IGNsZWFybHkgaXNuJ3QgZnVsbCBhbnkgbW9yZSEKLSAg
ICAgICAgICAgIG1fZnVsbCAmPSB+Yml0OwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
c2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgICAgIEJpdEZp
ZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkgPDwgZW50cnk7Ci0gICAgICAgICAgICBB
U1NFUlQoKG1fZnVsbCAmIG1hc2spID09IG1hc2spOwotICAgICAgICAgICAgQVNTRVJUKCEobV9o
YXNTdWJhbGxvY2F0aW9uICYgbWFzaykpOwotICAgICAgICAgICAgbV9mdWxsICY9IH5tYXNrOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBpc0VtcHR5KCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAhKG1fZnVsbCB8IG1faGFzU3ViYWxsb2NhdGlvbik7Ci0gICAgfQotCi0gICAgYm9vbCBp
c0Z1bGwoKQotICAgIHsgICAKLSAgICAgICAgcmV0dXJuICF+bV9mdWxsOwotICAgIH0KLQotICAg
IHN0YXRpYyBzaXplX3Qgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gcmVnaW9uU2l6ZTsK
LSAgICB9Ci0KLSAgICBzdGF0aWMgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIGNsYXNzRm9yU2l6
ZShzaXplX3Qgc2l6ZSkKLSAgICB7Ci0gICAgICAgIGlmIChzaXplIDwgc3VicmVnaW9uU2l6ZSkg
ewotICAgICAgICAgICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IE5leHRM
ZXZlbDo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemVDbGFzcy5zaXpl
KCkgPCBOZXh0TGV2ZWw6OnNpemUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2l6ZUNsYXNz
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Moc2l6
ZSwgc3VicmVnaW9uU2l6ZSwgbG9nMlN1YnJlZ2lvblNpemUpOwotICAgIH0KLQotI2lmbmRlZiBO
REVCVUcKLSAgICB2b2lkIGR1bXAoc2l6ZV90IHBhcmVudE9mZnNldCA9IDAsIHVuc2lnbmVkIGlu
ZGVudCA9IDApCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZW50
OyArK2kpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgICAiKTsKLSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIlMDh4OiBbIiwgKGludClwYXJlbnRPZmZzZXQpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgKytpKSB7Ci0gICAgICAgICAgICBCaXRGaWVs
ZCBiaXQgPSAxdWxsIDw8IGk7Ci0gICAgICAgICAgICBjaGFyIGMgPSBtX2hhc1N1YmFsbG9jYXRp
b24gJiBiaXQKLSAgICAgICAgICAgICAgICA/IChtX2Z1bGwgJiBiaXQgPyAnTicgOiAnbicpCi0g
ICAgICAgICAgICAgICAgOiAobV9mdWxsICYgYml0ID8gJ0YnIDogJy0nKTsKLSAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiJWMiLCBjKTsKLSAgICAgICAgfQotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIl1cbiIpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVz
OyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAg
ICAgIHNpemVfdCBvZmZzZXQgPSBwYXJlbnRPZmZzZXQgfCAoc3VicmVnaW9uU2l6ZSAqIGkpOwot
ICAgICAgICAgICAgaWYgKG1faGFzU3ViYWxsb2NhdGlvbiAmIGJpdCkKLSAgICAgICAgICAgICAg
ICBtX3N1YmFsbG9jYXRpb25zW2ldLmR1bXAob2Zmc2V0LCBpbmRlbnQgKyAxKTsKLSAgICAgICAg
fQotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIE5leHRMZXZlbCBtX3N1YmFsbG9jYXRp
b25zW2VudHJpZXNdOwotICAgIC8vIFN1YnJlZ2lvbnMgZXhpc3QgaW4gb25lIG9mIGZvdXIgc3Rh
dGVzOgotICAgIC8vICgxKSBlbXB0eSAoYm90aCBiaXRzIGNsZWFyKQotICAgIC8vICgyKSBmdWxs
eSBhbGxvY2F0ZWQgYXMgYSBzaW5nbGUgYWxsb2NhdGlvbiAobV9mdWxsIHNldCkKLSAgICAvLyAo
MykgcGFydGlhbGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9jYXRpb25zIChtX2hhc1N1YmFs
bG9jYXRpb24gc2V0KQotICAgIC8vICg0KSBmdWxseSBhbGxvY2F0ZWQgdGhyb3VnaCBzdWJhbGxv
Y2F0aW9ucyAoYm90aCBiaXRzIHNldCkKLSAgICBCaXRGaWVsZCBtX2Z1bGw7Ci0gICAgQml0Rmll
bGQgbV9oYXNTdWJhbGxvY2F0aW9uOwotfTsKLQotCi10eXBlZGVmIEFsbG9jYXRpb25UYWJsZUxl
YWY8Nj4gUGFnZVRhYmxlczI1NktCOwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8
UGFnZVRhYmxlczI1NktCLCA2PiBQYWdlVGFibGVzMTZNQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRh
YmxlRGlyZWN0b3J5PExhenlBbGxvY2F0aW9uVGFibGU8UGFnZVRhYmxlczE2TUI+LCAxPiBQYWdl
VGFibGVzMzJNQjsKLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5PExhenlBbGxvY2F0
aW9uVGFibGU8UGFnZVRhYmxlczE2TUI+LCA2PiBQYWdlVGFibGVzMUdCOwotCiAjaWYgQ1BVKEFS
TSkKLXR5cGVkZWYgUGFnZVRhYmxlczE2TUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3RhdGlj
IGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTYgKiAxMDI0ICogMTAyNDsKICNlbGlmIENQ
VShYODZfNjQpCi10eXBlZGVmIFBhZ2VUYWJsZXMxR0IgRml4ZWRWTVBvb2xQYWdlVGFibGVzOwor
c3RhdGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMTAyNCAqIDEwMjQgKiAxMDI0Owog
I2Vsc2UKLXR5cGVkZWYgUGFnZVRhYmxlczMyTUIgRml4ZWRWTVBvb2xQYWdlVGFibGVzOworc3Rh
dGljIGNvbnN0IHNpemVfdCBmaXhlZFBvb2xTaXplID0gMzIgKiAxMDI0ICogMTAyNDsKICNlbmRp
ZgogCi0KLWNsYXNzIEZpeGVkVk1Qb29sQWxsb2NhdG9yCi17CitjbGFzcyBGaXhlZFZNUG9vbEV4
ZWN1dGFibGVBbGxvY2F0b3I6IHB1YmxpYyBNZXRhQWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAgICBG
aXhlZFZNUG9vbEFsbG9jYXRvcigpCisgICAgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICAgICAgOiBNZXRhQWxsb2NhdG9yKDMyKSAvLyByb3VuZCB1cCBhbGwgYWxsb2NhdGlv
bnMgdG8gMzIgYnl0ZXMKICAgICB7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMjU2S0I6OnNp
emUoKSA9PSAyNTYgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMxNk1COjpzaXpl
KCkgPT0gMTYgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMzJNQjo6
c2l6ZSgpID09IDMyICogMTAyNCAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczFH
Qjo6c2l6ZSgpID09IDEwMjQgKiAxMDI0ICogMTAyNCk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlv
biA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKEZpeGVkVk1Qb29sUGFn
ZVRhYmxlczo6c2l6ZSgpLCBPU0FsbG9jYXRvcjo6SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVf
UE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24gPSBQYWdlUmVzZXJ2
YXRpb246OnJlc2VydmVXaXRoR3VhcmRQYWdlcyhmaXhlZFBvb2xTaXplLCBPU0FsbG9jYXRvcjo6
SlNKSVRDb2RlUGFnZXMsIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CiAjaWYgIUVO
QUJMRShJTlRFUlBSRVRFUikKLSAgICAgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIGlmICgh
bV9yZXNlcnZhdGlvbikKICAgICAgICAgICAgIENSQVNIKCk7CiAjZW5kaWYKKyAgICAgICAgaWYg
KG1fcmVzZXJ2YXRpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jlc2VydmF0aW9uLnNpemUo
KSA9PSBmaXhlZFBvb2xTaXplKTsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKG1fcmVz
ZXJ2YXRpb24uYmFzZSgpLCBtX3Jlc2VydmF0aW9uLnNpemUoKSk7CisgICAgICAgIH0KICAgICB9
Ci0gCi0gICAgRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2Moc2l6ZV90IHJlcXVlc3Rl
ZFNpemUpCi0gICAgewotICAgICAgICBBU1NFUlQocmVxdWVzdGVkU2l6ZSk7Ci0gICAgICAgIEFs
bG9jYXRpb25UYWJsZVNpemVDbGFzcyBzaXplQ2xhc3MgPSBjbGFzc0ZvclNpemUocmVxdWVzdGVk
U2l6ZSk7Ci0gICAgICAgIHNpemVfdCBzaXplID0gc2l6ZUNsYXNzLnNpemUoKTsKLSAgICAgICAg
QVNTRVJUKHNpemUpOwotCi0gICAgICAgIGlmIChzaXplID49IEZpeGVkVk1Qb29sUGFnZVRhYmxl
czo6c2l6ZSgpKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9u
KDAsIDApOwotICAgICAgICBpZiAobV9wYWdlcy5pc0Z1bGwoKSkKLSAgICAgICAgICAgIHJldHVy
biBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbigwLCAwKTsKLQotICAgICAgICBzaXplX3Qgb2Zm
c2V0ID0gbV9wYWdlcy5hbGxvY2F0ZShzaXplQ2xhc3MpOwotICAgICAgICBpZiAob2Zmc2V0ID09
IG5vdEZvdW5kKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9u
KDAsIDApOwotCi0gICAgICAgIHZvaWQqIHBvaW50ZXIgPSBvZmZzZXRUb1BvaW50ZXIob2Zmc2V0
KTsKLSAgICAgICAgbV9yZXNlcnZhdGlvbi5jb21taXQocG9pbnRlciwgc2l6ZSk7Ci0gICAgICAg
IHJldHVybiBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbihwb2ludGVyLCBzaXplKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGZyZWUoRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gYWxsb2NhdGlvbikK
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6
ZV90JikKICAgICB7Ci0gICAgICAgIHZvaWQqIHBvaW50ZXIgPSBhbGxvY2F0aW9uLmJhc2UoKTsK
LSAgICAgICAgc2l6ZV90IHNpemUgPSBhbGxvY2F0aW9uLnNpemUoKTsKLSAgICAgICAgQVNTRVJU
KHNpemUpOwotCi0gICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocG9pbnRlciwgc2l6ZSk7
Ci0KLSAgICAgICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9y
U2l6ZShzaXplKTsKLSAgICAgICAgQVNTRVJUKHNpemVDbGFzcy5zaXplKCkgPT0gc2l6ZSk7Ci0g
ICAgICAgIG1fcGFnZXMuZnJlZShwb2ludGVyVG9PZmZzZXQocG9pbnRlciksIHNpemVDbGFzcyk7
CisgICAgICAgIC8vIFdlJ3JlIG9wZXJhdGluZyBpbiBhIGZpeGVkIHBvb2wsIHNvIG5ldyBhbGxv
Y2F0aW9uIGlzIGFsd2F5cyBwcm9oaWJpdGVkLgorICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0K
LSAgICBzaXplX3QgYWxsb2NhdGVkKCkKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVl
ZFBhZ2Uodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBtX3Jlc2VydmF0aW9uLmNv
bW1pdHRlZCgpOworICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwYWdlLCBwYWdlU2l6ZSgp
KTsKICAgICB9Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCiAgICAgewotICAgICAgICByZXR1cm4g
ISFtX3Jlc2VydmF0aW9uOworICAgICAgICBtX3Jlc2VydmF0aW9uLmRlY29tbWl0KHBhZ2UsIHBh
Z2VTaXplKCkpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xh
c3MgY2xhc3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgcmV0dXJuIEZpeGVk
Vk1Qb29sUGFnZVRhYmxlczo6Y2xhc3NGb3JTaXplKHNpemUpOwotICAgIH0KLQotICAgIHZvaWQq
IG9mZnNldFRvUG9pbnRlcihzaXplX3Qgb2Zmc2V0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVzZXJ2
YXRpb24uYmFzZSgpKSArIG9mZnNldCk7Ci0gICAgfQotCi0gICAgc2l6ZV90IHBvaW50ZXJUb09m
ZnNldCh2b2lkKiBwb2ludGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8aW50cHRyX3Q+KHBvaW50ZXIpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNl
cnZhdGlvbi5iYXNlKCkpOwotICAgIH0KLQogICAgIFBhZ2VSZXNlcnZhdGlvbiBtX3Jlc2VydmF0
aW9uOwotICAgIEZpeGVkVk1Qb29sUGFnZVRhYmxlcyBtX3BhZ2VzOwogfTsKIAorc3RhdGljIEZp
eGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOwogCi1zdGF0aWMgU3Bpbkxv
Y2sgc3BpbmxvY2sgPSBTUElOTE9DS19JTklUSUFMSVpFUjsKLXN0YXRpYyBGaXhlZFZNUG9vbEFs
bG9jYXRvciogYWxsb2NhdG9yID0gMDsKLQordm9pZCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0
aWFsaXplQWxsb2NhdG9yKCkKK3sKKyAgICBBU1NFUlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2Nh
dG9yID0gbmV3IEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcigpOworfQogCi1zaXplX3Qg
RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNvdW50KCkKK0V4ZWN1dGFibGVBbGxv
Y2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBTcGluTG9j
a0hvbGRlciBsb2NrSG9sZGVyKCZzcGlubG9jayk7Ci0gICAgcmV0dXJuIGFsbG9jYXRvciA/IGFs
bG9jYXRvci0+YWxsb2NhdGVkKCkgOiAwOwotfSAgIAorICAgIEFTU0VSVChhbGxvY2F0b3IpOwor
fQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQoKSBjb25zdAogewotICAgIFNw
aW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAgaWYgKCFhbGxvY2F0b3Ip
Ci0gICAgICAgIGFsbG9jYXRvciA9IG5ldyBGaXhlZFZNUG9vbEFsbG9jYXRvcigpOwotICAgIHJl
dHVybiBhbGxvY2F0b3ItPmlzVmFsaWQoKTsKKyAgICByZXR1cm4gISFhbGxvY2F0b3ItPmJ5dGVz
UmVzZXJ2ZWQoKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVBy
ZXNzdXJlKCkKIHsKLSAgICAvLyBUZWNobmljYWxseSB3ZSBzaG91bGQgdGFrZSB0aGUgc3BpbiBs
b2NrIGhlcmUsIGJ1dCB3ZSBkb24ndCBjYXJlIGlmIHdlIGdldCBzdGFsZSBkYXRhLgotICAgIC8v
IFRoaXMgaXMgb25seSByZWFsbHkgYSBoZXVyaXN0aWMgYW55d2F5LgotICAgIHJldHVybiBhbGxv
Y2F0b3IgJiYgKGFsbG9jYXRvci0+YWxsb2NhdGVkKCkgPiAoRml4ZWRWTVBvb2xQYWdlVGFibGVz
OjpzaXplKCkgLyAyKSk7CisgICAgTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBzdGF0aXN0aWNz
ID0gYWxsb2NhdG9yLT5jdXJyZW50U3RhdGlzdGljcygpOworICAgIHJldHVybiBzdGF0aXN0aWNz
LmJ5dGVzQWxsb2NhdGVkID4gc3RhdGlzdGljcy5ieXRlc1Jlc2VydmVkIC8gMjsKIH0KIAotRXhl
Y3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNpemVf
dCBzaXplKQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBFeGVjdXRhYmxlQWxs
b2NhdG9yOjphbGxvY2F0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBzaXplSW5C
eXRlcykKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAg
IEFTU0VSVChhbGxvY2F0b3IpOwotICAgIHJldHVybiBhbGxvY2F0b3ItPmFsbG9jKHNpemUpOwor
ICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFs
bG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICBjaGFyIGJ1
ZlsyN107CisgICAgICAgIHRpbWVfdCBjdXJyZW50VGltZTsKKyAgICAgICAgdGltZSgmY3VycmVu
dFRpbWUpOworICAgICAgICBjdGltZV9yKCZjdXJyZW50VGltZSwgYnVmKTsKKyAgICAgICAgcHJp
bnRmKCIlczogSSdtIGdpdmluZyBoZXIgYWxsIHNoZSdzIGdvdCwgQ2FwdGFpbiFcbiIsIGJ1Zik7
CisgICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICBy
ZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgaWYgKCFy
ZXN1bHQpCisgICAgICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJl
bGVhc2UoKTsKK30KKworc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVD
b3VudCgpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAot
dm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2Nh
dGlvbiYgYWxsb2NhdGlvbikgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2
b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hv
bGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAg
IGFsbG9jYXRvci0+ZnJlZShhbGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxl
KCk7CiB9CisjZW5kaWYKIAogfQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRp
ZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEpJVENvZGUg
SklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxl
LmlzRW1wdHkoKSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2
UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0
Y2ggdGFibGVzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUo
KTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0MzU1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIx
LDIwICsyMjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNv
bXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1
cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJs
ZVBvb2wsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1w
b2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJh
bXBvbGluZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNl
SklUKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIGppdC5w
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhleGVjdXRhYmxlUG9vbCwgZ2xvYmFs
RGF0YSwgdHJhbXBvbGluZXMpOworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGls
ZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7CiAgICAgICAg
IH0KIAotICAgICAgICBzdGF0aWMgQ29kZVB0ciBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQ
b29sLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxl
Q1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1
bmMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIENvZGVQdHIoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gQ29kZVJlZigpOwogICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAg
ICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGV4ZWN1dGFibGVQ
b29sLCBnbG9iYWxEYXRhLCBmdW5jKTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNv
bXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmMpOwogICAgICAgICB9CiAKICAgICAg
ICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVibG9jaywgU3Ry
dWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwpAQCAtMjc0LDkgKzI3NCw5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0
dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0
IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKTsKICAg
ICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJ
bmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0
dXJlQ2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KTsK
IAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0
cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIFRy
YW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKTsKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhK
U0dsb2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZh
dGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0g
ZmFsc2UpOwotICAgICAgICBDb2RlUHRyIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNz
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRh
LCBOYXRpdmVGdW5jdGlvbiBmdW5jKTsKKyAgICAgICAgQ29kZVJlZiBwcml2YXRlQ29tcGlsZUNU
SU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpOwogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CkBAIC0xMDM0LDcg
KzEwMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2VuZGlmCiAgICAgICAgIFdlYWtS
YW5kb20gbV9yYW5kb21HZW5lcmF0b3I7Ci0gICAgICAgIHN0YXRpYyBDb2RlUHRyIHN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIAogICAg
IGlubGluZSB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTQz
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtNTYsMTIgKzU2LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgb3Bl
cmF0b3IgISgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9j
b2RlLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gIW1fcmVmOwogICAg
ICAgICB9CiAKICAgICAgICAgQ29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX3JlZi5tX2NvZGU7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYu
Y29kZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRo
ZSBvZmZzZXQgaW4gYnl0ZXMgb2YgJ3BvaW50ZXJJbnRvQ29kZScgaW50bwpAQCAtNjksNyArNjks
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gYmxvY2sgb2YgY29kZS4gIEl0IGlzIEFT
U0VSVGVkIHRoYXQgbm8gY29kZWJsb2NrID40Z2IgaW4gc2l6ZS4KICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0T2Yodm9pZCogcG9pbnRlckludG9Db2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
bnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0Nv
ZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYubV9jb2RlLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOworICAgICAgICAgICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlckludG9Db2RlKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFTU0VSVChz
dGF0aWNfY2FzdDxpbnRwdHJfdD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkpID09IHJl
c3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7
CiAgICAgICAgIH0KQEAgLTc3LDI0ICs3NywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ly8gRXhlY3V0ZSB0aGUgY29kZSEKICAgICAgICAgaW5saW5lIEpTVmFsdWUgZXhlY3V0ZShSZWdp
c3RlckZpbGUqIHJlZ2lzdGVyRmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBK
U1ZhbHVlOjpkZWNvZGUoY3RpVHJhbXBvbGluZShtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJl
c3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSkpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQg
PSBKU1ZhbHVlOjpkZWNvZGUoY3RpVHJhbXBvbGluZShtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UoKSwgZ2xvYmFsRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bERhdGEtPmV4Y2VwdGlvbiA/IGpzTnVsbCgpIDogcmVzdWx0OwogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCogc3RhcnQoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9j
b2RlLmRhdGFMb2NhdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKS5kYXRh
TG9jYXRpb24oKTsKICAgICAgICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplKCkKICAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsK
LSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX3NpemU7CisgICAgICAgICAgICBBU1NFUlQobV9y
ZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVm
LnNpemUoKTsKICAgICAgICAgfQogCi0gICAgICAgIEV4ZWN1dGFibGVQb29sKiBnZXRFeGVjdXRh
YmxlUG9vbCgpCisgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGdldEV4ZWN1dGFibGVN
ZW1vcnkoKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVjdXRhYmxl
UG9vbC5nZXQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCk7
CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIEpJVFR5cGUgaml0VHlwZSgpCkBAIC0xMDQs
OSArMTA0LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgLy8gSG9zdCBmdW5jdGlvbnMg
YXJlIGEgYml0IHNwZWNpYWw7IHRoZXkgaGF2ZSBhIG1fY29kZSBwb2ludGVyIGJ1dCB0aGV5CiAg
ICAgICAgIC8vIGRvIG5vdCBpbmRpdmlkdWxseSByZWYgdGhlIGV4ZWN1dGFibGUgcG9vbCBjb250
YWluaW5nIHRoZSB0cmFtcG9saW5lLgotICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rp
b24oQ29kZVB0ciBjb2RlKQorICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29k
ZVJlZiBjb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRh
dGFMb2NhdGlvbigpLCAwLCAwLCBIb3N0Q2FsbFRodW5rKTsKKyAgICAgICAgICAgIHJldHVybiBK
SVRDb2RlKGNvZGUsIEhvc3RDYWxsVGh1bmspOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBj
bGVhcigpCkBAIC0xMTYsOCArMTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgIHByaXZhdGU6Ci0gICAgICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVj
dXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBvb2wsIHNpemVfdCBzaXplLCBKSVRUeXBlIGppdFR5cGUp
Ci0gICAgICAgICAgICA6IG1fcmVmKGNvZGUsIGV4ZWN1dGFibGVQb29sLCBzaXplKQorICAgICAg
ICBKSVRDb2RlKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1l
bW9yeSwgSklUVHlwZSBqaXRUeXBlKQorICAgICAgICAgICAgOiBtX3JlZihleGVjdXRhYmxlTWVt
b3J5KQogICAgICAgICAgICAgLCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewogICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bj
b2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAotdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorUGFzc1JlZlB0cjxF
eGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1w
b2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJh
bXBvbGluZXMpCiB7CiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgTGFiZWwg
c29mdE1vZEJlZ2luID0gYWxpZ24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2Vz
M0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAg
ICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVw
IGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEt
PmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2Fz
ZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmso
Y2FsbENvbXBpbGVDY29uc3RydWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENv
bXBpbGUpKTsKIAogICAgIENvZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7Ci0gICAgKmV4ZWN1dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7
CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBm
aW5hbENvZGUuZXhlY3V0YWJsZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1
YWxDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOwogICAg
IHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGlu
ZUF0KHZpcnR1YWxDb25zdHJ1Y3RCZWdpbik7CkBAIC0xNzUsNiArMTc1LDggQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRf
TU9EVUxPKQogICAgIHRyYW1wb2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gcGF0Y2hCdWZmZXIudHJh
bXBvbGluZUF0KHNvZnRNb2RCZWdpbik7CiAjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gZXhlY3V0
YWJsZU1lbW9yeS5yZWxlYXNlKCk7CiB9CiAKIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGls
ZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uc3RydWN0
KQpAQCAtMzEyLDEwICszMTQsOSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDCiAgICAgcmV0dXJuIG5hdGl2ZUNhbGxUaHVuazsKIH0KIAotSklUOjpDb2RlUHRyIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9u
IGZ1bmMpCitKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogewogICAgIENhbGwg
bmF0aXZlQ2FsbDsKLSAgICBMYWJlbCBuYXRpdmVDYWxsVGh1bmsgPSBhbGlnbigpOwogCiAgICAg
ZW1pdFB1dEltbWVkaWF0ZVRvQ2FsbEZyYW1lSGVhZGVyKDAsIFJlZ2lzdGVyRmlsZTo6Q29kZUJs
b2NrKTsKIApAQCAtNDQ3LDEyICs0NDgsMTAgQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElOYXRpdgogICAgIHJldCgpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0
cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVy
cyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzLCBleGVjdXRhYmxlUG9vbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZl
Q2FsbCwgRnVuY3Rpb25QdHIoZnVuYykpOwotICAgIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwotCi0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDYWxsVGh1bmsp
OworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDk0MzU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAK
LXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBU
cmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQog
ewogICAgIC8vICgyKSBUaGUgc2Vjb25kIGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkg
YWNjZXNzIGZvciBzdHJpbmcgbGVuZ3RoCiAgICAgTGFiZWwgc3RyaW5nTGVuZ3RoQmVnaW4gPSBh
bGlnbigpOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG8KICAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCA9IG1ha2VUYWls
UmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMyk7CiAKICAgICAvLyBBbGwgdHJhbXBv
bGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQg
dGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9j
YXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsK
IAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlv
blB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRf
c3RyaW5nX2ZhaWwpKTsKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNvbnN0
cnVjdCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAKICAgICBD
b2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAgICpleGVj
dXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQb29sOworICAgIFJlZlB0cjxFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4ZWN1dGFi
bGVNZW1vcnkoKTsKIAogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsgPSBwYXRj
aEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENhbGxMaW5rQmVnaW4pOwogICAgIHRyYW1wb2xp
bmVzLT5jdGlWaXJ0dWFsQ29uc3RydWN0TGluayA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2
aXJ0dWFsQ29uc3RydWN0TGlua0JlZ2luKTsKQEAgLTE3Myw2ICsxNzMsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2
ZUNhbGwgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKICAgICB0
cmFtcG9saW5lcy0+Y3RpTmF0aXZlQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0
KG5hdGl2ZUNvbnN0cnVjdFRodW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3Ro
VHJhbXBvbGluZSA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChzdHJpbmdMZW5ndGhCZWdpbik7
CisgICAgCisgICAgcmV0dXJuIGV4ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwogfQogCiBKSVQ6
OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgYm9vbCBpc0NvbnN0cnVjdCkKQEAgLTI5MSw5ICsyOTMsOSBAQCBKSVQ6OkxhYmVs
IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAgICAgcmV0dXJuIG5hdGl2ZUNhbGxUaHVu
azsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBh
c3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2
ZUZ1bmN0aW9uKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJu
IGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgcmV0dXJuIENvZGVS
ZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCgpKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDk0MzU1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tZXRob2RfY2hl
Y2soSW5zdHIKICAgICBtX2J5dGVjb2RlT2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5
X2lkKTsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitKSVQ6OkNv
ZGVSZWYgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewogICAgIEpTSW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJl
czsKQEAgLTE5Myw4ICsxOTMsOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0
dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJl
dCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQs
IHBvb2wpOwotICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAgcmV0dXJu
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMzIsNyArMjMyLDcg
QEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9u
Q2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hl
Y2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdU
MCksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0
TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5l
cmF0b3IpKTsKKyAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFu
Y2hUZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
dmFsKSk7CkBAIC01NDEsNyArNTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJ
ZFRyYW5zaXRpbwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsK
ICAgICBDYWxsIGZhaWx1cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKICAgICAKLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5l
eGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0
aW9uUHRyKGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0
X2J5X2lkX2ZhaWwpKTsKICAgICAKQEAgLTU1MCwxMCArNTUwLDkgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2Fs
bHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxs
b2MpKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGUoKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVy
bkFkZHJlc3MsIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9U
cmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHVi
Um91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJs
b2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRk
cmVzcykKQEAgLTYwNiw3ICs2MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuCiAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdU
MSk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29s
KCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAg
ICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJl
IGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVM
b2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
LmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MTcs
MTMgKzYxNiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJh
Y2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxh
dGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFi
ZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFj
ayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChw
YXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJl
cGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0
aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAg
ICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1
dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjY2LDcgKzY2NCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1w
KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlz
LCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGlu
Zm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwg
c2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9
IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRH
ZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTY4NCwxMyArNjgyLDEyIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9CiAKICAgICAvLyBUcmFjayB0aGUgc3R1
YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAg
Q29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFk
ZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAK
ICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBo
b3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBM
b2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZl
cihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBl
bnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVM
b2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKICAgICAv
LyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRv
IGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9w
cm90b19saXN0KSk7CkBAIC03MjMsNyArNzIwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFNlbGZMaXN0KAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2st
PmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0
b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0g
bV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC03
MzEsNyArNzI4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAog
ICAgICAgICB9CiAgICAgfSAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRv
IGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJv
dXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhp
Y1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9y
cGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgp
KTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0
dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRC
eUlkU2xvd0Nhc2VDYWxsKTsKICAgICAKQEAgLTc0MCwxNCArNzM3LDE0IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBi
YWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhl
IHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJl
c3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0
W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAKICAgICAvLyBG
aW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0
byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJy
YW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVs
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNzg3LDcgKzc4NCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAKICAgICBKdW1wIHN1
Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHVi
TGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9
IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAg
ICAgICAgIGlmIChpdGVyLT50bykKQEAgLTc5NSwyMSArNzkyLDIxIEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2Ug
dGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0
aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29k
ZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAx
XS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2Vz
MSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwg
bGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8g
dGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUg
dG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7
CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZp
bmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJy
ZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVy
RXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7
CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJh
bWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91
dGluZSwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vz
c1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwg
Y29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90
IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTQsNyArODUxLDcgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgSnVtcCBzdWNj
ZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1Ykxp
bmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBt
X2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
ICAgICBpZiAoaXRlci0+dG8pCkBAIC04NjIsMjIgKzg1OSwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNP
ZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBi
YWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhl
IHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJl
c3VsdCkpOwogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3
ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1
Y3R1cmUsIGNoYWluKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsKICAgICAKICAgICAvLyBGaW5h
bGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBq
dW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0
dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5j
aFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9j
ayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVs
KHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkQ2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXIm
IGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05
MjEsNyArOTE4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgog
ICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAs
IGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8
Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9j
YWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC05MzUs
MTMgKzkzMiwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJh
Y2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxh
dGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFi
ZWw7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgIAogICAgIC8v
IEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRo
IHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9u
ID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
QnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29k
ZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFi
ZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9u
TGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lk
X2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHJldmlzaW9uIDk0MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIG5hbWVzcGFjZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29k
ZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0lu
dGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC03Nyw4ICs3Nyw4IEBA
IEpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShU
cnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgcG9vbCk7Ci0gICAgcmV0dXJuIHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmaml0KTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKQEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxp
bmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5n
ID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0cihtX2ds
b2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRh
LT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOworICAgIGVtaXROYWtl
ZENhbGwoQ29kZUxvY2F0aW9uTGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hU
ZXN0UHRyKFplcm8sIHJlZ1QwKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVn
VDApOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRf
YnlfdmFsKSk7CkBAIC01NTUsNyArNTU1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0
QnlJZFRyYW5zaXRpbwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUo
KTsKICAgICBDYWxsIGZhaWx1cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0
cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9p
ZF9mYWlsKSk7CiAKQEAgLTU2NCwxMCArNTY0LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
UHV0QnlJZFRyYW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJv
bSwgRnVuY3Rpb25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAg
ICB9CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50
cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGUoKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3Ms
IGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5l
KHJldHVybkFkZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5j
b2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2Rl
QmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAg
LTYxNSw3ICs2MTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
CiAgICAgZW1pdEZhc3RBcml0aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwogICAgIEp1
bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTYyNiwxMyArNjI1LDEyIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNl
dEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBw
YXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBo
ZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5m
by0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Ns
b3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwot
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBh
dGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2Vu
ZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRk
cmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02NzMs
NyArNjcxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAg
IH0gZWxzZQogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdU
MCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0
YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzKTsKIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAt
NjkwLDEzICs2ODgsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0
cgogICAgICAgICB9CiAgICAgfQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRl
ZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJl
bCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91
dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRj
aCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJl
IGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dD
YXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNo
IG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJp
Yy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVz
cywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03MjYsNyAr
NzIzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAg
ICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHJlZ1QwLCByZWdUMCwgc3RydWN0dXJlLCBjYWNoZWRP
ZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29s
KCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAK
ICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3Jk
Pjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgp
OyArK2l0ZXIpIHsKQEAgLTczNiw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkU2VsZkxpc3QoCiAgICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlv
biB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2Fz
ZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1v
cnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNv
ZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4g
PSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0
R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAKQEAgLTc0NSwxNCArNzQyLDE0IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBi
YWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhl
IHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJl
c3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJD
b2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVj
dHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2Nv
ZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUpOwogCiAgICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5
SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9j
b2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlM
YWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRl
eCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3Qg
Y2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc5MSw3ICs3ODgsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1Ykxpbmsp
IHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nh
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04MDEsMjAg
Kzc5OCwyMCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAg
fQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJl
IGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0
dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9y
bSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNz
LCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlk
UHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQo
Km1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwg
c3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5j
b2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg1Nyw3ICs4NTQsNyBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZz
ZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1Ykxpbmsp
IHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nh
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04NjcsMjIg
Kzg2NCwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAg
fQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJl
IGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVM
b2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKIAogICAgIHBhdGNoQnVmZmVy
LmxpbmsoYnVja2V0c09mRmFpbCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2Vz
cyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBw
ZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1
Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdl
dEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBw
cm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0
cnVjdHVyZSwgY2hhaW4pOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTI1
LDcgKzkyMiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAg
ICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9m
ZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2wo
KSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAog
ICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikgewpAQCAtOTQxLDEzICs5MzgsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkp
OwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2ls
bCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91
dGluZSA9IGVudHJ5TGFiZWw7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZSgpOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5l
OwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9m
ZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1
dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlv
bihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3Qp
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5
NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NTcsOCArNzU3LDggQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxE
YXRhKiBnbG9iYQogICAgIGlmICghZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFt
cG9saW5lcyhnbG9iYWxEYXRhLCAmbV9leGVjdXRhYmxlUG9vbCwgJm1fdHJhbXBvbGluZVN0cnVj
dHVyZSk7Ci0gICAgQVNTRVJUKG1fZXhlY3V0YWJsZVBvb2wpOworICAgIG1fZXhlY3V0YWJsZU1l
bW9yeSA9IEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCAmbV90
cmFtcG9saW5lU3RydWN0dXJlKTsKKyAgICBBU1NFUlQoISFtX2V4ZWN1dGFibGVNZW1vcnkpOwog
I2lmIENQVShBUk1fVEhVTUIyKQogICAgIC8vIFVuZm9ydHVuYXRlIHRoZSBhcm0gY29tcGlsZXIg
ZG9lcyBub3QgbGlrZSB0aGUgdXNlIG9mIG9mZnNldG9mIG9uIEpJVFN0YWNrRnJhbWUgKHNpbmNl
IGl0IGNvbnRhaW5zIG5vbiBQT0QgdHlwZXMpLAogICAgIC8vIGFuZCB0aGUgT0JKRUNUX09GRlNF
VE9GIG1hY3JvIGRvZXMgbm90IGFwcGVhciBjb25zdGFudGlzaCBlbm91Z2ggZm9yIGl0IHRvIGJl
IGhhcHB5IHdpdGggaXRzIHVzZSBpbiBDT01QSUxFX0FTU0VSVApAQCAtMTYwOCw3ICsxNjA4LDcg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlm
IChzdHViSW5mby0+YWNjZXNzVHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAg
ICAgICAgIEFTU0VSVCghc3R1YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHlt
b3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qo
Y2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIENv
ZGVMb2NhdGlvbkxhYmVsKCksIHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCkpOworICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3
IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCksIHN0
dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAg
ICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVM
aXN0LCAxKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCA9IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAt
MTYzNCwxMiArMTYzNCwxMiBAQCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBnCiAgICAgc3dpdGNoIChzdHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNz
X2dldF9ieV9pZF9wcm90bzoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZv
LT5zdHViUm91dGluZSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1
cmUuZ2V0KCksIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0
KCkpOwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgp
OworICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYo
KTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVj
dHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRf
Y2hhaW46CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRp
bmUsIHN0dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBz
dHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5mby0+
c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8tPmlu
aXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKQEAgLTM1NzIsMTEg
KzM1NzIsMTEgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRvXwogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b09i
amVjdChjYWxsRnJhbWUpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6
Y3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRv
cikKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgc3RkOjpwYWly
PENUSVN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2Vu
ZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKSk7CisgICAgc3RkOjpwYWlyPENUSVN0dWJN
YXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYoKSk7CiAgICAgaWYgKGVudHJ5LnNlY29uZCkKLSAgICAgICAg
ZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQ
b29sLmdldCgpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRvcihnbG9i
YWxEYXRhKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKIH0KIApAQCAtMzU4NCw3
ICszNTg0LDcgQEAgTmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3Rpbwogewog
ICAgIHN0ZDo6cGFpcjxIb3N0RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkg
PSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRh
YmxlPigpKTsKICAgICBpZiAoISplbnRyeS5maXJzdC0+c2Vjb25kKQotICAgICAgICBlbnRyeS5m
aXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIG1fZXhlY3V0
YWJsZVBvb2wsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxs
SG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25k
LnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBK
SVQ6OmNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24s
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2
ZUNvbnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAgICByZXR1
cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KIApAQCAtMzU5Miw4ICszNTkyLDggQEAg
TmF0aXZlRXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFp
cjxIb3N0RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5j
dGlvblN0dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAg
ICBpZiAoISplbnRyeS5maXJzdC0+c2Vjb25kKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjb2RlID0gZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xvYmFsRGF0
YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAg
ICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFi
bGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgY29kZSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVj
dCgpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGds
b2JhbERhdGEpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIGVudHJ5LmZpcnN0
LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2Jh
bERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0Nv
bnN0cnVjdG9yKSk7CiAgICAgfQogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgp
OwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gOTQz
NTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI5NCw3ICsyOTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGN0aU5hdGl2ZUNvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0
cnVjdHVyZS5jdGlOYXRpdmVDb25zdHJ1Y3Q7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGN0aVNvZnRNb2R1bG8oKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpU29m
dE1vZHVsbzsgfQogCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTdHViKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKKyAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGN0aVN0dWIoSlNHbG9iYWxEYXRhKiwgVGh1bmtHZW5lcmF0
b3IpOwogCiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoSlNHbG9i
YWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0
RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRv
cik7CkBAIC0zMDIsMTEgKzMwMiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBj
bGVhckhvc3RGdW5jdGlvblN0dWJzKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVm
IEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gQ1RJU3R1Yk1h
cDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY+IENUSVN0dWJNYXA7CiAgICAgICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwog
ICAgICAgICB0eXBlZGVmIEhhc2hNYXA8TmF0aXZlRnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0
YWJsZT4gPiBIb3N0RnVuY3Rpb25TdHViTWFwOwogICAgICAgICBPd25QdHI8SG9zdEZ1bmN0aW9u
U3R1Yk1hcD4gbV9ob3N0RnVuY3Rpb25TdHViTWFwOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+IG1fZXhlY3V0YWJsZVBvb2w7CisgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlPiBtX2V4ZWN1dGFibGVNZW1vcnk7CiAKICAgICAgICAgVHJhbXBvbGluZVN0cnVjdHVy
ZSBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmU7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiA5NDM1NSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMCArMzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTcGVj
aWFsaXplZFRodW5rSklUIDogcHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAgICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCisgICAgICAgIFNwZWNpYWxpemVkVGh1bmtKSVQo
aW50IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAg
ICAgIDogbV9leHBlY3RlZEFyZ0NvdW50KGV4cGVjdGVkQXJnQ291bnQpCiAgICAgICAgICAgICAs
IG1fZ2xvYmFsRGF0YShnbG9iYWxEYXRhKQotICAgICAgICAgICAgLCBtX3Bvb2wocG9vbCkKICAg
ICAgICAgewogICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBu
dW1iZXIgb2YgYXJndW1lbnRzCiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gz
MihOb3RFcXVhbCwgQWRkcmVzcyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpBcmd1
bWVudENvdW50ICogKGludClzaXplb2YoUmVnaXN0ZXIpKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVk
QXJnQ291bnQgKyAxKSkpOwpAQCAtMTIzLDEzICsxMjIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICByZXQoKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGZhbGxiYWNrKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmlu
YWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFs
bGJhY2spCiAgICAgICAgIHsKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoZ2xv
YmFsRGF0YSwgdGhpcywgbV9wb29sLmdldCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KG1fZmFpbHVyZXMsIENvZGVMb2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25k
KTsKLSAgICAgICAgICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7
CisgICAgICAgICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAg
IH0KIAogICAgICAgICAvLyBBc3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZw
UmVnaXN0ZXIwIGFzIHRoZSBmaXJzdCBhcmd1bWVudApAQCAtMTYzLDcgKzE2Miw2IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgaW50IG1fZXhwZWN0ZWRBcmdDb3VudDsKICAg
ICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERhdGE7Ci0gICAgICAgIFJlZlB0cjxFeGVjdXRh
YmxlUG9vbD4gbV9wb29sOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWls
dXJlczsKICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4gPiBtX2Nh
bGxzOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjYgKzYzLDI2IEBA
IHN0YXRpYyB2b2lkIGNoYXJUb1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQuYXBwZW5k
RmFpbHVyZShqaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOwor
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIHN0cmluZ0No
YXJMb2FkKGppdCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNo
YXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2Jh
bERhdGEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwg
Z2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJldHVybkpT
Q2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29s
KTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICAvLyBs
b2FkIGNoYXIgY29kZQogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC05MCwxMSArOTAsMTEgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGZyb21DaGFyQ29kZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2Jh
bERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9p
bnRTcXJ0KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxm
TWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAK
ICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVn
VDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShTcGVj
aWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsK
QEAgLTE3OCwxMiArMTc4LDEyIEBAIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZyk7CiBk
ZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihmbG9vcik7CiBkZWZpbmVVbmFyeURvdWJsZU9wV3Jh
cHBlcihjZWlsKTsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsK
KyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIo
Zmxvb3IpIHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJu
SW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygm
aml0KTsKQEAgLTE5NywxMSArMTk3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRo
dW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFi
bGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xv
YmFsRGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKSB8fCAhaml0LnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0
LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRK
dW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpA
QCAtMjIwLDExICsyMjAsMTEgQEAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9Db25z
dGFudAogc3RhdGljIGNvbnN0IGRvdWJsZSBvbmVDb25zdGFudCA9IDEuMDsKIHN0YXRpYyBjb25z
dCBkb3VibGUgbmVnYXRpdmVIYWxmQ29uc3RhbnQgPSAtMC41OwogICAgIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5r
SklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGpzUm91bmQp
IHx8ICFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVt
cDsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7CkBAIC0yMzksMzcgKzIzOSwzNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91
bmRUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1
dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFw
cGVyKGV4cCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpOwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wp
OworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdl
ZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CisgICAgU3Bl
Y2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9y
dHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpj
cmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3Vi
bGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQucmV0dXJuRG91
YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxp
emUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwog
fQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYg
KCFVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+
aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgx
LCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwog
ICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAp
OwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSk7
CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1RodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBv
b2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlm
ICghaml0LnN1cHBvcnRzRG91YmxlQml0b3BzKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsK
ICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAs
IG5vbkludEp1bXApOwogICAgIGppdC5yc2hpZnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QxKTsKQEAgLTI4NiwxMSArMjg2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNU
aHVua0dlbmVyYXRvcigKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0
YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDIsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIsIGds
b2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAg
ICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0LmxvYWREb3Vi
bGUoJm9uZUNvbnN0YW50LCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAgICBqaXQu
bG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuaAkocmV2aXNpb24gOTQzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCArMzEs
MjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiAgICAgY2xh
c3MgSlNHbG9iYWxEYXRhOwogICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0gICAgY2xhc3Mg
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyOworICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsK
IAotICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyICgqVGh1bmtHZW5lcmF0b3IpKEpT
R2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCop
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9t
Q2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwot
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
LCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBv
b2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBs
b2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4
ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCop
OworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKEpT
R2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJB
dFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0MzU1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0
YWJsZUJhc2UgQmFzZTsKIAogI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBOYXRpdmVF
eGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAg
ICAgICAgc3RhdGljIE5hdGl2ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1
bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0
aW9uIGNvbnN0cnVjdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxl
KiBleGVjdXRhYmxlOwogICAgICAgICAgICAgaWYgKCFjYWxsVGh1bmspCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkocmV2aXNpb24gOTQzNTUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0
aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCisj
aW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNs
dWRlICJkdG9hLmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCiAjaW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorI2luY2x1ZGUgImR0b2EuaCIKICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nLmg+CiAKQEAgLTUzLDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlh
bGl6ZVRocmVhZGluZ09uY2UoKQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFsaXpl
KCk7CiAjZW5kaWYKICAgICBKU0dsb2JhbERhdGE6OnN0b3JlVlB0cnMoKTsKKyAgICBFeGVjdXRh
YmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxsb2NhdG9yKCk7CiAjaWYgRU5BQkxFKEpTQ19NVUxU
SVBMRV9USFJFQURTKQogICAgIFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwog
I2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAJKHJldmlzaW9uIDk0MzU1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw2IEBAIEpT
R2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIGVtcHR5TGlzdChu
ZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAsIGV4
ZWN1dGFibGVBbGxvY2F0b3IoKnRoaXMpCi0gICAgLCByZWdleEFsbG9jYXRvcigqdGhpcykKICNl
bmRpZgogICAgICwgbGV4ZXIobmV3IExleGVyKHRoaXMpKQogICAgICwgcGFyc2VyKG5ldyBQYXJz
ZXIpCkBAIC00NDAsNiArNDM5LDkgQEAgdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygp
CiB2b2lkIEpTR2xvYmFsRGF0YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIGludGVycHJldGVyLT5kdW1wU2FtcGxlRGF0YShleGVjKTsKKyNpZiBFTkFCTEUoQVNTRU1C
TEVSKQorICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCk7CisjZW5kaWYKIH0K
IAogdm9pZCBKU0dsb2JhbERhdGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5
NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhl
Y3V0YWJsZUFsbG9jYXRvcjsKLSAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciByZWdleEFsbG9j
YXRvcjsKICNlbmRpZgogCiAjaWYgIUVOQUJMRShKSVQpCkBAIC0yMTYsNyArMjE1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBPd25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBn
ZW5lcmF0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1
Yih0aGlzLCBnZW5lcmF0b3IpOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDk0MzU1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBA
QCBTRVQoV1RGX0hFQURFUlMKICAgICBNYWxsb2Nab25lU3VwcG9ydC5oCiAgICAgTWF0aEV4dHJh
cy5oCiAgICAgTWVzc2FnZVF1ZXVlLmgKKyAgICBNZXRhQWxsb2NhdG9yLmNwcAorICAgIE1ldGFB
bGxvY2F0b3IuaAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUuaAogICAgIE5vbkNvcHlpbmdTb3J0
LmgKICAgICBUaHJlYWRSZXN0cmljdGlvblZlcmlmaWVyLmgKICAgICBOb25jb3B5YWJsZS5oCkBA
IC02OSw2ICs3Miw3IEBAIFNFVChXVEZfSEVBREVSUwogICAgIFBvc3NpYmx5TnVsbC5oCiAgICAg
UmFuZG9tTnVtYmVyLmgKICAgICBSYW5kb21OdW1iZXJTZWVkLmgKKyAgICBSZWRCbGFja1RyZWUu
aAogICAgIFJlZkNvdW50ZWQuaAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oCiAgICAgUmVm
UHRyLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRv
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxv
Y2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90
IHNpemVJbkJ5dGVzKQorICAgIDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICwgbV9zdGFy
dChzdGFydCkKKyAgICAsIG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJU
KGFsbG9jYXRvcik7CisgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc2l6ZUluQnl0ZXMp
OworfQorCitNZXRhQWxsb2NhdG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCit7Cisg
ICAgaWYgKCFtX2FsbG9jYXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7CisgICAgaWYgKG1fc2l6ZUluQnl0ZXMpIHsK
KyAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kobV9zdGFydCwgbV9z
aXplSW5CeXRlcyk7CisgICAgICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFz
ZWRIYW5kbGUobV9zdGFydCwgbV9zaXplSW5CeXRlcyk7CisgICAgfQorfQorCit2b2lkIE1ldGFB
bGxvY2F0b3JIYW5kbGU6OnNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCit7CisgICAgQVNT
RVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbV9h
bGxvY2F0b3IpIHsKKyAgICAgICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9h
bGxvY2F0b3ItPm1fbG9jayk7CisKKyAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5y
b3VuZFVwKG5ld1NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMg
PD0gbV9zaXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKG5ld1NpemVJbkJ5dGVzID09IG1fc2l6
ZUluQnl0ZXMpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB1aW50cHRyX3QgZnJlZVN0YXJ0
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbmV3U2l6ZUluQnl0ZXM7
CisgICAgc2l6ZV90IGZyZWVTaXplID0gbV9zaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOwor
ICAgIHVpbnRwdHJfdCBmcmVlRW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CisgICAgCisgICAg
dWludHB0cl90IGZpcnN0Q29tcGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2Nh
dG9yLT5tX3BhZ2VTaXplIC0gMSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7Cisg
ICAgaWYgKGZpcnN0Q29tcGxldGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKKyAgICAgICAgbV9hbGxv
Y2F0b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmly
c3RDb21wbGV0ZWx5RnJlZVBhZ2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFn
ZSAtIGZyZWVTdGFydCkpOworICAgIAorICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9t
UmVsZWFzZWRIYW5kbGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZnJlZVN0YXJ0KSwgZnJlZVNp
emUpOworICAgIAorICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKK30KKworTWV0
YUFsbG9jYXRvcjo6TWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpCisgICAg
OiBtX2FsbG9jYXRpb25HcmFudWxlKGFsbG9jYXRpb25HcmFudWxlKQorICAgICwgbV9wYWdlU2l6
ZShwYWdlU2l6ZSgpKQorICAgICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9ieXRlc1Jl
c2VydmVkKDApCisgICAgLCBtX2J5dGVzQ29tbWl0dGVkKDApCisjaWZuZGVmIE5ERUJVRworICAg
ICwgbV9tYWxsb2NCYWxhbmNlKDApCisjZW5kaWYKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1Jf
UFJPRklMRSkKKyAgICAsIG1fbnVtQWxsb2NhdGlvbnMoMCkKKyAgICAsIG1fbnVtRnJlZXMoMCkK
KyNlbmRpZgoreworICAgIG1fbG9jay5Jbml0KCk7CisgICAgCisgICAgZm9yIChtX2xvZ1BhZ2VT
aXplID0gMDsgbV9sb2dQYWdlU2l6ZSA8IDMyOyArK21fbG9nUGFnZVNpemUpIHsKKyAgICAgICAg
aWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXpl
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2Fz
dDxzaXplX3Q+KDEpIDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSk7CisgICAgCisgICAg
Zm9yIChtX2xvZ0FsbG9jYXRpb25HcmFudWxlID0gMDsgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA8
IDMyOyArK21fbG9nQWxsb2NhdGlvbkdyYW51bGUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFu
dWxlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNf
Y2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9u
R3JhbnVsZSk7Cit9CisKK1Bhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9j
YXRvcjo6YWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9sb2NrKTsKKworICAgIGlmICghc2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIHNpemVJbkJ5dGVzID0gcm91bmRVcChzaXplSW5CeXRlcyk7CisgICAg
CisgICAgdm9pZCogc3RhcnQgPSBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVJbkJ5dGVzKTsK
KyAgICBpZiAoIXN0YXJ0KSB7CisgICAgICAgIHNpemVfdCByZXF1ZXN0ZWROdW1iZXJPZlBhZ2Vz
ID0gKHNpemVJbkJ5dGVzICsgbV9wYWdlU2l6ZSAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAg
ICAgIHNpemVfdCBudW1iZXJPZlBhZ2VzID0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlczsKKyAgICAg
ICAgCisgICAgICAgIHN0YXJ0ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJPZlBhZ2VzKTsKKyAg
ICAgICAgaWYgKCFzdGFydCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKG51bWJlck9mUGFnZXMgPj0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyk7CisgICAg
ICAgIAorICAgICAgICBzaXplX3Qgcm91bmRlZFVwU2l6ZSA9IG51bWJlck9mUGFnZXMgPDwgbV9s
b2dQYWdlU2l6ZTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChyb3VuZGVkVXBTaXplID49IHNp
emVJbkJ5dGVzKTsKKyAgICAgICAgCisgICAgICAgIG1fYnl0ZXNSZXNlcnZlZCArPSByb3VuZGVk
VXBTaXplOworICAgICAgICAKKyAgICAgICAgaWYgKHJvdW5kZWRVcFNpemUgPiBzaXplSW5CeXRl
cykgeworICAgICAgICAgICAgdm9pZCogZnJlZVNwYWNlU3RhcnQgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMp
OworICAgICAgICAgICAgc2l6ZV90IGZyZWVTcGFjZVNpemUgPSByb3VuZGVkVXBTaXplIC0gc2l6
ZUluQnl0ZXM7CisgICAgICAgICAgICBhZGRGcmVlU3BhY2UoZnJlZVNwYWNlU3RhcnQsIGZyZWVT
cGFjZVNpemUpOworICAgICAgICB9CisgICAgfQorICAgIGluY3JlbWVudFBhZ2VPY2N1cGFuY3ko
c3RhcnQsIHNpemVJbkJ5dGVzKTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkICs9IHNpemVJbkJ5dGVz
OworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtQWxsb2NhdGlv
bnMrKzsKKyNlbmRpZgorICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRs
ZSh0aGlzLCBzdGFydCwgc2l6ZUluQnl0ZXMpKTsKK30KKworTWV0YUFsbG9jYXRvcjo6U3RhdGlz
dGljcyBNZXRhQWxsb2NhdG9yOjpjdXJyZW50U3RhdGlzdGljcygpCit7CisgICAgU3BpbkxvY2tI
b2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIFN0YXRpc3RpY3MgcmVzdWx0OworICAgIHJlc3Vs
dC5ieXRlc0FsbG9jYXRlZCA9IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgcmVzdWx0LmJ5dGVzUmVz
ZXJ2ZWQgPSBtX2J5dGVzUmVzZXJ2ZWQ7CisgICAgcmVzdWx0LmJ5dGVzQ29tbWl0dGVkID0gbV9i
eXRlc0NvbW1pdHRlZDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBNZXRhQWxsb2Nh
dG9yOjpmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBG
cmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpbmRMZWFzdEdyZWF0ZXJU
aGFuT3JFcXVhbChzaXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKCFub2RlKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICBBU1NFUlQobm9kZS0+a2V5ID49IHNpemVJbkJ5dGVzKTsKKyAg
ICAKKyAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgIAorICAgIHZvaWQq
IHJlc3VsdDsKKyAgICAKKyAgICBpZiAobm9kZS0+a2V5ID09IHNpemVJbkJ5dGVzKSB7CisgICAg
ICAgIC8vIEVhc3kgY2FzZTogcGVyZmVjdCBmaXQsIHNvIGp1c3QgcmVtb3ZlIHRoZSBub2RlIGVu
dGlyZWx5LgorICAgICAgICByZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgCisgICAgICAg
IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1ZSk7CisgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSkpOwor
ICAgICAgICBmcmVlRnJlZVNwYWNlTm9kZShub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBUcnkgdG8gYmUgYSBnb29kIGNpdGl6ZW4gYW5kIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBj
aHVuayBvZiBtZW1vcnkKKyAgICAgICAgLy8gc3RyYWRkbGVzIGFzIGZldyBwYWdlcyBhcyBwb3Nz
aWJsZSwgYnV0IG9ubHkgaW5zb2ZhciBhcyBkb2luZyBzbyB3aWxsCisgICAgICAgIC8vIG5vdCBp
bmNyZWFzZSBmcmFnbWVudGF0aW9uLiBUaGUgaW50dWl0aW9uIGlzIHRoYXQgbWluaW1pemluZwor
ICAgICAgICAvLyBmcmFnbWVudGF0aW9uIGlzIGEgc3RyaWN0bHkgaGlnaGVyIHByaW9yaXR5IHRo
YW4gbWluaW1pemluZyB0aGUgbnVtYmVyCisgICAgICAgIC8vIG9mIGNvbW1pdHRlZCBwYWdlcywg
c2luY2UgaW4gdGhlIGxvbmcgcnVuLCBzbWFsbGVyIGZyYWdtZW50YXRpb24gbWVhbnMKKyAgICAg
ICAgLy8gZmV3ZXIgY29tbWl0dGVkIHBhZ2VzIGFuZCBmZXdlciBmYWlsdXJlcyBpbiBnZW5lcmFs
LgorICAgICAgICAKKyAgICAgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWlu
dHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1
ZSkgKyBub2RlLT5rZXkgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgICAgICB1aW50
cHRyX3QgbGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4obm9kZS0+dmFsdWUpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOwor
ICAgICAgICB1aW50cHRyX3QgZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uID0gKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSBzaXplSW5CeXRl
cykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0UGFnZUZvckxl
ZnRBbGxvY2F0aW9uIC0gZmlyc3RQYWdlICsgMSA8PSBsYXN0UGFnZSAtIGZpcnN0UGFnZUZvclJp
Z2h0QWxsb2NhdGlvbiArIDEpIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSBsZWZ0
IHNpZGUgb2YgdGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIHJp
Z2h0LgorICAgICAgICAgICAgcmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1ZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXplSW5CeXRlczsKKyAg
ICAgICAgICAgIG5vZGUtPnZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVzKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChub2RlLT52YWx1ZSwgbm9kZSk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBpbiB0aGUgcmlnaHQg
c2l6ZSBvZiB0aGUgcmV0dXJuZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgbGVm
dDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtl
eSAtIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VF
bmRBZGRyZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1f
ZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmVzdWx0LCBub2RlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFk
ZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5
dGVzKQoreworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtRnJl
ZXMrKzsKKyNlbmRpZgorICAgIG1fYnl0ZXNBbGxvY2F0ZWQgLT0gc2l6ZUluQnl0ZXM7CisgICAg
YWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRv
cjo6YWRkRnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sK
KyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgbV9ieXRlc1Jlc2VydmVk
ICs9IHNpemVJbkJ5dGVzOworICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6ZUluQnl0ZXMpOwor
fQorCitzaXplX3QgTWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKCkKK3sKKyNpZm5k
ZWYgTkRFQlVHCisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIHNpemVf
dCByZXN1bHQgPSAwOworICAgIGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNl
U2l6ZU1hcC5maXJzdCgpOyBub2RlOyBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLnN1Y2Nlc3Nv
cihub2RlKSkKKyAgICAgICAgcmVzdWx0ICs9IG5vZGUtPmtleTsKKyAgICByZXR1cm4gcmVzdWx0
OworI2Vsc2UKKyAgICBDUkFTSCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQg
TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMpCit7CisgICAgdm9pZCogZW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIYXNo
TWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj46Oml0ZXJhdG9yIGxlZnROZWlnaGJvciA9IG1fZnJl
ZVNwYWNlRW5kQWRkcmVzc01hcC5maW5kKHN0YXJ0KTsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVl
U3BhY2VOb2RlKj46Oml0ZXJhdG9yIHJpZ2h0TmVpZ2hib3IgPSBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5maW5kKGVuZCk7CisgICAgCisgICAgaWYgKGxlZnROZWlnaGJvciAhPSBtX2ZyZWVT
cGFjZUVuZEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcg
d2UgY2FuIGNvYWxlc2NlIHdpdGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVl
LCBhbmQKKyAgICAgICAgLy8gcmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFw
LgorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+dmFsdWUpICsgbGVm
dE5laWdoYm9yLT5zZWNvbmQtPmtleSkgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAg
IAorICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25k
OworICAgICAgICAKKyAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPnZhbHVlOwor
ICAgICAgICBzaXplX3QgbGVmdFNpemUgPSBsZWZ0Tm9kZS0+a2V5OworICAgICAgICB2b2lkKiBs
ZWZ0RW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGVm
dEVuZCA9PSBzdGFydCk7CisgICAgICAgIAorICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVt
b3ZlKGxlZnROb2RlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92ZShs
ZWZ0RW5kKTsKKyAgICAgICAgCisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB0aGVyZSBpcyBhbHNv
IHNvbWV0aGluZyB0byBjb2FsZXNjZSB3aXRoIG9uIHRoZSByaWdodC4KKyAgICAgICAgaWYgKHJp
Z2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAg
ICAgICAgIC8vIEZyZWVpbmcgc29tZXRoaW5nIGluIHRoZSBtaWRkbGUgb2YgZnJlZSBibG9ja3Mu
IENvYWxlc2NlIGJvdGggbGVmdCBhbmQKKyAgICAgICAgICAgIC8vIHJpZ2h0LCB3aGlsc3QgcmVt
b3ZpbmcgdGhlIHJpZ2h0IG5laWdoYm9yIGZyb20gdGhlIG1hcHMuCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIEFTU0VSVChyaWdodE5laWdoYm9yLT5zZWNvbmQtPnZhbHVlID09IHJpZ2h0TmVp
Z2hib3ItPmZpcnN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSog
cmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmln
aHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0
U2l6ZSA9IHJpZ2h0Tm9kZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFy
dCkgKyByaWdodFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRT
dGFydCA9PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNpemUgKyBzaXpl
SW5CeXRlcyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJpZ2h0RW5kKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUocmlnaHROb2RlKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbGVmdE5vZGUtPmtleSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChsZWZ0
Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJpZ2h0RW5k
LCBsZWZ0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5
ICs9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNp
emVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5hZGQoZW5kLCBsZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBDYW5ub3QgY29hbGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2Fs
ZXNjZSB3aXRoIHJpZ2h0LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0g
bV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFj
ZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZv
aWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVf
dCByaWdodFNpemUgPSByaWdodE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5k
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJp
Z2h0U3RhcnQpICsgcmlnaHRTaXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJU
KHJpZ2h0U3RhcnQgPT0gZW5kKTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFy
dCkgKyBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAg
ICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOwor
ICAgICAgICAgICAgcmlnaHROb2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7CisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0Tm9kZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxlc2NlIHdpdGgsIHNv
IGNyZWF0ZSBhIG5ldyBmcmVlIHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNwYWNlTm9kZSgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5rZXkgPSBzaXplSW5CeXRlczsKKyAgICAg
ICAgICAgIG5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
ZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0
YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VF
bmRBZGRyZXNzTWFwLmFkZChlbmQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IE1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6
ZV90IHNpemVJbkJ5dGVzKQoreworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1aW50cHRy
X3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpICsgc2l6
ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZvciAodWludHB0cl90
IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAgICAgICBI
YXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5j
eU1hcC5maW5kKHBhZ2UpOworICAgICAgICBpZiAoaXRlciA9PSBtX3BhZ2VPY2N1cGFuY3lNYXAu
ZW5kKCkpIHsKKyAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQocGFnZSwgMSk7Cisg
ICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkICs9IG1fcGFnZVNpemU7CisgICAgICAgICAgICBu
b3RpZnlOZWVkUGFnZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNp
emUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICB9
Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBh
ZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOwor
ICAgIHVpbnRwdHJfdCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRk
cmVzcykgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9y
ICh1aW50cHRyX3QgcGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7
CisgICAgICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9w
YWdlT2NjdXBhbmN5TWFwLmZpbmQocGFnZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFn
ZU9jY3VwYW5jeU1hcC5lbmQoKSk7CisgICAgICAgIGlmICghLS0oaXRlci0+c2Vjb25kKSkgewor
ICAgICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAg
IG1fYnl0ZXNDb21taXR0ZWQgLT0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2VJ
c0ZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpyb3VuZFVwKHNpemVf
dCBzaXplSW5CeXRlcykKK3sKKyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+Ojpt
YXgoKSAtIG1fYWxsb2NhdGlvbkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisgICAgICAgIENSQVNI
KCk7CisgICAgcmV0dXJuIChzaXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKSAm
IH4obV9hbGxvY2F0aW9uR3JhbnVsZSAtIDEpOworfQorCitNZXRhQWxsb2NhdG9yOjpGcmVlU3Bh
Y2VOb2RlKiBNZXRhQWxsb2NhdG9yOjphbGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lmbmRlZiBO
REVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxGcmVlU3BhY2VOb2RlKj4oZmFzdE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9kZSkpKTsK
K30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2Rl
KiBub2RlKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsKKyNlbmRp
ZgorICAgIGZhc3RGcmVlKG5vZGUpOworfQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BS
T0ZJTEUpCit2b2lkIE1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBwcmludGYo
Im51bSBhbGxvY2F0aW9ucyA9ICV1LCBudW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxvY2F0aW9u
cywgbV9udW1GcmVlcyk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JfaAorI2Rl
ZmluZSBXVEZfTWV0YUFsbG9jYXRvcl9oCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5j
bHVkZSAiSGFzaE1hcC5oIgorI2luY2x1ZGUgIk1ldGFBbGxvY2F0b3JIYW5kbGUuaCIKKyNpbmNs
dWRlICJOb25jb3B5YWJsZS5oIgorI2luY2x1ZGUgIlBhZ2VCbG9jay5oIgorI2luY2x1ZGUgIlJl
ZEJsYWNrVHJlZS5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIu
aCIKKyNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5l
IEVOQUJMRV9NRVRBX0FMTE9DQVRPUl9QUk9GSUxFIDAKKworY2xhc3MgTWV0YUFsbG9jYXRvciB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWV0YUFsbG9jYXRvcik7CitwdWJsaWM6CisgICAg
CisgICAgTWV0YUFsbG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpOworICAgIAorICAg
IHZpcnR1YWwgfk1ldGFBbGxvY2F0b3IoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8g
Tm9uLWF0b21pYyBtZXRob2RzIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAg
IHNpemVfdCBieXRlc0FsbG9jYXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAg
ICBzaXplX3QgYnl0ZXNSZXNlcnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQorICAg
IHNpemVfdCBieXRlc0NvbW1pdHRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNDb21taXR0ZWQ7IH0KKyAg
ICAKKyAgICAvLyBBdG9taWMgbWV0aG9kIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNz
LgorICAgIHN0cnVjdCBTdGF0aXN0aWNzIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVk
OworICAgICAgICBzaXplX3QgYnl0ZXNSZXNlcnZlZDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQ29t
bWl0dGVkOworICAgIH07CisgICAgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpOworCisg
ICAgLy8gQWRkIG1vcmUgZnJlZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGly
ZWN0bHkgZnJvbQorICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRl
IHRoZSBhbGxvY2F0b3Igd2l0aGluIGEKKyAgICAvLyBmaXhlZCBwb29sLgorICAgIHZvaWQgYWRk
RnJlc2hGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAv
LyBUaGlzIGlzIG1lYW50IG9ubHkgZm9yIGltcGxlbWVudGluZyB0ZXN0cy4gTmV2ZXIgY2FsbCB0
aGlzIGluIHJlbGVhc2UKKyAgICAvLyBidWlsZHMuCisgICAgc2l6ZV90IGRlYnVnRnJlZVNwYWNl
U2l6ZSgpOworICAgIAorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZv
aWQgZHVtcFByb2ZpbGUoKTsKKyNlbHNlCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2Vu
ZGlmCisKK3Byb3RlY3RlZDoKKyAgICAKKyAgICAvLyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFj
ZSwgYnV0IGRvbid0IGNvbW1pdC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKKyAgICAvLyBwYWdlcyB0
aGFuIHdlIGFza2VkLCBpbiB3aGljaCBjYXNlIG51bVBhZ2VzIGlzIGNoYW5nZWQuCisgICAgdmly
dHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpID0gMDsKKyAgICAK
KyAgICAvLyBDb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2
b2lkKiBwYWdlKSA9IDA7CisgICAgCisgICAgLy8gVW5jb21taXQgYSBwYWdlLgorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBO
T1RFOiBub25lIG9mIHRoZSBhYm92ZSBtZXRob2RzIGFyZSBjYWxsZWQgZHVyaW5nIGFsbG9jYXRv
cgorICAgIC8vIGRlc3RydWN0aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNh
bm5vdCBkaWUgc28gbG9uZworICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIg
dG8gaXQuCisKK3ByaXZhdGU6CisgICAgCisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JI
YW5kbGU7CisgICAgCisgICAgdHlwZWRlZiBSZWRCbGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJl
ZTsKKyAgICB0eXBlZGVmIFRyZWU6Ok5vZGUgRnJlZVNwYWNlTm9kZTsKKyAgICAKKyAgICAvLyBS
ZW1vdmUgZnJlZSBzcGFjZSBmcm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkK
KyAgICAvLyB0aGUgYWxsb2NhdGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3Qg
bWFyayB0aGUKKyAgICAvLyByZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBpbi11c2UuCisgICAgdm9p
ZCogZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworCisgICAgLy8g
VGhpcyBpcyBjYWxsZWQgd2hlbiBtZW1vcnkgZnJvbSBhbiBhbGxvY2F0aW9uIGlzIGZyZWVkLgor
ICAgIHZvaWQgYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBpbXBs
ZW1lbnRhdGlvbiBvZiBhZGRpbmcgZnJlZSBzcGFjZTsgaXQKKyAgICAvLyBpcyBjYWxsZWQgZnJv
bSBib3RoIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSBhbmQgZnJvbQorICAgIC8vIGFk
ZEZyZXNoRnJlZVNwYWNlLgorICAgIHZvaWQgYWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIE1hbmFnZW1lbnQgb2YgdXNlZCBzcGFjZS4K
KyAgICAKKyAgICB2b2lkIGluY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6
ZV90IHNpemVJbkJ5dGVzKTsKKyAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCog
YWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBVdGlsaXRpZXMuCisg
ICAgCisgICAgc2l6ZV90IHJvdW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBG
cmVlU3BhY2VOb2RlKiBhbGxvY0ZyZWVTcGFjZU5vZGUoKTsKKyAgICB2b2lkIGZyZWVGcmVlU3Bh
Y2VOb2RlKEZyZWVTcGFjZU5vZGUqKTsKKyAgICAKKyAgICBzaXplX3QgbV9hbGxvY2F0aW9uR3Jh
bnVsZTsKKyAgICB1bnNpZ25lZCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlOworICAgIHNpemVfdCBt
X3BhZ2VTaXplOworICAgIHVuc2lnbmVkIG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgVHJlZSBt
X2ZyZWVTcGFjZVNpemVNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+IG1f
ZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5v
ZGUqPiBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNp
emVfdD4gbV9wYWdlT2NjdXBhbmN5TWFwOworICAgIAorICAgIHNpemVfdCBtX2J5dGVzQWxsb2Nh
dGVkOworICAgIHNpemVfdCBtX2J5dGVzUmVzZXJ2ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNDb21t
aXR0ZWQ7CisgICAgCisgICAgU3BpbkxvY2sgbV9sb2NrOworCisjaWZuZGVmIE5ERUJVRworICAg
IHNpemVfdCBtX21hbGxvY0JhbGFuY2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRVRBX0FMTE9D
QVRPUl9QUk9GSUxFKQorICAgIHVuc2lnbmVkIG1fbnVtQWxsb2NhdGlvbnM7CisgICAgdW5zaWdu
ZWQgbV9udW1GcmVlczsKKyNlbmRpZgorfTsKKworaW5saW5lIE1ldGFBbGxvY2F0b3I6On5NZXRh
QWxsb2NhdG9yKCkKK3sKKyAgICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFj
ZVNpemVNYXAuZmlyc3QoKTsgbm9kZTspIHsKKyAgICAgICAgRnJlZVNwYWNlTm9kZSogbmV4dCA9
IG1fZnJlZVNwYWNlU2l6ZU1hcC5zdWNjZXNzb3Iobm9kZSk7CisgICAgICAgIG1fZnJlZVNwYWNl
U2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOwor
ICAgICAgICBub2RlID0gbmV4dDsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVCgh
bV9tYWxsb2NCYWxhbmNlKTsKKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIFdURl9NZXRhQWxsb2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisjZGVm
aW5lIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIK
KyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgiCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yOworCitjbGFzcyBNZXRhQWxsb2NhdG9ySGFu
ZGxlOiBwdWJsaWMgUmVmQ291bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiB7Citwcml2YXRlOgor
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUodm9pZCogc3Rh
cnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICAgICAgOiBtX2FsbG9jYXRvcigwKQorICAgICAg
ICAsIG1fc3RhcnQoc3RhcnQpCisgICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykK
KyAgICB7CisgICAgICAgIEFTU0VSVChzdGFydCk7CisgICAgfQorICAgIAorcHVibGljOgorICAg
IH5NZXRhQWxsb2NhdG9ySGFuZGxlKCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWV0
YUFsbG9jYXRvckhhbmRsZT4gY3JlYXRlU2VsZk1hbmFnZWRIYW5kbGUodm9pZCogc3RhcnQsIHNp
emVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0
YUFsbG9jYXRvckhhbmRsZShzdGFydCwgc2l6ZUluQnl0ZXMpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCogc3RhcnQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CisgICAgfQorICAg
IAorICAgIHZvaWQqIGVuZCgpCisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9zaXplSW5C
eXRlcyk7CisgICAgfQorICAgICAgICAKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CisgICAgfQorICAgICAgICAKKyAgICB2b2lk
IHNocmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpOworICAgIAorICAgIGJvb2wgaXNNYW5hZ2Vk
KCkKKyAgICB7CisgICAgICAgIHJldHVybiAhIW1fYWxsb2NhdG9yOworICAgIH0KKyAgICAgICAg
CisgICAgTWV0YUFsbG9jYXRvciogYWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCht
X2FsbG9jYXRvcik7CisgICAgICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9yOworICAgIAorICAgIE1ldGFB
bGxvY2F0b3IqIG1fYWxsb2NhdG9yOworICAgIHZvaWQqIG1fc3RhcnQ7CisgICAgc2l6ZV90IG1f
c2l6ZUluQnl0ZXM7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9SZWRCbGFja1RyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9SZWRCbGFja1RyZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIEJhc2VkIG9uIFJlZC1CbGFjayB0cmVlIGltcGxlbWVudGF0aW9uIGJ5IEVtaW4gTWFy
dGluaWFuCisgKiAtIGh0dHA6Ly93d3cubWl0LmVkdS9+ZW1pbi9zb3VyY2VfY29kZS9pbmRleC5o
dG1sICAgICAgICAgCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBSZWRCbGFja1RyZWVfaAorI2RlZmluZSBSZWRCbGFja1RyZWVf
aAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisK
K25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJlZSB3
aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Ygbm9k
ZXMgaW4gdGhlIHRyZWUgaXMgZW50aXJlbHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlvdSBh
cmUgaW4gcG9zc2Vzc2lvbiBvZiBhIHBvaW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0ZQor
Ly8gICBpdCBmcm9tIHRoZSB0cmVlLiBUaGUgdHJlZSB3aWxsIHN1YnNlcXVlbnRseSBubyBsb25n
ZXIgaGF2ZSBhCisvLyAgIHJlZmVyZW5jZSB0byB0aGlzIG5vZGUuCisvLyAtIFRoZSBrZXkgdHlw
ZSBtdXN0IGltcGxlbWVudCBvcGVyYXRvcjwgYW5kID09LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBL
ZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGU+CitjbGFzcyBSZWRCbGFja1RyZWUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFJlZEJsYWNrVHJlZSk7CitwdWJsaWM6CisgICAgY2xhc3MgUmF3
Tm9kZSB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBSZWRCbGFja1RyZWU7CisgICAgICAgIAorICAg
ICAgICAvLyBOT1RFOiB0aGVzZSBtZXRob2RzIHNob3VsZCBwYWNrIHRoZSBwYXJlbnQgYW5kIHJl
ZCBpbnRvIGEgc2luZ2xlCisgICAgICAgIC8vIHdvcmQuIEJ1dCBkb2luZyBzbyBhcHBlYXJzIHRv
IHJldmVhbCBhIGJ1ZyBpbiB0aGUgY29tcGlsZXIuCisgICAgICAgIFJhd05vZGUqIHBhcmVudCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogc2V0UGFyZW50KFJhd05vZGUqIG5ld1BhcmVu
dCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50ID0gbmV3UGFyZW50Owor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGlzUmVkKCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1fcmVkOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBib29sIHNldFJlZChib29sIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9yZWQgPSB2YWx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogbV9s
ZWZ0OworICAgICAgICBSYXdOb2RlKiBtX3JpZ2h0OworICAgICAgICBSYXdOb2RlKiBtX3BhcmVu
dDsKKyAgICAgICAgYm9vbCBtX3JlZDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIE5vZGU6IHB1
YmxpYyBSYXdOb2RlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAg
ICBWYWx1ZVR5cGUgdmFsdWU7CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUoKQorICAg
IHsKKyAgICAgICAgbV9uaWxTZW50aW5lbC5zZXRQYXJlbnQoJm1fbmlsU2VudGluZWwpOworICAg
ICAgICBtX25pbFNlbnRpbmVsLm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25p
bFNlbnRpbmVsLm1fcmlnaHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50aW5l
bC5zZXRSZWQoZmFsc2UpOworICAgICAgICAKKyAgICAgICAgbV9yb290LnNldFBhcmVudCgmbV9u
aWxTZW50aW5lbCk7CisgICAgICAgIG1fcm9vdC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsKKyAg
ICAgICAgbV9yb290Lm1fcmlnaHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290LnNl
dFJlZChmYWxzZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0KE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBpbnNlcnRIZWxwKG5vZGUpOworCisgICAgICAgIFJhd05vZGUqIHggPSBu
b2RlOworICAgICAgICBSYXdOb2RlKiB5OworICAgICAgICAKKyAgICAgICAgeC0+c2V0UmVkKHRy
dWUpOworICAgICAgICB3aGlsZSAoeC0+cGFyZW50KCktPmlzUmVkKCkpIHsKKyAgICAgICAgICAg
IGlmICh4LT5wYXJlbnQoKSA9PSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdCkgeworICAg
ICAgICAgICAgICAgIHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAg
ICAgICAgICAgaWYgKHktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50
KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUp
OworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVu
dCgpLT5tX3JpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7
CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOwor
ICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsK
KyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICB5ID0geC0+cGFyZW50KCktPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgaWYg
KHktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChm
YWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAg
ICAgICAgICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAg
ICAgIH0gCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdCgpLT5tX2xlZnQt
PnNldFJlZChmYWxzZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCkt
PmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgfQorICAg
IAorICAgIE5vZGUqIHJlbW92ZShOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsK
KyAgICAgICAgUmF3Tm9kZSogeDsKKworICAgICAgICB5ID0gKHotPm1fbGVmdCA9PSBuaWxTZW50
aW5lbCgpIHx8IHotPm1fcmlnaHQgPT0gbmlsU2VudGluZWwoKSkgPyB6IDogc3VjY2Vzc29ySW50
ZXJuYWwoeik7CisgICAgICAgIHggPSB5LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSA/IHktPm1f
cmlnaHQgOiB5LT5tX2xlZnQ7CisgICAgICAgIGlmIChyb290KCkgPT0geC0+c2V0UGFyZW50KHkt
PnBhcmVudCgpKSkKKyAgICAgICAgICAgIHJvb3QoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAg
ICAgICAgIHktPnBhcmVudCgpLT5tX2xlZnQgPSB4OworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHktPnBhcmVudCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoeSAhPSB6KSB7CisgICAgICAgICAgICBBU1NFUlQoeSAhPSBuaWxTZW50aW5lbCgpKTsKKwor
ICAgICAgICAgICAgaWYgKCF5LT5pc1JlZCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZpeFVw
KHgpOworICAKKyAgICAgICAgICAgIHktPm1fbGVmdCA9IHotPm1fbGVmdDsKKyAgICAgICAgICAg
IHktPm1fcmlnaHQgPSB6LT5tX3JpZ2h0OworICAgICAgICAgICAgeS0+c2V0UGFyZW50KHotPnBh
cmVudCgpKTsKKyAgICAgICAgICAgIHktPnNldFJlZCh6LT5pc1JlZCgpKTsKKyAgICAgICAgICAg
IHotPm1fbGVmdC0+c2V0UGFyZW50KHotPm1fcmlnaHQtPnNldFBhcmVudCh5KSk7CisgICAgICAg
ICAgICBpZiAoeiA9PSB6LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgICAgIHotPnBh
cmVudCgpLT5tX2xlZnQgPSB5OyAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6
LT5wYXJlbnQoKS0+bV9yaWdodCA9IHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoIXktPmlzUmVkKCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAoeCk7CisgICAgICAg
IH0KKyAgCisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAgQVNTRVJU
KCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKworICAgICAgICByZXR1cm4gejsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogZmlyc3QoKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogbm9kZSA9IHJv
b3QoKS0+bV9sZWZ0OworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSYXdO
b2RlKiBuZXh0ID0gbm9kZS0+bV9sZWZ0OworICAgICAgICAgICAgaWYgKG5leHQgPT0gbmlsU2Vu
dGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKG5vZGUpOworICAgICAgICAg
ICAgbm9kZSA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogbGFzdCgp
CisgICAgeworICAgICAgICBSYXdOb2RlKiBub2RlID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAg
IGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5tX3Jp
Z2h0OworICAgICAgICAgICAgaWYgKG5leHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gYXNOb2RlKG5vZGUpOworICAgICAgICAgICAgbm9kZSA9IG5leHQ7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogc3VjY2Vzc29yKE5vZGUqIG5vZGUpCisgICAg
eworICAgICAgICBSYXdOb2RlKiByZXN1bHQgPSBzdWNjZXNzb3JJbnRlcm5hbChub2RlKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIHJldHVybiBhc05vZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSog
cHJlZGVjZXNzb3IoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHggPSBub2Rl
OworICAgICAgICBSYXdOb2RlKiB5OworCisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9ICh5
ID0geC0+bV9sZWZ0KSkgeworICAgICAgICAgICAgd2hpbGUgKHktPm1fcmlnaHQgIT0gbmlsU2Vu
dGluZWwoKSkKKyAgICAgICAgICAgICAgICB5ID0geS0+bV9yaWdodDsKKyAgICAgICAgICAgIHJl
dHVybiBhc05vZGUoeSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHkgPSB4LT5wYXJl
bnQoKTsKKyAgICAgICAgd2hpbGUgKHggPT0geS0+bV9sZWZ0KSB7IAorICAgICAgICAgICAgaWYg
KHkgPT0gcm9vdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgeCA9
IHk7CisgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KHkgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gYXNOb2RlKHkpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBmaW5kRXhhY3QoY29uc3QgS2V5
VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IHJvb3QoKS0+bV9sZWZ0Owor
ICAgICAgICBpZiAoeCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHdoaWxlICghKGFzTm9kZSh4KS0+a2V5ID09IGtleSkpIHsKKyAgICAgICAgICAgIGlm
IChhc05vZGUoeCktPmtleSA+IGtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0Owor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAg
ICAgICAgaWYgKHggPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKHgpOworICAgIH0KKyAgICAKKyAgICBO
b2RlKiByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVz
dWx0ID0gZmluZEV4YWN0KGtleSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAgICB9CisgICAgCisg
ICAgTm9kZSogZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkK
KyAgICB7CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAgICAg
ICAgUmF3Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNlbnRp
bmVsKCkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChh
c05vZGUoY3VycmVudCktPmtleSA8IGtleSkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3Vy
cmVudC0+bV9yaWdodDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJlc3Qg
PSBjdXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAg
ICB9CisgICAgCisgICAgTm9kZSogZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0IEtl
eVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1f
bGVmdDsKKyAgICAgICAgUmF3Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50
ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtl
eSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAg
ICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA8IGtleSkgeworICAgICAgICAgICAgICAg
IGJlc3QgPSBjdXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xl
ZnQ7CisgICAgICAgICAgICB9IGVsc2UgCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJl
bnQtPm1fcmlnaHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAg
ICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhbiBPKG4pIG9wZXJhdGlvbi4KKyAgICBzaXplX3Qg
c2l6ZSgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChO
b2RlKiBjdXJyZW50ID0gZmlyc3QoKTsgY3VycmVudDsgY3VycmVudCA9IHN1Y2Nlc3NvcihjdXJy
ZW50KSkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJvb2wgaXNF
bXB0eSgpCisgICAgeworICAgICAgICByZXR1cm4gcm9vdCgpLT5tX2xlZnQgPT0gbmlsU2VudGlu
ZWwoKTsKKyAgICB9CisgICAgCisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgY2hlY2tDb25zaXN0
ZW5jeSgpCisgICAgeworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAg
IEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgICAgIGNoZWNrQ29uc2lzdGVu
Y3lSZWN1cnNlKHJvb3QoKS0+bV9sZWZ0KTsKKyAgICAgICAgQVNTRVJUKHJvb3QoKS0+bV9yaWdo
dCA9PSBuaWxTZW50aW5lbCgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKCkKKyAgICB7
CisgICAgICAgIHByaW50ZigiVHJlZSBhdCAlcDpcbiIsIHRoaXMpOworICAgICAgICBkdW1wUmVj
dXJzZShyb290KCktPm1fbGVmdCk7CisgICAgICAgIHByaW50ZigiICAgcm9vdDogJXAsICVwLCAl
cFxuIiwgcm9vdCgpLT5tX2xlZnQsIHJvb3QoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocm9vdCgpLT5wYXJlbnRBbmRSZWQpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgbmlsOiAl
cCwgJXAsICVwXG4iLCBuaWxTZW50aW5lbCgpLT5tX2xlZnQsIG5pbFNlbnRpbmVsKCktPm1fcmln
aHQsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG5pbFNlbnRpbmVsKCktPnBhcmVudEFuZFJlZCkp
OworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgbGVmdFJvdGF0ZShSYXdOb2Rl
KiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKworICAgICAgICB5ID0geC0+bV9yaWdo
dDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHktPm1fbGVmdDsKKworICAgICAgICBpZiAoeS0+bV9s
ZWZ0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICB5LT5tX2xlZnQtPnNldFBhcmVudCh4
KTsKKyAgCisgICAgICAgIHktPnNldFBhcmVudCh4LT5wYXJlbnQoKSk7CisKKyAgICAgICAgaWYg
KHggPT0geC0+cGFyZW50KCktPm1fbGVmdCkKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX2xl
ZnQgPSB5OworICAgICAgICBlbHNlCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9yaWdodCA9
IHk7CisgICAgICAgIHktPm1fbGVmdCA9IHg7CisgICAgICAgIHgtPnNldFBhcmVudCh5KTsKKwor
ICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHJpZ2h0Um90YXRlKFJhd05vZGUqIHkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4
OworCisgICAgICAgIHggPSB5LT5tX2xlZnQ7CisgICAgICAgIHktPm1fbGVmdCA9IHgtPm1fcmln
aHQ7CisKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0geC0+bV9yaWdodCkKKyAgICAgICAg
ICAgIHgtPm1fcmlnaHQtPnNldFBhcmVudCh5KTsKKworICAgICAgICB4LT5zZXRQYXJlbnQoeS0+
cGFyZW50KCkpOworICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAg
ICAgICAgeS0+cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHktPnBhcmVudCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHk7CisgICAg
ICAgIHktPnNldFBhcmVudCh4KTsKKworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlz
UmVkKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydEhlbHAoTm9kZSogeikKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIHg7CisgICAgICAgIFJhd05vZGUqIHk7CisgIAorICAgICAgICB6
LT5tX2xlZnQgPSB6LT5tX3JpZ2h0ID0gbmlsU2VudGluZWwoKTsKKyAgICAgICAgeSA9IHJvb3Qo
KTsKKyAgICAgICAgeCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICB3aGlsZSAoeCAhPSBuaWxT
ZW50aW5lbCgpKSB7CisgICAgICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIGlmICh6LT5rZXkg
PCBhc05vZGUoeCktPmtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICB9Cisg
ICAgICAgIHotPnNldFBhcmVudCh5KTsKKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpIHx8IHotPmtl
eSA8IGFzTm9kZSh5KS0+a2V5KQorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gejsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgeS0+bV9yaWdodCA9IHo7CisKKyAgICAgICAgQVNTRVJUKCFuaWxT
ZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogc3VjY2Vzc29y
SW50ZXJuYWwoUmF3Tm9kZSogeCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAg
IAorICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSAoeSA9IHgtPm1fcmlnaHQpKSB7CisgICAg
ICAgICAgICB3aGlsZSAoeS0+bV9sZWZ0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICAg
ICAgeSA9IHktPm1fbGVmdDsKKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB5ID0geC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlICh4ID09IHktPm1f
cmlnaHQpIHsKKyAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHktPnBhcmVudCgp
OworICAgICAgICB9CisgICAgICAgIGlmICh5ID09IHJvb3QoKSkKKyAgICAgICAgICAgIHJldHVy
biBuaWxTZW50aW5lbCgpOworICAgICAgICByZXR1cm4geTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCByZW1vdmVGaXhVcChSYXdOb2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogcmVhbFJv
b3QgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3Tm9kZSogdzsKKyAgICAgICAgCisgICAg
ICAgIHdoaWxlICgheC0+aXNSZWQoKSAmJiByZWFsUm9vdCAhPSB4KSB7CisgICAgICAgICAgICBp
ZiAoeCA9PSB4LT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgdyA9IHgtPnBh
cmVudCgpLT5tX3JpZ2h0OworICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIHctPnNldFJlZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFy
ZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5w
YXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1Jl
ZCgpICYmICF3LT5tX2xlZnQtPmlzUmVkKCkpIHsgCisgICAgICAgICAgICAgICAgICAgIHctPnNl
dFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+
aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFs
c2UpOworICAgICAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3
ID0geC0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgdy0+c2V0UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IHctPm1fcmlnaHQtPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGxlZnRSb3Rh
dGUoeC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3ID0g
eC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAody0+aXNSZWQoKSkgewor
ICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICB4LT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICByaWdodFJv
dGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+
bV9sZWZ0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1fcmln
aHQtPmlzUmVkKCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAgICAg
ICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7
CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LT5t
X2xlZnQtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHctPm1fcmlnaHQtPnNl
dFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgIHctPm1fbGVmdC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmln
aHRSb3RhdGUoeC0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHgt
PnNldFJlZChmYWxzZSk7CisKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAg
ICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyNpZm5k
ZWYgTkRFQlVHCisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShSYXdOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgaWYgKG5vZGUtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIEFTU0VS
VCghbm9kZS0+bV9sZWZ0LT5pc1JlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bV9y
aWdodC0+aXNSZWQoKSk7CisgICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vy
c2Uobm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uobm9kZS0+
bV9yaWdodCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcFJlY3Vyc2UoUmF3Tm9kZSogbm9k
ZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIHByaW50ZigiICAgbm9kZTogJXBcbiIsIG5vZGUpOworICAgICAg
ICBwcmludGYoIiAgICAgIGNvbG9yID0gJXNcbiIsIG5vZGUtPmlzUmVkKCkgPyAicmVkIiA6ICJi
bGFjayIpOworICAgICAgICBwcmludGYoIiAgICAgIGxlZnQgID0gJXBcbiIsIG5vZGUtPm1fbGVm
dCk7CisgICAgICAgIHByaW50ZigiICAgICAgcmlnaHQgPSAlcFxuIiwgbm9kZS0+bV9yaWdodCk7
CisgICAgICAgIGR1bXBSZWN1cnNlKG5vZGUtPm1fbGVmdCk7CisgICAgICAgIGR1bXBSZWN1cnNl
KG5vZGUtPm1fcmlnaHQpOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIFJhd05vZGUqIHJvb3Qo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX3Jvb3Q7CisgICAgfQorICAgIAorICAgIFJhd05v
ZGUqIG5pbFNlbnRpbmVsKCkKKyAgICB7CisgICAgICAgIHJldHVybiAmbV9uaWxTZW50aW5lbDsK
KyAgICB9CisgICAgCisgICAgTm9kZSogYXNOb2RlKFJhd05vZGUqIHJhd05vZGUpCisgICAgewor
ICAgICAgICBBU1NFUlQocmF3Tm9kZSAhPSByb290KCkpOworICAgICAgICBBU1NFUlQocmF3Tm9k
ZSAhPSBuaWxTZW50aW5lbCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGUqPihy
YXdOb2RlKTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSBtX3Jvb3Q7CisgICAgUmF3Tm9kZSBt
X25pbFNlbnRpbmVsOworfTsKKworfQorCisjZW5kaWYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL3d0Zi5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi93dGYucHJpCShyZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93
dGYvd3RmLnByaQkod29ya2luZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBTT1VSQ0VTICs9IFwK
ICAgICB3dGYvSGFzaFRhYmxlLmNwcCBcCiAgICAgd3RmL01ENS5jcHAgXAogICAgIHd0Zi9NYWlu
VGhyZWFkLmNwcCBcCisgICAgd3RmL01ldGFBbGxvY2F0b3IuY3BwIFwKICAgICB3dGYvTnVsbFB0
ci5jcHAgXAogICAgIHd0Zi9PU1JhbmRvbVNvdXJjZS5jcHAgXAogICAgIHd0Zi9xdC9NYWluVGhy
ZWFkUXQuY3BwIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShy
ZXZpc2lvbiA5NDM1NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDI5LDcgKzI0MjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGJh
Y2t0cmFjaygpOwogCiAgICAgICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAgICAg
ICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxEYXRhLT5y
ZWdleEFsbG9jYXRvcik7CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgICAgIG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlu
a0J1ZmZlcik7CiAgICAgICAgIGppdE9iamVjdC5zZXQobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUo
KSk7CiAgICAgICAgIGppdE9iamVjdC5zZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDk0MzU1KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02
NSwxMSArNjUsMTEgQEAgcHVibGljOgogCiAgICAgaW50IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlu
cHV0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAgICB7
Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5tX2Nv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5jb2RlKCku
ZXhlY3V0YWJsZUFkZHJlc3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CiAgICAg
fQogCiAjaWYgRU5BQkxFKFJFR0VYUF9UUkFDSU5HKQotICAgIHZvaWQgKmdldEFkZHIoKSB7IHJl
dHVybiBtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQorICAgIHZvaWQgKmdldEFk
ZHIoKSB7IHJldHVybiBtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2VuZGlm
CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MzU1
KQorKysgU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIwIEBACisyMDExLTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CisKKyAgICAgICAgVGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0
byBmcmVlIGluZGl2aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50
cm9kdWNlZCBhIGJlc3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFs
bG9jYXRvcgorICAgICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBh
bGxvY2F0ZSBtZW1vcnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBp
bmRpdmlkdWFsIG5vZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7
IG5laXRoZXIgQVZMVHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQg
dGhpcy4KKyAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUg
dG8gdXNlIGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICog
Rm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDogQWRkZWQuCisKIDIw
MTEtMDgtMjkgIE1hcmsgSGFobmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVbnppcCBpbml0aWFsaXphdGlvbiBsaXN0cyBhbmQgY29uc3RydWN0b3JzIGluIEpTQ2Vs
bCBoaWVyYXJjaHkgKDMvNykKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MzU1KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDktMDEgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMg
aXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0
YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxs
b2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0
aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRo
ZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkK
KyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tU
cmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4
ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2Nh
dG9yLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6ZmluZEV4YWN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlBhaXI6OnJlbW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjpmaW5k
TGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6
YXNzZXJ0Rm91bmRBbmRSZW1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNz
ZXJ0RXF1YWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0U2FtZVZhbHVl
c0ZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjp0ZXN0RHJpdmVyKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTEtMDktMDEgIEVyaWMgU2VpZGVs
ICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJFR1JFU1NJT04gKE5SV1QpOiBMZWFrcyBW
aWV3ZXIgY2FuJ3QgbG9hZCBsZWFrcyBmcm9tIHRlc3QgcnVucyB0aGF0IHVzZWQgTlJXVApJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0MzU1KQorKysgVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTcsNiArNyw4IEBACiAJb2JqZWN0cyA9IHsKIAogLyogQmVnaW4gUEJYQnVpbGRG
aWxlIHNlY3Rpb24gKi8KKwkJMEZDNkM0Q0MxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJl
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2
QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLzsgfTsKKwkJMEZDNkM0
Q0YxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovOyB9OwogCQkxQTAyQzg0RjEyNUQ0QTg0MDBFM0Y0QkQgLyog
RmluZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTAyQzg0RTEyNUQ0QTg0MDBFM0Y0QkQgLyogRmluZC5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1
RDRDRkQwMEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQu
aHRtbCAqLzsgfTsKIAkJMUE1RkVGREQxMjcwRTJBMzAwMEUyOTIxIC8qIEV2YWx1YXRlSmF2YVNj
cmlwdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
QTVGRUZEQzEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVhdGVKYXZhU2NyaXB0LmNwcCAqLzsgfTsK
QEAgLTEyNCw2ICsxMjYsOCBAQAogLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlv
biAqLwogCiAvKiBCZWdpbiBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMEZDNkM0Q0Ix
NDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBSZWRCbGFja1RyZWUuY3BwOyBwYXRoID0gV1RGL1JlZEJsYWNrVHJl
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQzZDNENFMTQxMDM0QUQwMDVC
N0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IE1ldGFBbGxvY2F0b3IuY3BwOyBwYXRoID0gV1RGL01ldGFBbGxvY2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAyQzg0QjEyNUQ0QTVFMDBFM0Y0QkQgLyog
ZmluZC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gZmluZC5odG1sOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAyQzg0RTEyNUQ0QTg0MDBFM0Y0QkQgLyogRmluZC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUE1RkVGREMxMjcwRTJBMzAwMEUyOTIxIC8qIEV2YWx1
YXRlSmF2YVNjcmlwdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
dmFsdWF0ZUphdmFTY3JpcHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU0
LDYgKzM1OCw4IEBACiAJCUJDOTA5NjQ2MTI1NTYxODkwMDA4Mzc1NiAvKiBXVEYgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQzZDNENFMTQxMDM0QUQw
MDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLywKKwkJCQkwRkM2QzRDQjE0MTAyN0UwMDA1
QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5
QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLywKIAkJCQlDMDEzNjNDNzEz
QzM5OTczMDBFRjM5NjQgLyogU3RyaW5nT3BlcmF0b3JzLmNwcCAqLywKIAkJCQlCQzkwOTY0QjEy
NTU2MUJGMDAwODM3NTYgLyogVmVjdG9yQmFzaWMuY3BwICovLApAQCAtNTYxLDYgKzU2Nyw4IEBA
CiAJCQkJQzA4NTg3RkMxM0ZFQzM5QjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlDMDg1ODgwMDEzRkVDM0E2MDAxRUY0RTUgLyogSW5zdGFu
Y2VNZXRob2RTd2l6emxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCTM3REM2NzhEMTQwRDdDNTAw
MEFCQ0NEQiAvKiBET01SYW5nZU9mU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDNkM0
Q0MxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkM2QzRDRjE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0E5NjZEQjE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNP
cGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw5NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9NZXRhQWxsb2NhdG9yLmg+Cisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworY2xhc3MgTWV0YUFsbG9jYXRvclRlc3Q6
IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNhbml0eUNoZWNrTW9k
ZSB7IFJ1blNhbml0eUNoZWNrLCBEb250UnVuU2FuaXR5Q2hlY2sgfTsKKyAgICAKKyAgICBlbnVt
IEhlYXBHcm93dGhNb2RlIHsgRG9udEdyb3dIZWFwLCBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNj
ZSwgRm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlIH07CisgICAgCisgICAgSGVhcEdyb3d0
aE1vZGUgY3VycmVudEhlYXBHcm93dGhNb2RlOworICAgIHNpemVfdCBhbGxvd0FsbG9jYXRlUGFn
ZXM7CisgICAgc2l6ZV90IHJlcXVlc3RlZE51bVBhZ2VzOworCisgICAgY2xhc3MgU2ltcGxlVGVz
dEFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
U2ltcGxlVGVzdEFsbG9jYXRvcihNZXRhQWxsb2NhdG9yVGVzdCogcGFyZW50KQorICAgICAgICAg
ICAgOiBNZXRhQWxsb2NhdG9yKDMyKQorICAgICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGFkZEZyZXNoRnJlZVNwYWNlKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSksIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VT
aXplKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIH5TaW1wbGVUZXN0
QWxsb2NhdG9yKCkKKyAgICAgICAgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50
LT5hbGxvY2F0b3JEZXN0cm95ZWQpOworICAgICAgICAgICAgbV9wYXJlbnQtPmFsbG9jYXRvckRl
c3Ryb3llZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9p
ZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKQorICAgICAgICB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG1fcGFyZW50LT5jdXJyZW50SGVhcEdyb3d0aE1vZGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgRG9udEdyb3dIZWFwOgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZToK
KyAgICAgICAgICAgIGNhc2UgRm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlOiB7CisgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUobV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyk7Cisg
ICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUobV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyA+
PSBudW1QYWdlcyk7CisgICAgICAgICAgICAgICAgbV9wYXJlbnQtPnJlcXVlc3RlZE51bVBhZ2Vz
ID0gbnVtUGFnZXM7CisgICAgICAgICAgICAgICAgbnVtUGFnZXMgPSBtX3BhcmVudC0+YWxsb3dB
bGxvY2F0ZVBhZ2VzOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVk
IG9mZnNldDsKKyAgICAgICAgICAgICAgICBpZiAobV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3Ro
TW9kZSA9PSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZSkKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9m
ZnNldCA9IDE7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdm9pZCogcmVzdWx0
ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFw
ICsgb2Zmc2V0KSAqIHBhZ2VTaXplKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIG1fcGFyZW50LT5hbGxvd0FsbG9jYXRlUGFnZXMgPSAwOworICAgICAgICAgICAgICAgIG1f
cGFyZW50LT5jdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgY291bnRlciA9IDA7IGNvdW50ZXIg
PCBudW1QYWdlcyArIG9mZnNldDsgKytjb3VudGVyKSB7CisgICAgICAgICAgICAgICAgICAgIG1f
cGFyZW50LT5wYWdlTWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGJ5dGVDb3VudGVyID0gMDsgYnl0ZUNvdW50ZXIgPCBwYWdlU2l6ZSgpOyArK2J5
dGVDb3VudGVyKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXJlbnQtPm1lbW9yeU1hcC0+
YXBwZW5kKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV9wYXJlbnQtPmFkZGl0aW9uYWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsK
KyAgICAgICAgCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQq
IHBhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBib3Ro
IGZyZWUgYW5kIHVubWFwcGVkLgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5w
YWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkp
OworICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihwYWdlKTsgYWRkcmVzcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihw
YWdlKSArIHBhZ2VTaXplKCk7ICsrYWRkcmVzcykKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJV
RSghbV9wYXJlbnQtPmJ5dGVTdGF0ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSkp
OworICAgICAgICAgICAgbV9wYXJlbnQtPnBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRw
dHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlIG9mIG9iamVjdHMgYXQg
dGhpcyBwb2ludCwgYnV0IGl0IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgLy8gYmUgbWFwcGVk
LgorICAgICAgICAgICAgRVhQRUNUX1RSVUUobV9wYXJlbnQtPnBhZ2VTdGF0ZShyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3Ig
KHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBh
ZGRyZXNzIDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsg
KythZGRyZXNzKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFtX3BhcmVudC0+Ynl0ZVN0
YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpKSk7CisgICAgICAgICAgICBtX3Bh
cmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VT
aXplKCkpID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgTWV0YUFsbG9jYXRvclRlc3QqIG1fcGFyZW50OworICAgIH07CisKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgYmFzZVBhZ2UgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZh
dWx0UGFnZXNJbkhlYXAgPSAxMDA7CisgICAgCisgICAgdW5zaWduZWQgYWRkaXRpb25hbFBhZ2Vz
SW5IZWFwOworICAgIAorICAgIFZlY3Rvcjxib29sLCAwPiogbWVtb3J5TWFwOworICAgIFZlY3Rv
cjxib29sLCAwPiogcGFnZU1hcDsKKyAgICBib29sIGFsbG9jYXRvckRlc3Ryb3llZDsKKyAgICAK
KyAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKiBhbGxvY2F0b3I7CisgICAgCisgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIG1lbW9yeU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwg
MD4oKTsKKyAgICAgICAgcGFnZU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2Ug
KyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAgcGFnZU1hcC0+YXBw
ZW5kKGZhbHNlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZUluUGFnZSA9IDA7IGJ5
dGVJblBhZ2UgPCBwYWdlU2l6ZSgpOyArK2J5dGVJblBhZ2UpCisgICAgICAgICAgICAgICAgbWVt
b3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yRGVz
dHJveWVkID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUg
PSBEb250R3Jvd0hlYXA7CisgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAg
IGFkZGl0aW9uYWxQYWdlc0luSGVhcCA9IDA7CisgICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0g
MDsKKyAgICAgICAgCisgICAgICAgIGFsbG9jYXRvciA9IG5ldyBTaW1wbGVUZXN0QWxsb2NhdG9y
KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsK
KyAgICAgICAgRVhQRUNUX1RSVUUoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVh
cCk7CisgICAgICAgIEVYUEVDVF9FUShhbGxvd0FsbG9jYXRlUGFnZXMsIHN0YXRpY19jYXN0PHNp
emVfdD4oMCkpOworICAgICAgICBFWFBFQ1RfRVEocmVxdWVzdGVkTnVtUGFnZXMsIHN0YXRpY19j
YXN0PHNpemVfdD4oMCkpOworICAgICAgICAKKyAgICAgICAgLy8gbWVtb3J5IHNob3VsZCBiZSBm
cmVlLgorICAgICAgICBmb3IgKHVuc2lnbmVkIHBhZ2UgPSBiYXNlUGFnZTsgcGFnZSA8IGJhc2VQ
YWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwOyArK3BhZ2UpIHsKKyAgICAgICAgICAgIEVYUEVDVF9U
UlVFKCFwYWdlU3RhdGUocGFnZSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlSW5Q
YWdlID0gMDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAgICAgICAg
ICAgICAgICBFWFBFQ1RfVFJVRSghYnl0ZVN0YXRlKHBhZ2UgKiBwYWdlU2l6ZSgpICsgYnl0ZUlu
UGFnZSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGlzIGF1dG9t
YXRpY2FsbHkgdGVzdHMgdGhhdCB0aGUgYWxsb2NhdG9yIGRpZCBub3QgbGVhaworICAgICAgICAv
LyBtZW1vcnksIHNvIGxvbmcgYXMgdGhlc2UgdGVzdHMgYXJlIHJ1bm5pbmcgd2l0aCAhZGVmaW5l
ZChOREVCVUcpLgorICAgICAgICAvLyBTZWUgTWV0YUFsbG9jYXRvcjo6bV9tYWxsb2NCYWxhbmNl
LgorICAgICAgICBkZWxldGUgYWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RS
VUUoYWxsb2NhdG9yRGVzdHJveWVkKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBtZW1vcnlN
YXA7CisgICAgICAgIGRlbGV0ZSBwYWdlTWFwOworICAgIH0KKyAgICAKKyAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIFNhbml0eUNoZWNrTW9kZSBz
YW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpLmxl
YWtSZWYoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaGFuZGxlKTsKKyAgICAgICAgRVhQRUNUX0VR
KGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAg
dWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUt
PnN0YXJ0KCkpOworICAgICAgICB1aW50cHRyX3QgZW5kQnl0ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJ
bkJ5dGVzOworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsg
Y3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRSghYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSk7CisgICAgICAgICAgICBieXRlU3RhdGUo
Y3VycmVudEJ5dGUpID0gdHJ1ZTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2VTdGF0ZShj
dXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlDaGVjaykKKyAgICAgICAgICAgIHNhbml0
eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZyZWUoTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlLCBTYW5pdHlDaGVja01v
ZGUgc2FuaXR5Q2hlY2tNb2RlID0gUnVuU2FuaXR5Q2hlY2spCisgICAgeworICAgICAgICBFWFBF
Q1RfVFJVRShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgbm90aWZ5RnJlZShoYW5kbGUtPnN0
YXJ0KCksIGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSk7CisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChzYW5pdHlDaGVja01vZGUgPT0gUnVuU2FuaXR5Q2hlY2sp
CisgICAgICAgICAgICBzYW5pdHlDaGVjaygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGlm
eUZyZWUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIHVp
bnRwdHJfdCBzdGFydEJ5dGUgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpOwor
ICAgICAgICB1aW50cHRyX3QgZW5kQnl0ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJbkJ5dGVzOworICAg
ICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUg
PCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShieXRl
U3RhdGUoY3VycmVudEJ5dGUpKTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNhbml0eUNoZWNrKCkK
KyAgICB7CisjaWZuZGVmIE5ERUJVRworICAgICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5ieXRl
c1Jlc2VydmVkKCkgLSBhbGxvY2F0b3ItPmJ5dGVzQWxsb2NhdGVkKCksIGFsbG9jYXRvci0+ZGVi
dWdGcmVlU3BhY2VTaXplKCkpOworI2VuZGlmCisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0b3It
PmJ5dGVzUmVzZXJ2ZWQoKSwgKGRlZmF1bHRQYWdlc0luSGVhcCArIGFkZGl0aW9uYWxQYWdlc0lu
SGVhcCkgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXNB
bGxvY2F0ZWQoKSwgYnl0ZXNBbGxvY2F0ZWQoKSk7CisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0
b3ItPmJ5dGVzQ29tbWl0dGVkKCksIGJ5dGVzQ29tbWl0dGVkKCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbmZpcm0oTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQorICAgIHsKKyAgICAg
ICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5k
bGUtPnN0YXJ0KCkpOworICAgICAgICBjb25maXJtKHN0YXJ0Qnl0ZSwgc3RhcnRCeXRlICsgaGFu
ZGxlLT5zaXplSW5CeXRlcygpLCB0cnVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb25maXJt
SGlnaFdhdGVybWFyayhNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAg
ICBjb25maXJtKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPmVuZCgpKSwgKGJh
c2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgdm9pZCBjb25maXJtKHVpbnRwdHJfdCBzdGFydEJ5dGUs
IHVpbnRwdHJfdCBlbmRCeXRlLCBib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50
cHRyX3QgY3VycmVudEJ5dGUgPSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytj
dXJyZW50Qnl0ZSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKGJ5dGVTdGF0ZShjdXJyZW50Qnl0
ZSksIHZhbHVlKTsKKyAgICAgICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShwYWdlU3RhdGUoY3VycmVudEJ5dGUgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICAgICAgdWludHB0cl90IGZpcnN0RnJlZVBh
Z2UgPSAoc3RhcnRCeXRlICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAg
ICAgIHVpbnRwdHJfdCBsYXN0RnJlZVBhZ2UgPSAoZW5kQnl0ZSAtIHBhZ2VTaXplKCkpIC8gcGFn
ZVNpemUoKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRQYWdlID0gZmlyc3RG
cmVlUGFnZTsgY3VycmVudFBhZ2UgPD0gbGFzdEZyZWVQYWdlOyArK2N1cnJlbnRQYWdlKQorICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFwYWdlU3RhdGUoY3VycmVudFBhZ2UpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKQorICAgIHsKKyAg
ICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IG1lbW9yeU1hcC0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAo
bWVtb3J5TWFwLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5dGVz
Q29tbWl0dGVkKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBwYWdlTWFwLT5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgIGlmIChwYWdlTWFwLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCAqIHBhZ2VTaXplKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wmIGJ5dGVTdGF0ZSh2b2lkKiBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJ5dGVTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRk
cmVzcykpOworICAgIH0KKyAgICAKKyAgICBib29sJiBieXRlU3RhdGUodWludHB0cl90IGFkZHJl
c3MpCisgICAgeworICAgICAgICB1aW50cHRyX3QgYnl0ZUluZGV4ID0gYWRkcmVzcyAtIGJhc2VQ
YWdlICogcGFnZVNpemUoKTsKKyAgICAgICAgcmV0dXJuIG1lbW9yeU1hcC0+YXQoYnl0ZUluZGV4
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCYgcGFnZVN0YXRlKHVpbnRwdHJfdCBwYWdlKQorICAg
IHsKKyAgICAgICAgdWludHB0cl90IHBhZ2VJbmRleCA9IHBhZ2UgLSBiYXNlUGFnZTsKKyAgICAg
ICAgcmV0dXJuIHBhZ2VNYXAtPmF0KHBhZ2VJbmRleCk7CisgICAgfQorCisgICAgLy8gVGVzdCBo
ZWxwZXJzCisKKyAgICB2b2lkIHRlc3RPbmVBbGxvYyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAg
ICAgIC8vIFRlc3RzIHRoZSBtb3N0IGJhc2ljIGJlaGF2aW9yOiBhbGxvY2F0ZSBvbmUgdGhpbmcg
YW5kIGZyZWUgaXQuIEFsc28KKyAgICAgICAgLy8gdmVyaWZpZXMgdGhhdCB0aGUgc3RhdGUgb2Yg
cGFnZXMgaXMgY29ycmVjdC4KKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGhhbmRsZSA9IGFsbG9jYXRlKHNpemUpOworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHBhZ2VTdGF0ZShiYXNlUGFnZSkpOworICAgICAgICAKKyAgICAgICAgY29uZmly
bShoYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RSZXBl
YXRBbGxvY0ZyZWUoc2l6ZV90IGZpcnN0U2l6ZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGVz
dHMgcmlnaHQtY29hbGVzY2luZyBieSByZXBlYXRlZGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcu
IFRoZSBpZGVhCisgICAgICAgIC8vIGlzIHRoYXQgaWYgeW91IGFsbG9jYXRlIHNvbWV0aGluZyBh
bmQgdGhlbiBmcmVlIGl0LCB0aGVuIHRoZSBoZWFwIHNob3VsZAorICAgICAgICAvLyBsb29rIGlk
ZW50aWNhbCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gZHVlIHRvIGEgcmln
aHQtY29hbGVzY2UKKyAgICAgICAgLy8gb2YgdGhlIGZyZWVkIGNodW5rIGFuZCB0aGUgYWxyZWFk
eS1mcmVlIG1lbW9yeSwgYW5kIHNvIHN1YnNlcXVlbnQKKyAgICAgICAgLy8gYWxsb2NhdGlvbnMg
c2hvdWxkIGJlaGF2ZSB0aGUgc2FtZSBhcyB0aGUgZmlyc3Qgb25lLgorICAgICAgICAKKyAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7
CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAg
ICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICB2YV9saXN0IGFyZ0xpc3Q7CisgICAg
ICAgIHZhX3N0YXJ0KGFyZ0xpc3QsIGZpcnN0U2l6ZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qg
c2l6ZUluQnl0ZXMgPSB2YV9hcmcoYXJnTGlzdCwgaW50KSkgeworICAgICAgICAgICAgaGFuZGxl
ID0gYWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+
c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRl
cyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAg
ICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgfQorICAgICAgICB2YV9lbmQoYXJnTGlzdCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShzaXplX3QgZmlyc3RT
aXplLCBzaXplX3Qgc2Vjb25kU2l6ZSwgc2l6ZV90IHRoaXJkU2l6ZSkKKyAgICB7CisgICAgICAg
IC8vIEFsbG9jYXRlcyBzb21ldGhpbmcgb2Ygc2l6ZSBmaXJzdFNpemUsIHRoZW4gc29tZXRoaW5n
IG9mIHNpemUgc2Vjb25kU2l6ZSwgYW5kIHRoZW4KKyAgICAgICAgLy8gZnJlZXMgdGhlIGZpcnN0
IGFsbG9jYXRpb24sIGFuZCB0aGVuIHRoZSBzZWNvbmQsIGFuZCB0aGVuIGF0dGVtcHRzIHRvIGFs
bG9jYXRlIHRoZQorICAgICAgICAvLyB0aGlyZCwgYXNzZXJ0aW5nIHRoYXQgaXQgYWxsb2NhdGVk
IGF0IHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIGhlYXAuCisgICAgICAgIAorICAgICAgICAvLyBO
b3RlIHRoYXQgdGhpcyB0ZXN0IG1heSBjYXVzZSByaWdodC1hbGxvY2F0aW9uLCB3aGljaCB3aWxs
IGNhdXNlIHRoZSB0ZXN0IHRvIGZhaWwuCisgICAgICAgIC8vIFRodXMgdGhlIGNvcnJlY3Qgd2F5
IG9mIHJ1bm5pbmcgdGhpcyB0ZXN0IGlzIHRvIGVuc3VyZSB0aGF0IHNlY29uZFNpemUgaXMKKyAg
ICAgICAgLy8gcGlja2VkIGluIHN1Y2ggYSB3YXkgdGhhdCBpdCBuZXZlciBzdHJhZGRsZXMgYSBw
YWdlLgorICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUg
PSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RIYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwor
ICAgICAgICBFWFBFQ1RfRVEoZmlyc3RIYW5kbGUtPnNpemVJbkJ5dGVzKCksIGZpcnN0U2l6ZSk7
CisgICAgICAgIAorICAgICAgICBjb25maXJtKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgY29uZmly
bUhpZ2hXYXRlcm1hcmsoZmlyc3RIYW5kbGUpOworCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUqIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICBFWFBFQ1Rf
RVEoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkgKyBmaXJzdFNpemUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhh
bmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25m
aXJtKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgY29uZmlybShzZWNvbmRIYW5kbGUpOworICAgICAg
ICBjb25maXJtSGlnaFdhdGVybWFyayhzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAg
ZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHNlY29uZEhhbmRs
ZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAg
IAorICAgICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJt
KGJhc2VQYWdlICogcGFnZVNpemUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAq
IHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUqIHRoaXJkSGFuZGxlID0gYWxsb2NhdGUodGhpcmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VR
KHRoaXJkSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKHRoaXJkSGFuZGxlLT5zaXplSW5CeXRl
cygpLCB0aGlyZFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybSh0aGlyZEhhbmRsZSk7
CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgCisg
ICAgICAgIGZyZWUodGhpcmRIYW5kbGUpOworICAgIH0KKyAgICAKKyAgICBlbnVtIFRlc3RGSUZP
QWxsb2NNb2RlIHsgRmlsbEF0RW5kLCBFYWdlckZpbGwgfTsKKyAgICB2b2lkIHRlc3RGSUZPQWxs
b2MoVGVzdEZJRk9BbGxvY01vZGUgbW9kZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3
aWxsIHRlc3QgdGhlIHNpbXBsZSBjYXNlIG9mIG5vLWNvYWxlc2NlIChmcmVlaW5nIHRoZSBsZWZ0
LW1vc3QKKyAgICAgICAgLy8gY2h1bmsgaW4gbWVtb3J5IHdoZW4gdGhlIGNodW5rIHRvIHRoZSBy
aWdodCBvZiBpdCBpcyBhbGxvY2F0ZWQpIGFuZAorICAgICAgICAvLyBmdWxseSBleGVyY2lzZSBs
ZWZ0LWNvYWxlc2NpbmcgYW5kIGZ1bGwtY29hbGVzY2luZy4gSW4gRWFnZXJGaWxsCisgICAgICAg
IC8vIG1vZGUsIHRoaXMgYWxzbyB0ZXN0cyBwZXJmZWN0LWZpdCBhbGxvY2F0aW9uIGFuZCBuby1j
b2FsZXNjaW5nIGZyZWUuCisgICAgICAgIAorICAgICAgICBzaXplX3QgdG90YWxTaXplID0gMDsK
KyAgICAgICAgCisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxl
czsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICAgICAgdmFfc3RhcnQo
YXJnTGlzdCwgbW9kZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0ZXMgPSB2YV9h
cmcoYXJnTGlzdCwgaW50KSkgeworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFu
ZGxlID0gYWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRs
ZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
ICsgdG90YWxTaXplKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRl
cygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oaGFu
ZGxlKTsKKyAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGhhbmRsZSk7CisgICAgICAgICAgICB0
b3RhbFNpemUgKz0gc2l6ZUluQnl0ZXM7CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5kKGFyZ0xp
c3QpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
aGFuZGxlcy5zaXplKCk7ICsraW5kZXgpCisgICAgICAgICAgICBjb25maXJtKGhhbmRsZXMuYXQo
aW5kZXgpKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBzaXplU29GYXIgPSAwOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgc2l6ZVNvRmFyICs9IGhhbmRsZXMuYXQoaW5kZXgpLT5zaXplSW5C
eXRlcygpOworICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgICAg
ICBpZiAobW9kZSA9PSBFYWdlckZpbGwpIHsKKyAgICAgICAgICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplU29GYXIpOworICAgICAgICAgICAgICAgIEVY
UEVDVF9FUShoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
Y29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRv
dGFsU2l6ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaGFuZGxlcy5zaXpl
KCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGVz
Lmxhc3QoKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25m
aXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25m
aXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgc2l6ZVNv
RmFyLCBmYWxzZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChzaXplU29GYXIgPT0gdG90YWxTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZp
cm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAp
ICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gRmls
bEF0RW5kKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbEhhbmRsZSA9
IGFsbG9jYXRlKHRvdGFsU2l6ZSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoZmluYWxIYW5kbGUt
PnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkp
OworICAgICAgICAgICAgRVhQRUNUX0VRKGZpbmFsSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0b3Rh
bFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBjb25maXJtKGZpbmFsSGFuZGxlKTsK
KyAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGZpbmFsSGFuZGxlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZnJlZShmaW5hbEhhbmRsZSk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCB0ZXN0RmlsbEhlYXAoc2l6ZV90IHNpemVJbkJ5dGVzLCBzaXplX3QgbnVt
QWxsb2NhdGlvbnMpCisgICAgeworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSos
IDA+IGhhbmRsZXM7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtQWxsb2NhdGlvbnM7ICsraW5kZXgpCisgICAgICAgICAgICBoYW5kbGVzLmFwcGVu
ZChhbGxvY2F0ZShzaXplSW5CeXRlcywgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIAor
ICAgICAgICBzYW5pdHlDaGVjaygpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFs
bG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAg
ICAgICAgIGZyZWUoaGFuZGxlcy5hdChpbmRleCksIERvbnRSdW5TYW5pdHlDaGVjayk7CisgICAg
ICAgIAorICAgICAgICBzYW5pdHlDaGVjaygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RS
aWdodEFsbG9jYXRpb24oc2l6ZV90IGZpcnN0TGVmdFNpemUsIHNpemVfdCBmaXJzdFJpZ2h0U2l6
ZSwgc2l6ZV90IHNlY29uZExlZnRTaXplLCBzaXplX3Qgc2Vjb25kUmlnaHRTaXplKQorICAgIHsK
KyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RMZWZ0ID0gYWxsb2NhdGUoZmlyc3RM
ZWZ0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdExlZnQtPnN0YXJ0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RSaWdodCA9IGFsbG9jYXRlKGZpcnN0UmlnaHRT
aXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkp
OworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kTGVmdCA9IGFs
bG9jYXRlKHNlY29uZExlZnRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZExlZnQtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIGZp
cnN0TGVmdC0+c2l6ZUluQnl0ZXMoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogc2Vjb25kUmlnaHQgPSBhbGxvY2F0ZShzZWNvbmRSaWdodFNpemUpOworICAgICAg
ICBFWFBFQ1RfRVEoc2Vjb25kUmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigo
YmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSAtIGZpcnN0UmlnaHQt
PnNpemVJbkJ5dGVzKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RMZWZ0KTsKKyAg
ICAgICAgZnJlZShmaXJzdFJpZ2h0KTsKKyAgICAgICAgZnJlZShzZWNvbmRMZWZ0KTsKKyAgICAg
ICAgZnJlZShzZWNvbmRSaWdodCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdEJlc3RGaXQoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6
ZV90IHN0ZXAsIHVuc2lnbmVkIG51bVNsb3RzLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tN
b2RlKQorICAgIHsKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5k
bGVzVG9GcmVlOworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRs
ZXM7CisgICAgICAgIFZlY3Rvcjx2b2lkKiwgMD4gbG9jYXRpb25zOworICAgICAgICAKKyAgICAg
ICAgc2l6ZV90IHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxsb2Nh
dG9ySGFuZGxlKiB0b0ZyZWUgPSBhbGxvY2F0ZShzaXplLCBzYW5pdHlDaGVja01vZGUpOworICAg
ICAgICAgICAgaWYgKCFoYW5kbGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHdoaWxl
ICh0b0ZyZWUtPnN0YXJ0KCkgIT0gaGFuZGxlcy5sYXN0KCktPmVuZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGhhbmRsZXNUb0ZyZWUuYXBwZW5kKHRvRnJlZSk7CisgICAgICAgICAgICAgICAg
ICAgIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmcmFnZ2VyID0gYWxsb2NhdGUoMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoZnJhZ2dlci0+c3RhcnQoKSwgdG9GcmVlLT5lbmQoKSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGxvY2F0aW9ucy5hcHBlbmQodG9GcmVlLT5zdGFydCgpKTsKKworICAgICAg
ICAgICAgaGFuZGxlc1RvRnJlZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAgIGhhbmRsZXMu
YXBwZW5kKGZyYWdnZXIpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplICs9IHN0ZXA7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsb2NhdGlvbnMuc2l6ZSgpID09
IG51bVNsb3RzKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IGhhbmRsZXNUb0ZyZWUuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICAgICAgZnJlZSho
YW5kbGVzVG9GcmVlLmF0KGluZGV4KSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgCisgICAg
ICAgIHNpemUgPSBmaXJzdFNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBp
bmRleCA8IG51bVNsb3RzOyArK2luZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKiBiZXN0Rml0ID0gYWxsb2NhdGUoc2l6ZSAtIDMyLCBzYW5pdHlDaGVja01vZGUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShiZXN0Rml0LT5zdGFydCgpID09IGxv
Y2F0aW9ucy5hdChpbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJlc3RGaXQtPmVu
ZCgpID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihsb2NhdGlvbnMuYXQoaW5kZXgpKSArIHNpemUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc21hbGwgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hlY2tN
b2RlKTsKKyAgICAgICAgICAgIGlmIChiZXN0Rml0LT5zdGFydCgpID09IGxvY2F0aW9ucy5hdChp
bmRleCkpCisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHNtYWxsLT5zdGFydCgpLCBiZXN0Rml0
LT5lbmQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHNt
YWxsLT5lbmQoKSwgYmVzdEZpdC0+c3RhcnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGZyZWUoYmVzdEZpdCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIGZyZWUoc21hbGws
IHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3Rl
cDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQo
aW5kZXgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgp
LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAK
KyAgICAgICAgZnJlZShmaW5hbCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB0ZXN0U2hyaW5rKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplKQorICAg
IHsKKyAgICAgICAgLy8gQWxsb2NhdGUgdGhlIHRoaW5nIHRoYXQgd2lsbCBiZSBzaHJ1bmsKKyAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsK
KyAgICAgICAgCisgICAgICAgIC8vIFNocmluayBpdCwgYW5kIG1ha2Ugc3VyZSB0aGF0IG91ciBz
dGF0ZSByZWZsZWN0cyB0aGUgc2hyaW5rYWdlLgorICAgICAgICBub3RpZnlGcmVlKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0
KCkpICsgc2Vjb25kU2l6ZSksIGZpcnN0U2l6ZSAtIHNlY29uZFNpemUpOworICAgICAgICAKKyAg
ICAgICAgaGFuZGxlLT5zaHJpbmsoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5k
bGUtPnNpemVJbkJ5dGVzKCksIHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgc2FuaXR5
Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5v
dCBlbXB0eS4KKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVs
dFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgLy8gQWxsb2Nh
dGUgdGhlIHJlbWFpbmRlciBvZiB0aGUgaGVhcC4KKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogcmVtYWluZGVyID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSAt
IHNlY29uZFNpemUpOworICAgICAgICBFWFBFQ1RfRVEocmVtYWluZGVyLT5zdGFydCgpLCBoYW5k
bGUtPmVuZCgpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUocmVtYWluZGVyKTsKKyAgICAgICAg
ZnJlZShoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAg
aXMgZW1wdHkgYW5kIGZpbmlzaCB1cC4KKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlu
YWwgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAg
RVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFn
ZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmluYWwpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUs
IHNpemVfdCBudW1QYWdlcywgc2l6ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAgICBFWFBF
Q1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFn
ZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAg
RVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBF
WFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVt
UGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93
dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jQ29hbGVzY2U7CisgICAgICAgIGFsbG93QWxsb2Nh
dGVQYWdlcyA9IG51bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAg
ICBFWFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQYWdlcywgc3RhdGljX2Nhc3Q8c2l6ZV90Pigw
KSk7CisgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWROdW1QYWdlcywgKHNlY29uZFNpemUgKyBw
YWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhh
bmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVs
dFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIHJlcXVlc3Rl
ZE51bVBhZ2VzID0gMDsKKyAgICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAg
ICAgICBmcmVlKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGFsbG9jYXRl
KChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlKHNpemVfdCBmaXJzdFNp
emUsIHNpemVfdCBudW1QYWdlcywgc2l6ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAgICBm
cmVlKGFsbG9jYXRlKGZpcnN0U2l6ZSkpOworICAgICAgICBmcmVlKGFsbG9jYXRlKGRlZmF1bHRQ
YWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRv
ci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0g
YWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxv
Y2F0b3ItPmFsbG9jYXRlKHNlY29uZFNpemUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9j
YXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3RE
ZW1hbmRBbGxvY0RvbnRDb2FsZXNjZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVt
UGFnZXM7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5k
bGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVF
KGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBFWFBFQ1Rf
RVEoYWxsb3dBbGxvY2F0ZVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKKyAgICAgICAg
RVhQRUNUX0VRKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAx
KSAvIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zdGFydCgp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAg
KyAxKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIHJlcXVlc3RlZE51bVBhZ2Vz
ID0gMDsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRl
KChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisKKyAgICAg
ICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAg
ICAgCisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFn
ZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBm
aXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIHNlY29uZEhhbmRsZSA9
IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RIYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwor
ICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxl
KTsKKyAgICB9Cit9OworCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEVtcHR5KQoreworICAg
IC8vIFRlc3RzIHRoYXQgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgYW4gYWxsb2NhdG9yIHdvcmtz
LgorfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEFsbG9jWmVybykgICAgCit7CisgICAg
Ly8gVGVzdHMgdGhhdCBhbGxvY2F0aW5nIGEgemVyby1sZW5ndGggYmxvY2sgcmV0dXJucyAwIGFu
ZAorICAgIC8vIGRvZXMgbm90IGNoYW5nZSBhbnl0aGluZyBpbiBtZW1vcnkuCisgICAgCisgICAg
QVNTRVJUKCFhbGxvY2F0b3ItPmFsbG9jYXRlKDApKTsKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkp
OworICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgZnJlZShmaW5hbCk7Cit9CisKK1RFU1RfRihN
ZXRhQWxsb2NhdG9yVGVzdCwgT25lQWxsb2MzMikKK3sKKyAgICB0ZXN0T25lQWxsb2MoMzIpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIE9uZUFsbG9jNjQpCit7CisgICAgdGVzdE9u
ZUFsbG9jKDY0KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBPbmVBbGxvY1R3b1Bh
Z2VzKQoreworICAgIHRlc3RPbmVBbGxvYyhwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihN
ZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlMzJUd2ljZSkKK3sKKyAgICB0ZXN0UmVw
ZWF0QWxsb2NGcmVlKDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
UmVwZWF0QWxsb2NGcmVlMzJUaGVuNjQpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwg
NjQsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTY0
VGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCAwKTsKK30KKworVEVT
VF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlR3aWNlVGhlbjY0KQorewor
ICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRh
QWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlMzJUaGVuNjRUd2ljZSkKK3sKKyAgICB0ZXN0
UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgNjQsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIFJlcGVhdEFsbG9jRnJlZTY0VGhlbjMyVGhlbjY0KQoreworICAgIHRlc3RSZXBlYXRB
bGxvY0ZyZWUoNjQsIDMyLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
UmVwZWF0QWxsb2NGcmVlMzJUaHJpY2UpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwg
MzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0Zy
ZWUzMlRoZW42NFRoZW4zMikKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIs
IDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTY0VGhl
bjMyVHdpY2UpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDMyLCAwKTsKK30K
KworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWVUd29QYWdlc1RoZW4z
MikKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUo
KSAqIDIpLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxs
b2NGcmVlMzJUaGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgc3Rh
dGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIDApOworfQorCitURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZVBhZ2VUaGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFJl
cGVhdEFsbG9jRnJlZShzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkpLCBzdGF0aWNfY2FzdDxp
bnQ+KHBhZ2VTaXplKCkgKiAyKSwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
UmVwZWF0QWxsb2NGcmVlVHdvUGFnZXNUaGVuUGFnZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NG
cmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAqIDIpLCBzdGF0aWNfY2FzdDxpbnQ+KHBh
Z2VTaXplKCkpLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxs
Q29hbGVzY2UzMlBsdXMzMlRoZW4xMjgpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgz
MiwgMzIsIDEyOCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENv
YWxlc2NlMzJQbHVzNjRUaGVuMTI4KQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIs
IDY0LCAxMjgpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2Fs
ZXNjZTY0UGx1czMyVGhlbjEyOCkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDY0LCAz
MiwgMTI4KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVz
Y2UzMlBsdXNQYWdlTGVzczMyVGhlblBhZ2UpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNj
ZSgzMiwgcGFnZVNpemUoKSAtIDMyLCBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2UzMlBsdXNQYWdlTGVzczMyVGhlblR3b1BhZ2Vz
KQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFn
ZVNpemUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxD
b2FsZXNjZVBhZ2VQbHVzMzJUaGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2Fs
ZXNjZShwYWdlU2l6ZSgpLCAzMiwgcGFnZVNpemUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZVBhZ2VQbHVzUGFnZVRoZW5Ud29QYWdlcykK
K3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHBhZ2VTaXplKCksIHBhZ2VTaXplKCksIHBh
Z2VTaXplKCkgKiAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NG
aWxsQXRFbmQzMlR3aWNlKQoreworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIs
IDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMy
VGhyaWNlKQoreworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAwKTsK
K30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NGaWxsQXRFbmQzMkZvdXJU
aW1lcykKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAzMiwgMzIsIDAp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZFBhZ2VM
ZXNzMzJUaGVuMzJUaGVuUGFnZUxlc3M2NFRoZW42NCkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEZp
bGxBdEVuZCwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpIC0gMzIpLCAzMiwgc3RhdGljX2Nh
c3Q8aW50PihwYWdlU2l6ZSgpIC0gNjQpLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2Nh
dG9yVGVzdCwgRklGT0FsbG9jRWFnZXJGaWxsMzJUd2ljZSkKK3sKKyAgICB0ZXN0RklGT0FsbG9j
KEVhZ2VyRmlsbCwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBG
SUZPQWxsb2NFYWdlckZpbGwzMlRocmljZSkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmls
bCwgMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0Fs
bG9jRWFnZXJGaWxsMzJGb3VyVGltZXMpCit7CisgICAgdGVzdEZJRk9BbGxvYyhFYWdlckZpbGws
IDMyLCAzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZP
QWxsb2NFYWdlckZpbGxQYWdlTGVzczMyVGhlbjMyVGhlblBhZ2VMZXNzNjRUaGVuNjQpCit7Cisg
ICAgdGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAt
IDMyKSwgMzIsIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAtIDY0KSwgNjQsIDApOworfQor
CitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZpbGxIZWFwMzIpCit7CisgICAgdGVzdEZpbGxI
ZWFwKDMyLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC8gMzIpOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIEZpbGxIZWFwUGFnZSkKK3sKKyAgICB0ZXN0RmlsbEhlYXAo
cGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBGaWxsSGVhcFR3b1BhZ2VzKQoreworICAgIHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgp
ICogMiwgZGVmYXVsdFBhZ2VzSW5IZWFwIC8gMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgUmlnaHRBbGxvY2F0aW9uMzJUaGVuUGFnZVRoZW4zMlRoZW5QYWdlKQoreworICAgIHRl
c3RSaWdodEFsbG9jYXRpb24oMzIsIHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpKTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSaWdodEFsbG9jYXRpb25RdWFydGVyUGFnZVRoZW5Q
YWdlVGhlblF1YXJ0ZXJQYWdlVGhlblBhZ2UpCit7CisgICAgdGVzdFJpZ2h0QWxsb2NhdGlvbihw
YWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSwgcGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCkpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NFRocmljZSkKK3sK
KyAgICB0ZXN0QmVzdEZpdCg2NCwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9G
KE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0NjRQbHVzNjRUZW5UaW1lcykKK3sKKyAgICB0ZXN0
QmVzdEZpdCg2NCwgNjQsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NEh1bmRyZWRUaW1lcykKK3sKKyAgICB0ZXN0
QmVzdEZpdCg2NCwgNjQsIDEwMCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1l
dGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzNjRUaHJpY2UpCit7CisgICAgdGVzdEJlc3RG
aXQoOTYsIDY0LCAzLCBSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgQmVzdEZpdDk2UGx1czY0VGVuVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDY0
LCAxMCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0
LCBCZXN0Rml0OTZQbHVzNjRIdW5kcmVkVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDY0
LCAxMDAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVz
dCwgQmVzdEZpdDk2UGx1czk2VGhyaWNlKQoreworICAgIHRlc3RCZXN0Rml0KDk2LCA5NiwgMywg
UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5
NlBsdXM5NlRlblRpbWVzKQoreworICAgIHRlc3RCZXN0Rml0KDk2LCA5NiwgMTAsIERvbnRSdW5T
YW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1
czk2RWlnaHR5VGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCA4MCwgRG9udFJ1blNh
bml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbms2NFRvMzIp
Cit7CisgICAgdGVzdFNocmluayg2NCwgMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRl
c3QsIFNocmlua1BhZ2VUbzMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSwgMzIpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1BhZ2VUb1BhZ2VMZXNzMzIpCit7
CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC0gMzIpOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2VzVG8zMikKK3sKKyAgICB0ZXN0U2hy
aW5rKHBhZ2VTaXplKCkgKiAyLCAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
U2hyaW5rVHdvUGFnZXNUb1BhZ2VQbHVzMzIpCit7CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgp
ICogMiwgcGFnZVNpemUoKSArIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBT
aHJpbmtUd29QYWdlc1RvUGFnZSkKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBw
YWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtUd29QYWdl
c1RvUGFnZUxlc3MzMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6
ZSgpIC0gMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2Vz
VG9Ud29QYWdlc0xlc3MzMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdl
U2l6ZSgpICogMiAtIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1hbmRB
bGxvY0NvYWxlc2NlUGFnZVRoZW5Eb3VibGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxvY0Nv
YWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCwgZGVmYXVsdFBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRGVtYW5kQWxs
b2NDb2FsZXNjZVBhZ2VUaGVuVHJpcGxlSGVhcCkKK3sKKyAgICB0ZXN0RGVtYW5kQWxsb2NDb2Fs
ZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiAyLCBkZWZhdWx0UGFnZXNJbkhl
YXAgKiBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1hbmRB
bGxvY0RvbnRDb2FsZXNjZVBhZ2VUaGVuRG91YmxlSGVhcCkKK3sKKyAgICB0ZXN0RGVtYW5kQWxs
b2NEb250Q29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwLCBkZWZhdWx0UGFn
ZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxh
Y2tUcmVlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9SZWRCbGFja1RyZWUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9W
ZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRB
UEkgeworCitjbGFzcyBSZWRCbGFja1RyZWVUZXN0OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Citw
dWJsaWM6CisgICAgdW5zaWduZWQgbV9jb3VudGVyOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBT
ZXRVcCgpCisgICAgeworICAgICAgICBtX2NvdW50ZXIgPSAwOworICAgIH0KKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RydWN0IFBh
aXIgeworICAgICAgICBjaGFyIGtleTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWU7CisgICAgICAg
IAorICAgICAgICBQYWlyKCkgeyB9CisgICAgICAgIAorICAgICAgICBQYWlyKGNoYXIga2V5LCB1
bnNpZ25lZCB2YWx1ZSkKKyAgICAgICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgICAgICwgdmFs
dWUodmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFBhaXImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4ga2V5ID09IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBrZXkgPCBvdGhlci5rZXk7CisgICAgICAgIH0KKyAgICB9OworICAgIAor
ICAgIHR5cGVkZWYgVmVjdG9yPFBhaXIsIDE2PiBQYWlyVmVjdG9yOworICAgIAorICAgIFBhaXJW
ZWN0b3IgZmluZEV4YWN0KFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7Cisg
ICAgICAgIFBhaXJWZWN0b3IgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAg
ICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoYXNWZWN0b3IuYXQoaW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc3RkOjpzb3J0KHJlc3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoUGFp
clZlY3RvciYgYXNWZWN0b3IsIHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGFzVmVjdG9y
LmF0KGluZGV4KSA9IGFzVmVjdG9yLmxhc3QoKTsKKyAgICAgICAgYXNWZWN0b3IucmVtb3ZlTGFz
dCgpOworICAgIH0KKyAgICAKKyAgICBQYWlyVmVjdG9yIGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JF
cXVhbChQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXkpCisgICAgeworICAgICAgICBjaGFy
IGJlc3RLZXkgPSAwOyAvLyBhc3NpZ25tZW50IHRvIG1ha2UgZ2NjIGhhcHB5CisgICAgICAgIGJv
b2wgZm91bmRLZXkgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
ID0gMDsgaW5kZXggPCBhc1ZlY3Rvci5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlm
IChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID49IGtleSkgeworICAgICAgICAgICAgICAgIGlmIChh
c1ZlY3Rvci5hdChpbmRleCkua2V5IDwgYmVzdEtleSB8fCAhZm91bmRLZXkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm91bmRLZXkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBiZXN0S2V5
ID0gYXNWZWN0b3IuYXQoaW5kZXgpLmtleTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFBhaXJWZWN0b3IgcmVzdWx0OworICAg
ICAgICAKKyAgICAgICAgaWYgKCFmb3VuZEtleSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gZmluZEV4YWN0KGFzVmVjdG9yLCBiZXN0S2V5KTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhc3NlcnRGb3VuZEFuZFJlbW92ZShQYWlyVmVjdG9yJiBh
c1ZlY3RvciwgY2hhciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgICAgIGJv
b2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gMDsgLy8g
bWFrZSBjb21waWxlcnMgaGFwcHkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCkua2V5ID09IGtleQorICAgICAgICAgICAg
ICAgICAgICAmJiBhc1ZlY3Rvci5hdChpbmRleCkudmFsdWUgPT0gdmFsdWUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoIWZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm91
bmRJbmRleCA9IGluZGV4OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgRVhQRUNUX1RSVUUoZm91bmQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICByZW1vdmUoYXNWZWN0b3IsIGZvdW5kSW5kZXgpOworICAgIH0KKyAgICAKKyAg
ICAvLyBUaGlzIGRlbGliZXJhdGVseSBwYXNzZXMgYSBjb3B5IG9mIHRoZSB2ZWN0b3IuCisgICAg
dm9pZCBhc3NlcnRFcXVhbChSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+JiBhc1RyZWUsIFBh
aXJWZWN0b3IgYXNWZWN0b3IpCisgICAgeworICAgICAgICBmb3IgKFJlZEJsYWNrVHJlZTxjaGFy
LCB1bnNpZ25lZD46Ok5vZGUqIGN1cnJlbnQgPSBhc1RyZWUuZmlyc3QoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGFzVHJlZS5zdWNjZXNzb3IoY3VycmVudCkpCisgICAgICAgICAgICBhc3NlcnRGb3Vu
ZEFuZFJlbW92ZShhc1ZlY3RvciwgY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShSZWRCbGFja1RyZWU8Y2hh
ciwgdW5zaWduZWQ+JiBhc1RyZWUsIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUq
IG5vZGUsIFBhaXJWZWN0b3IgZm91bmRWYWx1ZXMsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUpIHsKKyAgICAgICAgICAgIEVYUEVDVF9FUShub2RlLT5rZXksIGtleSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUq
IHByZXZOb2RlID0gbm9kZTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBub2Rl
ID0gcHJldk5vZGU7CisgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBhc1RyZWUucHJlZGVjZXNz
b3IocHJldk5vZGUpOworICAgICAgICAgICAgfSB3aGlsZSAocHJldk5vZGUgJiYgcHJldk5vZGUt
PmtleSA9PSBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+
a2V5LCBrZXkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXByZXZOb2RlIHx8IHByZXZOb2Rl
LT5rZXkgPCBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAg
ICAgICAgYXNzZXJ0Rm91bmRBbmRSZW1vdmUoZm91bmRWYWx1ZXMsIG5vZGUtPmtleSwgbm9kZS0+
dmFsdWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUgPSBhc1RyZWUu
c3VjY2Vzc29yKG5vZGUpOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFub2RlIHx8IG5v
ZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgfSB3aGlsZSAobm9kZSAmJiBub2RlLT5rZXkg
PT0ga2V5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoZm91bmRW
YWx1ZXMuaXNFbXB0eSgpKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlIGNvbnRyb2wgc3RyaW5n
IGlzIGEgbnVsbC10ZXJtaW5hdGVkIGxpc3Qgb2YgY29tbWFuZHMuIEVhY2gKKyAgICAvLyBjb21t
YW5kIGlzIHR3byBjaGFyYWN0ZXJzLCB3aXRoIHRoZSBmaXJzdCBpZGVudGlmeWluZyB0aGUgb3Bl
cmF0aW9uCisgICAgLy8gYW5kIHRoZSBzZWNvbmQgZ2l2aW5nIGEga2V5LiBUaGUgY29tbWFuZHMg
YXJlOgorICAgIC8vICAreCAgQWRkIHgKKyAgICAvLyAgKnggIEZpbmQgYWxsIGVsZW1lbnRzIGVx
dWFsIHRvIHgKKyAgICAvLyAgQHggIEZpbmQgYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgc21h
bGxlc3Qga2V5IHRoYXQgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHgKKyAgICAvLyAgIXgg
IFJlbW92ZSBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAorICAgIHZvaWQgdGVzdERyaXZlcihjb25z
dCBjaGFyKiBjb250cm9sU3RyaW5nKQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciBhc1ZlY3Rv
cjsKKyAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiBhc1RyZWU7CisgICAgICAg
IAorICAgICAgICBmb3IgKGNvbnN0IGNoYXIqIGN1cnJlbnQgPSBjb250cm9sU3RyaW5nOyAqY3Vy
cmVudDsgY3VycmVudCArPSAyKSB7CisgICAgICAgICAgICBjaGFyIGNvbW1hbmQgPSBjdXJyZW50
WzBdOworICAgICAgICAgICAgY2hhciBrZXkgPSBjdXJyZW50WzFdOworICAgICAgICAgICAgdW5z
aWduZWQgdmFsdWUgPSArK21fY291bnRlcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNT
RVJUKGNvbW1hbmQpOworICAgICAgICAgICAgQVNTRVJUKGtleSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29tbWFuZCkgeworICAgICAgICAgICAgY2FzZSAnKyc6IHsKKyAg
ICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0g
bmV3IFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGU7CisgICAgICAgICAgICAgICAg
bm9kZS0+a2V5ID0ga2V5OworICAgICAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgYXNUcmVlLmluc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBhc1Zl
Y3Rvci5hcHBlbmQoUGFpcihrZXksIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICcqJzogewor
ICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUg
PSBhc1RyZWUuZmluZEV4YWN0KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpCisgICAg
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUShub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAg
ICAgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRFeGFjdChhc1ZlY3Rv
ciwga2V5KSwga2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY2FzZSAnQCc6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hh
ciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JF
cXVhbChrZXkpOworICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKG5vZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgICAgICAgICBh
c3NlcnRTYW1lVmFsdWVzRm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZExlYXN0R3JlYXRlclRoYW5P
ckVxdWFsKGFzVmVjdG9yLCBrZXkpLCBub2RlLT5rZXkpOworICAgICAgICAgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShmaW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwoYXNWZWN0b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyEnOiB7
CisgICAgICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVk
QmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5yZW1vdmUoa2V5
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEVYUEVDVF9FUShub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
c3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3Rvciwgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShmaW5kRXhhY3QoYXNWZWN0b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgIGFzVHJlZS5jaGVja0NvbnNpc3RlbmN5
KCk7CisjZW5kaWYKKyAgICAgICAgICAgIEVYUEVDVF9FUShhc1RyZWUuc2l6ZSgpLCBhc1ZlY3Rv
ci5zaXplKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWwoYXNUcmVlLCBhc1ZlY3Rvcik7Cisg
ICAgICAgIH0KKyAgICB9Cit9OworCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgRW1wdHkpCit7
CisgICAgdGVzdERyaXZlcigiIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBFbXB0
eUdldEZpbmRSZW1vdmUpCit7CisgICAgdGVzdERyaXZlcigiKnhAeSF6Iik7Cit9CisKK1RFU1Rf
RihSZWRCbGFja1RyZWVUZXN0LCBTaW5nbGVBZGQpCit7CisgICAgdGVzdERyaXZlcigiK2EiKTsK
K30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFNpbmdsZUFkZEdldEZpbmRSZW1vdmVOb3RG
b3VuZCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSp4QHkheiIpOworfQorCitURVNUX0YoUmVkQmxh
Y2tUcmVlVGVzdCwgU2luZ2xlQWRkR2V0RmluZFJlbW92ZSkKK3sKKyAgICB0ZXN0RHJpdmVyKCIr
YSphQGEhYSIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgVHdvQWRkcykKK3sKKyAg
ICB0ZXN0RHJpdmVyKCIrYStiIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBUaHJl
ZUFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjIik7Cit9CisKK1RFU1RfRihSZWRCbGFj
a1RyZWVUZXN0LCBGb3VyQWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MrZCIpOworfQor
CitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgTG90c09mUmVwZWF0QWRkcykKK3sKKyAgICB0ZXN0
RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QiKTsKK30KKwor
VEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIExvdHNPZlJlcGVhdEFuZFVuaXF1ZUFkZHMpCit7Cisg
ICAgdGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Ur
ZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6Iik7Cit9CisKK1RFU1RfRihS
ZWRCbGFja1RyZWVUZXN0LCBMb3RzT2ZSZXBlYXRBbmRVbmlxdWVBZGRzQW5kR2V0c0FuZFJlbW92
ZXMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2Qr
YStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6KmEqYipjKmQq
ZSpmKmcqaCppKmoqaypsKm0qbipvKnAqcSpyKnMqdCp1KnYqdyp4KnkqeiFhIWIhYyFkIWUhZiFn
IWghaSFqIWshbCFtIW4hbyFwIXEhciFzIXQhdSF2IXcheCF5IXoiKTsKK30KKworVEVTVF9GKFJl
ZEJsYWNrVHJlZVRlc3QsIFNpbXBsZUJlc3RGaXRTZWFyY2gpCit7CisgICAgdGVzdERyaXZlcigi
K2QrZCttK3dAZEBtQHdAYUBnQHEiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEJp
Z2dlckJlc3RGaXRTZWFyY2gpCit7CisgICAgdGVzdERyaXZlcigiK2QrZCtkK2QrZCtkK2QrZCtk
K2QrZitmK2YrZitmK2YrZitoK2graStqK2srbCttK28rcCtxK3IrekBhQGJAY0BkQGVAZkBnQGhA
aUBqQGtAbEBtQG5Ab0BwQHFAckBzQHRAdUB2QHdAeEB5QHoiKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106063</attachid>
            <date>2011-09-01 16:45:00 -0700</date>
            <delta_ts>2011-09-01 16:50:00 -0700</delta_ts>
            <desc>the patch - fix minor export file glitch</desc>
            <filename>metaalloc_patch_24.diff</filename>
            <type>text/plain</type>
            <size>225508</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAyIEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
Ojpyb3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VO
b2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5
dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZl
ZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpSYXdOb2RlOjpzZXRSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmZpcnN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3Qp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVh
bCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVx
dWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0
SGVscCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZHVtcFJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJv
b3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjphc05vZGUpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDktMDEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0By
aW0uY29tPgogCiAgICAgICAgIFFOWCBHQ0MgZGlzdHJpYnV0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB2
YXNwcmludGYoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMCw2ICs1MTAsOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTm9uQ29weWluZ1NvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9O
b25jb3B5YWJsZS5oIFwKQEAgLTU0Miw2ICs1NDUsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyU2VlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1JlZEJsYWNrVHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50
ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNp
b24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDExIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRF
UEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFp
blRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVl
RnJlZVNwYWNlTm9kZUVQTlNfMTJSZWRCbGFja1RyZWVJbVB2RTROb2RlRQorX19aTjNXVEYxM01l
dGFBbGxvY2F0b3IxOGRlYnVnRnJlZVNwYWNlU2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRv
cjhhbGxvY2F0ZUVtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckMyRW0KIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzcsNiArNDQyLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNiw2ICs1MjMsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzYxLDYgKzc2MSwxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTkwMSw2ICs5MTMsMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDExICs1MSwxNSBAQAogCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVj
aW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07
CiAJCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9
OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9
IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CisJCTBGOTYz
QjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyog
TWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0Iy
RTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAy
RDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkM4MTUx
NTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0
MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovOyB9OwogCQkwRkM4MTUwQTE0
MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87
IH07CisJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4
RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07
CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjRE
MTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9z
aXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkx
NDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAw
MDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTU1NCw3ICs1NTgsNyBA
QAogCQlCQzE4QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTM5NkE2MENEMjkzMzEwMEI1
QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDMThDNDZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1BhY2tlZENhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REE0Nzk2
NTBDRkJDRjU2MDA5MzI4QTAgLyogVENQYWNrZWRDYWNoZS5oICovOyB9OwogCQlCQzE4QzQ2RDBF
MTZGNUNEMDBCMzQ0NjAgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFw
LmggKi87IH07Ci0JCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgw
QTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovOyB9OworCQlCQzE4QzQ2RTBFMTZGNUNEMDBC
MzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU0MUJENkYwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ2RjBF
MTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENzEwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lz
dGVtQWxsb2MuaCAqLzsgfTsKIAkJQkMxOEM0NzAwRTE2RjVDRDAwQjM0NDYwIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc5
MjIwRDZDOTVDRDAwRkVBM0JBIC8qIFRocmVhZGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDcxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBU
aHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFCN0M4QkQwREEzQTMzNjAwNzRCMERDIC8qIFRocmVhZFNwZWNpZmljLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczOSwxMSArNzQz
LDE1IEBACiAJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBs
aW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJF
MTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJs
ZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTQxNDA1
MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzIsNiArMTY4MCwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAq
LywKKwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAor
CQkJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkw
NkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIw
MDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmlj
b2RlICovLApAQCAtMjI1NCw2ICsyMjY2LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2
NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5
ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJl
ZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTQ2LDcgKzI1NjIsNiBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50
YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QzBFMTZGNUNEMDBCMzQ0NjAg
LyogVENQYWNrZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkQwRTE2RjVDRDAw
QjM0NDYwIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NkUwRTE2RjVD
RDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZGMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzFF
REVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjNCRDMxRUQxMjY3MzU3NzAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODY2LDYgKzI4ODEsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNC
MkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDk0MzU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikK
IAorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgInN0ZGludC5oIgogI2luY2x1
ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg+CkBAIC0x
MjgsMTkgKzEyOSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJMYWJlbChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFi
bGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRv
cikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
Q29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
ICghbV9pbmRleCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgdm9p
ZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhnbG9iYWxEYXRhLCBtX2luZGV4KTsKKyAgICAg
ICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBnbG9iYWxEYXRh
LmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CiAKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQt
PnN0YXJ0KCksIHJlc3VsdC0+c2l6ZUluQnl0ZXMoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBt
ZW1jcHkocmVzdWx0LCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICBtZW1jcHkocmVz
dWx0LT5zdGFydCgpLCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBy
ZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIGxhYmVsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDIyICs2OSw4IEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2VuZGlmCiAKIHB1YmxpYzoK
LSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIq
IG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQotICAgICAg
ICA6IG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKDAp
Ci0gICAgICAgICwgbV9jb2RlKDApCi0gICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKLSAgICAg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAs
IG1fY29tcGxldGVkKGZhbHNlKQotI2VuZGlmCi0gICAgewotICAgICAgICBsaW5rQ29kZSgpOwot
ICAgIH0KLQotICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlciogbWFzbSwgRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQotICAgICAgICA6
IG1fZXhlY3V0YWJsZVBvb2woYWxsb2NhdG9yLnBvb2xGb3JTaXplKGdsb2JhbERhdGEsIG1hc20t
Pm1fYXNzZW1ibGVyLmNvZGVTaXplKCkpKQotICAgICAgICAsIG1fc2l6ZSgwKQorICAgIExpbmtC
dWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAg
ICAgICAgOiBtX3NpemUoMCkKICAgICAgICAgLCBtX2NvZGUoMCkKICAgICAgICAgLCBtX2Fzc2Vt
YmxlcihtYXNtKQogICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKQEAgLTE4NSwx
NCArMTcxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigp
OwogCi0gICAgICAgIHJldHVybiBDb2RlUmVmKG1fY29kZSwgbV9leGVjdXRhYmxlUG9vbCwgbV9z
aXplKTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmaW5hbGl6ZUNvZGVBZGRlbmR1
bSgpCi0gICAgewotICAgICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7Ci0KLSAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkxhYmVsKGNvZGUoKSk7CisgICAgICAgIHJldHVybiBDb2RlUmVmKG1f
ZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgfQogCiAgICAgQ29kZVB0ciB0cmFtcG9saW5lQXQoTGFi
ZWwgbGFiZWwpCkBAIC0yMzIsMTQgKzIxMSwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX2NvZGUpOwogI2lmICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgICAg
IG1fY29kZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9i
YWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERh
dGEpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpOwogICAgICAg
ICBtX3NpemUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICAgICAg
QVNTRVJUKG1fY29kZSk7CiAjZWxzZQogICAgICAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBtX2Fz
c2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKLSAgICAgICAgbV9jb2RlID0gKHVpbnQ4
X3QqKW1fZXhlY3V0YWJsZVBvb2wtPmFsbG9jKCptX2dsb2JhbERhdGEsIGluaXRpYWxTaXplKTsK
LSAgICAgICAgaWYgKCFtX2NvZGUpCisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xv
YmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV9nbG9iYWxEYXRhLCBpbml0
aWFsU2l6ZSk7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpOworICAgICAgICBBU1NFUlQobV9jb2RlKTsKICAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWFrZVdyaXRhYmxlKG1fY29kZSwgaW5pdGlhbFNpemUpOwogICAgICAgICB1aW50OF90
KiBpbkRhdGEgPSAodWludDhfdCopbV9hc3NlbWJsZXItPnVubGlua2VkQ29kZSgpOwogICAgICAg
ICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9jb2RlKTsK
QEAgLTI5Nyw3ICsyODEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGp1bXBzVG9MaW5rLmNsZWFy
KCk7CiAgICAgICAgIG1fc2l6ZSA9IHdyaXRlUHRyICsgaW5pdGlhbFNpemUgLSByZWFkUHRyOwot
ICAgICAgICBtX2V4ZWN1dGFibGVQb29sLT50cnlTaHJpbmsobV9jb2RlLCBpbml0aWFsU2l6ZSwg
bV9zaXplKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5LT5zaHJpbmsobV9zaXplKTsKIAog
I2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAgICAgIGR1bXBMaW5rU3RhdGlzdGljcyhtX2Nv
ZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwpAQCAtMzY2LDcgKzM1MCw3IEBAIHByaXZhdGU6CiAg
ICAgfQogI2VuZGlmCiAgICAgCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFi
bGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVN
ZW1vcnk7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBtX2NvZGU7CiAgICAgTWFjcm9B
c3NlbWJsZXIqIG1fYXNzZW1ibGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwyMiArMTk5LDU5IEBAIHByaXZhdGU6CiAvLyBw
b2ludGVyIHRvIHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0byB0aGUgcG9vbCBmcm9tIHdp
dGhpbiB3aGljaCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB7Citwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgZGFu
Z2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAorICAgIC8vIHRvIGJlIGVhc3kg
dG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KKyAgICBleHBs
aWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIp
CisgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCisgICAgeworICAgICAgICBBU1NFUlQobV9j
b2RlUHRyKTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKQot
ICAgICAgICA6IG1fc2l6ZSgwKQogICAgIHsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAsIG1fZXhl
Y3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
ZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZU1lbW9yeSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPmlzTWFuYWdlZCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSk7CisgICAgICAgIEFT
U0VSVChtX2NvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4g
eW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMgdG8gY29kZSB0aGF0IGlzCisgICAgLy8g
YWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNh
bGx5IHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IGNvZGVQdHIgaXMgaW1tb3J0YWwuCisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVQdHI7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmICgh
bV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBtX2V4ZWN1dGFibGVNZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1fY29kZTsKLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhl
Y3V0YWJsZVBvb2w7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSw5ICsxNTk1LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYi5tX29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAgfQogICAgIAotICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1
dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAg
ICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSk7CiAgICAg
fQogCiAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7IG1f
Zm9ybWF0dGVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkBAIC0xOTM5LDkgKzE5MzksOSBA
QCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KTsgfQogICAgICAgICB2b2lkKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CiAKLSAgICAgICAgdm9pZCog
ZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
YWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4
ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIGFsbG9jYXRv
cik7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0
YSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFi
ZWwgcmV3aW5kVG8pIHsgbV9idWZmZXIucmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk0
MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0
cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9Ci0gICAg
ICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUo
KS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUq
IGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1l
bW9yeSgpOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgU3RydWN0dXJlQ2hhaW47CiAKICNpZiBFTkFCTEUoSklUKQotICAgIHR5cGVkZWYgQ29kZUxv
Y2F0aW9uTGFiZWwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBl
OworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKIAogICAgIC8vIFN0cnVjdHVyZSB1c2VkIGJ5IG9w
X2dldF9ieV9pZF9zZWxmX2xpc3QgYW5kIG9wX2dldF9ieV9pZF9wcm90b19saXN0IGluc3RydWN0
aW9uIHRvIGhvbGQgZGF0YSBvZmYgdGhlIG1haW4gb3Bjb2RlIHN0cmVhbS4KICAgICBzdHJ1Y3Qg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwogICAgICAgICB9IHU7CiAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3R1YlJvdXRpbmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViUm91dGluZTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlKEpJVENvZGUmIGVudHJ5CiAgICAgLy8gR2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHByb2dy
YW0uCiAgICAgY29tcGlsZUJvZHkoKTsKICAgICAvLyBMaW5rCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9j
YXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
ICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgZW50cnkgPSBKSVRDb2RlKGxpbmtCdWZmZXIuZmlu
YWxpemVDb2RlKCksIEpJVENvZGU6OkRGR0pJVCk7CiB9CkBAIC05ODYsNyArOTg2LDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogCiAKICAgICAvLyA9PT0gTGlu
ayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9n
bG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICAKICAg
ICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sg
b3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0MzU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1
ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCYgc3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6
ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nl
c3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKS0+ZXhlY3V0YWJsZVBvb2woKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgIAog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0K
IAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNzYsMTUgKzE3Niwx
NCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAog
ICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKICAgICAgICAgbGlua1Jlc3RvcmVTY3Jh
dGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAKICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3Ry
dWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
OwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQ
cm90b0J1aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbik7CkBAIC0zMjQsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdAogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxp
c3Q7CkBAIC0zNTAsMjEgKzM0OSwyMSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsK
KyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwog
ICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKICAgICAgICAg
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90b0JlZ2luKTsK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAg
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9i
YWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50
cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJv
dXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0
KCkpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7
CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNDE5LDE4ICs0MTgsMTgg
QEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChsaXN0
SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNT
RVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKICAgICAg
ICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8s
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxh
c3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAg
ICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NDgsMTggKzU0NywxNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDIgKzI3LDExMSBAQAogCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjZW5kaWYK
KwogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKIAot
RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNp
emVfdCBzaXplKQorY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFB
bGxvY2F0b3IgeworcHVibGljOgorICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAg
ICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAz
MiBieXRlcworICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJlYWxsb2NhdGUgYW55IG1lbW9yeSBo
ZXJlLgorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5EZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXNlcnZhdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXNlcnZhdGlvbnMuYXQoaSkuZGVhbGxvY2F0ZSgp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFj
ZShzaXplX3QmIG51bVBhZ2VzKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld051bVBhZ2VzID0g
KCgobnVtUGFnZXMgKiBwYWdlU2l6ZSgpICsgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpF
IC0gMSkgLyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgKiBKSVRfQUxMT0NBVE9SX0xB
UkdFX0FMTE9DX1NJWkUpICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChuZXdOdW1QYWdlcyA+PSBudW1QYWdlcyk7CisgICAgICAgIAorICAg
ICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgUGFnZVJlc2Vy
dmF0aW9uIHJlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKG51bVBhZ2VzICog
cGFnZVNpemUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xf
V1JJVEFCTEUsIHRydWUpOworICAgICAgICBpZiAoIXJlc2VydmF0aW9uKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQocmVzZXJ2YXRp
b24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2UoKTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAg
eworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCksIEVYRUNVVEFC
TEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxQYWdlUmVzZXJ2YXRpb24sIDE2PiByZXNlcnZhdGlvbnM7Cit9OworCitzdGF0aWMgRGVtYW5k
RXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOworCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQogewotICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29k
ZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgIGlmICghYWxsb2Nh
dGlvbikKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gYWxsb2NhdGlvbjsKKyAgICBBU1NF
UlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRh
YmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBhbGxvY2F0aW9uLmRlYWxs
b2NhdGUoKTsKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwog
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9Ci0gICAgCisKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNp
emVJbkJ5dGVzKQoreworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogc2l6ZV90
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0gICAgcmV0dXJu
IDA7Ci19IAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7Cit9CiAKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGUoKQoreworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUoKTsKK30KICNl
bmRpZgogCisjZW5kaWYgLy8gRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKwog
I2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogCiAjaWYgT1MoV0lORE9XUykgfHwg
T1MoU1lNQklBTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTEwMiwx
MjAgKzEwMywyNyBAQCBpbmxpbmUgc2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplCiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEV4ZWN1dGFibGVQb29sPiB7Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKLSAgICB0eXBlZGVmIFBhZ2VBbGxvY2F0aW9uIEFsbG9jYXRpb247Ci0j
ZWxzZQotICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgQWxsb2Nh
dGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgICAgIDogbV9iYXNlKGJhc2Up
Ci0gICAgICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCogYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX2Jhc2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1fYmFzZTsKLSAg
ICAgICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB9OwotI2VuZGlmCi0gICAgdHlwZWRlZiBWZWN0b3I8
QWxsb2NhdGlvbiwgMj4gQWxsb2NhdGlvbkxpc3Q7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVQb29sKGdsb2Jh
bERhdGEsIG4pKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBhbGxvYyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZVB0ciA8PSBtX2Vu
ZCk7Ci0KLSAgICAgICAgLy8gUm91bmQgJ24nIHVwIHRvIGEgbXVsdGlwbGUgb2Ygd29yZCBzaXpl
OyBpZiBhbGwgYWxsb2NhdGlvbnMgYXJlIG9mCi0gICAgICAgIC8vIHdvcmQgc2l6ZWQgcXVhbnRp
dGllcywgdGhlbiBhbGwgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQuCi0g
ICAgICAgIG4gPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgc2l6ZW9mKHZvaWQqKSk7Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obikgPCAobV9lbmQgLSBtX2ZyZWVQdHIp
KSB7Ci0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVQdHI7Ci0gICAgICAgICAgICBt
X2ZyZWVQdHIgKz0gbjsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBJbnN1ZmZpY2llbnQgc3BhY2UgdG8gYWxsb2NhdGUgaW4gdGhlIGV4aXN0aW5n
IHBvb2wKLSAgICAgICAgLy8gc28gd2UgbmVlZCBhbGxvY2F0ZSBpbnRvIGEgbmV3IHBvb2wKLSAg
ICAgICAgcmV0dXJuIHBvb2xBbGxvY2F0ZShnbG9iYWxEYXRhLCBuKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCB0cnlTaHJpbmsodm9pZCogYWxsb2NhdGlvbiwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0
aW9uKSArIG9sZFNpemUgIT0gbV9mcmVlUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyByb3VuZFVwQWxs
b2NhdGlvblNpemUobmV3U2l6ZSwgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgfQotCi0gICAgfkV4ZWN1
dGFibGVQb29sKCkKLSAgICB7Ci0gICAgICAgIEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBlbmQg
PSBtX3Bvb2xzLmVuZCgpOwotICAgICAgICBmb3IgKEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBw
dHIgPSBtX3Bvb2xzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgRXhl
Y3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoKnB0cik7Ci0gICAgfQotCi0gICAgc2l6ZV90IGF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIChtX3Bvb2xzLnNpemUoKSA+IDEpID8gMCA6IG1fZW5k
IC0gbV9mcmVlUHRyOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEFsbG9jYXRpb24gc3lzdGVt
QWxsb2Moc2l6ZV90IG4pOwotICAgIHN0YXRpYyB2b2lkIHN5c3RlbVJlbGVhc2UoQWxsb2NhdGlv
biYgYWxsb2MpOwotCi0gICAgRXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG4p
OwotCi0gICAgdm9pZCogcG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQot
ICAgIGNoYXIqIG1fZnJlZVB0cjsKLSAgICBjaGFyKiBtX2VuZDsKLSAgICBBbGxvY2F0aW9uTGlz
dCBtX3Bvb2xzOwotfTsKK3R5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU7CiAKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0g
UHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0g
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewot
ICAgICAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29s
ID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NBVE9SX0xBUkdF
X0FMTE9DX1NJWkUpOwotI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAgICB9CisgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cihKU0dsb2JhbERhdGEmKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb2Nh
dG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKKyAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICBzdGF0aWMg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBwb29sRm9yU2l6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQot
ICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc21hbGwgYWxsb2Nh
dG9yCi0gICAgICAgIEFTU0VSVChtX3NtYWxsQWxsb2NhdGlvblBvb2wpOwotICAgICAgICBpZiAo
biA8IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwotCi0gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlz
IGxhcmdlLCB3ZSBqdXN0IHByb3ZpZGUgYSB1bnNoYXJlZCBhbGxvY2F0b3IKLSAgICAgICAgaWYg
KG4gPiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4g
RXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBuKTsKLQotICAgICAgICAvLyBDcmVh
dGUgYSBuZXcgYWxsb2NhdG9yCi0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbCA9
IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmV3IGFsbG9jYXRvciB3aWxsIHJlc3Vs
dCBpbiBtb3JlIGZyZWUgc3BhY2UgdGhhbiBpbgotICAgICAgICAvLyB0aGUgY3VycmVudCBzbWFs
bCBhbGxvY2F0b3IsIHRoZW4gd2Ugd2lsbCB1c2UgaXQgaW5zdGVhZAotICAgICAgICBpZiAoKHBv
b2wtPmF2YWlsYWJsZSgpIC0gbikgPiBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgp
KQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29sID0gcG9vbDsKLSAgICAgICAgcmV0
dXJuIHBvb2wucmVsZWFzZSgpOwotICAgIH0KKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAK
ICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCBtYWtl
V3JpdGFibGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMzQ4LDUwICsyNTYsOSBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2
b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0dGluZyk7CiAj
ZW5kaWYKLQotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29s
OwogfTsKIAotaW5saW5lIEV4ZWN1dGFibGVQb29sOjpFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3Vu
ZFVwQWxsb2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlvbiBtZW0gPSBz
eXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghbWVtLmJhc2UoKSkgewotICAgICAgICBy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgbWVtID0gc3lzdGVt
QWxsb2MoYWxsb2NTaXplKTsKLSAgICB9Ci0gICAgbV9wb29scy5hcHBlbmQobWVtKTsKLSAgICBt
X2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWVtLmJhc2UoKSk7Ci0gICAgaWYgKCFtX2Zy
ZWVQdHIpCi0gICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIG1fZW5k
ID0gbV9mcmVlUHRyICsgYWxsb2NTaXplOwotICAgIGRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIo
KTsKLX0KLQotaW5saW5lIHZvaWQqIEV4ZWN1dGFibGVQb29sOjpwb29sQWxsb2NhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0g
cm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIAotICAgIEFsbG9jYXRp
b24gcmVzdWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIXJlc3VsdC5iYXNl
KCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0
LmJhc2UoKSkKLSAgICAgICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQobV9lbmQgPj0gbV9mcmVlUHRyKTsKLSAgICBpZiAoKGFsbG9j
U2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAg
ICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0aW9uIHBvb2wKLSAgICAgICAgbV9mcmVlUHRyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgbjsKLSAgICAgICAgbV9lbmQgPSBzdGF0
aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBhbGxvY1NpemU7Ci0gICAgfQotCi0gICAg
bV9wb29scy5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsKLX0KLQot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUo
QVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAogI2luY2x1ZGUg
PGVycm5vLmg+CiAKLSNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4u
aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIApAQCAtNDYsNDgxICs0NSwxMDUgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jZGVmaW5lIFR3b1Bvdyhu
KSAoMXVsbCA8PCBuKQotCi1jbGFzcyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgewotcHVibGlj
OgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGJsb2Nr
U2l6ZSwgdW5zaWduZWQgbG9nMkJsb2NrU2l6ZSkKLSAgICAgICAgOiBtX2Jsb2NrU2l6ZShibG9j
a1NpemUpCi0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2tTaXplID09IFR3b1Bvdyhsb2cyQmxv
Y2tTaXplKSk7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5l
ZWRlZCB0byBob2xkIHNpemUuCi0gICAgICAgIHNpemVfdCBibG9ja01hc2sgPSBibG9ja1NpemUg
LSAxOwotICAgICAgICBtX2Jsb2NrQ291bnQgPSAoc2l6ZSArIGJsb2NrTWFzaykgPj4gbG9nMkJs
b2NrU2l6ZTsKLQotICAgICAgICAvLyBBbGlnbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdv
ID49IG1fYmxvY2tDb3VudC4KLSAgICAgICAgbV9ibG9ja0FsaWdubWVudCA9IDE7Ci0gICAgICAg
IHdoaWxlIChtX2Jsb2NrQWxpZ25tZW50IDwgbV9ibG9ja0NvdW50KQotICAgICAgICAgICAgbV9i
bG9ja0FsaWdubWVudCArPSBtX2Jsb2NrQWxpZ25tZW50OwotICAgIH0KLQotICAgIHNpemVfdCBi
bG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrU2l6ZTsgfQotICAgIHNpemVfdCBibG9j
a0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0NvdW50OyB9Ci0gICAgc2l6ZV90IGJsb2Nr
QWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0FsaWdubWVudDsgfQotCi0gICAgc2l6
ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tTaXplICogbV9ibG9ja0Nv
dW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9ibG9ja1NpemU7Ci0gICAgc2l6
ZV90IG1fYmxvY2tDb3VudDsKLSAgICBzaXplX3QgbV9ibG9ja0FsaWdubWVudDsKLX07Ci0KLXRl
bXBsYXRlPHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlTGVhZiB7
Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IDEyOyAvLyAyXjEyID09IHBhZ2VzaXpl
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lv
blNpemUgKyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9u
U2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCByZWdpb25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NF
UlQoZW50cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVMZWFm
X2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJsZUxlYWYoKQot
ICAgICAgICA6IG1fYWxsb2NhdGVkKDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxvY2F0aW9u
VGFibGVMZWFmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0gc3VicmVnaW9u
U2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAgICAgIHNpemVfdCBhbGln
bm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50
ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBj
aGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAo
KDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAv
LyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICgh
KG1fYWxsb2NhdGVkICYgbWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2FsbG9jYXRlZCB8PSBt
YXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkpIDw8
IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8PD0g
YWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9Ci0K
LSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mm
IHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkg
PT0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24gPj4g
bG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9j
a0NvdW50KCk7Ci0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkg
PDwgZW50cnk7Ci0KLSAgICAgICAgQVNTRVJUKChtX2FsbG9jYXRlZCAmIG1hc2spID09IG1hc2sp
OwotICAgICAgICBtX2FsbG9jYXRlZCAmPSB+bWFzazsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1w
dHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX2FsbG9jYXRlZDsKLSAgICB9Ci0KLSAgICBi
b29sIGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gIX5tX2FsbG9jYXRlZDsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lv
blNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFz
c0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRh
YmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQg
PSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAg
Iik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyUwMTZsbHhdXG4iLCAoaW50KXBh
cmVudE9mZnNldCwgbV9hbGxvY2F0ZWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IEJpdEZpZWxkIG1fYWxsb2NhdGVkOwotfTsKLQotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWw+
Ci1jbGFzcyBMYXp5QWxsb2NhdGlvblRhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gTmV4dExldmVsOjplbnRyaWVzOwotCi0g
ICAgTGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgICAgIDogbV9wdHIoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgfkxhenlBbGxvY2F0aW9uVGFibGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
RW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3B0cikKLSAgICAgICAg
ICAgIG1fcHRyID0gbmV3IE5leHRMZXZlbCgpOwotICAgICAgICByZXR1cm4gbV9wdHItPmFsbG9j
YXRlKHNpemVDbGFzcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwg
QWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZnJlZShsb2NhdGlvbiwgc2l6ZUNsYXNzKTsKLSAg
ICAgICAgaWYgKG1fcHRyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3B0cjsK
LSAgICAgICAgICAgIG1fcHRyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNF
bXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIW1fcHRyOwotICAgIH0KLQotICAgIGJvb2wg
aXNGdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciAmJiBtX3B0ci0+aXNGdWxsKCk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOZXh0TGV2ZWw6OnNpemUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBk
dW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmR1bXAocGFyZW50T2Zmc2V0
LCBpbmRlbnQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4g
TmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5l
eHRMZXZlbCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWwsIHVuc2lnbmVk
IGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5IHsKLSAgICB0eXBl
ZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZzJTdWJyZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSAr
IGxvZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0g
VHdvUG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lv
blNpemUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBlbnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRy
aWVzIDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeV9l
bnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnko
KQotICAgICAgICA6IG1fZnVsbCgwKQotICAgICAgICAsIG1faGFzU3ViYWxsb2NhdGlvbigwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghaXNGdWxsKCkpOwotCi0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJy
ZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSwgYml0ICs9IGJpdCkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2Z1bGwgJiBiaXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fc3ViYWxsb2NhdGlvbnNb
aV0uYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBkaWRuJ3QgYWxyZWFk
eSBoYXZlIGEgc3VicmVnaW9uLCBpdCBkb2VzIG5vdyEKLSAgICAgICAgICAgICAgICAgICAgbV9o
YXNTdWJhbGxvY2F0aW9uIHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWlycm9yIHRo
ZSBzdWJhbGxvY2F0aW9uJ3MgZnVsbCBiaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N1
YmFsbG9jYXRpb25zW2ldLmlzRnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mdWxs
IHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpICogc3VicmVnaW9uU2l6ZSkg
fCBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBIGJsb2NrIGlzIGFs
bG9jYXRlZCBpZiBlaXRoZXIgaXQgaXMgZnVsbHkgYWxsb2NhdGVkIG9yIGNvbnRhaW5zIHN1YmFs
bG9jYXRpb25zLgotICAgICAgICBCaXRGaWVsZCBhbGxvY2F0ZWQgPSBtX2Z1bGwgfCBtX2hhc1N1
YmFsbG9jYXRpb247Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9j
a0FsaWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3Vu
dCgpOwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVl
IGJsb2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8
PCAoYWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxp
Z25tZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBp
ICs9IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEoYWxsb2NhdGVkICYgbWFzaykpIHsK
LSAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gbWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4g
KGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlv
biwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAg
IHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwotCi0gICAgICAg
IGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAg
ICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGVudHJ5OwotICAgICAgICAgICAgbV9zdWJhbGxvY2F0
aW9uc1tlbnRyeV0uZnJlZShsb2NhdGlvbiAmIChzdWJyZWdpb25TaXplIC0gMSksIHNpemVDbGFz
cyk7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3ViYWxsb2NhdGlvbiBpcyBub3cgZW1w
dHkuCi0gICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlvbiAmPSB+Yml0OwotICAgICAgICAgICAg
Ly8gTm8gbmVlZCB0byBjaGVjaywgaXQgY2xlYXJseSBpc24ndCBmdWxsIGFueSBtb3JlIQotICAg
ICAgICAgICAgbV9mdWxsICY9IH5iaXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
aXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAgICAgQml0Rmll
bGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsKLSAgICAgICAgICAgIEFT
U0VSVCgobV9mdWxsICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoIShtX2hh
c1N1YmFsbG9jYXRpb24gJiBtYXNrKSk7Ci0gICAgICAgICAgICBtX2Z1bGwgJj0gfm1hc2s7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICEobV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBib29sIGlz
RnVsbCgpCi0gICAgeyAgIAotICAgICAgICByZXR1cm4gIX5tX2Z1bGw7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwot
ICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXpl
KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCBzdWJyZWdpb25TaXplKSB7
Ci0gICAgICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gTmV4dExl
dmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLnNpemUo
KSA8IE5leHRMZXZlbDo6c2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzaXplQ2xhc3M7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXpl
LCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5E
RUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5k
ZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7
ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiUwOHg6IFsiLCAoaW50KXBhcmVudE9mZnNldCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxk
IGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIGNoYXIgYyA9IG1faGFzU3ViYWxsb2NhdGlv
biAmIGJpdAotICAgICAgICAgICAgICAgID8gKG1fZnVsbCAmIGJpdCA/ICdOJyA6ICduJykKLSAg
ICAgICAgICAgICAgICA6IChtX2Z1bGwgJiBiaXQgPyAnRicgOiAnLScpOwotICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlYyIsIGMpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiXVxuIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7
ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IHBhcmVudE9mZnNldCB8IChzdWJyZWdpb25TaXplICogaSk7Ci0g
ICAgICAgICAgICBpZiAobV9oYXNTdWJhbGxvY2F0aW9uICYgYml0KQotICAgICAgICAgICAgICAg
IG1fc3ViYWxsb2NhdGlvbnNbaV0uZHVtcChvZmZzZXQsIGluZGVudCArIDEpOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsIG1fc3ViYWxsb2NhdGlv
bnNbZW50cmllc107Ci0gICAgLy8gU3VicmVnaW9ucyBleGlzdCBpbiBvbmUgb2YgZm91ciBzdGF0
ZXM6Ci0gICAgLy8gKDEpIGVtcHR5IChib3RoIGJpdHMgY2xlYXIpCi0gICAgLy8gKDIpIGZ1bGx5
IGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBhbGxvY2F0aW9uIChtX2Z1bGwgc2V0KQotICAgIC8vICgz
KSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKG1faGFzU3ViYWxs
b2NhdGlvbiBzZXQpCi0gICAgLy8gKDQpIGZ1bGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9j
YXRpb25zIChib3RoIGJpdHMgc2V0KQotICAgIEJpdEZpZWxkIG1fZnVsbDsKLSAgICBCaXRGaWVs
ZCBtX2hhc1N1YmFsbG9jYXRpb247Ci19OwotCi0KLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlTGVh
Zjw2PiBQYWdlVGFibGVzMjU2S0I7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxQ
YWdlVGFibGVzMjU2S0IsIDY+IFBhZ2VUYWJsZXMxNk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFi
bGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDE+IFBhZ2VU
YWJsZXMzMk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRp
b25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDY+IFBhZ2VUYWJsZXMxR0I7Ci0KICNpZiBDUFUoQVJN
KQotdHlwZWRlZiBQYWdlVGFibGVzMTZNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BV
KFg4Nl82NCkKLXR5cGVkZWYgUGFnZVRhYmxlczFHQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CiAj
ZWxzZQotdHlwZWRlZiBQYWdlVGFibGVzMzJNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0
aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogI2VuZGlm
CiAKLQotY2xhc3MgRml4ZWRWTVBvb2xBbGxvY2F0b3IKLXsKK2NsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgotICAgIEZp
eGVkVk1Qb29sQWxsb2NhdG9yKCkKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQorICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcwogICAgIHsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMyNTZLQjo6c2l6
ZSgpID09IDI1NiAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczE2TUI6OnNpemUo
KSA9PSAxNiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMzMk1COjpz
aXplKCkgPT0gMzIgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMUdC
OjpzaXplKCkgPT0gMTAyNCAqIDEwMjQgKiAxMDI0KTsKLQotICAgICAgICBtX3Jlc2VydmF0aW9u
ID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoRml4ZWRWTVBvb2xQYWdl
VGFibGVzOjpzaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9Q
T09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZh
dGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxsb2NhdG9yOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNpZiAhRU5B
QkxFKElOVEVSUFJFVEVSKQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgaWYgKCFt
X3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgorICAgICAgICBpZiAo
bV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgp
ID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNl
cnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
LSAKLSAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyhzaXplX3QgcmVxdWVzdGVk
U2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShyZXF1ZXN0ZWRT
aXplKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplQ2xhc3Muc2l6ZSgpOwotICAgICAgICBB
U1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPj0gRml4ZWRWTVBvb2xQYWdlVGFibGVz
OjpzaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0gICAgICAgIGlmIChtX3BhZ2VzLmlzRnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBtX3BhZ2VzLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0g
bm90Rm91bmQpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0KLSAgICAgICAgdm9pZCogcG9pbnRlciA9IG9mZnNldFRvUG9pbnRlcihvZmZzZXQp
OwotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwb2ludGVyLCBzaXplKTsKLSAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKHBvaW50ZXIsIHNpemUpOwotICAgIH0K
LQotICAgIHZvaWQgZnJlZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKQogICAgIHsKLSAgICAgICAgdm9pZCogcG9pbnRlciA9IGFsbG9jYXRpb24uYmFzZSgpOwot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGFsbG9jYXRpb24uc2l6ZSgpOwotICAgICAgICBBU1NFUlQo
c2l6ZSk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwb2ludGVyLCBzaXplKTsK
LQotICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JT
aXplKHNpemUpOwotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLnNpemUoKSA9PSBzaXplKTsKLSAg
ICAgICAgbV9wYWdlcy5mcmVlKHBvaW50ZXJUb09mZnNldChwb2ludGVyKSwgc2l6ZUNsYXNzKTsK
KyAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9j
YXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZWQoKQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzZXJ2YXRpb24uY29t
bWl0dGVkKCk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkp
OwogICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAh
IW1fcmVzZXJ2YXRpb247CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFn
ZVNpemUoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFz
cyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gRml4ZWRW
TVBvb2xQYWdlVGFibGVzOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9pZCog
b2Zmc2V0VG9Qb2ludGVyKHNpemVfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZh
dGlvbi5iYXNlKCkpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9pbnRlclRvT2Zm
c2V0KHZvaWQqIHBvaW50ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlcikgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRp
b247Ci0gICAgRml4ZWRWTVBvb2xQYWdlVGFibGVzIG1fcGFnZXM7CiB9OwogCitzdGF0aWMgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CiAKLXN0YXRpYyBTcGluTG9j
ayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIEZpeGVkVk1Qb29sQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSAwOwotCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRp
YWxpemVBbGxvY2F0b3IoKQoreworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7Cit9CiAKLXNpemVfdCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQorRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tIb2xkZXIoJnNwaW5sb2NrKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yID8gYWxs
b2NhdG9yLT5hbGxvY2F0ZWQoKSA6IDA7Ci19ICAgCisgICAgQVNTRVJUKGFsbG9jYXRvcik7Cit9
CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sQWxsb2NhdG9yKCk7Ci0gICAgcmV0
dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgpOworICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNS
ZXNlcnZlZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJl
c3N1cmUoKQogewotICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCB0YWtlIHRoZSBzcGluIGxv
Y2sgaGVyZSwgYnV0IHdlIGRvbid0IGNhcmUgaWYgd2UgZ2V0IHN0YWxlIGRhdGEuCi0gICAgLy8g
VGhpcyBpcyBvbmx5IHJlYWxseSBhIGhldXJpc3RpYyBhbnl3YXkuCi0gICAgcmV0dXJuIGFsbG9j
YXRvciAmJiAoYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA+IChGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6
OnNpemUoKSAvIDIpKTsKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3Mg
PSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgcmV0dXJuIHN0YXRpc3RpY3Mu
Ynl0ZXNBbGxvY2F0ZWQgPiBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLyAyOwogfQogCi1FeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90
IHNpemUpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5
dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAg
QVNTRVJUKGFsbG9jYXRvcik7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Moc2l6ZSk7Cisg
ICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxs
b2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIGNoYXIgYnVm
WzI3XTsKKyAgICAgICAgdGltZV90IGN1cnJlbnRUaW1lOworICAgICAgICB0aW1lKCZjdXJyZW50
VGltZSk7CisgICAgICAgIGN0aW1lX3IoJmN1cnJlbnRUaW1lLCBidWYpOworICAgICAgICBwcmlu
dGYoIiVzOiBJJ20gZ2l2aW5nIGhlciBhbGwgc2hlJ3MgZ290LCBDYXB0YWluIVxuIiwgYnVmKTsK
KyAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7CisgICAgICAgIHJl
c3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworfQorCitzaXplX3QgRXhlY3V0YWJsZUFsbG9jYXRvcjo6Y29tbWl0dGVkQnl0ZUNv
dW50KCkKK3sKKyAgICByZXR1cm4gYWxsb2NhdG9yLT5ieXRlc0NvbW1pdHRlZCgpOwogfQogCi12
b2lkIEV4ZWN1dGFibGVQb29sOjpzeXN0ZW1SZWxlYXNlKEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0
aW9uJiBhbGxvY2F0aW9uKSAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3Zv
aWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQogewotICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAgQVNTRVJUKGFsbG9jYXRvcik7Ci0gICAg
YWxsb2NhdG9yLT5mcmVlKGFsbG9jYXRpb24pOworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUo
KTsKIH0KKyNlbmRpZgogCiB9CiAKIAotI2VuZGlmIC8vIEhBVkUoQVNTRU1CTEVSKQorI2VuZGlm
IC8vIEVOQUJMRShFWEVDVVRBQkxFX0FMTE9DQVRPUl9GSVhFRCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDksNyArNTQ5LDcgQEAgSklUQ29kZSBK
SVQ6OnByaXZhdGVDb21waWxlKENvZGVQdHIqIGZ1bgogCiAgICAgQVNTRVJUKG1fam1wVGFibGUu
aXNFbXB0eSgpKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVHJhbnNsYXRlIHZQ
QyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29kZSwgZm9yIHN3aXRj
aCB0YWJsZXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fc3dpdGNoZXMuc2l6ZSgp
OyArK2kpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gOTQzNTcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEs
MjAgKzIyMSwyMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW9uKHN0dWJJbmZvLCBvbGRTdHJ1Y3R1cmUsIG5ld1N0cnVjdHVy
ZSwgY2FjaGVkT2Zmc2V0LCBjaGFpbiwgcmV0dXJuQWRkcmVzcywgZGlyZWN0KTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyB2b2lkIGNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxl
UG9vbCwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCisgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFt
cG9saW5lcykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VK
SVQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDApOwotICAgICAgICAgICAgaml0LnBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxE
YXRhLCB0cmFtcG9saW5lcyk7CisgICAgICAgICAgICByZXR1cm4gaml0LnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEsIHRyYW1wb2xpbmVzKTsKICAgICAgICAg
fQogCi0gICAgICAgIHN0YXRpYyBDb2RlUHRyIGNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCisgICAgICAgIHN0YXRpYyBDb2RlUmVmIGNvbXBpbGVD
VElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVu
YykKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCFnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVB0cigpOworICAgICAgICAgICAgICAgIHJldHVy
biBDb2RlUmVmKCk7CiAgICAgICAgICAgICBKSVQgaml0KGdsb2JhbERhdGEsIDApOwotICAgICAg
ICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoZXhlY3V0YWJsZVBv
b2wsIGdsb2JhbERhdGEsIGZ1bmMpOworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29t
cGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuYyk7CiAgICAgICAgIH0KIAogICAgICAg
ICBzdGF0aWMgdm9pZCBwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZWJsb2NrLCBTdHJ1
Y3R1cmVTdHViSW5mbyosIFN0cnVjdHVyZSosIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFk
ZHJlc3NQdHIgcmV0dXJuQWRkcmVzcyk7CkBAIC0yNzQsOSArMjc0LDkgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJlU3R1
YkluZm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmVDaGFpbiosIHNpemVfdCBjb3VudCwgY29uc3Qg
SWRlbnRpZmllciYsIGNvbnN0IFByb3BlcnR5U2xvdCYsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJl
dHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpOwogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpb24oU3RydWN0dXJlU3R1Yklu
Zm8qLCBTdHJ1Y3R1cmUqLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBTdHJ1Y3R1
cmVDaGFpbiosIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgYm9vbCBkaXJlY3QpOwog
Ci0gICAgICAgIHZvaWQgcHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZGF0YSwgVHJh
bXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpOworICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpT
R2xvYmFsRGF0YSosIFRyYW1wb2xpbmVTdHJ1Y3R1cmUqKTsKICAgICAgICAgTGFiZWwgcHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSosIGJvb2wgaXNDb25zdHJ1Y3QgPSBm
YWxzZSk7Ci0gICAgICAgIENvZGVQdHIgcHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NS
ZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEs
IE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpOworICAgICAgICBDb2RlUmVmIHByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIHZvaWQg
cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKFJldHVybkFkZHJlc3NQdHIgcmV0dXJu
QWRkcmVzcyk7CiAKICAgICAgICAgdm9pZCBhZGRTbG93Q2FzZShKdW1wKTsKQEAgLTEwMzQsNyAr
MTAzNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogI2VuZGlmCiAjZW5kaWYKICAgICAgICAgV2Vha1Jh
bmRvbSBtX3JhbmRvbUdlbmVyYXRvcjsKLSAgICAgICAgc3RhdGljIENvZGVQdHIgc3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpOworICAgICAgICBzdGF0aWMgQ29kZVJlZiBzdHJpbmdHZXRCeVZhbFN0dWJHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogCiAgICAg
aW5saW5lIHZvaWQgSklUOjplbWl0X29wX2xvb3AoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NiwxMiArNTYsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgYm9vbCBvcGVy
YXRvciAhKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5tX2Nv
ZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiAhbV9yZWY7CiAgICAg
ICAgIH0KIAogICAgICAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5j
b2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhl
IG9mZnNldCBpbiBieXRlcyBvZiAncG9pbnRlckludG9Db2RlJyBpbnRvCkBAIC02OSw3ICs2OSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBibG9jayBvZiBjb2RlLiAgSXQgaXMgQVNT
RVJUZWQgdGhhdCBubyBjb2RlYmxvY2sgPjRnYiBpbiBzaXplLgogICAgICAgICB1bnNpZ25lZCBv
ZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
dHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29k
ZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFk
ZHJlc3MoKSk7CisgICAgICAgICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0
PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQVNTRVJUKHN0
YXRpY19jYXN0PGludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0gcmVz
dWx0KTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsK
ICAgICAgICAgfQpAQCAtNzcsMjQgKzc3LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAv
LyBFeGVjdXRlIHRoZSBjb2RlIQogICAgICAgICBpbmxpbmUgSlNWYWx1ZSBleGVjdXRlKFJlZ2lz
dGVyRmlsZSogcmVnaXN0ZXJGaWxlLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhKQogICAgICAgICB7Ci0gICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
VmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVz
cygpLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpLCByZWdpc3RlckZpbGUsIGNhbGxGcmFtZSwgMCwgUHJvZmlsZXI6OmVuYWJsZWRQcm9m
aWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+ZXhjZXB0aW9uID8ganNOdWxsKCkgOiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAg
ICB2b2lkKiBzdGFydCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2Nv
ZGUuZGF0YUxvY2F0aW9uKCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpLmRhdGFM
b2NhdGlvbigpOwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZV90IHNpemUoKQogICAgICAgICB7
Ci0gICAgICAgICAgICBBU1NFUlQobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fc2l6ZTsKKyAgICAgICAgICAgIEFTU0VSVChtX3Jl
Zi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYu
c2l6ZSgpOwogICAgICAgICB9CiAKLSAgICAgICAgRXhlY3V0YWJsZVBvb2wqIGdldEV4ZWN1dGFi
bGVQb29sKCkKKyAgICAgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZ2V0RXhlY3V0YWJsZU1l
bW9yeSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3JlZi5tX2V4ZWN1dGFibGVQ
b29sLmdldCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmV4ZWN1dGFibGVNZW1vcnkoKTsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgSklUVHlwZSBqaXRUeXBlKCkKQEAgLTEwNCw5
ICsxMDQsOSBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAvLyBIb3N0IGZ1bmN0aW9ucyBh
cmUgYSBiaXQgc3BlY2lhbDsgdGhleSBoYXZlIGEgbV9jb2RlIHBvaW50ZXIgYnV0IHRoZXkKICAg
ICAgICAgLy8gZG8gbm90IGluZGl2aWR1bGx5IHJlZiB0aGUgZXhlY3V0YWJsZSBwb29sIGNvbnRh
aW5pbmcgdGhlIHRyYW1wb2xpbmUuCi0gICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlv
bihDb2RlUHRyIGNvZGUpCisgICAgICAgIHN0YXRpYyBKSVRDb2RlIEhvc3RGdW5jdGlvbihDb2Rl
UmVmIGNvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUuZGF0
YUxvY2F0aW9uKCksIDAsIDAsIEhvc3RDYWxsVGh1bmspOworICAgICAgICAgICAgcmV0dXJuIEpJ
VENvZGUoY29kZSwgSG9zdENhbGxUaHVuayk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGNs
ZWFyKCkKQEAgLTExNiw4ICsxMTYsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgSklUQ29kZSh2b2lkKiBjb2RlLCBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgc2l6ZV90IHNpemUsIEpJVFR5cGUgaml0VHlwZSkK
LSAgICAgICAgICAgIDogbV9yZWYoY29kZSwgZXhlY3V0YWJsZVBvb2wsIHNpemUpCisgICAgICAg
IEpJVENvZGUoUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVt
b3J5LCBKSVRUeXBlIGppdFR5cGUpCisgICAgICAgICAgICA6IG1fcmVmKGV4ZWN1dGFibGVNZW1v
cnkpCiAgICAgICAgICAgICAsIG1faml0VHlwZShqaXRUeXBlKQogICAgICAgICB7CiAgICAgICAg
IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5j
cHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBACiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMo
UmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCitQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFt
cG9saW5lcykKIHsKICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKICAgICBMYWJlbCBz
b2Z0TW9kQmVnaW4gPSBhbGlnbigpOwpAQCAtMTUyLDcgKzE1Miw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBDYWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMz
Q2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJpbmdfZmFpbHVyZUNhc2VzMyk7CiAKICAg
ICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAg
Y2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+
ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNl
czFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsQ29tcGlsZUNjb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29t
cGlsZSkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsK
KyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSA9IGZp
bmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVh
bENhbGwgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENhbGxCZWdpbik7CiAgICAg
dHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3QgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5l
QXQodmlydHVhbENvbnN0cnVjdEJlZ2luKTsKQEAgLTE3NSw2ICsxNzUsOCBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAjaWYgRU5BQkxFKEpJVF9VU0VfU09GVF9N
T0RVTE8pCiAgICAgdHJhbXBvbGluZXMtPmN0aVNvZnRNb2R1bG8gPSBwYXRjaEJ1ZmZlci50cmFt
cG9saW5lQXQoc29mdE1vZEJlZ2luKTsKICNlbmRpZgorICAgIAorICAgIHJldHVybiBleGVjdXRh
YmxlTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAogSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb25zdHJ1Y3Qp
CkBAIC0zMTIsMTAgKzMxNCw5IEBAIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5h
dGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5rOwogfQogCi1KSVQ6OkNvZGVQdHIgSklU
Ojpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4g
ZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24g
ZnVuYykKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiB7CiAgICAgQ2FsbCBu
YXRpdmVDYWxsOwotICAgIExhYmVsIG5hdGl2ZUNhbGxUaHVuayA9IGFsaWduKCk7CiAKICAgICBl
bWl0UHV0SW1tZWRpYXRlVG9DYWxsRnJhbWVIZWFkZXIoMCwgUmVnaXN0ZXJGaWxlOjpDb2RlQmxv
Y2spOwogCkBAIC00NDcsMTIgKzQ0OCwxMCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29t
cGlsZUNUSU5hdGl2CiAgICAgcmV0KCk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3Ry
dWN0ZWQhIGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJz
IG9uIHRoZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMsIGV4ZWN1dGFibGVQb29sKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhuYXRpdmVD
YWxsLCBGdW5jdGlvblB0cihmdW5jKSk7Ci0gICAgcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
Ci0KLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7
CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gOTQzNTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgVVNFKEpTVkFMVUU2NCkKIAot
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVj
dXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRy
YW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiB7
CiAgICAgLy8gKDIpIFRoZSBzZWNvbmQgZnVuY3Rpb24gcHJvdmlkZXMgZmFzdCBwcm9wZXJ0eSBh
Y2Nlc3MgZm9yIHN0cmluZyBsZW5ndGgKICAgICBMYWJlbCBzdHJpbmdMZW5ndGhCZWdpbiA9IGFs
aWduKCk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFj
aGluZVRyYW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFrZVRhaWxS
ZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKIAogICAgIC8vIEFsbCB0cmFtcG9s
aW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0
aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2Nh
dG9yKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbCkpOwpAQCAtMTY0LDcgKzE2NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUNUSU1hY2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlQ29uc3Ry
dWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKIAogICAgIENv
ZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1
dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJs
ZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsTGluayA9IHBhdGNo
QnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbExpbmtCZWdpbik7CiAgICAgdHJhbXBvbGlu
ZXMtPmN0aVZpcnR1YWxDb25zdHJ1Y3RMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZp
cnR1YWxDb25zdHJ1Y3RMaW5rQmVnaW4pOwpAQCAtMTczLDYgKzE3Myw4IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0aXZl
Q2FsbCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDYWxsVGh1bmspOwogICAgIHRy
YW1wb2xpbmVzLT5jdGlOYXRpdmVDb25zdHJ1Y3QgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQo
bmF0aXZlQ29uc3RydWN0VGh1bmspOwogICAgIHRyYW1wb2xpbmVzLT5jdGlTdHJpbmdMZW5ndGhU
cmFtcG9saW5lID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHN0cmluZ0xlbmd0aEJlZ2luKTsK
KyAgICAKKyAgICByZXR1cm4gZXhlY3V0YWJsZU1lbW9yeS5yZWxlYXNlKCk7CiB9CiAKIEpJVDo6
TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBib29sIGlzQ29uc3RydWN0KQpAQCAtMjkxLDkgKzI5Myw5IEBAIEpJVDo6TGFiZWwg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUMKICAgICByZXR1cm4gbmF0aXZlQ2FsbFRodW5r
OwogfQogCi1KSVQ6OkNvZGVQdHIgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoUGFz
c1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4sIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZl
RnVuY3Rpb24pCitKSVQ6OkNvZGVSZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKIHsKLSAgICByZXR1cm4g
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICByZXR1cm4gQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVy
dHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX21ldGhvZF9jaGVj
ayhJbnN0cgogICAgIG1fYnl0ZWNvZGVPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlf
aWQpOwogfQogCi1KSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29k
ZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVz
OwpAQCAtMTkzLDggKzE5Myw4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1
YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlZ1QwKTsKICAgICBqaXQucmV0
KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwg
cG9vbCk7Ci0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0KTsKKyAgICByZXR1cm4g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX2dldF9i
eV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKQEAgLTIzMiw3ICsyMzIsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjCiAgICAgSnVtcCBub25D
ZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsgLy8gYmFzZSBhcnJheSBjaGVj
awogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1Qw
KSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5nVlB0cikpOwotICAgIGVtaXRO
YWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcikpOworICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcikuY29kZSgpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5j
aFRlc3RQdHIoWmVybywgcmVnVDApOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92
YWwpKTsKQEAgLTU0MSw3ICs1NDEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlk
VHJhbnNpdGlvCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwog
ICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rp
b25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRf
YnlfaWRfZmFpbCkpOwogICAgIApAQCAtNTUwLDEwICs1NTAsOSBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxs
c1swXS5mcm9tLCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxv
YykpOwogICAgIH0KICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZSgpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJu
QWRkcmVzcywgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1Ry
YW1wb2xpbmUocmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJS
b3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxv
Y2sqIGNvZGVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzKQpAQCAtNjA2LDcgKzYwNSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0
QXJyYXlMZW4KICAgICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZyksIHJlZ1Qx
KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2wo
KSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAg
ICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTYxNywx
MyArNjE2LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4KICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFj
ayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0
ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJl
bDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNr
IGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25K
dW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBh
dGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExv
Y2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRp
b24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAg
ICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0
dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJl
bGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dl
dF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02NjYsNyArNjY0LDcgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAo
KTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMs
IG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5m
b3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBz
bG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0g
c3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdl
dEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjg0LDEzICs2ODIsMTIgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIH0KIAogICAgIC8vIFRyYWNrIHRoZSBzdHVi
IHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRk
ZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8g
Y3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVy
VG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3By
b3RvX2xpc3QpKTsKQEAgLTcyMyw3ICs3MjAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkU2VsZkxpc3QoCiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+
ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3Rv
cjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBt
X2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTcz
MSw3ICs3MjgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAg
ICAgICAgIH0KICAgICB9ICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGlj
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3Jw
aGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkp
OwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1
YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGwpOwogICAgIApAQCAtNzQwLDE0ICs3MzcsMTQgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUpOwogICAgIAogICAgIC8vIEZp
bmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJh
bmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgs
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNh
Y2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC03ODcsNyArNzg0LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIAogICAgIEp1bXAgc3Vj
Y2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtNzk1LDIxICs3OTIsMjEgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0
aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRo
ZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFd
LnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMx
LCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBs
YXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsK
ICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlKCk7CiAKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsK
KyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFt
ZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0
aW5lLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3Qg
Y2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTg1NCw3ICs4NTEsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGlu
aykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1f
Y2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAg
ICAgIGlmIChpdGVyLT50bykKQEAgLTg2MiwyMiArODU5LDIyIEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFBy
b3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0
dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZS5jb2RlKCkpOwogICAgIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09m
RmFpbCwgbGFzdFByb3RvQmVnaW4pOwogICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAgICAgCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdl
IGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90
b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFs
RGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVj
dHVyZSwgY2hhaW4pOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFi
bGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0
dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTky
MSw3ICs5MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAg
ICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QxLCByZWdUMCwg
Y2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxD
YWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2Nh
bGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50bykKQEAgLTkzNSwx
MyArOTMyLDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKICAgICAvLyBUcmFj
ayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0
ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJl
bDsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7CiAgICAgCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogbmFtZXNwYWNlIEpTQyB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIAotSklUOjpDb2Rl
UHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIEpTSW50
ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTc3LDggKzc3LDggQEAg
SklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEt
PmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2Vk
Q2FsbChDb2RlTG9jYXRpb25MYWJlbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0
QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRl
c3RQdHIoWmVybywgcmVnVDApOwogICAgIGVtaXRQdXRWaXJ0dWFsUmVnaXN0ZXIoZHN0LCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9i
eV92YWwpKTsKQEAgLTU1NSw3ICs1NTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvCiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgp
OwogICAgIENhbGwgZmFpbHVyZUNhbGwgPSB0YWlsUmVjdXJzaXZlQ2FsbCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRy
KGRpcmVjdCA/IGN0aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lk
X2ZhaWwpKTsKIApAQCAtNTY0LDEwICs1NjQsOSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1swXS5mcm9t
LCBGdW5jdGlvblB0cihjdGlfb3BfcHV0X2J5X2lkX3RyYW5zaXRpb25fcmVhbGxvYykpOwogICAg
IH0KICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRy
eUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUocmV0dXJuQWRkcmVzcywg
ZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb1RyYW1wb2xpbmUo
cmV0dXJuQWRkcmVzcywgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVC
bG9jaywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
c2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzKQpAQCAt
NjE1LDcgKzYxNCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVBhdGNoR2V0QXJyYXlMZW4K
ICAgICBlbWl0RmFzdEFyaXRoSW50VG9JbW1Ob0NoZWNrKHJlZ1QyLCByZWdUMCk7CiAgICAgSnVt
cCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFVzZSB0aGUg
cGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBv
cmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2Fz
ZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRj
aE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjI2LDEzICs2MjUsMTIgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0
R2V0QnlJZFB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVh
dGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxh
YmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAg
IHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJS
b3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJ
bmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0
Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5l
cmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRy
ZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY3Myw3
ICs2NzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAg
fSBlbHNlCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1Qw
LCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRh
YmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMpOwogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02
OTAsMTMgKzY4OCwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3Ry
CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVk
IHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0
dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNo
IHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUg
aW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nh
c2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAg
cmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZv
LT5zdHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2gg
bW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmlj
LgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNz
LCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKQEAgLTcyNiw3ICs3
MjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgICAg
IGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocmVnVDAsIHJlZ1QwLCBzdHJ1Y3R1cmUsIGNhY2hlZE9m
ZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2wo
KSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAog
ICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+
OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7
ICsraXRlcikgewpAQCAtNzM2LDcgKzczMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRTZWxmTGlzdCgKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9y
cGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAg
Q29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29k
ZSgpKTsKICAgICBpZiAoIWxhc3RQcm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9
IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRH
ZXRCeUlkU2xvd0Nhc2VDYWxsKTsKIApAQCAtNzQ1LDE0ICs3NDIsMTQgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJh
Y2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUg
c3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVz
dWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNv
ZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0
dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSk7CiAKICAgICAv
LyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0
aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlv
biA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJ
ZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2Nv
ZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxh
YmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJDb2RlLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNzkxLDcgKzc4OCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKIAogICAgIEp1bXAgc3VjY2Vz
cyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykg
ewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2Fs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTgwMSwyMCAr
Nzk4LDIwIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICB9
CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIHBhdGNoQnVmZmVyLmxp
bmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4pOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
ZmFpbHVyZUNhc2VzMiwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQ
dXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVD
b2RlKCk7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgq
bV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJDb2RlLCBz
dHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRo
ZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5z
dGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQ
YXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2Up
OwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJDb2RlLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZp
ZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQs
IENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODU3LDcgKzg1NCw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNl
dChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlz
LCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICBpZiAobmVlZHNTdHViTGluaykg
ewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2Fs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTg2NywyMiAr
ODY0LDIyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKICAgICB9
CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGlu
ZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIg
d2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHBy
b3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9i
YWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3Ry
dWN0dXJlLCBjaGFpbik7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5k
ZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7CiAKICAgICAvLyBGaW5hbGx5
IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1w
IGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRv
U2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7
Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0
dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW4oU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
U3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVy
bkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MjUs
NyArOTIyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAg
ICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zm
c2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgp
KTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAg
ICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsg
KytpdGVyKSB7CkBAIC05NDEsMTMgKzkzOCwxMyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+
aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7
CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxs
IGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0
aW5lID0gZW50cnlMYWJlbDsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gc3R1YlJvdXRpbmU7
CiAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRo
ZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1
bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zm
c2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1
ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9u
LCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qg
d2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0
X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9u
KHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk0
MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc1Nyw4ICs3NTcsOCBAQCBKSVRUaHVua3M6OkpJVFRodW5rcyhKU0dsb2JhbERh
dGEqIGdsb2JhCiAgICAgaWYgKCFnbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yLmlzVmFs
aWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1w
b2xpbmVzKGdsb2JhbERhdGEsICZtX2V4ZWN1dGFibGVQb29sLCAmbV90cmFtcG9saW5lU3RydWN0
dXJlKTsKLSAgICBBU1NFUlQobV9leGVjdXRhYmxlUG9vbCk7CisgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gSklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKGdsb2JhbERhdGEsICZtX3Ry
YW1wb2xpbmVTdHJ1Y3R1cmUpOworICAgIEFTU0VSVCghIW1fZXhlY3V0YWJsZU1lbW9yeSk7CiAj
aWYgQ1BVKEFSTV9USFVNQjIpCiAgICAgLy8gVW5mb3J0dW5hdGUgdGhlIGFybSBjb21waWxlciBk
b2VzIG5vdCBsaWtlIHRoZSB1c2Ugb2Ygb2Zmc2V0b2Ygb24gSklUU3RhY2tGcmFtZSAoc2luY2Ug
aXQgY29udGFpbnMgbm9uIFBPRCB0eXBlcyksCiAgICAgLy8gYW5kIHRoZSBPQkpFQ1RfT0ZGU0VU
T0YgbWFjcm8gZG9lcyBub3QgYXBwZWFyIGNvbnN0YW50aXNoIGVub3VnaCBmb3IgaXQgdG8gYmUg
aGFwcHkgd2l0aCBpdHMgdXNlIGluIENPTVBJTEVfQVNTRVJUCkBAIC0xNjA4LDcgKzE2MDgsNyBA
QCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAKICAgICAgICAgaWYg
KHN0dWJJbmZvLT5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAg
ICAgICAgQVNTRVJUKCFzdHViSW5mby0+c3R1YlJvdXRpbmUpOwotICAgICAgICAgICAgcG9seW1v
cnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChj
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgQ29k
ZUxvY2F0aW9uTGFiZWwoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBj
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKSwgc3R1
YkluZm8tPnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CiAgICAgICAg
ICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QsIDEpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0ID0gc3R1YkluZm8tPnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0x
NjM0LDEyICsxNjM0LDEyIEBAIHN0YXRpYyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3Qq
IGcKICAgICBzd2l0Y2ggKHN0dWJJbmZvLT5hY2Nlc3NUeXBlKSB7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3Byb3RvOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8t
PnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8uYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZFByb3RvLnByb3RvdHlwZVN0cnVjdHVyZS5nZXQo
KSk7Ci0gICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
OwogICAgICAgICBzdHViSW5mby0+aW5pdEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0
dXJlTGlzdCwgMik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9j
aGFpbjoKICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGlu
ZSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0
dWJJbmZvLT51LmdldEJ5SWRDaGFpbi5jaGFpbi5nZXQoKSk7Ci0gICAgICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOwogICAgICAgICBzdHViSW5mby0+aW5p
dEdldEJ5SWRQcm90b0xpc3QocHJvdG90eXBlU3RydWN0dXJlTGlzdCwgMik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90b19saXN0OgpAQCAtMzU3MiwxMSAr
MzU3MiwxMSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgdG9fCiAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpLnRvT2Jq
ZWN0KGNhbGxGcmFtZSkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgSklUVGh1bmtzOjpj
dGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9y
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKIHsKLSAgICBzdGQ6OnBhaXI8
Q1RJU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5l
cmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpKTsKKyAgICBzdGQ6OnBhaXI8Q1RJU3R1Yk1h
cDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9jdGlTdHViTWFwLmFkZChnZW5lcmF0b3IsIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZigpKTsKICAgICBpZiAoZW50cnkuc2Vjb25kKQotICAgICAgICBl
bnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBv
b2wuZ2V0KCkpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kID0gZ2VuZXJhdG9yKGdsb2Jh
bERhdGEpOwogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kOwogfQogCkBAIC0zNTg0LDcg
KzM1ODQsNyBAQCBOYXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAg
ICAgc3RkOjpwYWlyPEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9
IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFi
bGU+KCkpOwogICAgIGlmICghKmVudHJ5LmZpcnN0LT5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZp
cnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmds
b2JhbERhdGEsIEpJVDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgbV9leGVjdXRh
YmxlUG9vbCwgZnVuY3Rpb24pLCBmdW5jdGlvbiwgY3RpTmF0aXZlQ29uc3RydWN0KCksIGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQu
c2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIEpJ
VDo6Y29tcGlsZUNUSU5hdGl2ZUNhbGwoZ2xvYmFsRGF0YSwgZnVuY3Rpb24pLCBmdW5jdGlvbiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOwogICAgIHJldHVy
biBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQogCkBAIC0zNTkyLDggKzM1OTIsOCBAQCBO
YXRpdmVFeGVjdXRhYmxlKiBKSVRUaHVua3M6Omhvc3RGdW5jdGlvCiB7CiAgICAgc3RkOjpwYWly
PEhvc3RGdW5jdGlvblN0dWJNYXA6Oml0ZXJhdG9yLCBib29sPiBlbnRyeSA9IG1faG9zdEZ1bmN0
aW9uU3R1Yk1hcC0+YWRkKGZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+KCkpOwogICAg
IGlmICghKmVudHJ5LmZpcnN0LT5zZWNvbmQpIHsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRh
LCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVB0cigpOwotICAg
ICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJs
ZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgY3RpTmF0aXZlQ29uc3RydWN0
KCksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjb2RlID0gZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xv
YmFsRGF0YSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKKyAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY29kZSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29u
c3RydWN0b3IpKTsKICAgICB9CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7
CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMjk0LDcgKzI5NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgY3RpTmF0aXZlQ29uc3RydWN0KCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3Ry
dWN0dXJlLmN0aU5hdGl2ZUNvbnN0cnVjdDsgfQogICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY3RpU29mdE1vZHVsbygpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlTb2Z0
TW9kdWxvOyB9CiAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVN0dWIoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpOworICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY3RpU3R1YihKU0dsb2JhbERhdGEqLCBUaHVua0dlbmVyYXRv
cik7CiAKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2Jh
bERhdGEqLCBOYXRpdmVGdW5jdGlvbik7CiAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGhvc3RG
dW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24sIFRodW5rR2VuZXJhdG9y
KTsKQEAgLTMwMiwxMSArMzAyLDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNs
ZWFySG9zdEZ1bmN0aW9uU3R1YnMoKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPiBDVElTdHViTWFw
OworICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5lcmF0b3IsIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZj4gQ1RJU3R1Yk1hcDsKICAgICAgICAgQ1RJU3R1Yk1hcCBtX2N0aVN0dWJNYXA7CiAg
ICAgICAgIHR5cGVkZWYgSGFzaE1hcDxOYXRpdmVGdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRh
YmxlPiA+IEhvc3RGdW5jdGlvblN0dWJNYXA7CiAgICAgICAgIE93blB0cjxIb3N0RnVuY3Rpb25T
dHViTWFwPiBtX2hvc3RGdW5jdGlvblN0dWJNYXA7Ci0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxl
UG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKKyAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlI
YW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIAogICAgICAgICBUcmFtcG9saW5lU3RydWN0dXJl
IG1fdHJhbXBvbGluZVN0cnVjdHVyZTsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHJldmlzaW9uIDk0MzU3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9TcGVjaWFsaXplZFRodW5rSklULmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDEwICszNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFNwZWNp
YWxpemVkVGh1bmtKSVQgOiBwdWJsaWMgSlNJbnRlcmZhY2VKSVQgewogICAgIHB1YmxpYzoKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBUaGlzQXJndW1lbnQgPSAtMTsKLSAgICAgICAgU3BlY2lh
bGl6ZWRUaHVua0pJVChpbnQgZXhwZWN0ZWRBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKKyAgICAgICAgU3BlY2lhbGl6ZWRUaHVua0pJVChp
bnQgZXhwZWN0ZWRBcmdDb3VudCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogICAgICAgICAg
ICAgOiBtX2V4cGVjdGVkQXJnQ291bnQoZXhwZWN0ZWRBcmdDb3VudCkKICAgICAgICAgICAgICwg
bV9nbG9iYWxEYXRhKGdsb2JhbERhdGEpCi0gICAgICAgICAgICAsIG1fcG9vbChwb29sKQogICAg
ICAgICB7CiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGhhdmUgdGhlIGV4cGVjdGVkIG51
bWJlciBvZiBhcmd1bWVudHMKICAgICAgICAgICAgIG1fZmFpbHVyZXMuYXBwZW5kKGJyYW5jaDMy
KE5vdEVxdWFsLCBBZGRyZXNzKGNhbGxGcmFtZVJlZ2lzdGVyLCBSZWdpc3RlckZpbGU6OkFyZ3Vt
ZW50Q291bnQgKiAoaW50KXNpemVvZihSZWdpc3RlcikpLCBUcnVzdGVkSW1tMzIoZXhwZWN0ZWRB
cmdDb3VudCArIDEpKSk7CkBAIC0xMjMsMTMgKzEyMiwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIHJldCgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZmluYWxpemUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZmFsbGJhY2spCisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmaW5h
bGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxs
YmFjaykKICAgICAgICAgewotICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcihnbG9i
YWxEYXRhLCB0aGlzLCBtX3Bvb2wuZ2V0KCkpOworICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcihnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmso
bV9mYWlsdXJlcywgQ29kZUxvY2F0aW9uTGFiZWwoZmFsbGJhY2spKTsKICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgaSsrKQogICAgICAgICAgICAg
ICAgIHBhdGNoQnVmZmVyLmxpbmsobV9jYWxsc1tpXS5maXJzdCwgbV9jYWxsc1tpXS5zZWNvbmQp
OwotICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpLm1fY29kZTsK
KyAgICAgICAgICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAg
fQogCiAgICAgICAgIC8vIEFzc3VtZXMgdGhhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9uIHVzZXMgZnBS
ZWdpc3RlcjAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CkBAIC0xNjMsNyArMTYyLDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICBpbnQgbV9leHBlY3RlZEFyZ0NvdW50OwogICAg
ICAgICBKU0dsb2JhbERhdGEqIG1fZ2xvYmFsRGF0YTsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBtX3Bvb2w7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBtX2ZhaWx1
cmVzOwogICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPENhbGwsIEZ1bmN0aW9uUHRyPiA+IG1fY2Fs
bHM7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9UaHVua0dlbmVyYXRvcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MywyNiArNjMsMjYgQEAg
c3RhdGljIHZvaWQgY2hhclRvU3RyaW5nKFNwZWNpYWxpemVkVGh1bgogICAgIGppdC5hcHBlbmRG
YWlsdXJlKGppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBkc3QpKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNoYXJDb2RlQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEp
CiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7Cisg
ICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgc3RyaW5nQ2hh
ckxvYWQoaml0KTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hh
ckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9v
bCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwg
Z2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFs
RGF0YSk7CiAgICAgc3RyaW5nQ2hhckxvYWQoaml0KTsKICAgICBjaGFyVG9TdHJpbmcoaml0LCBn
bG9iYWxEYXRhLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICAgICBqaXQucmV0dXJuSlND
ZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXpl
KCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0K
IAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wp
OworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIC8vIGxv
YWQgY2hhciBjb2RlCiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICBjaGFyVG9TdHJpbmcoaml0LCBnbG9iYWxEYXRhLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTkwLDExICs5MCwxMSBAQCBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFs
RGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVk
VGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dFNxcnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZN
YW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIAog
ICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5zcXJ0RG91YmxlKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwpA
QCAtMTc4LDEyICsxNzgsMTIgQEAgZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKTsKIGRl
ZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKTsKIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFw
cGVyKGNlaWwpOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOwor
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihm
bG9vcikgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAgIGppdC5yZXR1cm5J
bnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm9uSW50SnVtcC5saW5rKCZq
aXQpOwpAQCAtMTk3LDExICsxOTcsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1
bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgx
LCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9i
YWxEYXRhKTsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGNlaWwpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQu
bG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1
bXApOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBA
IC0yMjAsMTEgKzIyMCwxMSBAQCBzdGF0aWMgY29uc3QgZG91YmxlIG5lZ2F0aXZlWmVyb0NvbnN0
YW50CiBzdGF0aWMgY29uc3QgZG91YmxlIG9uZUNvbnN0YW50ID0gMS4wOwogc3RhdGljIGNvbnN0
IGRvdWJsZSBuZWdhdGl2ZUhhbGZDb25zdGFudCA9IC0wLjU7CiAgICAgCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtK
SVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoanNSb3VuZCkg
fHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1w
OwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwKTsKQEAgLTIzOSwzNyArMjM5LDM3IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3Vu
ZFRodW5rR2VuZXJhdG8KICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0
YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBw
ZXIoZXhwKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2Vk
Q29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0
c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNy
ZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2Fs
bCgpKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJs
ZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpOwogICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6
ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBpZiAo
IVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5q
aXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEsIHBvb2wpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAg
ICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9i
YWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0
U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpKTsK
ICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwogICAg
IHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5j
dGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9v
bCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYg
KCFqaXQuc3VwcG9ydHNEb3VibGVCaXRvcHMoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwog
ICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwg
bm9uSW50SnVtcCk7CiAgICAgaml0LnJzaGlmdDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDEpOwpAQCAtMjg2LDExICsyODYsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1Ro
dW5rR2VuZXJhdG9yKAogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2Jh
bERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRh
YmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQo
MiwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMiwgZ2xv
YmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAKICAgICBqaXQubG9hZERvdWJs
ZSgmb25lQ29uc3RhbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDEpOwogICAgIGppdC5s
b2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDIwICszMSwy
MCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBFeGVjdXRhYmxlUG9vbDsKICAgICBjbGFz
cyBKU0dsb2JhbERhdGE7CiAgICAgY2xhc3MgTmF0aXZlRXhlY3V0YWJsZTsKLSAgICBjbGFzcyBN
YWNyb0Fzc2VtYmxlckNvZGVQdHI7CisgICAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOwog
Ci0gICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgKCpUaHVua0dlbmVyYXRvcikoSlNH
bG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
Y2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7
Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21D
aGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSos
IEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNlaWxUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9v
bCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxv
Z1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhl
Y3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgc3FydFRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7
CisgICAgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgKCpUaHVua0dlbmVyYXRvcikoSlNH
bG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZyb21DaGFyQ29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsK
KyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHJvdW5kVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3Myw3ICsxNzMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdHlwZWRlZiBFeGVjdXRh
YmxlQmFzZSBCYXNlOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgc3RhdGljIE5hdGl2ZUV4
ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQorICAg
ICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVu
Y3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rp
b24gY29uc3RydWN0b3IpCiAgICAgICAgIHsKICAgICAgICAgICAgIE5hdGl2ZUV4ZWN1dGFibGUq
IGV4ZWN1dGFibGU7CiAgICAgICAgICAgICBpZiAoIWNhbGxUaHVuaykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3Bw
CShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luaXRp
YWxpemVUaHJlYWRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiArMjksMTMgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAKKyNp
bmNsdWRlICJFeGVjdXRhYmxlQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgotI2luY2x1
ZGUgImR0b2EuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisjaW5jbHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUg
PHd0Zi9UaHJlYWRpbmcuaD4KIApAQCAtNTMsNiArNTQsNyBAQCBzdGF0aWMgdm9pZCBpbml0aWFs
aXplVGhyZWFkaW5nT25jZSgpCiAgICAgV3JpdGVCYXJyaWVyQ291bnRlcnM6OmluaXRpYWxpemUo
KTsKICNlbmRpZgogICAgIEpTR2xvYmFsRGF0YTo6c3RvcmVWUHRycygpOworICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKTsKICNpZiBFTkFCTEUoSlNDX01VTFRJ
UExFX1RIUkVBRFMpCiAgICAgUmVnaXN0ZXJGaWxlOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxE
YXRhLmNwcAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNyArMTg2LDYgQEAgSlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cAogICAgICwgZW1wdHlMaXN0KG5l
dyBNYXJrZWRBcmd1bWVudEJ1ZmZlcikKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICwgZXhl
Y3V0YWJsZUFsbG9jYXRvcigqdGhpcykKLSAgICAsIHJlZ2V4QWxsb2NhdG9yKCp0aGlzKQogI2Vu
ZGlmCiAgICAgLCBsZXhlcihuZXcgTGV4ZXIodGhpcykpCiAgICAgLCBwYXJzZXIobmV3IFBhcnNl
cikKQEAgLTQ0MCw2ICs0MzksOSBAQCB2b2lkIEpTR2xvYmFsRGF0YTo6c3RvcFNhbXBsaW5nKCkK
IHZvaWQgSlNHbG9iYWxEYXRhOjpkdW1wU2FtcGxlRGF0YShFeGVjU3RhdGUqIGV4ZWMpCiB7CiAg
ICAgaW50ZXJwcmV0ZXItPmR1bXBTYW1wbGVEYXRhKGV4ZWMpOworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKTsKKyNlbmRpZgogfQog
CiB2b2lkIEpTR2xvYmFsRGF0YTo6cmVjb21waWxlQWxsSlNGdW5jdGlvbnMoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDk0
MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE5Myw3ICsxOTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciBleGVj
dXRhYmxlQWxsb2NhdG9yOwotICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIHJlZ2V4QWxsb2Nh
dG9yOwogI2VuZGlmCiAKICNpZiAhRU5BQkxFKEpJVCkKQEAgLTIxNiw3ICsyMTUsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSW50ZXJwcmV0ZXIqIGludGVycHJldGVyOwogI2lmIEVOQUJM
RShKSVQpCiAgICAgICAgIE93blB0cjxKSVRUaHVua3M+IGppdFN0dWJzOwotICAgICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCisg
ICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdl
bmVyYXRvcikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGppdFN0dWJzLT5jdGlTdHVi
KHRoaXMsIGdlbmVyYXRvcik7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw5IEBA
IFNFVChXVEZfSEVBREVSUwogICAgIE1hbGxvY1pvbmVTdXBwb3J0LmgKICAgICBNYXRoRXh0cmFz
LmgKICAgICBNZXNzYWdlUXVldWUuaAorICAgIE1ldGFBbGxvY2F0b3IuY3BwCisgICAgTWV0YUFs
bG9jYXRvci5oCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZS5oCiAgICAgTm9uQ29weWluZ1NvcnQu
aAogICAgIFRocmVhZFJlc3RyaWN0aW9uVmVyaWZpZXIuaAogICAgIE5vbmNvcHlhYmxlLmgKQEAg
LTY5LDYgKzcyLDcgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgUG9zc2libHlOdWxsLmgKICAgICBS
YW5kb21OdW1iZXIuaAogICAgIFJhbmRvbU51bWJlclNlZWQuaAorICAgIFJlZEJsYWNrVHJlZS5o
CiAgICAgUmVmQ291bnRlZC5oCiAgICAgUmVmQ291bnRlZExlYWtDb3VudGVyLmgKICAgICBSZWZQ
dHIuaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9y
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4g
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4g
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJNZXRhQWxsb2NhdG9yLmgiCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworTWV0YUFsbG9jYXRvckhhbmRsZTo6TWV0YUFsbG9j
YXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IsIHZvaWQqIHN0YXJ0LCBzaXplX3Qg
c2l6ZUluQnl0ZXMpCisgICAgOiBtX2FsbG9jYXRvcihhbGxvY2F0b3IpCisgICAgLCBtX3N0YXJ0
KHN0YXJ0KQorICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKK3sKKyAgICBBU1NFUlQo
YWxsb2NhdG9yKTsKKyAgICBBU1NFUlQoc3RhcnQpOworICAgIEFTU0VSVChzaXplSW5CeXRlcyk7
Cit9CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6On5NZXRhQWxsb2NhdG9ySGFuZGxlKCkKK3sKKyAg
ICBpZiAoIW1fYWxsb2NhdG9yKQorICAgICAgICByZXR1cm47CisgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2FsbG9jYXRvci0+bV9sb2NrKTsKKyAgICBpZiAobV9zaXplSW5CeXRlcykgewor
ICAgICAgICBtX2FsbG9jYXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShtX3N0YXJ0LCBtX3Np
emVJbkJ5dGVzKTsKKyAgICAgICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZyb21SZWxlYXNl
ZEhhbmRsZShtX3N0YXJ0LCBtX3NpemVJbkJ5dGVzKTsKKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFs
bG9jYXRvckhhbmRsZTo6c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcykKK3sKKyAgICBBU1NF
UlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7CisgICAgCisgICAgaWYgKCFtX2Fs
bG9jYXRvcikgeworICAgICAgICBtX3NpemVJbkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2Fs
bG9jYXRvci0+bV9sb2NrKTsKKworICAgIG5ld1NpemVJbkJ5dGVzID0gbV9hbGxvY2F0b3ItPnJv
dW5kVXAobmV3U2l6ZUluQnl0ZXMpOworICAgIAorICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8
PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAobmV3U2l6ZUluQnl0ZXMgPT0gbV9zaXpl
SW5CeXRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHVpbnRwdHJfdCBmcmVlU3RhcnQg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBuZXdTaXplSW5CeXRlczsK
KyAgICBzaXplX3QgZnJlZVNpemUgPSBtX3NpemVJbkJ5dGVzIC0gbmV3U2l6ZUluQnl0ZXM7Cisg
ICAgdWludHB0cl90IGZyZWVFbmQgPSBmcmVlU3RhcnQgKyBmcmVlU2l6ZTsKKyAgICAKKyAgICB1
aW50cHRyX3QgZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPSAoZnJlZVN0YXJ0ICsgbV9hbGxvY2F0
b3ItPm1fcGFnZVNpemUgLSAxKSAmIH4obV9hbGxvY2F0b3ItPm1fcGFnZVNpemUgLSAxKTsKKyAg
ICBpZiAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgPCBmcmVlRW5kKQorICAgICAgICBtX2FsbG9j
YXRvci0+ZGVjcmVtZW50UGFnZU9jY3VwYW5jeShyZWludGVycHJldF9jYXN0PHZvaWQqPihmaXJz
dENvbXBsZXRlbHlGcmVlUGFnZSksIGZyZWVTaXplIC0gKGZpcnN0Q29tcGxldGVseUZyZWVQYWdl
IC0gZnJlZVN0YXJ0KSk7CisgICAgCisgICAgbV9hbGxvY2F0b3ItPmFkZEZyZWVTcGFjZUZyb21S
ZWxlYXNlZEhhbmRsZShyZWludGVycHJldF9jYXN0PHZvaWQqPihmcmVlU3RhcnQpLCBmcmVlU2l6
ZSk7CisgICAgCisgICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworfQorCitNZXRh
QWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSkKKyAgICA6
IG1fYWxsb2NhdGlvbkdyYW51bGUoYWxsb2NhdGlvbkdyYW51bGUpCisgICAgLCBtX3BhZ2VTaXpl
KHBhZ2VTaXplKCkpCisgICAgLCBtX2J5dGVzQWxsb2NhdGVkKDApCisgICAgLCBtX2J5dGVzUmVz
ZXJ2ZWQoMCkKKyAgICAsIG1fYnl0ZXNDb21taXR0ZWQoMCkKKyNpZm5kZWYgTkRFQlVHCisgICAg
LCBtX21hbGxvY0JhbGFuY2UoMCkKKyNlbmRpZgorI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9Q
Uk9GSUxFKQorICAgICwgbV9udW1BbGxvY2F0aW9ucygwKQorICAgICwgbV9udW1GcmVlcygwKQor
I2VuZGlmCit7CisgICAgbV9sb2NrLkluaXQoKTsKKyAgICAKKyAgICBmb3IgKG1fbG9nUGFnZVNp
emUgPSAwOyBtX2xvZ1BhZ2VTaXplIDwgMzI7ICsrbV9sb2dQYWdlU2l6ZSkgeworICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ1BhZ2VTaXplID09IG1fcGFnZVNpemUp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXplKTsKKyAgICAKKyAgICBm
b3IgKG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPSAwOyBtX2xvZ0FsbG9jYXRpb25HcmFudWxlIDwg
MzI7ICsrbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSkgeworICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8
c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51
bGUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKHN0YXRpY19j
YXN0PHNpemVfdD4oMSkgPDwgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25H
cmFudWxlKTsKK30KKworUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBNZXRhQWxsb2Nh
dG9yOjphbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgU3BpbkxvY2tIb2xkZXIg
bG9ja2VyKCZtX2xvY2spOworCisgICAgaWYgKCFzaXplSW5CeXRlcykKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgc2l6ZUluQnl0ZXMgPSByb3VuZFVwKHNpemVJbkJ5dGVzKTsKKyAgICAK
KyAgICB2b2lkKiBzdGFydCA9IGZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZUluQnl0ZXMpOwor
ICAgIGlmICghc3RhcnQpIHsKKyAgICAgICAgc2l6ZV90IHJlcXVlc3RlZE51bWJlck9mUGFnZXMg
PSAoc2l6ZUluQnl0ZXMgKyBtX3BhZ2VTaXplIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAg
ICAgc2l6ZV90IG51bWJlck9mUGFnZXMgPSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzOworICAgICAg
ICAKKyAgICAgICAgc3RhcnQgPSBhbGxvY2F0ZU5ld1NwYWNlKG51bWJlck9mUGFnZXMpOworICAg
ICAgICBpZiAoIXN0YXJ0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQobnVtYmVyT2ZQYWdlcyA+PSByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzKTsKKyAgICAg
ICAgCisgICAgICAgIHNpemVfdCByb3VuZGVkVXBTaXplID0gbnVtYmVyT2ZQYWdlcyA8PCBtX2xv
Z1BhZ2VTaXplOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKHJvdW5kZWRVcFNpemUgPj0gc2l6
ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgbV9ieXRlc1Jlc2VydmVkICs9IHJvdW5kZWRV
cFNpemU7CisgICAgICAgIAorICAgICAgICBpZiAocm91bmRlZFVwU2l6ZSA+IHNpemVJbkJ5dGVz
KSB7CisgICAgICAgICAgICB2b2lkKiBmcmVlU3BhY2VTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyk7
CisgICAgICAgICAgICBzaXplX3QgZnJlZVNwYWNlU2l6ZSA9IHJvdW5kZWRVcFNpemUgLSBzaXpl
SW5CeXRlczsKKyAgICAgICAgICAgIGFkZEZyZWVTcGFjZShmcmVlU3BhY2VTdGFydCwgZnJlZVNw
YWNlU2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaW5jcmVtZW50UGFnZU9jY3VwYW5jeShz
dGFydCwgc2l6ZUluQnl0ZXMpOworICAgIG1fYnl0ZXNBbGxvY2F0ZWQgKz0gc2l6ZUluQnl0ZXM7
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1BbGxvY2F0aW9u
cysrOworI2VuZGlmCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxl
KHRoaXMsIHN0YXJ0LCBzaXplSW5CeXRlcykpOworfQorCitNZXRhQWxsb2NhdG9yOjpTdGF0aXN0
aWNzIE1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKCkKK3sKKyAgICBTcGluTG9ja0hv
bGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgU3RhdGlzdGljcyByZXN1bHQ7CisgICAgcmVzdWx0
LmJ5dGVzQWxsb2NhdGVkID0gbV9ieXRlc0FsbG9jYXRlZDsKKyAgICByZXN1bHQuYnl0ZXNSZXNl
cnZlZCA9IG1fYnl0ZXNSZXNlcnZlZDsKKyAgICByZXN1bHQuYnl0ZXNDb21taXR0ZWQgPSBtX2J5
dGVzQ29tbWl0dGVkOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIE1ldGFBbGxvY2F0
b3I6OmZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIEZy
ZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmluZExlYXN0R3JlYXRlclRo
YW5PckVxdWFsKHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJl
dHVybiAwOworICAgIAorICAgIEFTU0VSVChub2RlLT5rZXkgPj0gc2l6ZUluQnl0ZXMpOworICAg
IAorICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9kZSk7CisgICAgCisgICAgdm9pZCog
cmVzdWx0OworICAgIAorICAgIGlmIChub2RlLT5rZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAg
ICAgLy8gRWFzeSBjYXNlOiBwZXJmZWN0IGZpdCwgc28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50
aXJlbHkuCisgICAgICAgIHJlc3VsdCA9IG5vZGUtPnZhbHVlOworICAgICAgICAKKyAgICAgICAg
bV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsKKyAgICAgICAg
bV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7Cisg
ICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFRyeSB0byBiZSBhIGdvb2QgY2l0aXplbiBhbmQgZW5zdXJlIHRoYXQgdGhlIHJldHVybmVkIGNo
dW5rIG9mIG1lbW9yeQorICAgICAgICAvLyBzdHJhZGRsZXMgYXMgZmV3IHBhZ2VzIGFzIHBvc3Np
YmxlLCBidXQgb25seSBpbnNvZmFyIGFzIGRvaW5nIHNvIHdpbGwKKyAgICAgICAgLy8gbm90IGlu
Y3JlYXNlIGZyYWdtZW50YXRpb24uIFRoZSBpbnR1aXRpb24gaXMgdGhhdCBtaW5pbWl6aW5nCisg
ICAgICAgIC8vIGZyYWdtZW50YXRpb24gaXMgYSBzdHJpY3RseSBoaWdoZXIgcHJpb3JpdHkgdGhh
biBtaW5pbWl6aW5nIHRoZSBudW1iZXIKKyAgICAgICAgLy8gb2YgY29tbWl0dGVkIHBhZ2VzLCBz
aW5jZSBpbiB0aGUgbG9uZyBydW4sIHNtYWxsZXIgZnJhZ21lbnRhdGlvbiBtZWFucworICAgICAg
ICAvLyBmZXdlciBjb21taXR0ZWQgcGFnZXMgYW5kIGZld2VyIGZhaWx1cmVzIGluIGdlbmVyYWwu
CisgICAgICAgIAorICAgICAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50
cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVl
KSArIG5vZGUtPmtleSAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgICAgIHVpbnRw
dHJfdCBsYXN0UGFnZUZvckxlZnRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihub2RlLT52YWx1ZSkgKyBzaXplSW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7Cisg
ICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gPSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVz
KSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICAKKyAgICAgICAgaWYgKGxhc3RQYWdlRm9yTGVm
dEFsbG9jYXRpb24gLSBmaXJzdFBhZ2UgKyAxIDw9IGxhc3RQYWdlIC0gZmlyc3RQYWdlRm9yUmln
aHRBbGxvY2F0aW9uICsgMSkgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIGxlZnQg
c2lkZSBvZiB0aGUgcmV0dXJuZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgcmln
aHQuCisgICAgICAgICAgICByZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAucmVtb3ZlKG5vZGUtPnZhbHVlKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAg
ICAgICAgICAgbm9kZS0+dmFsdWUgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAg
ICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuYWRkKG5vZGUtPnZhbHVlLCBub2RlKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSByaWdodCBz
aXplIG9mIHRoZSByZXR1cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSBsZWZ0
OworICAgICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZv
aWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUpICsgbm9kZS0+a2V5
IC0gc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbm9kZS0+a2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9m
cmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChyZXN1bHQsIG5vZGUpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRk
RnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0
ZXMpCit7CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1GcmVl
cysrOworI2VuZGlmCisgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBzaXplSW5CeXRlczsKKyAgICBh
ZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9y
OjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorewor
ICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBtX2J5dGVzUmVzZXJ2ZWQg
Kz0gc2l6ZUluQnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9
CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgc2l6ZV90
IHJlc3VsdCA9IDA7CisgICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VT
aXplTWFwLmZpcnN0KCk7IG5vZGU7IG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuc3VjY2Vzc29y
KG5vZGUpKQorICAgICAgICByZXN1bHQgKz0gbm9kZS0+a2V5OworICAgIHJldHVybiByZXN1bHQ7
CisjZWxzZQorICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cykKK3sKKyAgICB2b2lkKiBlbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhhc2hN
YXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgbGVmdE5laWdoYm9yID0gbV9mcmVl
U3BhY2VFbmRBZGRyZXNzTWFwLmZpbmQoc3RhcnQpOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVT
cGFjZU5vZGUqPjo6aXRlcmF0b3IgcmlnaHROZWlnaGJvciA9IG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLmZpbmQoZW5kKTsKKyAgICAKKyAgICBpZiAobGVmdE5laWdoYm9yICE9IG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3
ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUs
IGFuZAorICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAu
CisgICAgICAgIAorICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT52YWx1ZSkgKyBsZWZ0
TmVpZ2hib3ItPnNlY29uZC0+a2V5KSA9PSBsZWZ0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAg
CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIGxlZnROb2RlID0gbGVmdE5laWdoYm9yLT5zZWNvbmQ7
CisgICAgICAgIAorICAgICAgICB2b2lkKiBsZWZ0U3RhcnQgPSBsZWZ0Tm9kZS0+dmFsdWU7Cisg
ICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5rZXk7CisgICAgICAgIHZvaWQqIGxl
ZnRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJf
dD4obGVmdFN0YXJ0KSArIGxlZnRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChsZWZ0
RW5kID09IHN0YXJ0KTsKKyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1v
dmUobGVmdE5vZGUpOworICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKGxl
ZnRFbmQpOworICAgICAgICAKKyAgICAgICAgLy8gTm93IGNoZWNrIGlmIHRoZXJlIGlzIGFsc28g
c29tZXRoaW5nIHRvIGNvYWxlc2NlIHdpdGggb24gdGhlIHJpZ2h0LgorICAgICAgICBpZiAocmln
aHROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAg
ICAgICAgLy8gRnJlZWluZyBzb21ldGhpbmcgaW4gdGhlIG1pZGRsZSBvZiBmcmVlIGJsb2Nrcy4g
Q29hbGVzY2UgYm90aCBsZWZ0IGFuZAorICAgICAgICAgICAgLy8gcmlnaHQsIHdoaWxzdCByZW1v
dmluZyB0aGUgcmlnaHQgbmVpZ2hib3IgZnJvbSB0aGUgbWFwcy4KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgQVNTRVJUKHJpZ2h0TmVpZ2hib3ItPnNlY29uZC0+dmFsdWUgPT0gcmlnaHROZWln
aGJvci0+Zmlyc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiBy
aWdodE5vZGUgPSByaWdodE5laWdoYm9yLT5zZWNvbmQ7CisgICAgICAgICAgICB2b2lkKiByaWdo
dFN0YXJ0ID0gcmlnaHROZWlnaGJvci0+Zmlyc3Q7CisgICAgICAgICAgICBzaXplX3QgcmlnaHRT
aXplID0gcmlnaHROb2RlLT5rZXk7CisgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0
KSArIHJpZ2h0U2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyaWdodFN0
YXJ0ID09IGVuZCk7CisgICAgICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJ
bkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1f
ZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmlnaHRFbmQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBmcmVlRnJlZVNwYWNlTm9kZShyaWdodE5vZGUpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzICsgcmlnaHRTaXplOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnRO
b2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQocmlnaHRFbmQs
IGxlZnROb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxlZnROb2RlLT5rZXkg
Kz0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6
ZU1hcC5pbnNlcnQobGVmdE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNz
TWFwLmFkZChlbmQsIGxlZnROb2RlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IC8vIENhbm5vdCBjb2FsZXNjZSB3aXRoIGxlZnQ7IHRyeSB0byBzZWUgaWYgd2UgY2FuIGNvYWxl
c2NlIHdpdGggcmlnaHQuCisgICAgICAgIAorICAgICAgICBpZiAocmlnaHROZWlnaGJvciAhPSBt
X2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAgICAgRnJlZVNwYWNl
Tm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9p
ZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90
IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmln
aHRTdGFydCkgKyByaWdodFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQo
cmlnaHRTdGFydCA9PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyaWdodEVuZCwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0
KSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmlnaHROb2RlLT5rZXkgKz0gc2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICByaWdodE5vZGUtPnZhbHVlID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQocmlnaHROb2RlKTsKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmFkZChzdGFydCwgcmlnaHROb2RlKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gY29hbGVzY2Ugd2l0aCwgc28g
Y3JlYXRlIGEgbmV3IGZyZWUgc3BhY2Ugbm9kZSBhbmQgYWRkIGl0LgorICAgICAgICAgICAgCisg
ICAgICAgICAgICBGcmVlU3BhY2VOb2RlKiBub2RlID0gYWxsb2NGcmVlU3BhY2VOb2RlKCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPmtleSA9IHNpemVJbkJ5dGVzOworICAgICAg
ICAgICAgbm9kZS0+dmFsdWUgPSBzdGFydDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9m
cmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3Rh
cnRBZGRyZXNzTWFwLmFkZChzdGFydCwgbm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXAuYWRkKGVuZCwgbm9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
TWV0YUFsbG9jYXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJf
dCBsYXN0UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXpl
SW5CeXRlcyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3Qg
cGFnZSA9IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhh
c2hNYXA8dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5
TWFwLmZpbmQocGFnZSk7CisgICAgICAgIGlmIChpdGVyID09IG1fcGFnZU9jY3VwYW5jeU1hcC5l
bmQoKSkgeworICAgICAgICAgICAgbV9wYWdlT2NjdXBhbmN5TWFwLmFkZChwYWdlLCAxKTsKKyAg
ICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQgKz0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5v
dGlmeU5lZWRQYWdlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6
ZSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCsrOworICAgIH0K
K30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFk
ZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpID4+IG1fbG9nUGFnZVNpemU7Cisg
ICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRy
ZXNzKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBmb3Ig
KHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsK
KyAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3Bh
Z2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9wYWdl
T2NjdXBhbmN5TWFwLmVuZCgpKTsKKyAgICAgICAgaWYgKCEtLShpdGVyLT5zZWNvbmQpKSB7Cisg
ICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAucmVtb3ZlKGl0ZXIpOworICAgICAgICAgICAg
bV9ieXRlc0NvbW1pdHRlZCAtPSBtX3BhZ2VTaXplOworICAgICAgICAgICAgbm90aWZ5UGFnZUlz
RnJlZShyZWludGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworc2l6ZV90IE1ldGFBbGxvY2F0b3I6OnJvdW5kVXAoc2l6ZV90
IHNpemVJbkJ5dGVzKQoreworICAgIGlmIChzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIC0gbV9hbGxvY2F0aW9uR3JhbnVsZSA8PSBzaXplSW5CeXRlcykKKyAgICAgICAgQ1JBU0go
KTsKKyAgICByZXR1cm4gKHNpemVJbkJ5dGVzICsgbV9hbGxvY2F0aW9uR3JhbnVsZSAtIDEpICYg
fihtX2FsbG9jYXRpb25HcmFudWxlIC0gMSk7Cit9CisKK01ldGFBbGxvY2F0b3I6OkZyZWVTcGFj
ZU5vZGUqIE1ldGFBbGxvY2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSgpCit7CisjaWZuZGVmIE5E
RUJVRworICAgIG1fbWFsbG9jQmFsYW5jZSsrOworI2VuZGlmCisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEZyZWVTcGFjZU5vZGUqPihmYXN0TWFsbG9jKHNpemVvZihGcmVlU3BhY2VOb2RlKSkpOwor
fQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5vZGUq
IG5vZGUpCit7CisjaWZuZGVmIE5ERUJVRworICAgIG1fbWFsbG9jQmFsYW5jZS0tOworI2VuZGlm
CisgICAgZmFzdEZyZWUobm9kZSk7Cit9CisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQoreworICAgIHByaW50Zigi
bnVtIGFsbG9jYXRpb25zID0gJXUsIG51bSBmcmVlcyA9ICV1XG4iLCBtX251bUFsbG9jYXRpb25z
LCBtX251bUZyZWVzKTsKK30KKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVz
IG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvcl9oCisjZGVm
aW5lIFdURl9NZXRhQWxsb2NhdG9yX2gKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNs
dWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiTWV0YUFsbG9jYXRvckhhbmRsZS5oIgorI2luY2x1
ZGUgIk5vbmNvcHlhYmxlLmgiCisjaW5jbHVkZSAiUGFnZUJsb2NrLmgiCisjaW5jbHVkZSAiUmVk
QmxhY2tUcmVlLmgiCisjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIlJlZlB0ci5o
IgorI2luY2x1ZGUgIlRDU3BpbkxvY2suaCIKKworbmFtZXNwYWNlIFdURiB7CisKKyNkZWZpbmUg
RU5BQkxFX01FVEFfQUxMT0NBVE9SX1BST0ZJTEUgMAorCitjbGFzcyBNZXRhQWxsb2NhdG9yIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZXRhQWxsb2NhdG9yKTsKK3B1YmxpYzoKKyAgICAK
KyAgICBNZXRhQWxsb2NhdG9yKHNpemVfdCBhbGxvY2F0aW9uR3JhbnVsZSk7CisgICAgCisgICAg
dmlydHVhbCB+TWV0YUFsbG9jYXRvcigpOworICAgIAorICAgIFBhc3NSZWZQdHI8TWV0YUFsbG9j
YXRvckhhbmRsZT4gYWxsb2NhdGUoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBO
b24tYXRvbWljIG1ldGhvZHMgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3MuCisgICAg
c2l6ZV90IGJ5dGVzQWxsb2NhdGVkKCkgeyByZXR1cm4gbV9ieXRlc0FsbG9jYXRlZDsgfQorICAg
IHNpemVfdCBieXRlc1Jlc2VydmVkKCkgeyByZXR1cm4gbV9ieXRlc1Jlc2VydmVkOyB9CisgICAg
c2l6ZV90IGJ5dGVzQ29tbWl0dGVkKCkgeyByZXR1cm4gbV9ieXRlc0NvbW1pdHRlZDsgfQorICAg
IAorICAgIC8vIEF0b21pYyBtZXRob2QgZm9yIGdldHRpbmcgYWxsb2NhdG9yIHN0YXRpc3RpY3Mu
CisgICAgc3RydWN0IFN0YXRpc3RpY3MgeworICAgICAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQ7
CisgICAgICAgIHNpemVfdCBieXRlc1Jlc2VydmVkOworICAgICAgICBzaXplX3QgYnl0ZXNDb21t
aXR0ZWQ7CisgICAgfTsKKyAgICBTdGF0aXN0aWNzIGN1cnJlbnRTdGF0aXN0aWNzKCk7CisKKyAg
ICAvLyBBZGQgbW9yZSBmcmVlIHNwYWNlIHRvIHRoZSBhbGxvY2F0b3IuIENhbGwgdGhpcyBkaXJl
Y3RseSBmcm9tCisgICAgLy8gdGhlIGNvbnN0cnVjdG9yIGlmIHlvdSB3aXNoIHRvIG9wZXJhdGUg
dGhlIGFsbG9jYXRvciB3aXRoaW4gYQorICAgIC8vIGZpeGVkIHBvb2wuCisgICAgdm9pZCBhZGRG
cmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKworICAgIC8v
IFRoaXMgaXMgbWVhbnQgb25seSBmb3IgaW1wbGVtZW50aW5nIHRlc3RzLiBOZXZlciBjYWxsIHRo
aXMgaW4gcmVsZWFzZQorICAgIC8vIGJ1aWxkcy4KKyAgICBzaXplX3QgZGVidWdGcmVlU3BhY2VT
aXplKCk7CisgICAgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgdm9p
ZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICB2b2lkIGR1bXBQcm9maWxlKCkgeyB9CisjZW5k
aWYKKworcHJvdGVjdGVkOgorICAgIAorICAgIC8vIEFsbG9jYXRlIG5ldyB2aXJ0dWFsIHNwYWNl
LCBidXQgZG9uJ3QgY29tbWl0LiBUaGlzIG1heSByZXR1cm4gbW9yZQorICAgIC8vIHBhZ2VzIHRo
YW4gd2UgYXNrZWQsIGluIHdoaWNoIGNhc2UgbnVtUGFnZXMgaXMgY2hhbmdlZC4KKyAgICB2aXJ0
dWFsIHZvaWQqIGFsbG9jYXRlTmV3U3BhY2Uoc2l6ZV90JiBudW1QYWdlcykgPSAwOworICAgIAor
ICAgIC8vIENvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZv
aWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBVbmNvbW1pdCBhIHBhZ2UuCisgICAgdmlydHVh
bCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkgPSAwOworICAgIAorICAgIC8vIE5P
VEU6IG5vbmUgb2YgdGhlIGFib3ZlIG1ldGhvZHMgYXJlIGNhbGxlZCBkdXJpbmcgYWxsb2NhdG9y
CisgICAgLy8gZGVzdHJ1Y3Rpb24sIGluIHBhcnQgYmVjYXVzZSBhIE1ldGFBbGxvY2F0b3IgY2Fu
bm90IGRpZSBzbyBsb25nCisgICAgLy8gYXMgdGhlcmUgYXJlIEhhbmRsZXMgdGhhdCByZWZlciB0
byBpdC4KKworcHJpdmF0ZToKKyAgICAKKyAgICBmcmllbmQgY2xhc3MgTWV0YUFsbG9jYXRvckhh
bmRsZTsKKyAgICAKKyAgICB0eXBlZGVmIFJlZEJsYWNrVHJlZTxzaXplX3QsIHZvaWQqPiBUcmVl
OworICAgIHR5cGVkZWYgVHJlZTo6Tm9kZSBGcmVlU3BhY2VOb2RlOworICAgIAorICAgIC8vIFJl
bW92ZSBmcmVlIHNwYWNlIGZyb20gdGhlIGFsbG9jYXRvci4gVGhpcyBpcyBlZmZlY3RpdmVseQor
ICAgIC8vIHRoZSBhbGxvY2F0ZSgpIGZ1bmN0aW9uLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBt
YXJrIHRoZQorICAgIC8vIHJldHVybmVkIHNwYWNlIGFzIGJlaW5nIGluLXVzZS4KKyAgICB2b2lk
KiBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBU
aGlzIGlzIGNhbGxlZCB3aGVuIG1lbW9yeSBmcm9tIGFuIGFsbG9jYXRpb24gaXMgZnJlZWQuCisg
ICAgdm9pZCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gVGhpcyBpcyB0aGUgbG93LWxldmVsIGltcGxl
bWVudGF0aW9uIG9mIGFkZGluZyBmcmVlIHNwYWNlOyBpdAorICAgIC8vIGlzIGNhbGxlZCBmcm9t
IGJvdGggYWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlIGFuZCBmcm9tCisgICAgLy8gYWRk
RnJlc2hGcmVlU3BhY2UuCisgICAgdm9pZCBhZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTWFuYWdlbWVudCBvZiB1c2VkIHNwYWNlLgor
ICAgIAorICAgIHZvaWQgaW5jcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpOworICAgIHZvaWQgZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBh
ZGRyZXNzLCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIFV0aWxpdGllcy4KKyAg
ICAKKyAgICBzaXplX3Qgcm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEZy
ZWVTcGFjZU5vZGUqIGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgIHZvaWQgZnJlZUZyZWVTcGFj
ZU5vZGUoRnJlZVNwYWNlTm9kZSopOworICAgIAorICAgIHNpemVfdCBtX2FsbG9jYXRpb25HcmFu
dWxlOworICAgIHVuc2lnbmVkIG1fbG9nQWxsb2NhdGlvbkdyYW51bGU7CisgICAgc2l6ZV90IG1f
cGFnZVNpemU7CisgICAgdW5zaWduZWQgbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBUcmVlIG1f
ZnJlZVNwYWNlU2l6ZU1hcDsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4gbV9m
cmVlU3BhY2VTdGFydEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9k
ZSo+IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcDsKKyAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6
ZV90PiBtX3BhZ2VPY2N1cGFuY3lNYXA7CisgICAgCisgICAgc2l6ZV90IG1fYnl0ZXNBbGxvY2F0
ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNSZXNlcnZlZDsKKyAgICBzaXplX3QgbV9ieXRlc0NvbW1p
dHRlZDsKKyAgICAKKyAgICBTcGluTG9jayBtX2xvY2s7CisKKyNpZm5kZWYgTkRFQlVHCisgICAg
c2l6ZV90IG1fbWFsbG9jQmFsYW5jZTsKKyNlbmRpZgorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NB
VE9SX1BST0ZJTEUpCisgICAgdW5zaWduZWQgbV9udW1BbGxvY2F0aW9uczsKKyAgICB1bnNpZ25l
ZCBtX251bUZyZWVzOworI2VuZGlmCit9OworCitpbmxpbmUgTWV0YUFsbG9jYXRvcjo6fk1ldGFB
bGxvY2F0b3IoKQoreworICAgIGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNl
U2l6ZU1hcC5maXJzdCgpOyBub2RlOykgeworICAgICAgICBGcmVlU3BhY2VOb2RlKiBuZXh0ID0g
bV9mcmVlU3BhY2VTaXplTWFwLnN1Y2Nlc3Nvcihub2RlKTsKKyAgICAgICAgbV9mcmVlU3BhY2VT
aXplTWFwLnJlbW92ZShub2RlKTsKKyAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7Cisg
ICAgICAgIG5vZGUgPSBuZXh0OworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFt
X21hbGxvY0JhbGFuY2UpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gV1RGX01ldGFBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKyNkZWZp
bmUgV1RGX01ldGFBbGxvY2F0b3JIYW5kbGVfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3I7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3JIYW5k
bGU6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+IHsKK3ByaXZhdGU6Cisg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9pZCogc3RhcnQsIHNpemVf
dCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSh2b2lkKiBzdGFy
dCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgICAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgICAg
ICwgbV9zdGFydChzdGFydCkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAg
fk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXRh
QWxsb2NhdG9ySGFuZGxlPiBjcmVhdGVTZWxmTWFuYWdlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6
ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRh
QWxsb2NhdG9ySGFuZGxlKHN0YXJ0LCBzaXplSW5CeXRlcykpOworICAgIH0KKyAgICAKKyAgICB2
b2lkKiBzdGFydCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydDsKKyAgICB9CisgICAg
CisgICAgdm9pZCogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5
dGVzKTsKKyAgICB9CisgICAgICAgIAorICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgewor
ICAgICAgICByZXR1cm4gbV9zaXplSW5CeXRlczsKKyAgICB9CisgICAgICAgIAorICAgIHZvaWQg
c2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAgYm9vbCBpc01hbmFnZWQo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7CisgICAgfQorICAgICAgICAK
KyAgICBNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
YWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3I7CisgICAgCisgICAgTWV0YUFs
bG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgdm9pZCogbV9zdGFydDsKKyAgICBzaXplX3QgbV9z
aXplSW5CeXRlczsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUzOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogQmFzZWQgb24gUmVkLUJsYWNrIHRyZWUgaW1wbGVtZW50YXRpb24gYnkgRW1pbiBNYXJ0
aW5pYW4KKyAqIC0gaHR0cDovL3d3dy5taXQuZWR1L35lbWluL3NvdXJjZV9jb2RlL2luZGV4Lmh0
bWwgICAgICAgICAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFJlZEJsYWNrVHJlZV9oCisjZGVmaW5lIFJlZEJsYWNrVHJlZV9o
CisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBhIHJlZC1ibGFjayB0cmVlIHdp
dGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorLy8gLSBUaGUgYWxsb2NhdGlvbiBvZiBub2Rl
cyBpbiB0aGUgdHJlZSBpcyBlbnRpcmVseSB1cCB0byB0aGUgdXNlci4KKy8vIC0gSWYgeW91IGFy
ZSBpbiBwb3NzZXNzaW9uIG9mIGEgcG9pbnRlciB0byBhIG5vZGUsIHlvdSBjYW4gZGVsZXRlCisv
LyAgIGl0IGZyb20gdGhlIHRyZWUuIFRoZSB0cmVlIHdpbGwgc3Vic2VxdWVudGx5IG5vIGxvbmdl
ciBoYXZlIGEKKy8vICAgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZS4KKy8vIC0gVGhlIGtleSB0eXBl
IG11c3QgaW1wbGVtZW50IG9wZXJhdG9yPCBhbmQgPT0uCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIFJlZEJsYWNrVHJlZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUmVkQmxhY2tUcmVlKTsKK3B1YmxpYzoKKyAgICBjbGFzcyBSYXdO
b2RlIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlZEJsYWNrVHJlZTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE5PVEU6IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVk
IGludG8gYSBzaW5nbGUKKyAgICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8g
cmV2ZWFsIGEgYnVnIGluIHRoZSBjb21waWxlci4KKyAgICAgICAgUmF3Tm9kZSogcGFyZW50KCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBzZXRQYXJlbnQoUmF3Tm9kZSogbmV3UGFyZW50
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQgPSBuZXdQYXJlbnQ7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNSZWQoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9yZWQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGJvb2wgc2V0UmVkKGJvb2wgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3JlZCA9IHZhbHVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBSYXdOb2RlKiBtX2xl
ZnQ7CisgICAgICAgIFJhd05vZGUqIG1fcmlnaHQ7CisgICAgICAgIFJhd05vZGUqIG1fcGFyZW50
OworICAgICAgICBib29sIG1fcmVkOworICAgIH07CisgICAgCisgICAgY2xhc3MgTm9kZTogcHVi
bGljIFJhd05vZGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgS2V5VHlwZSBrZXk7CisgICAgICAg
IFZhbHVlVHlwZSB2YWx1ZTsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZSgpCisgICAg
eworICAgICAgICBtX25pbFNlbnRpbmVsLnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAg
ICAgIG1fbmlsU2VudGluZWwubV9sZWZ0ID0gJm1fbmlsU2VudGluZWw7CisgICAgICAgIG1fbmls
U2VudGluZWwubV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVs
LnNldFJlZChmYWxzZSk7CisgICAgICAgIAorICAgICAgICBtX3Jvb3Quc2V0UGFyZW50KCZtX25p
bFNlbnRpbmVsKTsKKyAgICAgICAgbV9yb290Lm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAg
ICAgICBtX3Jvb3QubV9yaWdodCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX3Jvb3Quc2V0
UmVkKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIGluc2VydEhlbHAobm9kZSk7CisKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5v
ZGU7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAgIAorICAgICAgICB4LT5zZXRSZWQodHJ1
ZSk7CisgICAgICAgIHdoaWxlICh4LT5wYXJlbnQoKS0+aXNSZWQoKSkgeworICAgICAgICAgICAg
aWYgKHgtPnBhcmVudCgpID09IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9sZWZ0KSB7CisgICAg
ICAgICAgICAgICAgeSA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAg
ICAgICAgICBpZiAoeS0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQo
KS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50
KCktPm1fcmlnaHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOwor
ICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOwor
ICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICBpZiAo
eS0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZh
bHNlKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPm1fbGVmdCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmlnaHRSb3RhdGUoeCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAg
ICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAg
ICAgICAgICBsZWZ0Um90YXRlKHgtPnBhcmVudCgpLT5wYXJlbnQoKSk7CisgICAgICAgICAgICAg
ICAgfSAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByb290KCktPm1fbGVmdC0+
c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+
aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICB9CisgICAg
CisgICAgTm9kZSogcmVtb3ZlKE5vZGUqIHopCisgICAgeworICAgICAgICBSYXdOb2RlKiB5Owor
ICAgICAgICBSYXdOb2RlKiB4OworCisgICAgICAgIHkgPSAoei0+bV9sZWZ0ID09IG5pbFNlbnRp
bmVsKCkgfHwgei0+bV9yaWdodCA9PSBuaWxTZW50aW5lbCgpKSA/IHogOiBzdWNjZXNzb3JJbnRl
cm5hbCh6KTsKKyAgICAgICAgeCA9IHktPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpID8geS0+bV9y
aWdodCA6IHktPm1fbGVmdDsKKyAgICAgICAgaWYgKHJvb3QoKSA9PSB4LT5zZXRQYXJlbnQoeS0+
cGFyZW50KCkpKQorICAgICAgICAgICAgcm9vdCgpLT5tX2xlZnQgPSB4OworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGlmICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAgICAg
ICAgICAgeS0+cGFyZW50KCktPm1fbGVmdCA9IHg7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeS0+cGFyZW50KCktPm1fcmlnaHQgPSB4OworICAgICAgICB9CisgICAgICAgIGlm
ICh5ICE9IHopIHsKKyAgICAgICAgICAgIEFTU0VSVCh5ICE9IG5pbFNlbnRpbmVsKCkpOworCisg
ICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpCisgICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAo
eCk7CisgIAorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gei0+bV9sZWZ0OworICAgICAgICAgICAg
eS0+bV9yaWdodCA9IHotPm1fcmlnaHQ7CisgICAgICAgICAgICB5LT5zZXRQYXJlbnQoei0+cGFy
ZW50KCkpOworICAgICAgICAgICAgeS0+c2V0UmVkKHotPmlzUmVkKCkpOworICAgICAgICAgICAg
ei0+bV9sZWZ0LT5zZXRQYXJlbnQoei0+bV9yaWdodC0+c2V0UGFyZW50KHkpKTsKKyAgICAgICAg
ICAgIGlmICh6ID09IHotPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAgICAgICAgICAgei0+cGFy
ZW50KCktPm1fbGVmdCA9IHk7IAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHot
PnBhcmVudCgpLT5tX3JpZ2h0ID0geTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlm
ICgheS0+aXNSZWQoKSkKKyAgICAgICAgICAgICAgICByZW1vdmVGaXhVcCh4KTsKKyAgICAgICAg
fQorICAKKyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQo
IW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworCisgICAgICAgIHJldHVybiB6OworICAgIH0KKyAg
ICAKKyAgICBOb2RlKiBmaXJzdCgpCisgICAgeworICAgICAgICBSYXdOb2RlKiBub2RlID0gcm9v
dCgpLT5tX2xlZnQ7CisgICAgICAgIGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIFJhd05v
ZGUqIG5leHQgPSBub2RlLT5tX2xlZnQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAg
ICBub2RlID0gbmV4dDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBsYXN0KCkK
KyAgICB7CisgICAgICAgIFJhd05vZGUqIG5vZGUgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAg
aWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgUmF3Tm9kZSogbmV4dCA9IG5vZGUtPm1fcmln
aHQ7CisgICAgICAgICAgICBpZiAobmV4dCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBhc05vZGUobm9kZSk7CisgICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBOb2RlKiBzdWNjZXNzb3IoTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIHJlc3VsdCA9IHN1Y2Nlc3NvckludGVybmFsKG5vZGUpOworICAg
ICAgICBpZiAocmVzdWx0ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIGFzTm9kZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiBw
cmVkZWNlc3NvcihOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeCA9IG5vZGU7
CisgICAgICAgIFJhd05vZGUqIHk7CisKKyAgICAgICAgaWYgKG5pbFNlbnRpbmVsKCkgIT0gKHkg
PSB4LT5tX2xlZnQpKSB7CisgICAgICAgICAgICB3aGlsZSAoeS0+bV9yaWdodCAhPSBuaWxTZW50
aW5lbCgpKQorICAgICAgICAgICAgICAgIHkgPSB5LT5tX3JpZ2h0OworICAgICAgICAgICAgcmV0
dXJuIGFzTm9kZSh5KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgeSA9IHgtPnBhcmVu
dCgpOworICAgICAgICB3aGlsZSAoeCA9PSB5LT5tX2xlZnQpIHsgCisgICAgICAgICAgICBpZiAo
eSA9PSByb290KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB4ID0g
eTsKKyAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
eSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBhc05vZGUoeSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGZpbmRFeGFjdChjb25zdCBLZXlU
eXBlJiBrZXkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4ID0gcm9vdCgpLT5tX2xlZnQ7Cisg
ICAgICAgIGlmICh4ID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgd2hpbGUgKCEoYXNOb2RlKHgpLT5rZXkgPT0ga2V5KSkgeworICAgICAgICAgICAgaWYg
KGFzTm9kZSh4KS0+a2V5ID4ga2V5KQorICAgICAgICAgICAgICAgIHggPSB4LT5tX2xlZnQ7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fcmlnaHQ7CisgICAgICAg
ICAgICBpZiAoeCA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBhc05vZGUoeCk7CisgICAgfQorICAgIAorICAgIE5v
ZGUqIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgeworICAgICAgICBOb2RlKiByZXN1
bHQgPSBmaW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHJlbW92ZShyZXN1bHQpOworICAgIH0KKyAgICAKKyAg
ICBOb2RlKiBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoY29uc3QgS2V5VHlwZSYga2V5KQor
ICAgIHsKKyAgICAgICAgUmF3Tm9kZSogY3VycmVudCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAg
ICBSYXdOb2RlKiBiZXN0ID0gMDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbmlsU2VudGlu
ZWwoKSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5ID09IGtleSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKGN1cnJlbnQpOworICAgICAgICAgICAgaWYgKGFz
Tm9kZShjdXJyZW50KS0+a2V5IDwga2V5KQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJy
ZW50LT5tX3JpZ2h0OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmVzdCA9
IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fbGVmdDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKGJlc3QpOworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBmaW5kR3JlYXRlc3RMZXNzVGhhbk9yRXF1YWwoY29uc3QgS2V5
VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogY3VycmVudCA9IHJvb3QoKS0+bV9s
ZWZ0OworICAgICAgICBSYXdOb2RlKiBiZXN0ID0gMDsKKyAgICAgICAgd2hpbGUgKGN1cnJlbnQg
IT0gbmlsU2VudGluZWwoKSkgeworICAgICAgICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5
ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2RlKGN1cnJlbnQpOworICAgICAg
ICAgICAgaWYgKGFzTm9kZShjdXJyZW50KS0+a2V5IDwga2V5KSB7CisgICAgICAgICAgICAgICAg
YmVzdCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fbGVm
dDsKKyAgICAgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC0+bV9yaWdodDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYXNOb2RlKGJlc3QpOworICAg
IH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIE8obikgb3BlcmF0aW9uLgorICAgIHNpemVfdCBz
aXplKCkKKyAgICB7CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKE5v
ZGUqIGN1cnJlbnQgPSBmaXJzdCgpOyBjdXJyZW50OyBjdXJyZW50ID0gc3VjY2Vzc29yKGN1cnJl
bnQpKQorICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gTygxKSBvcGVyYXRpb24uCisgICAgYm9vbCBpc0Vt
cHR5KCkKKyAgICB7CisgICAgICAgIHJldHVybiByb290KCktPm1fbGVmdCA9PSBuaWxTZW50aW5l
bCgpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAg
QVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgpKTsKKyAgICAgICAgY2hlY2tDb25zaXN0ZW5j
eVJlY3Vyc2Uocm9vdCgpLT5tX2xlZnQpOworICAgICAgICBBU1NFUlQocm9vdCgpLT5tX3JpZ2h0
ID09IG5pbFNlbnRpbmVsKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoKQorICAgIHsK
KyAgICAgICAgcHJpbnRmKCJUcmVlIGF0ICVwOlxuIiwgdGhpcyk7CisgICAgICAgIGR1bXBSZWN1
cnNlKHJvb3QoKS0+bV9sZWZ0KTsKKyAgICAgICAgcHJpbnRmKCIgICByb290OiAlcCwgJXAsICVw
XG4iLCByb290KCktPm1fbGVmdCwgcm9vdCgpLT5tX3JpZ2h0LCByZWludGVycHJldF9jYXN0PHZv
aWQqPihyb290KCktPnBhcmVudEFuZFJlZCkpOworICAgICAgICBwcmludGYoIiAgICBuaWw6ICVw
LCAlcCwgJXBcbiIsIG5pbFNlbnRpbmVsKCktPm1fbGVmdCwgbmlsU2VudGluZWwoKS0+bV9yaWdo
dCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obmlsU2VudGluZWwoKS0+cGFyZW50QW5kUmVkKSk7
CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBsZWZ0Um90YXRlKFJhd05vZGUq
IHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiB5OworCisgICAgICAgIHkgPSB4LT5tX3JpZ2h0
OworICAgICAgICB4LT5tX3JpZ2h0ID0geS0+bV9sZWZ0OworCisgICAgICAgIGlmICh5LT5tX2xl
ZnQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHktPm1fbGVmdC0+c2V0UGFyZW50KHgp
OworICAKKyAgICAgICAgeS0+c2V0UGFyZW50KHgtPnBhcmVudCgpKTsKKworICAgICAgICBpZiAo
eCA9PSB4LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgeC0+cGFyZW50KCktPm1fbGVm
dCA9IHk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX3JpZ2h0ID0g
eTsKKyAgICAgICAgeS0+bV9sZWZ0ID0geDsKKyAgICAgICAgeC0+c2V0UGFyZW50KHkpOworCisg
ICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgcmlnaHRSb3RhdGUoUmF3Tm9kZSogeSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHg7
CisKKyAgICAgICAgeCA9IHktPm1fbGVmdDsKKyAgICAgICAgeS0+bV9sZWZ0ID0geC0+bV9yaWdo
dDsKKworICAgICAgICBpZiAobmlsU2VudGluZWwoKSAhPSB4LT5tX3JpZ2h0KQorICAgICAgICAg
ICAgeC0+bV9yaWdodC0+c2V0UGFyZW50KHkpOworCisgICAgICAgIHgtPnNldFBhcmVudCh5LT5w
YXJlbnQoKSk7CisgICAgICAgIGlmICh5ID09IHktPnBhcmVudCgpLT5tX2xlZnQpCisgICAgICAg
ICAgICB5LT5wYXJlbnQoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
eS0+cGFyZW50KCktPm1fcmlnaHQgPSB4OworICAgICAgICB4LT5tX3JpZ2h0ID0geTsKKyAgICAg
ICAgeS0+c2V0UGFyZW50KHgpOworCisgICAgICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNS
ZWQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5zZXJ0SGVscChOb2RlKiB6KQorICAgIHsK
KyAgICAgICAgUmF3Tm9kZSogeDsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgCisgICAgICAgIHot
Pm1fbGVmdCA9IHotPm1fcmlnaHQgPSBuaWxTZW50aW5lbCgpOworICAgICAgICB5ID0gcm9vdCgp
OworICAgICAgICB4ID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIHdoaWxlICh4ICE9IG5pbFNl
bnRpbmVsKCkpIHsKKyAgICAgICAgICAgIHkgPSB4OworICAgICAgICAgICAgaWYgKHotPmtleSA8
IGFzTm9kZSh4KS0+a2V5KQorICAgICAgICAgICAgICAgIHggPSB4LT5tX2xlZnQ7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgeCA9IHgtPm1fcmlnaHQ7CisgICAgICAgIH0KKyAg
ICAgICAgei0+c2V0UGFyZW50KHkpOworICAgICAgICBpZiAoeSA9PSByb290KCkgfHwgei0+a2V5
IDwgYXNOb2RlKHkpLT5rZXkpCisgICAgICAgICAgICB5LT5tX2xlZnQgPSB6OworICAgICAgICBl
bHNlCisgICAgICAgICAgICB5LT5tX3JpZ2h0ID0gejsKKworICAgICAgICBBU1NFUlQoIW5pbFNl
bnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlKiBzdWNjZXNzb3JJ
bnRlcm5hbChSYXdOb2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAg
CisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9ICh5ID0geC0+bV9yaWdodCkpIHsKKyAgICAg
ICAgICAgIHdoaWxlICh5LT5tX2xlZnQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAg
ICB5ID0geS0+bV9sZWZ0OworICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgd2hpbGUgKHggPT0geS0+bV9y
aWdodCkgeworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICB5ID0geS0+cGFyZW50KCk7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpKQorICAgICAgICAgICAgcmV0dXJu
IG5pbFNlbnRpbmVsKCk7CisgICAgICAgIHJldHVybiB5OworICAgIH0KKyAgICAKKyAgICB2b2lk
IHJlbW92ZUZpeFVwKFJhd05vZGUqIHgpCisgICAgeworICAgICAgICBSYXdOb2RlKiByZWFsUm9v
dCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBSYXdOb2RlKiB3OworICAgICAgICAKKyAgICAg
ICAgd2hpbGUgKCF4LT5pc1JlZCgpICYmIHJlYWxSb290ICE9IHgpIHsKKyAgICAgICAgICAgIGlm
ICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAgICB3ID0geC0+cGFy
ZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHctPmlzUmVkKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdy0+c2V0UmVkKDApOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJl
bnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgtPnBh
cmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVk
KCkgJiYgIXctPm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0
UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5p
c1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5tX2xlZnQtPnNldFJlZChmYWxz
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByaWdodFJvdGF0ZSh3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcg
PSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAgICAgICAg
ICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAg
dy0+bV9yaWdodC0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0
ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHcgPSB4
LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHctPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IHgtPnBhcmVudCgpLT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90
YXRlKHgtPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5t
X2xlZnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdo
dC0+aXNSZWQoKSAmJiAhdy0+bV9sZWZ0LT5pc1JlZCgpKSB7IAorICAgICAgICAgICAgICAgICAg
ICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXctPm1f
bGVmdC0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdy0+bV9yaWdodC0+c2V0
UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVmdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICB3LT5zZXRSZWQoeC0+cGFyZW50KCktPmlzUmVkKCkpOworICAgICAg
ICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAg
ICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICByaWdo
dFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIHggPSByZWFsUm9vdDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgeC0+
c2V0UmVkKGZhbHNlKTsKKworICAgICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAg
ICAgIEFTU0VSVCghbmlsU2VudGluZWwoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorI2lmbmRl
ZiBOREVCVUcKKyAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKFJhd05vZGUqIG5vZGUp
CisgICAgeworICAgICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAobm9kZS0+aXNSZWQoKSkgeworICAgICAgICAgICAgQVNTRVJU
KCFub2RlLT5tX2xlZnQtPmlzUmVkKCkpOworICAgICAgICAgICAgQVNTRVJUKCFub2RlLT5tX3Jp
Z2h0LT5pc1JlZCgpKTsKKyAgICAgICAgfQorICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJz
ZShub2RlLT5tX2xlZnQpOworICAgICAgICBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShub2RlLT5t
X3JpZ2h0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wUmVjdXJzZShSYXdOb2RlKiBub2Rl
KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgcHJpbnRmKCIgICBub2RlOiAlcFxuIiwgbm9kZSk7CisgICAgICAg
IHByaW50ZigiICAgICAgY29sb3IgPSAlc1xuIiwgbm9kZS0+aXNSZWQoKSA/ICJyZWQiIDogImJs
YWNrIik7CisgICAgICAgIHByaW50ZigiICAgICAgbGVmdCAgPSAlcFxuIiwgbm9kZS0+bV9sZWZ0
KTsKKyAgICAgICAgcHJpbnRmKCIgICAgICByaWdodCA9ICVwXG4iLCBub2RlLT5tX3JpZ2h0KTsK
KyAgICAgICAgZHVtcFJlY3Vyc2Uobm9kZS0+bV9sZWZ0KTsKKyAgICAgICAgZHVtcFJlY3Vyc2Uo
bm9kZS0+bV9yaWdodCk7CisgICAgfQorI2VuZGlmCisgICAgCisgICAgUmF3Tm9kZSogcm9vdCgp
CisgICAgeworICAgICAgICByZXR1cm4gJm1fcm9vdDsKKyAgICB9CisgICAgCisgICAgUmF3Tm9k
ZSogbmlsU2VudGluZWwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICZtX25pbFNlbnRpbmVsOwor
ICAgIH0KKyAgICAKKyAgICBOb2RlKiBhc05vZGUoUmF3Tm9kZSogcmF3Tm9kZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyYXdOb2RlICE9IHJvb3QoKSk7CisgICAgICAgIEFTU0VSVChyYXdOb2Rl
ICE9IG5pbFNlbnRpbmVsKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Tm9kZSo+KHJh
d05vZGUpOworICAgIH0KKyAgICAKKyAgICBSYXdOb2RlIG1fcm9vdDsKKyAgICBSYXdOb2RlIG1f
bmlsU2VudGluZWw7Cit9OworCit9CisKKyNlbmRpZgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3d0Zi5wcmkJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5U
aHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFsbG9jYXRvci5jcHAgXAogICAgIHd0Zi9OdWxsUHRy
LmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJl
YWRRdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJl
dmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgYmFj
a3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZpbmFsaXplIHRoZSBjb2RlLgotICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJl
Z2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5r
QnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgp
KTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gOTQzNTcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKICAgICB9
CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0
dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCAqZ2V0QWRk
cigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRv
IGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRy
b2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxs
b2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFs
bG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGlu
ZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsg
bmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0
aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0
byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOiBBZGRlZC4KKwogMjAx
MS0wOC0yOSAgTWFyayBIYWhuZW5iZXJnICA8bWhhaG5lbmJlcmdAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVuemlwIGluaXRpYWxpemF0aW9uIGxpc3RzIGFuZCBjb25zdHJ1Y3RvcnMgaW4gSlNDZWxs
IGhpZXJhcmNoeSAoMy83KQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxMS0wOS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIFRoZSBleGVjdXRhYmxlIGFsbG9jYXRvciBtYWtlcyBp
dCBkaWZmaWN1bHQgdG8gZnJlZSBpbmRpdmlkdWFsCisgICAgICAgIGNodW5rcyBvZiBleGVjdXRh
YmxlIG1lbW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjYzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIEludHJvZHVjZWQgYSBiZXN0LWZpdCwgYmFsYW5jZWQtdHJlZSBiYXNlZCBhbGxv
Y2F0b3IuIFRoZSBhbGxvY2F0b3IKKyAgICAgICAgcmVxdWlyZWQgYSBiYWxhbmNlZCB0cmVlIHRo
YXQgZG9lcyBub3QgYWxsb2NhdGUgbWVtb3J5IGFuZCB0aGF0CisgICAgICAgIHBlcm1pdHMgdGhl
IHJlbW92YWwgb2YgaW5kaXZpZHVhbCBub2RlcyBkaXJlY3RseSAoYXMgb3Bwb3NlZCB0byBieQor
ICAgICAgICBrZXkpOyBuZWl0aGVyIEFWTFRyZWUgbm9yIFdlYkNvcmUncyBQT0RSZWRCbGFja1Ry
ZWUgc3VwcG9ydGVkIHRoaXMuCisgICAgICAgIENoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gZXhl
Y3V0YWJsZSBjb2RlIHRvIHVzZSBhIHJlZmVyZW5jZSBjb3VudGVkCisgICAgICAgIGhhbmRsZS4K
KworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0
b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAg
ICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjpmaW5kRXhhY3QpOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6UGFpcjo6cmVtb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OmZpbmRM
ZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjph
c3NlcnRGb3VuZEFuZFJlbW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3Nl
cnRFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3NlcnRTYW1lVmFsdWVz
Rm9yS2V5KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OnRlc3REcml2ZXIpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAxMS0wOS0wMSAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoTlJXVCk6IExlYWtzIFZp
ZXdlciBjYW4ndCBsb2FkIGxlYWtzIGZyb20gdGVzdCBydW5zIHRoYXQgdXNlZCBOUldUCkluZGV4
OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQzNTcpCisrKyBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNyw2ICs3LDggQEAKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhCdWlsZEZp
bGUgc2VjdGlvbiAqLworCQkwRkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzZD
NENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovOyB9OworCQkwRkM2QzRD
RjE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyog
TWV0YUFsbG9jYXRvci5jcHAgKi87IH07CiAJCTFBMDJDODRGMTI1RDRBODQwMEUzRjRCRCAvKiBG
aW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
MDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLzsgfTsKIAkJMUEwMkM4NzAxMjVE
NENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0QTVFMDBFM0Y0QkQgLyogZmluZC5o
dG1sICovOyB9OwogCQkxQTVGRUZERDEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVhdGVKYXZhU2Ny
aXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
NUZFRkRDMTI3MEUyQTMwMDBFMjkyMSAvKiBFdmFsdWF0ZUphdmFTY3JpcHQuY3BwICovOyB9OwpA
QCAtMTI0LDYgKzEyNiw4IEBACiAvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9u
ICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwRkM2QzRDQjE0
MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFJlZEJsYWNrVHJlZS5jcHA7IHBhdGggPSBXVEYvUmVkQmxhY2tUcmVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNkM0Q0UxNDEwMzRBRDAwNUI3
RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gTWV0YUFsbG9jYXRvci5jcHA7IHBhdGggPSBXVEYvTWV0YUFsbG9jYXRvci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBm
aW5kLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQTVGRUZEQzEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVh
dGVKYXZhU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2
YWx1YXRlSmF2YVNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTQs
NiArMzU4LDggQEAKIAkJQkM5MDk2NDYxMjU1NjE4OTAwMDgzNzU2IC8qIFdURiAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZDNkM0Q0UxNDEwMzRBRDAw
NUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGQzZDNENCMTQxMDI3RTAwMDVC
N0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlC
NCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCUMwMTM2M0M3MTND
Mzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICovLAogCQkJCUJDOTA5NjRCMTI1
NTYxQkYwMDA4Mzc1NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi8sCkBAIC01NjEsNiArNTY3LDggQEAK
IAkJCQlDMDg1ODdGQzEzRkVDMzlCMDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RTd2l6emxlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUMwODU4ODAwMTNGRUMzQTYwMDFFRjRFNSAvKiBJbnN0YW5j
ZU1ldGhvZFN3aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdEQzY3OEQxNDBEN0M1MDAw
QUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkM2QzRD
QzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGQzZDNENGMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0b3IuaD4KKyNp
bmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsK
KworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yVGVzdDog
cHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIGVudW0gU2FuaXR5Q2hlY2tNb2Rl
IHsgUnVuU2FuaXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVjayB9OworICAgIAorICAgIGVudW0g
SGVhcEdyb3d0aE1vZGUgeyBEb250R3Jvd0hlYXAsIEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2Nl
LCBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2UgfTsKKyAgICAKKyAgICBIZWFwR3Jvd3Ro
TW9kZSBjdXJyZW50SGVhcEdyb3d0aE1vZGU7CisgICAgc2l6ZV90IGFsbG93QWxsb2NhdGVQYWdl
czsKKyAgICBzaXplX3QgcmVxdWVzdGVkTnVtUGFnZXM7CisKKyAgICBjbGFzcyBTaW1wbGVUZXN0
QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBT
aW1wbGVUZXN0QWxsb2NhdG9yKE1ldGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCisgICAgICAgICAg
ICA6IE1ldGFBbGxvY2F0b3IoMzIpCisgICAgICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKKyAg
ICAgICAgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNp
emUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgflNpbXBsZVRlc3RB
bGxvY2F0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9wYXJlbnQt
PmFsbG9jYXRvckRlc3Ryb3llZCk7CisgICAgICAgICAgICBtX3BhcmVudC0+YWxsb2NhdG9yRGVz
dHJveWVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lk
KiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSkgeworICAgICAgICAg
ICAgY2FzZSBEb250R3Jvd0hlYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlOgor
ICAgICAgICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U6IHsKKyAgICAg
ICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2VzKTsKKyAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2VzID49
IG51bVBhZ2VzKTsKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+cmVxdWVzdGVkTnVtUGFnZXMg
PSBudW1QYWdlczsKKyAgICAgICAgICAgICAgICBudW1QYWdlcyA9IG1fcGFyZW50LT5hbGxvd0Fs
bG9jYXRlUGFnZXM7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQg
b2Zmc2V0OworICAgICAgICAgICAgICAgIGlmIChtX3BhcmVudC0+Y3VycmVudEhlYXBHcm93dGhN
b2RlID09IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKQorICAgICAgICAgICAgICAgICAgICBv
ZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2b2lkKiByZXN1bHQg
PSByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAg
KyBvZmZzZXQpICogcGFnZVNpemUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAgICAgICAgICAgbV9w
YXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudGVyID0gMDsgY291bnRlciA8
IG51bVBhZ2VzICsgb2Zmc2V0OyArK2NvdW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9w
YXJlbnQtPnBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYnl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRlciA8IHBhZ2VTaXplKCk7ICsrYnl0
ZUNvdW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudC0+bWVtb3J5TWFwLT5h
cHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBtX3BhcmVudC0+YWRkaXRpb25hbFBhZ2VzSW5IZWFwICs9IG51bVBhZ2VzOwor
ICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBD
UkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCog
cGFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJlIGJvdGgg
ZnJlZSBhbmQgdW5tYXBwZWQuCisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9wYXJlbnQtPnBh
Z2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSk7
CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBh
Z2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVF
KCFtX3BhcmVudC0+Ynl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpKSk7
CisgICAgICAgICAgICBtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJlIGZyZWUgb2Ygb2JqZWN0cyBhdCB0
aGlzIHBvaW50LCBidXQgaXQgc2hvdWxkIHN0aWxsCisgICAgICAgICAgICAvLyBiZSBtYXBwZWQu
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAo
dWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFk
ZHJlc3MgPCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyAr
K2FkZHJlc3MpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5ieXRlU3Rh
dGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcykpKTsKKyAgICAgICAgICAgIG1fcGFy
ZW50LT5wYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNp
emUoKSkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAg
ICBNZXRhQWxsb2NhdG9yVGVzdCogbV9wYXJlbnQ7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBiYXNlUGFnZSA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1
bHRQYWdlc0luSGVhcCA9IDEwMDsKKyAgICAKKyAgICB1bnNpZ25lZCBhZGRpdGlvbmFsUGFnZXNJ
bkhlYXA7CisgICAgCisgICAgVmVjdG9yPGJvb2wsIDA+KiBtZW1vcnlNYXA7CisgICAgVmVjdG9y
PGJvb2wsIDA+KiBwYWdlTWFwOworICAgIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOworICAgIAor
ICAgIFNpbXBsZVRlc3RBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgbWVtb3J5TWFwID0gbmV3IFZlY3Rvcjxib29sLCAw
PigpOworICAgICAgICBwYWdlTWFwID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdlID0gYmFzZVBhZ2U7IHBhZ2UgPCBiYXNlUGFnZSAr
IGRlZmF1bHRQYWdlc0luSGVhcDsgKytwYWdlKSB7CisgICAgICAgICAgICBwYWdlTWFwLT5hcHBl
bmQoZmFsc2UpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlSW5QYWdlID0gMDsgYnl0
ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAgICAgICAgICAgICAgICBtZW1v
cnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBhbGxvY2F0b3JEZXN0
cm95ZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9
IERvbnRHcm93SGVhcDsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gMDsKKyAgICAgICAg
YWRkaXRpb25hbFBhZ2VzSW5IZWFwID0gMDsKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAw
OworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yID0gbmV3IFNpbXBsZVRlc3RBbGxvY2F0b3Io
dGhpcyk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgewor
ICAgICAgICBFWFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFw
KTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQYWdlcywgc3RhdGljX2Nhc3Q8c2l6
ZV90PigwKSk7CisgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWROdW1QYWdlcywgc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSk7CisgICAgICAgIAorICAgICAgICAvLyBtZW1vcnkgc2hvdWxkIGJlIGZy
ZWUuCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdlIDwgYmFzZVBh
Z2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAgRVhQRUNUX1RS
VUUoIXBhZ2VTdGF0ZShwYWdlKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVJblBh
Z2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5QYWdlKQorICAgICAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKCFieXRlU3RhdGUocGFnZSAqIHBhZ2VTaXplKCkgKyBieXRlSW5Q
YWdlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoaXMgYXV0b21h
dGljYWxseSB0ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3IgZGlkIG5vdCBsZWFrCisgICAgICAgIC8v
IG1lbW9yeSwgc28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBhcmUgcnVubmluZyB3aXRoICFkZWZpbmVk
KE5ERUJVRykuCisgICAgICAgIC8vIFNlZSBNZXRhQWxsb2NhdG9yOjptX21hbGxvY0JhbGFuY2Uu
CisgICAgICAgIGRlbGV0ZSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJV
RShhbGxvY2F0b3JEZXN0cm95ZWQpOworICAgICAgICAKKyAgICAgICAgZGVsZXRlIG1lbW9yeU1h
cDsKKyAgICAgICAgZGVsZXRlIHBhZ2VNYXA7CisgICAgfQorICAgIAorICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tNb2RlIHNh
bml0eUNoZWNrTW9kZSA9IFJ1blNhbml0eUNoZWNrKQorICAgIHsKKyAgICAgICAgTWV0YUFsbG9j
YXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykubGVh
a1JlZigpOworICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUpOworICAgICAgICBFWFBFQ1RfRVEo
aGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICB1
aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+
c3RhcnQoKSk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUlu
Qnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBj
dXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKCFieXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShj
dXJyZW50Qnl0ZSkgPSB0cnVlOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFnZVN0YXRlKGN1
cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoc2FuaXR5Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5
Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZnJlZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUsIFNhbml0eUNoZWNrTW9k
ZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAgIEVYUEVD
VF9UUlVFKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBub3RpZnlGcmVlKGhhbmRsZS0+c3Rh
cnQoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgaGFuZGxlLT5kZXJlZigpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlDaGVjaykK
KyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbm90aWZ5
RnJlZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgdWlu
dHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCk7Cisg
ICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAg
ICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8
IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJ5dGVT
dGF0ZShjdXJyZW50Qnl0ZSkpOworICAgICAgICAgICAgYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSA9
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc2FuaXR5Q2hlY2soKQor
ICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0b3ItPmJ5dGVz
UmVzZXJ2ZWQoKSAtIGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWxsb2NhdG9yLT5kZWJ1
Z0ZyZWVTcGFjZVNpemUoKSk7CisjZW5kaWYKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9jYXRvci0+
Ynl0ZXNSZXNlcnZlZCgpLCAoZGVmYXVsdFBhZ2VzSW5IZWFwICsgYWRkaXRpb25hbFBhZ2VzSW5I
ZWFwKSAqIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5ieXRlc0Fs
bG9jYXRlZCgpLCBieXRlc0FsbG9jYXRlZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9jYXRv
ci0+Ynl0ZXNDb21taXR0ZWQoKSwgYnl0ZXNDb21taXR0ZWQoKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29uZmlybShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAg
ICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRs
ZS0+c3RhcnQoKSk7CisgICAgICAgIGNvbmZpcm0oc3RhcnRCeXRlLCBzdGFydEJ5dGUgKyBoYW5k
bGUtPnNpemVJbkJ5dGVzKCksIHRydWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKKyAgICB7CisgICAgICAg
IGNvbmZpcm0ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+ZW5kKCkpLCAoYmFz
ZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICB2b2lkIGNvbmZpcm0odWludHB0cl90IHN0YXJ0Qnl0ZSwg
dWludHB0cl90IGVuZEJ5dGUsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBmb3IgKHVpbnRw
dHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1
cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYnl0ZVN0YXRlKGN1cnJlbnRCeXRl
KSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICB1aW50cHRyX3QgZmlyc3RGcmVlUGFn
ZSA9IChzdGFydEJ5dGUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpOworICAgICAgICAg
ICAgdWludHB0cl90IGxhc3RGcmVlUGFnZSA9IChlbmRCeXRlIC0gcGFnZVNpemUoKSkgLyBwYWdl
U2l6ZSgpOworICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudFBhZ2UgPSBmaXJzdEZy
ZWVQYWdlOyBjdXJyZW50UGFnZSA8PSBsYXN0RnJlZVBhZ2U7ICsrY3VycmVudFBhZ2UpCisgICAg
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXBhZ2VTdGF0ZShjdXJyZW50UGFnZSkpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpCisgICAgeworICAg
ICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgbWVtb3J5TWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmICht
ZW1vcnlNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzaXplX3QgYnl0ZXND
b21taXR0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VNYXAtPnNpemUoKTsgKytpbmRleCkg
eworICAgICAgICAgICAgaWYgKHBhZ2VNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICogcGFnZVNpemUoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCYgYnl0ZVN0YXRlKHZvaWQqIGFkZHJlc3MpCisgICAgewor
ICAgICAgICByZXR1cm4gYnl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRy
ZXNzKSk7CisgICAgfQorICAgIAorICAgIGJvb2wmIGJ5dGVTdGF0ZSh1aW50cHRyX3QgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBieXRlSW5kZXggPSBhZGRyZXNzIC0gYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5TWFwLT5hdChieXRlSW5kZXgp
OworICAgIH0KKyAgICAKKyAgICBib29sJiBwYWdlU3RhdGUodWludHB0cl90IHBhZ2UpCisgICAg
eworICAgICAgICB1aW50cHRyX3QgcGFnZUluZGV4ID0gcGFnZSAtIGJhc2VQYWdlOworICAgICAg
ICByZXR1cm4gcGFnZU1hcC0+YXQocGFnZUluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGhl
bHBlcnMKKworICAgIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAg
ICAgLy8gVGVzdHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6IGFsbG9jYXRlIG9uZSB0aGluZyBh
bmQgZnJlZSBpdC4gQWxzbworICAgICAgICAvLyB2ZXJpZmllcyB0aGF0IHRoZSBzdGF0ZSBvZiBw
YWdlcyBpcyBjb3JyZWN0LgorICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSog
aGFuZGxlID0gYWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0YXJ0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAg
ICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUocGFnZVN0YXRlKGJhc2VQYWdlKSk7CisgICAgICAgIAorICAgICAgICBjb25maXJt
KGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAg
IAorICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdFJlcGVh
dEFsbG9jRnJlZShzaXplX3QgZmlyc3RTaXplLCAuLi4pCisgICAgeworICAgICAgICAvLyBUZXN0
cyByaWdodC1jb2FsZXNjaW5nIGJ5IHJlcGVhdGVkbHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZy4g
VGhlIGlkZWEKKyAgICAgICAgLy8gaXMgdGhhdCBpZiB5b3UgYWxsb2NhdGUgc29tZXRoaW5nIGFu
ZCB0aGVuIGZyZWUgaXQsIHRoZW4gdGhlIGhlYXAgc2hvdWxkCisgICAgICAgIC8vIGxvb2sgaWRl
bnRpY2FsIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBkdWUgdG8gYSByaWdo
dC1jb2FsZXNjZQorICAgICAgICAvLyBvZiB0aGUgZnJlZWQgY2h1bmsgYW5kIHRoZSBhbHJlYWR5
LWZyZWUgbWVtb3J5LCBhbmQgc28gc3Vic2VxdWVudAorICAgICAgICAvLyBhbGxvY2F0aW9ucyBz
aG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBvbmUuCisgICAgICAgIAorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAg
ICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsK
KyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IGZyZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICAg
ICAgdmFfc3RhcnQoYXJnTGlzdCwgZmlyc3RTaXplKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBz
aXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBpbnQpKSB7CisgICAgICAgICAgICBoYW5kbGUg
PSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVz
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICAg
ICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgZnJlZShoYW5kbGUpOworICAgICAgICB9CisgICAgICAgIHZhX2VuZChhcmdMaXN0KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHNpemVfdCBmaXJzdFNp
emUsIHNpemVfdCBzZWNvbmRTaXplLCBzaXplX3QgdGhpcmRTaXplKQorICAgIHsKKyAgICAgICAg
Ly8gQWxsb2NhdGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0U2l6ZSwgdGhlbiBzb21ldGhpbmcg
b2Ygc2l6ZSBzZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAgICAvLyBmcmVlcyB0aGUgZmlyc3Qg
YWxsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5kIHRoZW4gYXR0ZW1wdHMgdG8gYWxs
b2NhdGUgdGhlCisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRpbmcgdGhhdCBpdCBhbGxvY2F0ZWQg
YXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAgICAgICAgCisgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFsbG9jYXRpb24sIHdoaWNoIHdpbGwg
Y2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8gVGh1cyB0aGUgY29ycmVjdCB3YXkg
b2YgcnVubmluZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgc2Vjb25kU2l6ZSBpcworICAg
ICAgICAvLyBwaWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IG5ldmVyIHN0cmFkZGxlcyBhIHBh
Z2UuCisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9
IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c3Rh
cnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsK
KyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJt
SGlnaFdhdGVybWFyayhmaXJzdEhhbmRsZSk7CisKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9F
UShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSArIGZpcnN0U2l6ZSkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFu
ZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZp
cm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7CisgICAgICAg
IGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBm
cmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oc2Vjb25kSGFuZGxl
KTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAg
CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0o
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICog
cGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOworICAgICAgICBFWFBFQ1RfRVEo
dGhpcmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICog
cGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEodGhpcmRIYW5kbGUtPnNpemVJbkJ5dGVz
KCksIHRoaXJkU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHRoaXJkSGFuZGxlKTsK
KyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsodGhpcmRIYW5kbGUpOworICAgICAgICAKKyAg
ICAgICAgZnJlZSh0aGlyZEhhbmRsZSk7CisgICAgfQorICAgIAorICAgIGVudW0gVGVzdEZJRk9B
bGxvY01vZGUgeyBGaWxsQXRFbmQsIEVhZ2VyRmlsbCB9OworICAgIHZvaWQgdGVzdEZJRk9BbGxv
YyhUZXN0RklGT0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAgeworICAgICAgICAvLyBUaGlzIHdp
bGwgdGVzdCB0aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVzY2UgKGZyZWVpbmcgdGhlIGxlZnQt
bW9zdAorICAgICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hlbiB0aGUgY2h1bmsgdG8gdGhlIHJp
Z2h0IG9mIGl0IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAgIC8vIGZ1bGx5IGV4ZXJjaXNlIGxl
ZnQtY29hbGVzY2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiBJbiBFYWdlckZpbGwKKyAgICAgICAg
Ly8gbW9kZSwgdGhpcyBhbHNvIHRlc3RzIHBlcmZlY3QtZml0IGFsbG9jYXRpb24gYW5kIG5vLWNv
YWxlc2NpbmcgZnJlZS4KKyAgICAgICAgCisgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOwor
ICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVz
OworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBhcmdMaXN0OworICAgICAgICB2YV9zdGFydChh
cmdMaXN0LCBtb2RlKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBzaXplSW5CeXRlcyA9IHZhX2Fy
ZyhhcmdMaXN0LCBpbnQpKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5k
bGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxl
LT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkg
KyB0b3RhbFNpemUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVz
KCksIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5k
bGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKKyAgICAgICAgICAgIHRv
dGFsU2l6ZSArPSBzaXplSW5CeXRlczsKKyAgICAgICAgfQorICAgICAgICB2YV9lbmQoYXJnTGlz
dCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBo
YW5kbGVzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlcy5hdChp
bmRleCkpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemVTb0ZhciA9IDA7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4
KSB7CisgICAgICAgICAgICBzaXplU29GYXIgKz0gaGFuZGxlcy5hdChpbmRleCktPnNpemVJbkJ5
dGVzKCk7CisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAgICAg
IGlmIChtb2RlID09IEVhZ2VyRmlsbCkgeworICAgICAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2Ug
KiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSwgc2l6ZVNvRmFyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBj
b25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90
YWxTaXplLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBoYW5kbGVzLnNpemUo
KSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZXMu
bGFzdCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbmZp
cm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZnJlZShoYW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmZp
cm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBzaXplU29G
YXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QVNTRVJUKHNpemVTb0ZhciA9PSB0b3RhbFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmly
bShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkg
KiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9PSBGaWxs
QXRFbmQpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsSGFuZGxlID0g
YWxsb2NhdGUodG90YWxTaXplKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShmaW5hbEhhbmRsZS0+
c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoZmluYWxIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRvdGFs
U2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oZmluYWxIYW5kbGUpOwor
ICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmluYWxIYW5kbGUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIHRlc3RGaWxsSGVhcChzaXplX3Qgc2l6ZUluQnl0ZXMsIHNpemVfdCBudW1B
bGxvY2F0aW9ucykKKyAgICB7CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwg
MD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5k
ZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5k
KGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgCisg
ICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRSghYWxs
b2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOworICAgICAgICAKKyAgICAgICAgZm9yIChz
aXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQorICAgICAg
ICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNoZWNrKTsKKyAgICAg
ICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdFJp
Z2h0QWxsb2NhdGlvbihzaXplX3QgZmlyc3RMZWZ0U2l6ZSwgc2l6ZV90IGZpcnN0UmlnaHRTaXpl
LCBzaXplX3Qgc2Vjb25kTGVmdFNpemUsIHNpemVfdCBzZWNvbmRSaWdodFNpemUpCisgICAgewor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdExlZnQgPSBhbGxvY2F0ZShmaXJzdExl
ZnRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0TGVmdC0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdFJpZ2h0ID0gYWxsb2NhdGUoZmlyc3RSaWdodFNp
emUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7
CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRMZWZ0ID0gYWxs
b2NhdGUoc2Vjb25kTGVmdFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kTGVmdC0+c3Rh
cnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmly
c3RMZWZ0LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBzZWNvbmRSaWdodCA9IGFsbG9jYXRlKHNlY29uZFJpZ2h0U2l6ZSk7CisgICAgICAg
IEVYUEVDVF9FUShzZWNvbmRSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChi
YXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpIC0gZmlyc3RSaWdodC0+
c2l6ZUluQnl0ZXMoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdExlZnQpOworICAg
ICAgICBmcmVlKGZpcnN0UmlnaHQpOworICAgICAgICBmcmVlKHNlY29uZExlZnQpOworICAgICAg
ICBmcmVlKHNlY29uZFJpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpbmFsKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0QmVzdEZpdChzaXplX3QgZmlyc3RTaXplLCBzaXpl
X3Qgc3RlcCwgdW5zaWduZWQgbnVtU2xvdHMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01v
ZGUpCisgICAgeworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRs
ZXNUb0ZyZWU7CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxl
czsKKyAgICAgICAgVmVjdG9yPHZvaWQqLCAwPiBsb2NhdGlvbnM7CisgICAgICAgIAorICAgICAg
ICBzaXplX3Qgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAg
ICAgICAgICBpZiAoIWhhbmRsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUg
KHRvRnJlZS0+c3RhcnQoKSAhPSBoYW5kbGVzLmxhc3QoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaGFuZGxlc1RvRnJlZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgdG9GcmVlID0gYWxsb2NhdGUoc2l6ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGZyYWdnZXIgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUShmcmFnZ2VyLT5zdGFydCgpLCB0b0ZyZWUtPmVuZCgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZCh0b0ZyZWUtPnN0YXJ0KCkpOworCisgICAgICAg
ICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOworICAgICAgICAgICAgaGFuZGxlcy5h
cHBlbmQoZnJhZ2dlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5zaXplKCkgPT0g
bnVtU2xvdHMpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgaGFuZGxlc1RvRnJlZS5zaXplKCk7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhh
bmRsZXNUb0ZyZWUuYXQoaW5kZXgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAg
ICAgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGlu
ZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5k
bGUqIGJlc3RGaXQgPSBhbGxvY2F0ZShzaXplIC0gMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9j
YXRpb25zLmF0KGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmVzdEZpdC0+ZW5k
KCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGxvY2F0aW9ucy5hdChpbmRleCkpICsgc2l6ZSkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzbWFsbCA9IGFsbG9jYXRlKDMyLCBzYW5pdHlDaGVja01v
ZGUpOworICAgICAgICAgICAgaWYgKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGlu
ZGV4KSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoc21hbGwtPnN0YXJ0KCksIGJlc3RGaXQt
PmVuZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoc21h
bGwtPmVuZCgpLCBiZXN0Rml0LT5zdGFydCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZnJlZShiZXN0Rml0LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgZnJlZShzbWFsbCwg
c2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSArPSBzdGVw
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsg
aW5kZXggPCBudW1TbG90czsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlcy5hdChp
bmRleCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCks
IHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAor
ICAgICAgICBmcmVlKGZpbmFsLCBzYW5pdHlDaGVja01vZGUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIHRlc3RTaHJpbmsoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUpCisgICAg
eworICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhhdCB3aWxsIGJlIHNocnVuaworICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOwor
ICAgICAgICAKKyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQgbWFrZSBzdXJlIHRoYXQgb3VyIHN0
YXRlIHJlZmxlY3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAgIG5vdGlmeUZyZWUocmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQo
KSkgKyBzZWNvbmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAg
ICAgICBoYW5kbGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGhhbmRs
ZS0+c2l6ZUluQnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBzYW5pdHlD
aGVjaygpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgbm90
IGVtcHR5LgorICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0
UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBBbGxvY2F0
ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoZWFwLgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiByZW1haW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC0g
c2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShyZW1haW5kZXItPnN0YXJ0KCksIGhhbmRs
ZS0+ZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZnJlZShyZW1haW5kZXIpOworICAgICAgICBm
cmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBp
cyBlbXB0eSBhbmQgZmluaXNoIHVwLgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5h
bCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAgICBF
WFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwg
c2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIEVYUEVD
VF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdl
cykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBF
WFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1Q
YWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0
aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0
ZVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAg
IEVYUEVDVF9UUlVFKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAg
ICAgICBFWFBFQ1RfRVEoYWxsb3dBbGxvY2F0ZVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDAp
KTsKKyAgICAgICAgRVhQRUNUX0VRKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBh
Z2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFu
ZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0
UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVk
TnVtUGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAg
ICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxsb2NhdGUo
KGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCB0ZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6
ZSwgc2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIGZy
ZWUoYWxsb2NhdGUoZmlyc3RTaXplKSk7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZGVmYXVsdFBh
Z2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9y
LT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkp
OworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBh
bGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9j
YXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2Nh
dG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUo
KSkpOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERl
bWFuZEFsbG9jRG9udENvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1Q
YWdlczsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRs
ZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUo
Y3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIEVYUEVDVF9F
UShhbGxvd0FsbG9jYXRlUGFnZXMsIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpOworICAgICAgICBF
WFBFQ1RfRVEocmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRTaXplICsgcGFnZVNpemUoKSAtIDEp
IC8gcGFnZVNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCks
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCAr
IDEpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMg
PSAwOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUo
KGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKworICAgICAg
ICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdl
c0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZp
cnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgc2Vjb25kSGFuZGxlID0g
YWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c3Rh
cnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICogcGFnZVNpemUoKSkp
OworICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUp
OworICAgIH0KK307CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRW1wdHkpCit7CisgICAg
Ly8gVGVzdHMgdGhhdCBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBhbiBhbGxvY2F0b3Igd29ya3Mu
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQWxsb2NaZXJvKSAgICAKK3sKKyAgICAv
LyBUZXN0cyB0aGF0IGFsbG9jYXRpbmcgYSB6ZXJvLWxlbmd0aCBibG9jayByZXR1cm5zIDAgYW5k
CisgICAgLy8gZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAKKyAgICBB
U1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworICAgIAorICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7
CisgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICBmcmVlKGZpbmFsKTsKK30KKworVEVTVF9GKE1l
dGFBbGxvY2F0b3JUZXN0LCBPbmVBbGxvYzMyKQoreworICAgIHRlc3RPbmVBbGxvYygzMik7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgT25lQWxsb2M2NCkKK3sKKyAgICB0ZXN0T25l
QWxsb2MoNjQpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIE9uZUFsbG9jVHdvUGFn
ZXMpCit7CisgICAgdGVzdE9uZUFsbG9jKHBhZ2VTaXplKCkgKiAyKTsKK30KKworVEVTVF9GKE1l
dGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlR3aWNlKQoreworICAgIHRlc3RSZXBl
YXRBbGxvY0ZyZWUoMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBS
ZXBlYXRBbGxvY0ZyZWUzMlRoZW42NCkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2
NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRU
aGVuMzIpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDApOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVHdpY2VUaGVuNjQpCit7Cisg
ICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFB
bGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42NFR3aWNlKQoreworICAgIHRlc3RS
ZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVuMzJUaGVuNjQpCit7CisgICAgdGVzdFJlcGVhdEFs
bG9jRnJlZSg2NCwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBS
ZXBlYXRBbGxvY0ZyZWUzMlRocmljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAz
MiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJl
ZTMyVGhlbjY0VGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCAzMiwg
MCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVu
MzJUd2ljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMzIsIDApOworfQor
CitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZVR3b1BhZ2VzVGhlbjMy
KQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgp
ICogMiksIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxv
Y0ZyZWUzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCBzdGF0
aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgKiAyKSwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2Nh
dG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlUGFnZVRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0UmVw
ZWF0QWxsb2NGcmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSksIHN0YXRpY19jYXN0PGlu
dD4ocGFnZVNpemUoKSAqIDIpLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBS
ZXBlYXRBbGxvY0ZyZWVUd29QYWdlc1RoZW5QYWdlKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0Zy
ZWUoc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIHN0YXRpY19jYXN0PGludD4ocGFn
ZVNpemUoKSksIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxD
b2FsZXNjZTMyUGx1czMyVGhlbjEyOCkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMy
LCAzMiwgMTI4KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29h
bGVzY2UzMlBsdXM2NFRoZW4xMjgpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwg
NjQsIDEyOCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxl
c2NlNjRQbHVzMzJUaGVuMTI4KQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoNjQsIDMy
LCAxMjgpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNj
ZTMyUGx1c1BhZ2VMZXNzMzJUaGVuUGFnZSkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2Nl
KDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1c1BhZ2VMZXNzMzJUaGVuVHdvUGFnZXMp
Cit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgcGFnZVNpemUoKSAtIDMyLCBwYWdl
U2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENv
YWxlc2NlUGFnZVBsdXMzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxl
c2NlKHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlUGFnZVBsdXNQYWdlVGhlblR3b1BhZ2VzKQor
eworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgcGFnZVNpemUoKSwgcGFn
ZVNpemUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0Zp
bGxBdEVuZDMyVHdpY2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwg
MCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0RW5kMzJU
aHJpY2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwgMzIsIDApOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMyRm91clRp
bWVzKQoreworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAzMiwgMCk7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0RW5kUGFnZUxl
c3MzMlRoZW4zMlRoZW5QYWdlTGVzczY0VGhlbjY0KQoreworICAgIHRlc3RGSUZPQWxsb2MoRmls
bEF0RW5kLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgLSAzMiksIDMyLCBzdGF0aWNfY2Fz
dDxpbnQ+KHBhZ2VTaXplKCkgLSA2NCksIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZpbGwzMlR3aWNlKQoreworICAgIHRlc3RGSUZPQWxsb2Mo
RWFnZXJGaWxsLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJ
Rk9BbGxvY0VhZ2VyRmlsbDMyVGhyaWNlKQoreworICAgIHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxs
LCAzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxs
b2NFYWdlckZpbGwzMkZvdXJUaW1lcykKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwg
MzIsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9B
bGxvY0VhZ2VyRmlsbFBhZ2VMZXNzMzJUaGVuMzJUaGVuUGFnZUxlc3M2NFRoZW42NCkKK3sKKyAg
ICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpIC0g
MzIpLCAzMiwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpIC0gNjQpLCA2NCwgMCk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXAzMikKK3sKKyAgICB0ZXN0RmlsbEhl
YXAoMzIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMik7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXBQYWdlKQoreworICAgIHRlc3RGaWxsSGVhcChw
YWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIEZpbGxIZWFwVHdvUGFnZXMpCit7CisgICAgdGVzdEZpbGxIZWFwKHBhZ2VTaXplKCkg
KiAyLCBkZWZhdWx0UGFnZXNJbkhlYXAgLyAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSaWdodEFsbG9jYXRpb24zMlRoZW5QYWdlVGhlbjMyVGhlblBhZ2UpCit7CisgICAgdGVz
dFJpZ2h0QWxsb2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkpOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJpZ2h0QWxsb2NhdGlvblF1YXJ0ZXJQYWdlVGhlblBh
Z2VUaGVuUXVhcnRlclBhZ2VUaGVuUGFnZSkKK3sKKyAgICB0ZXN0UmlnaHRBbGxvY2F0aW9uKHBh
Z2VTaXplKCkgLyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSk7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1czY0VGhyaWNlKQorewor
ICAgIHRlc3RCZXN0Rml0KDY0LCA2NCwgMywgUnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NFRlblRpbWVzKQoreworICAgIHRlc3RC
ZXN0Rml0KDY0LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRh
QWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1czY0SHVuZHJlZFRpbWVzKQoreworICAgIHRlc3RC
ZXN0Rml0KDY0LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM2NFRocmljZSkKK3sKKyAgICB0ZXN0QmVzdEZp
dCg5NiwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBCZXN0Rml0OTZQbHVzNjRUZW5UaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgNjQs
IDEwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3Qs
IEJlc3RGaXQ5NlBsdXM2NEh1bmRyZWRUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgNjQs
IDEwMCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0
LCBCZXN0Rml0OTZQbHVzOTZUaHJpY2UpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCAzLCBS
dW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2
UGx1czk2VGVuVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCAxMCwgRG9udFJ1blNh
bml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVz
OTZFaWdodHlUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgOTYsIDgwLCBEb250UnVuU2Fu
aXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmluazY0VG8zMikK
K3sKKyAgICB0ZXN0U2hyaW5rKDY0LCAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVz
dCwgU2hyaW5rUGFnZVRvMzIpCit7CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgpLCAzMik7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rUGFnZVRvUGFnZUxlc3MzMikKK3sK
KyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgLSAzMik7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUbzMyKQoreworICAgIHRlc3RTaHJp
bmsocGFnZVNpemUoKSAqIDIsIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBT
aHJpbmtUd29QYWdlc1RvUGFnZVBsdXMzMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkg
KiAyLCBwYWdlU2l6ZSgpICsgMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNo
cmlua1R3b1BhZ2VzVG9QYWdlKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBh
Z2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2Vz
VG9QYWdlTGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXpl
KCkgLSAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNU
b1R3b1BhZ2VzTGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VT
aXplKCkgKiAyIC0gMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIERlbWFuZEFs
bG9jQ29hbGVzY2VQYWdlVGhlbkRvdWJsZUhlYXApCit7CisgICAgdGVzdERlbWFuZEFsbG9jQ29h
bGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwLCBkZWZhdWx0UGFnZXNJbkhlYXAg
KiBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1hbmRBbGxv
Y0NvYWxlc2NlUGFnZVRoZW5UcmlwbGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxvY0NvYWxl
c2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCAqIDIsIGRlZmF1bHRQYWdlc0luSGVh
cCAqIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIERlbWFuZEFs
bG9jRG9udENvYWxlc2NlUGFnZVRoZW5Eb3VibGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxv
Y0RvbnRDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAsIGRlZmF1bHRQYWdl
c0luSGVhcCAqIHBhZ2VTaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJ
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5j
cHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFj
a1RyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1Zl
Y3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQ
SSB7CisKK2NsYXNzIFJlZEJsYWNrVHJlZVRlc3Q6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1
YmxpYzoKKyAgICB1bnNpZ25lZCBtX2NvdW50ZXI7CisgICAgCisgICAgdmlydHVhbCB2b2lkIFNl
dFVwKCkKKyAgICB7CisgICAgICAgIG1fY291bnRlciA9IDA7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgUGFp
ciB7CisgICAgICAgIGNoYXIga2V5OworICAgICAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICAgICAg
CisgICAgICAgIFBhaXIoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFBhaXIoY2hhciBrZXksIHVu
c2lnbmVkIHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAgICAgLCB2YWx1
ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBrZXkgPT0gb3RoZXIua2V5OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sIG9wZXJhdG9yPChjb25zdCBQYWlyJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGtleSA8IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisg
ICAgdHlwZWRlZiBWZWN0b3I8UGFpciwgMTY+IFBhaXJWZWN0b3I7CisgICAgCisgICAgUGFpclZl
Y3RvciBmaW5kRXhhY3QoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAgIHsKKyAg
ICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAg
ICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChhc1ZlY3Rvci5hdChpbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBzdGQ6OnNvcnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAgICAgIAor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZShQYWly
VmVjdG9yJiBhc1ZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgYXNWZWN0b3Iu
YXQoaW5kZXgpID0gYXNWZWN0b3IubGFzdCgpOworICAgICAgICBhc1ZlY3Rvci5yZW1vdmVMYXN0
KCk7CisgICAgfQorICAgIAorICAgIFBhaXJWZWN0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVx
dWFsKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIGNoYXIg
YmVzdEtleSA9IDA7IC8vIGFzc2lnbm1lbnQgdG8gbWFrZSBnY2MgaGFwcHkKKyAgICAgICAgYm9v
bCBmb3VuZEtleSA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXgg
PSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYg
KGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPj0ga2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFz
VmVjdG9yLmF0KGluZGV4KS5rZXkgPCBiZXN0S2V5IHx8ICFmb3VuZEtleSkgeworICAgICAgICAg
ICAgICAgICAgICBmb3VuZEtleSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJlc3RLZXkg
PSBhc1ZlY3Rvci5hdChpbmRleCkua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAg
ICAgIAorICAgICAgICBpZiAoIWZvdW5kS2V5KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBmaW5kRXhhY3QoYXNWZWN0b3IsIGJlc3RLZXkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydEZvdW5kQW5kUmVtb3ZlKFBhaXJWZWN0b3ImIGFz
VmVjdG9yLCBjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAgICAgICAgYm9v
bCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgc2l6ZV90IGZvdW5kSW5kZXggPSAwOyAvLyBt
YWtlIGNvbXBpbGVycyBoYXBweQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5CisgICAgICAgICAgICAg
ICAgICAgICYmIGFzVmVjdG9yLmF0KGluZGV4KS52YWx1ZSA9PSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICBFWFBFQ1RfVFJVRSghZm91bmQpOworICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmb3Vu
ZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShmb3VuZCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJlbW92ZShhc1ZlY3RvciwgZm91bmRJbmRleCk7CisgICAgfQorICAgIAorICAg
IC8vIFRoaXMgZGVsaWJlcmF0ZWx5IHBhc3NlcyBhIGNvcHkgb2YgdGhlIHZlY3Rvci4KKyAgICB2
b2lkIGFzc2VydEVxdWFsKFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4mIGFzVHJlZSwgUGFp
clZlY3RvciBhc1ZlY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoUmVkQmxhY2tUcmVlPGNoYXIs
IHVuc2lnbmVkPjo6Tm9kZSogY3VycmVudCA9IGFzVHJlZS5maXJzdCgpOyBjdXJyZW50OyBjdXJy
ZW50ID0gYXNUcmVlLnN1Y2Nlc3NvcihjdXJyZW50KSkKKyAgICAgICAgICAgIGFzc2VydEZvdW5k
QW5kUmVtb3ZlKGFzVmVjdG9yLCBjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KFJlZEJsYWNrVHJlZTxjaGFy
LCB1bnNpZ25lZD4mIGFzVHJlZSwgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSog
bm9kZSwgUGFpclZlY3RvciBmb3VuZFZhbHVlcywgY2hhciBrZXkpCisgICAgeworICAgICAgICBp
ZiAobm9kZSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSog
cHJldk5vZGUgPSBub2RlOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIG5vZGUg
PSBwcmV2Tm9kZTsKKyAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IGFzVHJlZS5wcmVkZWNlc3Nv
cihwcmV2Tm9kZSk7CisgICAgICAgICAgICB9IHdoaWxlIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS0+
a2V5ID09IGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9FUShub2RlLT5r
ZXksIGtleSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghcHJldk5vZGUgfHwgcHJldk5vZGUt
PmtleSA8IGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShmb3VuZFZhbHVlcywgbm9kZS0+a2V5LCBub2RlLT52
YWx1ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZSA9IGFzVHJlZS5z
dWNjZXNzb3Iobm9kZSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW5vZGUgfHwgbm9k
ZS0+a2V5ID49IGtleSk7CisgICAgICAgICAgICB9IHdoaWxlIChub2RlICYmIG5vZGUtPmtleSA9
PSBrZXkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRShmb3VuZFZh
bHVlcy5pc0VtcHR5KCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgY29udHJvbCBzdHJpbmcg
aXMgYSBudWxsLXRlcm1pbmF0ZWQgbGlzdCBvZiBjb21tYW5kcy4gRWFjaAorICAgIC8vIGNvbW1h
bmQgaXMgdHdvIGNoYXJhY3RlcnMsIHdpdGggdGhlIGZpcnN0IGlkZW50aWZ5aW5nIHRoZSBvcGVy
YXRpb24KKyAgICAvLyBhbmQgdGhlIHNlY29uZCBnaXZpbmcgYSBrZXkuIFRoZSBjb21tYW5kcyBh
cmU6CisgICAgLy8gICt4ICBBZGQgeAorICAgIC8vICAqeCAgRmluZCBhbGwgZWxlbWVudHMgZXF1
YWwgdG8geAorICAgIC8vICBAeCAgRmluZCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBzbWFs
bGVzdCBrZXkgdGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8geAorICAgIC8vICAheCAg
UmVtb3ZlIGFsbCBlbGVtZW50cyBlcXVhbCB0byB4CisgICAgdm9pZCB0ZXN0RHJpdmVyKGNvbnN0
IGNoYXIqIGNvbnRyb2xTdHJpbmcpCisgICAgeworICAgICAgICBQYWlyVmVjdG9yIGFzVmVjdG9y
OworICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+IGFzVHJlZTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoY29uc3QgY2hhciogY3VycmVudCA9IGNvbnRyb2xTdHJpbmc7ICpjdXJy
ZW50OyBjdXJyZW50ICs9IDIpIHsKKyAgICAgICAgICAgIGNoYXIgY29tbWFuZCA9IGN1cnJlbnRb
MF07CisgICAgICAgICAgICBjaGFyIGtleSA9IGN1cnJlbnRbMV07CisgICAgICAgICAgICB1bnNp
Z25lZCB2YWx1ZSA9ICsrbV9jb3VudGVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NF
UlQoY29tbWFuZCk7CisgICAgICAgICAgICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlICcrJzogeworICAg
ICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBu
ZXcgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZTsKKyAgICAgICAgICAgICAgICBu
b2RlLT5rZXkgPSBrZXk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICBhc1RyZWUuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgICAgIGFzVmVj
dG9yLmFwcGVuZChQYWlyKGtleSwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyonOiB7Cisg
ICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9
IGFzVHJlZS5maW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZSkKKyAgICAg
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAg
ICBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZEV4YWN0KGFzVmVjdG9y
LCBrZXkpLCBrZXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBjYXNlICdAJzogeworICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFy
LCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBhc1RyZWUuZmluZExlYXN0R3JlYXRlclRoYW5PckVx
dWFsKGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUobm9kZS0+a2V5ID49IGtleSk7CisgICAgICAgICAgICAgICAgICAgIGFz
c2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVlLCBub2RlLCBmaW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwoYXNWZWN0b3IsIGtleSksIG5vZGUtPmtleSk7CisgICAgICAgICAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JF
cXVhbChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAnISc6IHsK
KyAgICAgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBSZWRC
bGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLnJlbW92ZShrZXkp
OworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgRVhQRUNUX0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFz
c2VydEZvdW5kQW5kUmVtb3ZlKGFzVmVjdG9yLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgYXNUcmVlLmNoZWNrQ29uc2lzdGVuY3ko
KTsKKyNlbmRpZgorICAgICAgICAgICAgRVhQRUNUX0VRKGFzVHJlZS5zaXplKCksIGFzVmVjdG9y
LnNpemUoKSk7CisgICAgICAgICAgICBhc3NlcnRFcXVhbChhc1RyZWUsIGFzVmVjdG9yKTsKKyAg
ICAgICAgfQorICAgIH0KK307CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBFbXB0eSkKK3sK
KyAgICB0ZXN0RHJpdmVyKCIiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEVtcHR5
R2V0RmluZFJlbW92ZSkKK3sKKyAgICB0ZXN0RHJpdmVyKCIqeEB5IXoiKTsKK30KKworVEVTVF9G
KFJlZEJsYWNrVHJlZVRlc3QsIFNpbmdsZUFkZCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSIpOwor
fQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgU2luZ2xlQWRkR2V0RmluZFJlbW92ZU5vdEZv
dW5kKQoreworICAgIHRlc3REcml2ZXIoIithKnhAeSF6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFj
a1RyZWVUZXN0LCBTaW5nbGVBZGRHZXRGaW5kUmVtb3ZlKQoreworICAgIHRlc3REcml2ZXIoIith
KmFAYSFhIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBUd29BZGRzKQoreworICAg
IHRlc3REcml2ZXIoIithK2IiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFRocmVl
QWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MiKTsKK30KKworVEVTVF9GKFJlZEJsYWNr
VHJlZVRlc3QsIEZvdXJBZGRzKQoreworICAgIHRlc3REcml2ZXIoIithK2IrYytkIik7Cit9CisK
K1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBMb3RzT2ZSZXBlYXRBZGRzKQoreworICAgIHRlc3RE
cml2ZXIoIithK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCIpOworfQorCitU
RVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgTG90c09mUmVwZWF0QW5kVW5pcXVlQWRkcykKK3sKKyAg
ICB0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrZStm
K2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oiKTsKK30KKworVEVTVF9GKFJl
ZEJsYWNrVHJlZVRlc3QsIExvdHNPZlJlcGVhdEFuZFVuaXF1ZUFkZHNBbmRHZXRzQW5kUmVtb3Zl
cykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrZStmK2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oqYSpiKmMqZCpl
KmYqZypoKmkqaiprKmwqbSpuKm8qcCpxKnIqcyp0KnUqdip3KngqeSp6IWEhYiFjIWQhZSFmIWch
aCFpIWohayFsIW0hbiFvIXAhcSFyIXMhdCF1IXYhdyF4IXkheiIpOworfQorCitURVNUX0YoUmVk
QmxhY2tUcmVlVGVzdCwgU2ltcGxlQmVzdEZpdFNlYXJjaCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIr
ZCtkK20rd0BkQG1Ad0BhQGdAcSIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgQmln
Z2VyQmVzdEZpdFNlYXJjaCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrZCtkK2QrZCtkK2QrZCtkK2Qr
ZCtmK2YrZitmK2YrZitmK2graCtpK2oraytsK20rbytwK3Ercit6QGFAYkBjQGRAZUBmQGdAaEBp
QGpAa0BsQG1AbkBvQHBAcUByQHNAdEB1QHZAd0B4QHlAeiIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBUZXN0V2ViS2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106064</attachid>
            <date>2011-09-01 16:50:00 -0700</date>
            <delta_ts>2011-09-01 18:35:00 -0700</delta_ts>
            <desc>the patch - remove stray debug printf</desc>
            <filename>metaalloc_patch_25.diff</filename>
            <type>text/plain</type>
            <size>225320</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAyIEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
Ojpyb3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VO
b2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5
dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZl
ZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpSYXdOb2RlOjpzZXRSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmZpcnN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3Qp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVh
bCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVx
dWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0
SGVscCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZHVtcFJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJv
b3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjphc05vZGUpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDktMDEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0By
aW0uY29tPgogCiAgICAgICAgIFFOWCBHQ0MgZGlzdHJpYnV0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB2
YXNwcmludGYoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMCw2ICs1MTAsOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTm9uQ29weWluZ1NvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9O
b25jb3B5YWJsZS5oIFwKQEAgLTU0Miw2ICs1NDUsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyU2VlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1JlZEJsYWNrVHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50
ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNp
b24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDExIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRF
UEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFp
blRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVl
RnJlZVNwYWNlTm9kZUVQTlNfMTJSZWRCbGFja1RyZWVJbVB2RTROb2RlRQorX19aTjNXVEYxM01l
dGFBbGxvY2F0b3IxOGRlYnVnRnJlZVNwYWNlU2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRv
cjhhbGxvY2F0ZUVtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckMyRW0KIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzcsNiArNDQyLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNiw2ICs1MjMsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzYxLDYgKzc2MSwxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTkwMSw2ICs5MTMsMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDExICs1MSwxNSBAQAogCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVj
aW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07
CiAJCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9
OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9
IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CisJCTBGOTYz
QjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyog
TWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0Iy
RTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAy
RDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkM4MTUx
NTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0
MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovOyB9OwogCQkwRkM4MTUwQTE0
MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87
IH07CisJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4
RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07
CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjRE
MTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9z
aXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkx
NDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAw
MDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTU1NCw3ICs1NTgsNyBA
QAogCQlCQzE4QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTM5NkE2MENEMjkzMzEwMEI1
QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDMThDNDZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1BhY2tlZENhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REE0Nzk2
NTBDRkJDRjU2MDA5MzI4QTAgLyogVENQYWNrZWRDYWNoZS5oICovOyB9OwogCQlCQzE4QzQ2RDBF
MTZGNUNEMDBCMzQ0NjAgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFw
LmggKi87IH07Ci0JCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgw
QTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovOyB9OworCQlCQzE4QzQ2RTBFMTZGNUNEMDBC
MzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU0MUJENkYwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ2RjBF
MTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENzEwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lz
dGVtQWxsb2MuaCAqLzsgfTsKIAkJQkMxOEM0NzAwRTE2RjVDRDAwQjM0NDYwIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc5
MjIwRDZDOTVDRDAwRkVBM0JBIC8qIFRocmVhZGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDcxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBU
aHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFCN0M4QkQwREEzQTMzNjAwNzRCMERDIC8qIFRocmVhZFNwZWNpZmljLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczOSwxMSArNzQz
LDE1IEBACiAJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBs
aW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJF
MTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJs
ZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTQxNDA1
MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzIsNiArMTY4MCwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAq
LywKKwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAor
CQkJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkw
NkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIw
MDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmlj
b2RlICovLApAQCAtMjI1NCw2ICsyMjY2LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2
NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5
ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJl
ZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTQ2LDcgKzI1NjIsNiBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50
YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QzBFMTZGNUNEMDBCMzQ0NjAg
LyogVENQYWNrZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkQwRTE2RjVDRDAw
QjM0NDYwIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NkUwRTE2RjVD
RDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZGMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzFF
REVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjNCRDMxRUQxMjY3MzU3NzAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODY2LDYgKzI4ODEsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNC
MkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDk0MzU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikK
IAorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgInN0ZGludC5oIgogI2luY2x1
ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg+CkBAIC0x
MjgsMTkgKzEyOSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJMYWJlbChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFi
bGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRv
cikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
Q29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
ICghbV9pbmRleCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgdm9p
ZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhnbG9iYWxEYXRhLCBtX2luZGV4KTsKKyAgICAg
ICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBnbG9iYWxEYXRh
LmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CiAKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQt
PnN0YXJ0KCksIHJlc3VsdC0+c2l6ZUluQnl0ZXMoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBt
ZW1jcHkocmVzdWx0LCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICBtZW1jcHkocmVz
dWx0LT5zdGFydCgpLCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBy
ZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIGxhYmVsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDIyICs2OSw4IEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2VuZGlmCiAKIHB1YmxpYzoK
LSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIq
IG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQotICAgICAg
ICA6IG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKDAp
Ci0gICAgICAgICwgbV9jb2RlKDApCi0gICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKLSAgICAg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAs
IG1fY29tcGxldGVkKGZhbHNlKQotI2VuZGlmCi0gICAgewotICAgICAgICBsaW5rQ29kZSgpOwot
ICAgIH0KLQotICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlciogbWFzbSwgRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQotICAgICAgICA6
IG1fZXhlY3V0YWJsZVBvb2woYWxsb2NhdG9yLnBvb2xGb3JTaXplKGdsb2JhbERhdGEsIG1hc20t
Pm1fYXNzZW1ibGVyLmNvZGVTaXplKCkpKQotICAgICAgICAsIG1fc2l6ZSgwKQorICAgIExpbmtC
dWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAg
ICAgICAgOiBtX3NpemUoMCkKICAgICAgICAgLCBtX2NvZGUoMCkKICAgICAgICAgLCBtX2Fzc2Vt
YmxlcihtYXNtKQogICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKQEAgLTE4NSwx
NCArMTcxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigp
OwogCi0gICAgICAgIHJldHVybiBDb2RlUmVmKG1fY29kZSwgbV9leGVjdXRhYmxlUG9vbCwgbV9z
aXplKTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmaW5hbGl6ZUNvZGVBZGRlbmR1
bSgpCi0gICAgewotICAgICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7Ci0KLSAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkxhYmVsKGNvZGUoKSk7CisgICAgICAgIHJldHVybiBDb2RlUmVmKG1f
ZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgfQogCiAgICAgQ29kZVB0ciB0cmFtcG9saW5lQXQoTGFi
ZWwgbGFiZWwpCkBAIC0yMzIsMTQgKzIxMSwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX2NvZGUpOwogI2lmICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgICAg
IG1fY29kZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9i
YWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERh
dGEpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpOwogICAgICAg
ICBtX3NpemUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICAgICAg
QVNTRVJUKG1fY29kZSk7CiAjZWxzZQogICAgICAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBtX2Fz
c2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKLSAgICAgICAgbV9jb2RlID0gKHVpbnQ4
X3QqKW1fZXhlY3V0YWJsZVBvb2wtPmFsbG9jKCptX2dsb2JhbERhdGEsIGluaXRpYWxTaXplKTsK
LSAgICAgICAgaWYgKCFtX2NvZGUpCisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xv
YmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV9nbG9iYWxEYXRhLCBpbml0
aWFsU2l6ZSk7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpOworICAgICAgICBBU1NFUlQobV9jb2RlKTsKICAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWFrZVdyaXRhYmxlKG1fY29kZSwgaW5pdGlhbFNpemUpOwogICAgICAgICB1aW50OF90
KiBpbkRhdGEgPSAodWludDhfdCopbV9hc3NlbWJsZXItPnVubGlua2VkQ29kZSgpOwogICAgICAg
ICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9jb2RlKTsK
QEAgLTI5Nyw3ICsyODEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGp1bXBzVG9MaW5rLmNsZWFy
KCk7CiAgICAgICAgIG1fc2l6ZSA9IHdyaXRlUHRyICsgaW5pdGlhbFNpemUgLSByZWFkUHRyOwot
ICAgICAgICBtX2V4ZWN1dGFibGVQb29sLT50cnlTaHJpbmsobV9jb2RlLCBpbml0aWFsU2l6ZSwg
bV9zaXplKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5LT5zaHJpbmsobV9zaXplKTsKIAog
I2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAgICAgIGR1bXBMaW5rU3RhdGlzdGljcyhtX2Nv
ZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwpAQCAtMzY2LDcgKzM1MCw3IEBAIHByaXZhdGU6CiAg
ICAgfQogI2VuZGlmCiAgICAgCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFi
bGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVN
ZW1vcnk7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBtX2NvZGU7CiAgICAgTWFjcm9B
c3NlbWJsZXIqIG1fYXNzZW1ibGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwyMiArMTk5LDU5IEBAIHByaXZhdGU6CiAvLyBw
b2ludGVyIHRvIHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0byB0aGUgcG9vbCBmcm9tIHdp
dGhpbiB3aGljaCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB7Citwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgZGFu
Z2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAorICAgIC8vIHRvIGJlIGVhc3kg
dG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KKyAgICBleHBs
aWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIp
CisgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCisgICAgeworICAgICAgICBBU1NFUlQobV9j
b2RlUHRyKTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKQot
ICAgICAgICA6IG1fc2l6ZSgwKQogICAgIHsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAsIG1fZXhl
Y3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
ZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZU1lbW9yeSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPmlzTWFuYWdlZCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSk7CisgICAgICAgIEFT
U0VSVChtX2NvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4g
eW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMgdG8gY29kZSB0aGF0IGlzCisgICAgLy8g
YWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNh
bGx5IHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IGNvZGVQdHIgaXMgaW1tb3J0YWwuCisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVQdHI7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmICgh
bV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBtX2V4ZWN1dGFibGVNZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1fY29kZTsKLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhl
Y3V0YWJsZVBvb2w7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSw5ICsxNTk1LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYi5tX29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAgfQogICAgIAotICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1
dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAg
ICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSk7CiAgICAg
fQogCiAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7IG1f
Zm9ybWF0dGVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkBAIC0xOTM5LDkgKzE5MzksOSBA
QCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KTsgfQogICAgICAgICB2b2lkKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CiAKLSAgICAgICAgdm9pZCog
ZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
YWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4
ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIGFsbG9jYXRv
cik7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0
YSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFi
ZWwgcmV3aW5kVG8pIHsgbV9idWZmZXIucmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk0
MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0
cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9Ci0gICAg
ICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUo
KS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUq
IGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1l
bW9yeSgpOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgU3RydWN0dXJlQ2hhaW47CiAKICNpZiBFTkFCTEUoSklUKQotICAgIHR5cGVkZWYgQ29kZUxv
Y2F0aW9uTGFiZWwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBl
OworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKIAogICAgIC8vIFN0cnVjdHVyZSB1c2VkIGJ5IG9w
X2dldF9ieV9pZF9zZWxmX2xpc3QgYW5kIG9wX2dldF9ieV9pZF9wcm90b19saXN0IGluc3RydWN0
aW9uIHRvIGhvbGQgZGF0YSBvZmYgdGhlIG1haW4gb3Bjb2RlIHN0cmVhbS4KICAgICBzdHJ1Y3Qg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwogICAgICAgICB9IHU7CiAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3R1YlJvdXRpbmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViUm91dGluZTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlKEpJVENvZGUmIGVudHJ5CiAgICAgLy8gR2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHByb2dy
YW0uCiAgICAgY29tcGlsZUJvZHkoKTsKICAgICAvLyBMaW5rCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9j
YXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
ICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgZW50cnkgPSBKSVRDb2RlKGxpbmtCdWZmZXIuZmlu
YWxpemVDb2RlKCksIEpJVENvZGU6OkRGR0pJVCk7CiB9CkBAIC05ODYsNyArOTg2LDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogCiAKICAgICAvLyA9PT0gTGlu
ayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9n
bG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICAKICAg
ICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sg
b3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0MzU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1
ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCYgc3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6
ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nl
c3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKS0+ZXhlY3V0YWJsZVBvb2woKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgIAog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0K
IAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNzYsMTUgKzE3Niwx
NCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAog
ICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKICAgICAgICAgbGlua1Jlc3RvcmVTY3Jh
dGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAKICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3Ry
dWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
OwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQ
cm90b0J1aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbik7CkBAIC0zMjQsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdAogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxp
c3Q7CkBAIC0zNTAsMjEgKzM0OSwyMSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsK
KyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwog
ICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKICAgICAgICAg
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90b0JlZ2luKTsK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAg
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9i
YWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50
cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJv
dXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0
KCkpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7
CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNDE5LDE4ICs0MTgsMTgg
QEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChsaXN0
SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNT
RVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKICAgICAg
ICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8s
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxh
c3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAg
ICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NDgsMTggKzU0NywxNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDIgKzI3LDExMSBAQAogCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjZW5kaWYK
KwogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKIAot
RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNp
emVfdCBzaXplKQorY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFB
bGxvY2F0b3IgeworcHVibGljOgorICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAg
ICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAz
MiBieXRlcworICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJlYWxsb2NhdGUgYW55IG1lbW9yeSBo
ZXJlLgorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5EZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXNlcnZhdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXNlcnZhdGlvbnMuYXQoaSkuZGVhbGxvY2F0ZSgp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFj
ZShzaXplX3QmIG51bVBhZ2VzKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld051bVBhZ2VzID0g
KCgobnVtUGFnZXMgKiBwYWdlU2l6ZSgpICsgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpF
IC0gMSkgLyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgKiBKSVRfQUxMT0NBVE9SX0xB
UkdFX0FMTE9DX1NJWkUpICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChuZXdOdW1QYWdlcyA+PSBudW1QYWdlcyk7CisgICAgICAgIAorICAg
ICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgUGFnZVJlc2Vy
dmF0aW9uIHJlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKG51bVBhZ2VzICog
cGFnZVNpemUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xf
V1JJVEFCTEUsIHRydWUpOworICAgICAgICBpZiAoIXJlc2VydmF0aW9uKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQocmVzZXJ2YXRp
b24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2UoKTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAg
eworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCksIEVYRUNVVEFC
TEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxQYWdlUmVzZXJ2YXRpb24sIDE2PiByZXNlcnZhdGlvbnM7Cit9OworCitzdGF0aWMgRGVtYW5k
RXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOworCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQogewotICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29k
ZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgIGlmICghYWxsb2Nh
dGlvbikKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gYWxsb2NhdGlvbjsKKyAgICBBU1NF
UlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRh
YmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBhbGxvY2F0aW9uLmRlYWxs
b2NhdGUoKTsKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwog
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9Ci0gICAgCisKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNp
emVJbkJ5dGVzKQoreworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogc2l6ZV90
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0gICAgcmV0dXJu
IDA7Ci19IAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7Cit9CiAKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGUoKQoreworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUoKTsKK30KICNl
bmRpZgogCisjZW5kaWYgLy8gRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKwog
I2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogCiAjaWYgT1MoV0lORE9XUykgfHwg
T1MoU1lNQklBTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTEwMiwx
MjAgKzEwMywyNyBAQCBpbmxpbmUgc2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplCiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEV4ZWN1dGFibGVQb29sPiB7Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKLSAgICB0eXBlZGVmIFBhZ2VBbGxvY2F0aW9uIEFsbG9jYXRpb247Ci0j
ZWxzZQotICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgQWxsb2Nh
dGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgICAgIDogbV9iYXNlKGJhc2Up
Ci0gICAgICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCogYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX2Jhc2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1fYmFzZTsKLSAg
ICAgICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB9OwotI2VuZGlmCi0gICAgdHlwZWRlZiBWZWN0b3I8
QWxsb2NhdGlvbiwgMj4gQWxsb2NhdGlvbkxpc3Q7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVQb29sKGdsb2Jh
bERhdGEsIG4pKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBhbGxvYyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZVB0ciA8PSBtX2Vu
ZCk7Ci0KLSAgICAgICAgLy8gUm91bmQgJ24nIHVwIHRvIGEgbXVsdGlwbGUgb2Ygd29yZCBzaXpl
OyBpZiBhbGwgYWxsb2NhdGlvbnMgYXJlIG9mCi0gICAgICAgIC8vIHdvcmQgc2l6ZWQgcXVhbnRp
dGllcywgdGhlbiBhbGwgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQuCi0g
ICAgICAgIG4gPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgc2l6ZW9mKHZvaWQqKSk7Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obikgPCAobV9lbmQgLSBtX2ZyZWVQdHIp
KSB7Ci0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVQdHI7Ci0gICAgICAgICAgICBt
X2ZyZWVQdHIgKz0gbjsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBJbnN1ZmZpY2llbnQgc3BhY2UgdG8gYWxsb2NhdGUgaW4gdGhlIGV4aXN0aW5n
IHBvb2wKLSAgICAgICAgLy8gc28gd2UgbmVlZCBhbGxvY2F0ZSBpbnRvIGEgbmV3IHBvb2wKLSAg
ICAgICAgcmV0dXJuIHBvb2xBbGxvY2F0ZShnbG9iYWxEYXRhLCBuKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCB0cnlTaHJpbmsodm9pZCogYWxsb2NhdGlvbiwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0
aW9uKSArIG9sZFNpemUgIT0gbV9mcmVlUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyByb3VuZFVwQWxs
b2NhdGlvblNpemUobmV3U2l6ZSwgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgfQotCi0gICAgfkV4ZWN1
dGFibGVQb29sKCkKLSAgICB7Ci0gICAgICAgIEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBlbmQg
PSBtX3Bvb2xzLmVuZCgpOwotICAgICAgICBmb3IgKEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBw
dHIgPSBtX3Bvb2xzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgRXhl
Y3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoKnB0cik7Ci0gICAgfQotCi0gICAgc2l6ZV90IGF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIChtX3Bvb2xzLnNpemUoKSA+IDEpID8gMCA6IG1fZW5k
IC0gbV9mcmVlUHRyOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEFsbG9jYXRpb24gc3lzdGVt
QWxsb2Moc2l6ZV90IG4pOwotICAgIHN0YXRpYyB2b2lkIHN5c3RlbVJlbGVhc2UoQWxsb2NhdGlv
biYgYWxsb2MpOwotCi0gICAgRXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG4p
OwotCi0gICAgdm9pZCogcG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQot
ICAgIGNoYXIqIG1fZnJlZVB0cjsKLSAgICBjaGFyKiBtX2VuZDsKLSAgICBBbGxvY2F0aW9uTGlz
dCBtX3Bvb2xzOwotfTsKK3R5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU7CiAKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0g
UHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0g
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewot
ICAgICAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29s
ID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NBVE9SX0xBUkdF
X0FMTE9DX1NJWkUpOwotI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAgICB9CisgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cihKU0dsb2JhbERhdGEmKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb2Nh
dG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKKyAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICBzdGF0aWMg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBwb29sRm9yU2l6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQot
ICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc21hbGwgYWxsb2Nh
dG9yCi0gICAgICAgIEFTU0VSVChtX3NtYWxsQWxsb2NhdGlvblBvb2wpOwotICAgICAgICBpZiAo
biA8IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwotCi0gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlz
IGxhcmdlLCB3ZSBqdXN0IHByb3ZpZGUgYSB1bnNoYXJlZCBhbGxvY2F0b3IKLSAgICAgICAgaWYg
KG4gPiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4g
RXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBuKTsKLQotICAgICAgICAvLyBDcmVh
dGUgYSBuZXcgYWxsb2NhdG9yCi0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbCA9
IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmV3IGFsbG9jYXRvciB3aWxsIHJlc3Vs
dCBpbiBtb3JlIGZyZWUgc3BhY2UgdGhhbiBpbgotICAgICAgICAvLyB0aGUgY3VycmVudCBzbWFs
bCBhbGxvY2F0b3IsIHRoZW4gd2Ugd2lsbCB1c2UgaXQgaW5zdGVhZAotICAgICAgICBpZiAoKHBv
b2wtPmF2YWlsYWJsZSgpIC0gbikgPiBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgp
KQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29sID0gcG9vbDsKLSAgICAgICAgcmV0
dXJuIHBvb2wucmVsZWFzZSgpOwotICAgIH0KKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAK
ICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCBtYWtl
V3JpdGFibGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMzQ4LDUwICsyNTYsOSBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2
b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0dGluZyk7CiAj
ZW5kaWYKLQotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29s
OwogfTsKIAotaW5saW5lIEV4ZWN1dGFibGVQb29sOjpFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3Vu
ZFVwQWxsb2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlvbiBtZW0gPSBz
eXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghbWVtLmJhc2UoKSkgewotICAgICAgICBy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgbWVtID0gc3lzdGVt
QWxsb2MoYWxsb2NTaXplKTsKLSAgICB9Ci0gICAgbV9wb29scy5hcHBlbmQobWVtKTsKLSAgICBt
X2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWVtLmJhc2UoKSk7Ci0gICAgaWYgKCFtX2Zy
ZWVQdHIpCi0gICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIG1fZW5k
ID0gbV9mcmVlUHRyICsgYWxsb2NTaXplOwotICAgIGRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIo
KTsKLX0KLQotaW5saW5lIHZvaWQqIEV4ZWN1dGFibGVQb29sOjpwb29sQWxsb2NhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0g
cm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIAotICAgIEFsbG9jYXRp
b24gcmVzdWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIXJlc3VsdC5iYXNl
KCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0
LmJhc2UoKSkKLSAgICAgICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQobV9lbmQgPj0gbV9mcmVlUHRyKTsKLSAgICBpZiAoKGFsbG9j
U2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAg
ICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0aW9uIHBvb2wKLSAgICAgICAgbV9mcmVlUHRyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgbjsKLSAgICAgICAgbV9lbmQgPSBzdGF0
aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBhbGxvY1NpemU7Ci0gICAgfQotCi0gICAg
bV9wb29scy5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsKLX0KLQot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUo
QVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAogI2luY2x1ZGUg
PGVycm5vLmg+CiAKLSNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4u
aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIApAQCAtNDYsNDgxICs0NSwxMDAgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jZGVmaW5lIFR3b1Bvdyhu
KSAoMXVsbCA8PCBuKQotCi1jbGFzcyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgewotcHVibGlj
OgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGJsb2Nr
U2l6ZSwgdW5zaWduZWQgbG9nMkJsb2NrU2l6ZSkKLSAgICAgICAgOiBtX2Jsb2NrU2l6ZShibG9j
a1NpemUpCi0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2tTaXplID09IFR3b1Bvdyhsb2cyQmxv
Y2tTaXplKSk7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5l
ZWRlZCB0byBob2xkIHNpemUuCi0gICAgICAgIHNpemVfdCBibG9ja01hc2sgPSBibG9ja1NpemUg
LSAxOwotICAgICAgICBtX2Jsb2NrQ291bnQgPSAoc2l6ZSArIGJsb2NrTWFzaykgPj4gbG9nMkJs
b2NrU2l6ZTsKLQotICAgICAgICAvLyBBbGlnbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdv
ID49IG1fYmxvY2tDb3VudC4KLSAgICAgICAgbV9ibG9ja0FsaWdubWVudCA9IDE7Ci0gICAgICAg
IHdoaWxlIChtX2Jsb2NrQWxpZ25tZW50IDwgbV9ibG9ja0NvdW50KQotICAgICAgICAgICAgbV9i
bG9ja0FsaWdubWVudCArPSBtX2Jsb2NrQWxpZ25tZW50OwotICAgIH0KLQotICAgIHNpemVfdCBi
bG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrU2l6ZTsgfQotICAgIHNpemVfdCBibG9j
a0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0NvdW50OyB9Ci0gICAgc2l6ZV90IGJsb2Nr
QWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0FsaWdubWVudDsgfQotCi0gICAgc2l6
ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tTaXplICogbV9ibG9ja0Nv
dW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9ibG9ja1NpemU7Ci0gICAgc2l6
ZV90IG1fYmxvY2tDb3VudDsKLSAgICBzaXplX3QgbV9ibG9ja0FsaWdubWVudDsKLX07Ci0KLXRl
bXBsYXRlPHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlTGVhZiB7
Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IDEyOyAvLyAyXjEyID09IHBhZ2VzaXpl
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lv
blNpemUgKyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9u
U2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCByZWdpb25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NF
UlQoZW50cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVMZWFm
X2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJsZUxlYWYoKQot
ICAgICAgICA6IG1fYWxsb2NhdGVkKDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxvY2F0aW9u
VGFibGVMZWFmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0gc3VicmVnaW9u
U2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAgICAgIHNpemVfdCBhbGln
bm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50
ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBj
aGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAo
KDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAv
LyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICgh
KG1fYWxsb2NhdGVkICYgbWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2FsbG9jYXRlZCB8PSBt
YXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkpIDw8
IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8PD0g
YWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9Ci0K
LSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mm
IHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkg
PT0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24gPj4g
bG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9j
a0NvdW50KCk7Ci0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkg
PDwgZW50cnk7Ci0KLSAgICAgICAgQVNTRVJUKChtX2FsbG9jYXRlZCAmIG1hc2spID09IG1hc2sp
OwotICAgICAgICBtX2FsbG9jYXRlZCAmPSB+bWFzazsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1w
dHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX2FsbG9jYXRlZDsKLSAgICB9Ci0KLSAgICBi
b29sIGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gIX5tX2FsbG9jYXRlZDsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lv
blNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFz
c0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRh
YmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQg
PSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAg
Iik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyUwMTZsbHhdXG4iLCAoaW50KXBh
cmVudE9mZnNldCwgbV9hbGxvY2F0ZWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IEJpdEZpZWxkIG1fYWxsb2NhdGVkOwotfTsKLQotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWw+
Ci1jbGFzcyBMYXp5QWxsb2NhdGlvblRhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gTmV4dExldmVsOjplbnRyaWVzOwotCi0g
ICAgTGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgICAgIDogbV9wdHIoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgfkxhenlBbGxvY2F0aW9uVGFibGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
RW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3B0cikKLSAgICAgICAg
ICAgIG1fcHRyID0gbmV3IE5leHRMZXZlbCgpOwotICAgICAgICByZXR1cm4gbV9wdHItPmFsbG9j
YXRlKHNpemVDbGFzcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwg
QWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZnJlZShsb2NhdGlvbiwgc2l6ZUNsYXNzKTsKLSAg
ICAgICAgaWYgKG1fcHRyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3B0cjsK
LSAgICAgICAgICAgIG1fcHRyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNF
bXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIW1fcHRyOwotICAgIH0KLQotICAgIGJvb2wg
aXNGdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciAmJiBtX3B0ci0+aXNGdWxsKCk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOZXh0TGV2ZWw6OnNpemUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBk
dW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmR1bXAocGFyZW50T2Zmc2V0
LCBpbmRlbnQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4g
TmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5l
eHRMZXZlbCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWwsIHVuc2lnbmVk
IGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5IHsKLSAgICB0eXBl
ZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZzJTdWJyZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSAr
IGxvZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0g
VHdvUG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lv
blNpemUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBlbnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRy
aWVzIDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeV9l
bnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnko
KQotICAgICAgICA6IG1fZnVsbCgwKQotICAgICAgICAsIG1faGFzU3ViYWxsb2NhdGlvbigwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghaXNGdWxsKCkpOwotCi0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJy
ZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSwgYml0ICs9IGJpdCkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2Z1bGwgJiBiaXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fc3ViYWxsb2NhdGlvbnNb
aV0uYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBkaWRuJ3QgYWxyZWFk
eSBoYXZlIGEgc3VicmVnaW9uLCBpdCBkb2VzIG5vdyEKLSAgICAgICAgICAgICAgICAgICAgbV9o
YXNTdWJhbGxvY2F0aW9uIHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWlycm9yIHRo
ZSBzdWJhbGxvY2F0aW9uJ3MgZnVsbCBiaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N1
YmFsbG9jYXRpb25zW2ldLmlzRnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mdWxs
IHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpICogc3VicmVnaW9uU2l6ZSkg
fCBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBIGJsb2NrIGlzIGFs
bG9jYXRlZCBpZiBlaXRoZXIgaXQgaXMgZnVsbHkgYWxsb2NhdGVkIG9yIGNvbnRhaW5zIHN1YmFs
bG9jYXRpb25zLgotICAgICAgICBCaXRGaWVsZCBhbGxvY2F0ZWQgPSBtX2Z1bGwgfCBtX2hhc1N1
YmFsbG9jYXRpb247Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9j
a0FsaWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3Vu
dCgpOwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVl
IGJsb2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8
PCAoYWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxp
Z25tZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBp
ICs9IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEoYWxsb2NhdGVkICYgbWFzaykpIHsK
LSAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gbWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4g
KGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlv
biwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAg
IHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwotCi0gICAgICAg
IGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAg
ICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGVudHJ5OwotICAgICAgICAgICAgbV9zdWJhbGxvY2F0
aW9uc1tlbnRyeV0uZnJlZShsb2NhdGlvbiAmIChzdWJyZWdpb25TaXplIC0gMSksIHNpemVDbGFz
cyk7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3ViYWxsb2NhdGlvbiBpcyBub3cgZW1w
dHkuCi0gICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlvbiAmPSB+Yml0OwotICAgICAgICAgICAg
Ly8gTm8gbmVlZCB0byBjaGVjaywgaXQgY2xlYXJseSBpc24ndCBmdWxsIGFueSBtb3JlIQotICAg
ICAgICAgICAgbV9mdWxsICY9IH5iaXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
aXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAgICAgQml0Rmll
bGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsKLSAgICAgICAgICAgIEFT
U0VSVCgobV9mdWxsICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoIShtX2hh
c1N1YmFsbG9jYXRpb24gJiBtYXNrKSk7Ci0gICAgICAgICAgICBtX2Z1bGwgJj0gfm1hc2s7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICEobV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBib29sIGlz
RnVsbCgpCi0gICAgeyAgIAotICAgICAgICByZXR1cm4gIX5tX2Z1bGw7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwot
ICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXpl
KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCBzdWJyZWdpb25TaXplKSB7
Ci0gICAgICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gTmV4dExl
dmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLnNpemUo
KSA8IE5leHRMZXZlbDo6c2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzaXplQ2xhc3M7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXpl
LCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5E
RUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5k
ZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7
ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiUwOHg6IFsiLCAoaW50KXBhcmVudE9mZnNldCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxk
IGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIGNoYXIgYyA9IG1faGFzU3ViYWxsb2NhdGlv
biAmIGJpdAotICAgICAgICAgICAgICAgID8gKG1fZnVsbCAmIGJpdCA/ICdOJyA6ICduJykKLSAg
ICAgICAgICAgICAgICA6IChtX2Z1bGwgJiBiaXQgPyAnRicgOiAnLScpOwotICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlYyIsIGMpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiXVxuIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7
ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IHBhcmVudE9mZnNldCB8IChzdWJyZWdpb25TaXplICogaSk7Ci0g
ICAgICAgICAgICBpZiAobV9oYXNTdWJhbGxvY2F0aW9uICYgYml0KQotICAgICAgICAgICAgICAg
IG1fc3ViYWxsb2NhdGlvbnNbaV0uZHVtcChvZmZzZXQsIGluZGVudCArIDEpOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsIG1fc3ViYWxsb2NhdGlv
bnNbZW50cmllc107Ci0gICAgLy8gU3VicmVnaW9ucyBleGlzdCBpbiBvbmUgb2YgZm91ciBzdGF0
ZXM6Ci0gICAgLy8gKDEpIGVtcHR5IChib3RoIGJpdHMgY2xlYXIpCi0gICAgLy8gKDIpIGZ1bGx5
IGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBhbGxvY2F0aW9uIChtX2Z1bGwgc2V0KQotICAgIC8vICgz
KSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKG1faGFzU3ViYWxs
b2NhdGlvbiBzZXQpCi0gICAgLy8gKDQpIGZ1bGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9j
YXRpb25zIChib3RoIGJpdHMgc2V0KQotICAgIEJpdEZpZWxkIG1fZnVsbDsKLSAgICBCaXRGaWVs
ZCBtX2hhc1N1YmFsbG9jYXRpb247Ci19OwotCi0KLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlTGVh
Zjw2PiBQYWdlVGFibGVzMjU2S0I7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxQ
YWdlVGFibGVzMjU2S0IsIDY+IFBhZ2VUYWJsZXMxNk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFi
bGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDE+IFBhZ2VU
YWJsZXMzMk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRp
b25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDY+IFBhZ2VUYWJsZXMxR0I7Ci0KICNpZiBDUFUoQVJN
KQotdHlwZWRlZiBQYWdlVGFibGVzMTZNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BV
KFg4Nl82NCkKLXR5cGVkZWYgUGFnZVRhYmxlczFHQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CiAj
ZWxzZQotdHlwZWRlZiBQYWdlVGFibGVzMzJNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0
aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogI2VuZGlm
CiAKLQotY2xhc3MgRml4ZWRWTVBvb2xBbGxvY2F0b3IKLXsKK2NsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgotICAgIEZp
eGVkVk1Qb29sQWxsb2NhdG9yKCkKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQorICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcwogICAgIHsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMyNTZLQjo6c2l6
ZSgpID09IDI1NiAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczE2TUI6OnNpemUo
KSA9PSAxNiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMzMk1COjpz
aXplKCkgPT0gMzIgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMUdC
OjpzaXplKCkgPT0gMTAyNCAqIDEwMjQgKiAxMDI0KTsKLQotICAgICAgICBtX3Jlc2VydmF0aW9u
ID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoRml4ZWRWTVBvb2xQYWdl
VGFibGVzOjpzaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9Q
T09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZh
dGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxsb2NhdG9yOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNpZiAhRU5B
QkxFKElOVEVSUFJFVEVSKQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgaWYgKCFt
X3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgorICAgICAgICBpZiAo
bV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgp
ID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNl
cnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
LSAKLSAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyhzaXplX3QgcmVxdWVzdGVk
U2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShyZXF1ZXN0ZWRT
aXplKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplQ2xhc3Muc2l6ZSgpOwotICAgICAgICBB
U1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPj0gRml4ZWRWTVBvb2xQYWdlVGFibGVz
OjpzaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0gICAgICAgIGlmIChtX3BhZ2VzLmlzRnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBtX3BhZ2VzLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0g
bm90Rm91bmQpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0KLSAgICAgICAgdm9pZCogcG9pbnRlciA9IG9mZnNldFRvUG9pbnRlcihvZmZzZXQp
OwotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwb2ludGVyLCBzaXplKTsKLSAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKHBvaW50ZXIsIHNpemUpOwotICAgIH0K
LQotICAgIHZvaWQgZnJlZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKQogICAgIHsKLSAgICAgICAgdm9pZCogcG9pbnRlciA9IGFsbG9jYXRpb24uYmFzZSgpOwot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGFsbG9jYXRpb24uc2l6ZSgpOwotICAgICAgICBBU1NFUlQo
c2l6ZSk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwb2ludGVyLCBzaXplKTsK
LQotICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JT
aXplKHNpemUpOwotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLnNpemUoKSA9PSBzaXplKTsKLSAg
ICAgICAgbV9wYWdlcy5mcmVlKHBvaW50ZXJUb09mZnNldChwb2ludGVyKSwgc2l6ZUNsYXNzKTsK
KyAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9j
YXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZWQoKQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzZXJ2YXRpb24uY29t
bWl0dGVkKCk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkp
OwogICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAh
IW1fcmVzZXJ2YXRpb247CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFn
ZVNpemUoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFz
cyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gRml4ZWRW
TVBvb2xQYWdlVGFibGVzOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9pZCog
b2Zmc2V0VG9Qb2ludGVyKHNpemVfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZh
dGlvbi5iYXNlKCkpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9pbnRlclRvT2Zm
c2V0KHZvaWQqIHBvaW50ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlcikgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRp
b247Ci0gICAgRml4ZWRWTVBvb2xQYWdlVGFibGVzIG1fcGFnZXM7CiB9OwogCitzdGF0aWMgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CiAKLXN0YXRpYyBTcGluTG9j
ayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIEZpeGVkVk1Qb29sQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSAwOwotCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRp
YWxpemVBbGxvY2F0b3IoKQoreworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7Cit9CiAKLXNpemVfdCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQorRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tIb2xkZXIoJnNwaW5sb2NrKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yID8gYWxs
b2NhdG9yLT5hbGxvY2F0ZWQoKSA6IDA7Ci19ICAgCisgICAgQVNTRVJUKGFsbG9jYXRvcik7Cit9
CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sQWxsb2NhdG9yKCk7Ci0gICAgcmV0
dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgpOworICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNS
ZXNlcnZlZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJl
c3N1cmUoKQogewotICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCB0YWtlIHRoZSBzcGluIGxv
Y2sgaGVyZSwgYnV0IHdlIGRvbid0IGNhcmUgaWYgd2UgZ2V0IHN0YWxlIGRhdGEuCi0gICAgLy8g
VGhpcyBpcyBvbmx5IHJlYWxseSBhIGhldXJpc3RpYyBhbnl3YXkuCi0gICAgcmV0dXJuIGFsbG9j
YXRvciAmJiAoYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA+IChGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6
OnNpemUoKSAvIDIpKTsKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3Mg
PSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgcmV0dXJuIHN0YXRpc3RpY3Mu
Ynl0ZXNBbGxvY2F0ZWQgPiBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLyAyOwogfQogCi1FeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90
IHNpemUpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5
dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAg
QVNTRVJUKGFsbG9jYXRvcik7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Moc2l6ZSk7Cisg
ICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxs
b2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIHJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworc2l6
ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisgICAgcmV0
dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9v
bDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikg
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigm
c3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJlZShh
bGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9CisjZW5kaWYKIAog
fQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VU
QUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0
YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFk
ZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwg
Y2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRyYW1wb2xpbmVT
dHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgSklU
IGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyhleGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMp
OworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyhnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgQ29kZVB0ciBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBOYXRpdmVGdW5jdGlv
biBmdW5jKQorICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIENvZGVQdHIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVJlZigpOwogICAg
ICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBqaXQu
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCBm
dW5jKTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KGdsb2JhbERhdGEsIGZ1bmMpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgcGF0
Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBT
dHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpOwpAQCAtMjc0LDkgKzI3NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJl
KiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwg
U3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KTsKIAotICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4q
IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUg
KnRyYW1wb2xpbmVzKTsKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFt
cG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwotICAgICAgICBD
b2RlUHRyIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQ
b29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBOYXRpdmVGdW5jdGlvbiBm
dW5jKTsKKyAgICAgICAgQ29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9i
YWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAg
ICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogI2VuZGlmCiAgICAgICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5l
cmF0b3I7Ci0gICAgICAgIHN0YXRpYyBDb2RlUHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKTsKKyAgICAg
ICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIAogICAgIGlubGluZSB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTIgKzU2LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgb3BlcmF0b3IgISgpIGNvbnN0CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gIW1fcmVmOwogICAgICAgICB9CiAKICAgICAgICAg
Q29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X3JlZi5tX2NvZGU7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQgaW4gYnl0ZXMg
b2YgJ3BvaW50ZXJJbnRvQ29kZScgaW50bwpAQCAtNjksNyArNjksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gYmxvY2sgb2YgY29kZS4gIEl0IGlzIEFTU0VSVGVkIHRoYXQgbm8gY29k
ZWJsb2NrID40Z2IgaW4gc2l6ZS4KICAgICAgICAgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9p
bnRlckludG9Db2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnRwdHJfdCByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4obV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICAgICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRl
ckludG9Db2RlKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVmLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnRwdHJf
dD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkpID09IHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CiAgICAgICAgIH0KQEAgLTc3
LDI0ICs3NywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29k
ZSEKICAgICAgICAgaW5saW5lIEpTVmFsdWUgZXhlY3V0ZShSZWdpc3RlckZpbGUqIHJlZ2lzdGVy
RmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAg
ICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY3Rp
VHJhbXBvbGluZShtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJGaWxl
LCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwgZ2xv
YmFsRGF0YSkpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUo
Y3RpVHJhbXBvbGluZShtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJG
aWxlLCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwg
Z2xvYmFsRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA/
IGpzTnVsbCgpIDogcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCogc3RhcnQoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9jb2RlLmRhdGFMb2NhdGlvbigp
OworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplKCkKICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIHJldHVy
biBtX3JlZi5tX3NpemU7CisgICAgICAgICAgICBBU1NFUlQobV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLnNpemUoKTsKICAgICAgICAg
fQogCi0gICAgICAgIEV4ZWN1dGFibGVQb29sKiBnZXRFeGVjdXRhYmxlUG9vbCgpCisgICAgICAg
IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGdldEV4ZWN1dGFibGVNZW1vcnkoKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVjdXRhYmxlUG9vbC5nZXQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEpJVFR5cGUgaml0VHlwZSgpCkBAIC0xMDQsOSArMTA0LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgLy8gSG9zdCBmdW5jdGlvbnMgYXJlIGEgYml0IHNwZWNpYWw7
IHRoZXkgaGF2ZSBhIG1fY29kZSBwb2ludGVyIGJ1dCB0aGV5CiAgICAgICAgIC8vIGRvIG5vdCBp
bmRpdmlkdWxseSByZWYgdGhlIGV4ZWN1dGFibGUgcG9vbCBjb250YWluaW5nIHRoZSB0cmFtcG9s
aW5lLgotICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29kZVB0ciBjb2RlKQor
ICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29kZVJlZiBjb2RlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAw
LCBIb3N0Q2FsbFRodW5rKTsKKyAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUsIEhvc3RD
YWxsVGh1bmspOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBjbGVhcigpCkBAIC0xMTYsOCAr
MTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0
YWJsZVBvb2wsIHNpemVfdCBzaXplLCBKSVRUeXBlIGppdFR5cGUpCi0gICAgICAgICAgICA6IG1f
cmVmKGNvZGUsIGV4ZWN1dGFibGVQb29sLCBzaXplKQorICAgICAgICBKSVRDb2RlKFBhc3NSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSwgSklUVHlwZSBqaXRU
eXBlKQorICAgICAgICAgICAgOiBtX3JlZihleGVjdXRhYmxlTWVtb3J5KQogICAgICAgICAgICAg
LCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxl
UG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xp
bmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiB7CiAjaWYg
RU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgTGFiZWwgc29mdE1vZEJlZ2luID0gYWxp
Z24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xp
bmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRo
ZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0
b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0
cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDY29uc3Ry
dWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKIAogICAgIENv
ZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1
dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJs
ZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gcGF0Y2hCdWZm
ZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlW
aXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1
Y3RCZWdpbik7CkBAIC0xNzUsNiArMTc1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJ
TWFjaGluZVRyYW1wbwogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogICAgIHRyYW1w
b2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHNvZnRNb2RC
ZWdpbik7CiAjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gZXhlY3V0YWJsZU1lbW9yeS5yZWxlYXNl
KCk7CiB9CiAKIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uc3RydWN0KQpAQCAtMzEyLDEwICszMTQs
OSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAgICAgcmV0dXJu
IG5hdGl2ZUNhbGxUaHVuazsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCitKSVQ6OkNvZGVS
ZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogewogICAgIENhbGwgbmF0aXZlQ2FsbDsKLSAgICBM
YWJlbCBuYXRpdmVDYWxsVGh1bmsgPSBhbGlnbigpOwogCiAgICAgZW1pdFB1dEltbWVkaWF0ZVRv
Q2FsbEZyYW1lSGVhZGVyKDAsIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKTsKIApAQCAtNDQ3LDEy
ICs0NDgsMTAgQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogICAg
IHJldCgpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBj
b2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBv
YmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBl
eGVjdXRhYmxlUG9vbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIo
ZnVuYykpOwotICAgIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotCi0gICAgcmV0dXJuIHBh
dGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDYWxsVGh1bmspOworICAgIHJldHVybiBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVj
dXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJl
ICp0cmFtcG9saW5lcykKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogewogICAgIC8vICgyKSBUaGUg
c2Vjb25kIGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcg
bGVuZ3RoCiAgICAgTGFiZWwgc3RyaW5nTGVuZ3RoQmVnaW4gPSBhbGlnbigpOwpAQCAtMTUzLDcg
KzE1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBD
YWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJp
bmdfZmFpbHVyZUNhc2VzMyk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQh
IGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRo
ZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5
X2lkX3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNh
c2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKQEAg
LTE2NCw3ICsxNjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNvbnN0cnVjdCwgRnVuY3Rpb25QdHIo
Y3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAKICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFs
Q29kZS5tX2V4ZWN1dGFibGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4ZWN1dGFibGVNZW1vcnkoKTsKIAogICAg
IHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5l
QXQodmlydHVhbENhbGxMaW5rQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29u
c3RydWN0TGluayA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ29uc3RydWN0TGlu
a0JlZ2luKTsKQEAgLTE3Myw2ICsxNzMsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvCiAgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSBwYXRjaEJ1ZmZl
ci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0
aXZlQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNvbnN0cnVjdFRo
dW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHBhdGNo
QnVmZmVyLnRyYW1wb2xpbmVBdChzdHJpbmdMZW5ndGhCZWdpbik7CisgICAgCisgICAgcmV0dXJu
IGV4ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwogfQogCiBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0Nv
bnN0cnVjdCkKQEAgLTI5MSw5ICsyOTMsOSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDCiAgICAgcmV0dXJuIG5hdGl2ZUNhbGxUaHVuazsKIH0KIAotSklUOjpDb2Rl
UHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uKQorSklUOjpD
b2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgcmV0dXJuIENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tZXRob2RfY2hlY2soSW5zdHIKICAgICBtX2J5
dGVjb2RlT2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKIH0KIAotSklUOjpD
b2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIEpT
SW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTE5Myw4ICsxOTMs
OCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVy
biBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0
cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIo
bV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0
TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5l
cmF0b3IpLmNvZGUoKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QwKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NDEsNyAr
NTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKICAgICBDYWxsIGZhaWx1cmVD
YWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0
aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKICAg
ICAKQEAgLTU1MCwxMCArNTUwLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRy
YW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rp
b25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAg
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsK
KyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIGVudHJ5TGFi
ZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFk
ZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsK
IH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYwNiw3ICs2
MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CiAgICAgSnVtcCBzdWNj
ZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dD
YXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBh
dGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MTcsMTMgKzYxNiwxMiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2
ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3Bf
cHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFp
bCkpOwpAQCAtNjY2LDcgKzY2NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byhTdHIKICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
KTsKQEAgLTY4NCwxMyArNjgyLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byhTdHIKICAgICB9CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQg
c28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1
YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJ
bmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03
MjMsNyArNzIwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAog
CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAg
aWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC03MzEsNyArNzI4LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAgICB9CiAgICAgfSAg
ICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBpZiAoIWxhc3RQ
cm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsK
ICAgICAKQEAgLTc0MCwxNCArNzM3LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0
KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJl
bCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwog
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtNzg3LDcgKzc4NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAg
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2Nv
ZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBm
b3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsg
aXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50
bykKQEAgLTc5NSwyMSArNzkyLDIxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90b0xpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0
aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBj
YXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90
b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2Rl
KCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4p
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFzdFByb3RvQmVnaW4pOwog
ICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2Rl
LCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVt
KCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwogCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRy
eUxhYmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVTdHJ1Y3R1cmUpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgog
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgp
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBy
b3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTQsNyArODUxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2Rl
QmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9y
IChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8p
CkBAIC04NjIsMjIgKzg1OSwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW5MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlv
biB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2Fz
ZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgp
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90b0Jl
Z2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGUoKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28g
dGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAg
ICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5l
LCBzdHJ1Y3R1cmUsIGNoYWluKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
ICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUo
KSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MjEsNyArOTE4LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICBjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAg
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYg
KG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVy
KSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC05MzUsMTMgKzkzMiwxMyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2
ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgQ29kZVJlZiBz
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4g
b25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDk0MzU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFj
ZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC03Nyw4ICs3Nyw4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
Z1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJmppdCwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpLm1fY29kZTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAm
aml0KTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0
cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5n
VlB0cikpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOworICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9u
TGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cikuY29kZSgpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NTUs
NyArNTU1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAg
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKICAgICBDYWxsIGZhaWx1
cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3Bf
cHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKQEAgLTU2
NCwxMCArNTY0LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwog
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3Rp
X29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIGVudHJ5TGFiZWwpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9p
ZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZz
ZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYxNSw3ICs2MTQsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgZW1pdEZhc3RBcml0
aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAo
KTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9j
b2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xv
d0Nhc2VDYWxsKTsKQEAgLTYyNiwxMyArNjI1LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQp
KTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUu
Y29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNl
IC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNo
QnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIo
Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02NzMsNyArNjcxLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIH0gZWxzZQogICAgICAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsK
ICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFVz
ZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRv
IHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBz
bG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjkwLDEzICs2ODgsMTIgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgICAgICB9CiAgICAg
fQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwg
YmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93
IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29k
ZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29k
ZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0g
aW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03MjYsNyArNzIzLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAgICBjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KHJlZ1QwLCByZWdUMCwgc3RydWN0dXJlLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHVi
TGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9
IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTcz
Niw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAg
ICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFs
YXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2Fs
bCk7CiAKQEAgLTc0NSwxNCArNzQyLDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5j
b2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc5MSw3ICs3ODgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04MDEsMjAgKzc5OCwyMCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEs
IGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxh
c3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlM
YWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBwcm90b3R5
cGVTdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0
dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKQEAgLTg1Nyw3ICs4NTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW5MaXN0CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJl
Z1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04NjcsMjIgKzg2NCwyMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFp
bCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsK
IAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgY2hhaW4pOwor
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAg
ICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTI1LDcgKzkyMiw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERp
cmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBz
dWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtOTQx
LDEzICs5MzgsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJhY2sg
dGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVy
LgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7
CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwor
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9y
ZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgog
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTcsOCAr
NzU3LDggQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxEYXRhKiBnbG9iYQogICAgIGlm
ICghZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRh
LCAmbV9leGVjdXRhYmxlUG9vbCwgJm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7Ci0gICAgQVNTRVJU
KG1fZXhlY3V0YWJsZVBvb2wpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEpJVDo6Y29tcGls
ZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCAmbV90cmFtcG9saW5lU3RydWN0dXJl
KTsKKyAgICBBU1NFUlQoISFtX2V4ZWN1dGFibGVNZW1vcnkpOwogI2lmIENQVShBUk1fVEhVTUIy
KQogICAgIC8vIFVuZm9ydHVuYXRlIHRoZSBhcm0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUg
dXNlIG9mIG9mZnNldG9mIG9uIEpJVFN0YWNrRnJhbWUgKHNpbmNlIGl0IGNvbnRhaW5zIG5vbiBQ
T0QgdHlwZXMpLAogICAgIC8vIGFuZCB0aGUgT0JKRUNUX09GRlNFVE9GIG1hY3JvIGRvZXMgbm90
IGFwcGVhciBjb25zdGFudGlzaCBlbm91Z2ggZm9yIGl0IHRvIGJlIGhhcHB5IHdpdGggaXRzIHVz
ZSBpbiBDT01QSUxFX0FTU0VSVApAQCAtMTYwOCw3ICsxNjA4LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VSVCghc3R1
YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIENvZGVMb2NhdGlvbkxhYmVsKCks
IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCksIHN0dWJJbmZvLT51LmdldEJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgc3R1YkluZm8tPmlu
aXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZv
LT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTYzNCwxMiArMTYzNCwxMiBA
QCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgc3dpdGNoIChz
dHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoK
ICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1
YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZv
LT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1Yklu
Zm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CiAgICAgICAgIHBy
b3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51Lmdl
dEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlk
Q2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBDb2Rl
TG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0
KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKQEAgLTM1NzIsMTEgKzM1NzIsMTEgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRvXwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgc3RkOjpwYWlyPENUSVN0dWJNYXA6Oml0ZXJh
dG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKSk7CisgICAgc3RkOjpwYWlyPENUSVN0dWJNYXA6Oml0ZXJhdG9yLCBib29s
PiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYoKSk7CiAgICAgaWYgKGVudHJ5LnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29u
ZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsKKyAgICAg
ICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhKTsKICAgICByZXR1
cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKIH0KIApAQCAtMzU4NCw3ICszNTg0LDcgQEAgTmF0aXZl
RXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFpcjxIb3N0
RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0
dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAo
ISplbnRyeS5maXJzdC0+c2Vjb25kKQotICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgq
Z2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNv
bXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wsIGZ1bmN0aW9u
KSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwg
TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRp
dmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNl
Y29uZC5nZXQoKTsKIH0KIApAQCAtMzU5Miw4ICszNTkyLDggQEAgTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFpcjxIb3N0RnVuY3Rpb25TdHVi
TWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChm
dW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAoISplbnRyeS5maXJz
dC0+c2Vjb25kKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlID0gZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9v
bC5nZXQoKSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY29kZSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9
IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEpIDogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9i
YWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlO
YXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAg
fQogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5h
dGl2ZUNvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVD
b25zdHJ1Y3Q7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVNvZnRNb2R1bG8o
KSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpU29mdE1vZHVsbzsgfQogCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoSlNHbG9iYWxEYXRhKiwgVGh1bmtHZW5lcmF0b3IpOwogCiAgICAgICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVu
Y3Rpb24pOwogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xv
YmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvcik7CkBAIC0zMDIsMTEgKzMw
MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhckhvc3RGdW5jdGlvblN0
dWJzKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5l
cmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gQ1RJU3R1Yk1hcDsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IENUSVN0dWJN
YXA7CiAgICAgICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8TmF0aXZlRnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gPiBIb3N0RnVuY3Rp
b25TdHViTWFwOwogICAgICAgICBPd25QdHI8SG9zdEZ1bmN0aW9uU3R1Yk1hcD4gbV9ob3N0RnVu
Y3Rpb25TdHViTWFwOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJs
ZVBvb2w7CisgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFi
bGVNZW1vcnk7CiAKICAgICAgICAgVHJhbXBvbGluZVN0cnVjdHVyZSBtX3RyYW1wb2xpbmVTdHJ1
Y3R1cmU7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCAr
MzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTcGVjaWFsaXplZFRodW5rSklUIDog
cHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAgICAgIFNwZWNpYWxpemVkVGh1bmtKSVQoaW50
IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCisgICAgICAgIFNwZWNpYWxpemVkVGh1bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291
bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAgICAgIDogbV9leHBlY3RlZEFy
Z0NvdW50KGV4cGVjdGVkQXJnQ291bnQpCiAgICAgICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9i
YWxEYXRhKQotICAgICAgICAgICAgLCBtX3Bvb2wocG9vbCkKICAgICAgICAgewogICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRz
CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50ICogKGludClz
aXplb2YoUmVnaXN0ZXIpKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwpA
QCAtMTIzLDEzICsxMjIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZpbmFs
aXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxi
YWNrKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmluYWxpemUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2spCiAgICAgICAgIHsK
LSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0YSwgdGhpcywgbV9w
b29sLmdldCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVM
b2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJl
dHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgICAgICAgICByZXR1
cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBB
c3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBm
aXJzdCBhcmd1bWVudApAQCAtMTYzLDcgKzE2Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgaW50IG1fZXhwZWN0ZWRBcmdDb3VudDsKICAgICAgICAgSlNHbG9iYWxEYXRh
KiBtX2dsb2JhbERhdGE7Ci0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9wb29sOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKICAgICAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4gPiBtX2NhbGxzOwogICAgIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZp
c2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjYgKzYzLDI2IEBAIHN0YXRpYyB2b2lkIGNoYXJU
b1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAg
aml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4g
aml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wp
OworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIHN0cmlu
Z0NoYXJMb2FkKGppdCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFy
Q29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICAvLyBsb2FkIGNoYXIgY29kZQogICAg
IGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MSk7CkBAIC05MCwxMSArOTAsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29k
ZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIg
c3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAKICAgICBqaXQubG9hZERvdWJs
ZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKQEAgLTE3OCwxMiArMTc4LDEy
IEBAIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZyk7CiBkZWZpbmVVbmFyeURvdWJsZU9w
V3JhcHBlcihmbG9vcik7CiBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKTsKIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9v
clRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25J
bnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTE5NywxMSAr
MTk3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG8KICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNlaWxUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9v
bCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYg
KCFVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50
KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0
dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMjIwLDExICsyMjAsMTEg
QEAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9Db25zdGFudAogc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmVDb25zdGFudCA9IDEuMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVI
YWxmQ29uc3RhbnQgPSAtMC41OwogICAgIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9v
bCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsK
ICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGpzUm91bmQpIHx8ICFqaXQuc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZElu
dDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwog
ICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0yMzks
MzcgKzIzOSwzNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvCiAg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBleHBUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwotICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
Ci0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0Lmxv
YWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURv
dWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3Jh
cHBlcihsb2cpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29s
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91
YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSk7CiAgICAgaml0LnJldHVybkRv
dWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFs
aXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRG91
YmxlQml0b3BzKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMy
QXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAg
IGppdC5yc2hpZnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigzMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTI4Niwx
MSArMjg2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcigKICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIsIGdsb2JhbERhdGEsIHBv
b2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIsIGdsb2JhbERhdGEpOwogICAgIGlm
ICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50
KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
aAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCArMzEsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwog
ICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0gICAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOworICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotICAgIHR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyICgqVGh1bmtHZW5lcmF0b3IpKEpTR2xvYmFsRGF0YSosIEV4ZWN1
dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCop
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRh
YmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
LCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOworICAgIHR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJz
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
Kik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5r
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVj
dFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAgICAgICAgc3RhdGljIE5hdGl2
ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwogICAg
ICAgICAgICAgaWYgKCFjYWxsVGh1bmspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gOTQzNTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiRXhlY3V0YWJs
ZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJkdG9hLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgImR0b2Eu
aCIKICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKQEAgLTUzLDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2Uo
KQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFsaXplKCk7CiAjZW5kaWYKICAgICBK
U0dsb2JhbERhdGE6OnN0b3JlVlB0cnMoKTsKKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0
aWFsaXplQWxsb2NhdG9yKCk7CiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQogICAg
IFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw2IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9i
YWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRC
dWZmZXIpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3Io
KnRoaXMpCi0gICAgLCByZWdleEFsbG9jYXRvcigqdGhpcykKICNlbmRpZgogICAgICwgbGV4ZXIo
bmV3IExleGVyKHRoaXMpKQogICAgICwgcGFyc2VyKG5ldyBQYXJzZXIpCkBAIC00NDAsNiArNDM5
LDkgQEAgdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygpCiB2b2lkIEpTR2xvYmFsRGF0
YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGludGVycHJldGVyLT5k
dW1wU2FtcGxlRGF0YShleGVjKTsKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBKU0dsb2JhbERh
dGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNyArMTkzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9jYXRvcjsK
LSAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciByZWdleEFsbG9jYXRvcjsKICNlbmRpZgogCiAj
aWYgIUVOQUJMRShKSVQpCkBAIC0yMTYsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBP
d25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3Ip
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBTRVQoV1RGX0hFQURFUlMK
ICAgICBNYWxsb2Nab25lU3VwcG9ydC5oCiAgICAgTWF0aEV4dHJhcy5oCiAgICAgTWVzc2FnZVF1
ZXVlLmgKKyAgICBNZXRhQWxsb2NhdG9yLmNwcAorICAgIE1ldGFBbGxvY2F0b3IuaAorICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUuaAogICAgIE5vbkNvcHlpbmdTb3J0LmgKICAgICBUaHJlYWRSZXN0
cmljdGlvblZlcmlmaWVyLmgKICAgICBOb25jb3B5YWJsZS5oCkBAIC02OSw2ICs3Miw3IEBAIFNF
VChXVEZfSEVBREVSUwogICAgIFBvc3NpYmx5TnVsbC5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAg
ICBSYW5kb21OdW1iZXJTZWVkLmgKKyAgICBSZWRCbGFja1RyZWUuaAogICAgIFJlZkNvdW50ZWQu
aAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oCiAgICAgUmVmUHRyLmgKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWV0
YUFsbG9jYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAg
IDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7CisgICAg
QVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOworfQorCitNZXRhQWxsb2Nh
dG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCit7CisgICAgaWYgKCFtX2FsbG9jYXRv
cikKKyAgICAgICAgcmV0dXJuOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0
b3ItPm1fbG9jayk7CisgICAgaWYgKG1fc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgbV9hbGxvY2F0
b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kobV9zdGFydCwgbV9zaXplSW5CeXRlcyk7CisgICAg
ICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUobV9zdGFydCwg
bV9zaXplSW5CeXRlcyk7CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNo
cmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVz
IDw9IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbV9hbGxvY2F0b3IpIHsKKyAgICAg
ICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7
CisKKyAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5
dGVzKTsKKyAgICAKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7
CisgICAgCisgICAgaWYgKG5ld1NpemVJbkJ5dGVzID09IG1fc2l6ZUluQnl0ZXMpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICB1aW50cHRyX3QgZnJlZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbmV3U2l6ZUluQnl0ZXM7CisgICAgc2l6ZV90IGZyZWVT
aXplID0gbV9zaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOworICAgIHVpbnRwdHJfdCBmcmVl
RW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CisgICAgCisgICAgdWludHB0cl90IGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0g
MSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgaWYgKGZpcnN0Q29tcGxl
dGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKKyAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBh
Z2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBh
Z2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOwor
ICAgIAorICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIAorICAgIG1f
c2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKK30KKworTWV0YUFsbG9jYXRvcjo6TWV0YUFs
bG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpCisgICAgOiBtX2FsbG9jYXRpb25HcmFu
dWxlKGFsbG9jYXRpb25HcmFudWxlKQorICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSgpKQorICAg
ICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCisgICAgLCBt
X2J5dGVzQ29tbWl0dGVkKDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9tYWxsb2NCYWxhbmNl
KDApCisjZW5kaWYKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICAsIG1f
bnVtQWxsb2NhdGlvbnMoMCkKKyAgICAsIG1fbnVtRnJlZXMoMCkKKyNlbmRpZgoreworICAgIG1f
bG9jay5Jbml0KCk7CisgICAgCisgICAgZm9yIChtX2xvZ1BhZ2VTaXplID0gMDsgbV9sb2dQYWdl
U2l6ZSA8IDMyOyArK21fbG9nUGFnZVNpemUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNp
emVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXplKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1f
bG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSk7CisgICAgCisgICAgZm9yIChtX2xvZ0FsbG9jYXRp
b25HcmFudWxlID0gMDsgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA8IDMyOyArK21fbG9nQWxsb2Nh
dGlvbkdyYW51bGUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9s
b2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8
IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7Cit9CisKK1Bh
c3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6
ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsK
KworICAgIGlmICghc2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHNp
emVJbkJ5dGVzID0gcm91bmRVcChzaXplSW5CeXRlcyk7CisgICAgCisgICAgdm9pZCogc3RhcnQg
PSBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXN0YXJ0KSB7
CisgICAgICAgIHNpemVfdCByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzID0gKHNpemVJbkJ5dGVzICsg
bV9wYWdlU2l6ZSAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHNpemVfdCBudW1iZXJP
ZlBhZ2VzID0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlczsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0
ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJPZlBhZ2VzKTsKKyAgICAgICAgaWYgKCFzdGFydCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG51bWJlck9m
UGFnZXMgPj0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyk7CisgICAgICAgIAorICAgICAgICBzaXpl
X3Qgcm91bmRlZFVwU2l6ZSA9IG51bWJlck9mUGFnZXMgPDwgbV9sb2dQYWdlU2l6ZTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChyb3VuZGVkVXBTaXplID49IHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgCisgICAgICAgIG1fYnl0ZXNSZXNlcnZlZCArPSByb3VuZGVkVXBTaXplOworICAgICAgICAK
KyAgICAgICAgaWYgKHJvdW5kZWRVcFNpemUgPiBzaXplSW5CeXRlcykgeworICAgICAgICAgICAg
dm9pZCogZnJlZVNwYWNlU3RhcnQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgc2l6
ZV90IGZyZWVTcGFjZVNpemUgPSByb3VuZGVkVXBTaXplIC0gc2l6ZUluQnl0ZXM7CisgICAgICAg
ICAgICBhZGRGcmVlU3BhY2UoZnJlZVNwYWNlU3RhcnQsIGZyZWVTcGFjZVNpemUpOworICAgICAg
ICB9CisgICAgfQorICAgIGluY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVz
KTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkICs9IHNpemVJbkJ5dGVzOworI2lmIEVOQUJMRShNRVRB
X0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKKyNlbmRpZgorICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6
ZUluQnl0ZXMpKTsKK30KKworTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9y
OjpjdXJyZW50U3RhdGlzdGljcygpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOworICAgIFN0YXRpc3RpY3MgcmVzdWx0OworICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9
IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVz
ZXJ2ZWQ7CisgICAgcmVzdWx0LmJ5dGVzQ29tbWl0dGVkID0gbV9ieXRlc0NvbW1pdHRlZDsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBNZXRhQWxsb2NhdG9yOjpmaW5kQW5kUmVtb3Zl
RnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBGcmVlU3BhY2VOb2RlKiBub2Rl
ID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChzaXplSW5C
eXRlcyk7CisgICAgCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBBU1NFUlQobm9kZS0+a2V5ID49IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgIAorICAgIHZvaWQqIHJlc3VsdDsKKyAgICAKKyAg
ICBpZiAobm9kZS0+a2V5ID09IHNpemVJbkJ5dGVzKSB7CisgICAgICAgIC8vIEVhc3kgY2FzZTog
cGVyZmVjdCBmaXQsIHNvIGp1c3QgcmVtb3ZlIHRoZSBub2RlIGVudGlyZWx5LgorICAgICAgICBy
ZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRB
ZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1ZSk7CisgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSkpOworICAgICAgICBmcmVlRnJlZVNw
YWNlTm9kZShub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUcnkgdG8gYmUgYSBnb29k
IGNpdGl6ZW4gYW5kIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBjaHVuayBvZiBtZW1vcnkKKyAg
ICAgICAgLy8gc3RyYWRkbGVzIGFzIGZldyBwYWdlcyBhcyBwb3NzaWJsZSwgYnV0IG9ubHkgaW5z
b2ZhciBhcyBkb2luZyBzbyB3aWxsCisgICAgICAgIC8vIG5vdCBpbmNyZWFzZSBmcmFnbWVudGF0
aW9uLiBUaGUgaW50dWl0aW9uIGlzIHRoYXQgbWluaW1pemluZworICAgICAgICAvLyBmcmFnbWVu
dGF0aW9uIGlzIGEgc3RyaWN0bHkgaGlnaGVyIHByaW9yaXR5IHRoYW4gbWluaW1pemluZyB0aGUg
bnVtYmVyCisgICAgICAgIC8vIG9mIGNvbW1pdHRlZCBwYWdlcywgc2luY2UgaW4gdGhlIGxvbmcg
cnVuLCBzbWFsbGVyIGZyYWdtZW50YXRpb24gbWVhbnMKKyAgICAgICAgLy8gZmV3ZXIgY29tbWl0
dGVkIHBhZ2VzIGFuZCBmZXdlciBmYWlsdXJlcyBpbiBnZW5lcmFsLgorICAgICAgICAKKyAgICAg
ICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2Rl
LT52YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSAx
KSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2VGb3JM
ZWZ0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUp
ICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3Qg
Zmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSBzaXplSW5CeXRlcykgPj4gbV9sb2dQYWdlU2l6
ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0UGFnZUZvckxlZnRBbGxvY2F0aW9uIC0gZmly
c3RQYWdlICsgMSA8PSBsYXN0UGFnZSAtIGZpcnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiArIDEp
IHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHJldHVy
bmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0LgorICAgICAgICAgICAg
cmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1ZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZh
bHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNl
U3RhcnRBZGRyZXNzTWFwLmFkZChub2RlLT52YWx1ZSwgbm9kZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBpbiB0aGUgcmlnaHQgc2l6ZSBvZiB0aGUgcmV0dXJu
ZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgbGVmdDsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9k
ZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUt
PmtleSAtPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3Bh
Y2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5hZGQocmVzdWx0LCBub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxl
YXNlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtRnJlZXMrKzsKKyNlbmRpZgorICAg
IG1fYnl0ZXNBbGxvY2F0ZWQgLT0gc2l6ZUluQnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0
LCBzaXplSW5CeXRlcyk7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3Bh
Y2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7CisgICAgbV9ieXRlc1Jlc2VydmVkICs9IHNpemVJbkJ5dGVzOwor
ICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6ZUluQnl0ZXMpOworfQorCitzaXplX3QgTWV0YUFs
bG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIHNpemVfdCByZXN1bHQgPSAwOworICAg
IGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maXJzdCgpOyBu
b2RlOyBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLnN1Y2Nlc3Nvcihub2RlKSkKKyAgICAgICAg
cmVzdWx0ICs9IG5vZGUtPmtleTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBDUkFT
SCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRk
RnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCog
ZW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3Bh
Y2VOb2RlKj46Oml0ZXJhdG9yIGxlZnROZWlnaGJvciA9IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01h
cC5maW5kKHN0YXJ0KTsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj46Oml0ZXJh
dG9yIHJpZ2h0TmVpZ2hib3IgPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5maW5kKGVuZCk7
CisgICAgCisgICAgaWYgKGxlZnROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAu
ZW5kKCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdp
dGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKKyAgICAgICAgLy8g
cmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgorICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+dmFsdWUpICsgbGVmdE5laWdoYm9yLT5zZWNvbmQt
PmtleSkgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIAorICAgICAgICBGcmVlU3Bh
Y2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAKKyAgICAg
ICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPnZhbHVlOworICAgICAgICBzaXplX3QgbGVm
dFNpemUgPSBsZWZ0Tm9kZS0+a2V5OworICAgICAgICB2b2lkKiBsZWZ0RW5kID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBs
ZWZ0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGVmdEVuZCA9PSBzdGFydCk7Cisg
ICAgICAgIAorICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKGxlZnROb2RlKTsKKyAg
ICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92ZShsZWZ0RW5kKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB0aGVyZSBpcyBhbHNvIHNvbWV0aGluZyB0byBjb2Fs
ZXNjZSB3aXRoIG9uIHRoZSByaWdodC4KKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9m
cmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEZyZWVpbmcg
c29tZXRoaW5nIGluIHRoZSBtaWRkbGUgb2YgZnJlZSBibG9ja3MuIENvYWxlc2NlIGJvdGggbGVm
dCBhbmQKKyAgICAgICAgICAgIC8vIHJpZ2h0LCB3aGlsc3QgcmVtb3ZpbmcgdGhlIHJpZ2h0IG5l
aWdoYm9yIGZyb20gdGhlIG1hcHMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChy
aWdodE5laWdoYm9yLT5zZWNvbmQtPnZhbHVlID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHRO
ZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVp
Z2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+
a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOworICAg
ICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNpemUgKyBzaXplSW5CeXRlcyArIHJpZ2h0U2l6
ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNp
emVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFk
ZHJlc3NNYXAucmVtb3ZlKHJpZ2h0RW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJl
ZUZyZWVTcGFjZU5vZGUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVm
dE5vZGUtPmtleSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChsZWZ0Tm9kZSk7CisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJpZ2h0RW5kLCBsZWZ0Tm9kZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnRO
b2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBsZWZ0
Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYW5ub3QgY29hbGVz
Y2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0Lgor
ICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFk
ZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9
IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSBy
aWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdo
dE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRT
aXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJpZ2h0U3RhcnQgPT0gZW5k
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyAr
IHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Zy
ZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgcmlnaHRO
b2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0
QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxlc2NlIHdpdGgsIHNvIGNyZWF0ZSBhIG5ldyBmcmVl
IHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNw
YWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBub2RlLT5rZXkgPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZhbHVl
ID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5p
bnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQo
c3RhcnQsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChl
bmQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6Omlu
Y3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQor
eworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
YWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBt
X2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7
IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwg
c2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpIHsKKyAgICAgICAg
ICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQocGFnZSwgMSk7CisgICAgICAgICAgICBtX2J5dGVz
Q29tbWl0dGVkICs9IG1fcGFnZVNpemU7CisgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFs
bG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6
ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJfdCBsYXN0
UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXplSW5CeXRl
cyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3QgcGFnZSA9
IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhhc2hNYXA8
dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFwLmZp
bmQocGFnZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFnZU9jY3VwYW5jeU1hcC5lbmQo
KSk7CisgICAgICAgIGlmICghLS0oaXRlci0+c2Vjb25kKSkgeworICAgICAgICAgICAgbV9wYWdl
T2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQg
LT0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2VJc0ZyZWUocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpyb3VuZFVwKHNpemVfdCBzaXplSW5CeXRlcykKK3sK
KyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fYWxsb2NhdGlv
bkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIChz
aXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKSAmIH4obV9hbGxvY2F0aW9uR3Jh
bnVsZSAtIDEpOworfQorCitNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlKiBNZXRhQWxsb2Nh
dG9yOjphbGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxv
Y0JhbGFuY2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmVlU3BhY2VOb2Rl
Kj4oZmFzdE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9kZSkpKTsKK30KKwordm9pZCBNZXRhQWxs
b2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKiBub2RlKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsKKyNlbmRpZgorICAgIGZhc3RGcmVlKG5v
ZGUpOworfQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIE1ldGFB
bGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBwcmludGYoIm51bSBhbGxvY2F0aW9ucyA9
ICV1LCBudW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxvY2F0aW9ucywgbV9udW1GcmVlcyk7Cit9
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9j
YXRvcl9oCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiSGFzaE1hcC5oIgor
I2luY2x1ZGUgIk1ldGFBbGxvY2F0b3JIYW5kbGUuaCIKKyNpbmNsdWRlICJOb25jb3B5YWJsZS5o
IgorI2luY2x1ZGUgIlBhZ2VCbG9jay5oIgorI2luY2x1ZGUgIlJlZEJsYWNrVHJlZS5oIgorI2lu
Y2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlICJUQ1Nw
aW5Mb2NrLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIEVOQUJMRV9NRVRBX0FMTE9D
QVRPUl9QUk9GSUxFIDAKKworY2xhc3MgTWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTWV0YUFsbG9jYXRvcik7CitwdWJsaWM6CisgICAgCisgICAgTWV0YUFsbG9jYXRv
cihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpOworICAgIAorICAgIHZpcnR1YWwgfk1ldGFBbGxv
Y2F0b3IoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTm9uLWF0b21pYyBtZXRob2Rz
IGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHNpemVfdCBieXRlc0FsbG9j
YXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNSZXNl
cnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQorICAgIHNpemVfdCBieXRlc0NvbW1p
dHRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNDb21taXR0ZWQ7IH0KKyAgICAKKyAgICAvLyBBdG9taWMg
bWV0aG9kIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHN0cnVjdCBTdGF0
aXN0aWNzIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkOworICAgICAgICBzaXplX3Qg
Ynl0ZXNSZXNlcnZlZDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkOworICAgIH07Cisg
ICAgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpOworCisgICAgLy8gQWRkIG1vcmUgZnJl
ZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQorICAgIC8v
IHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Igd2l0
aGluIGEKKyAgICAvLyBmaXhlZCBwb29sLgorICAgIHZvaWQgYWRkRnJlc2hGcmVlU3BhY2Uodm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBUaGlzIGlzIG1lYW50IG9u
bHkgZm9yIGltcGxlbWVudGluZyB0ZXN0cy4gTmV2ZXIgY2FsbCB0aGlzIGluIHJlbGVhc2UKKyAg
ICAvLyBidWlsZHMuCisgICAgc2l6ZV90IGRlYnVnRnJlZVNwYWNlU2l6ZSgpOworICAgIAorI2lm
IEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKTsK
KyNlbHNlCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoK
KyAgICAKKyAgICAvLyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFjZSwgYnV0IGRvbid0IGNvbW1p
dC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKKyAgICAvLyBwYWdlcyB0aGFuIHdlIGFza2VkLCBpbiB3
aGljaCBjYXNlIG51bVBhZ2VzIGlzIGNoYW5nZWQuCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0
ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpID0gMDsKKyAgICAKKyAgICAvLyBDb21taXQgYSBw
YWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSA9IDA7Cisg
ICAgCisgICAgLy8gVW5jb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdl
SXNGcmVlKHZvaWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBOT1RFOiBub25lIG9mIHRoZSBh
Ym92ZSBtZXRob2RzIGFyZSBjYWxsZWQgZHVyaW5nIGFsbG9jYXRvcgorICAgIC8vIGRlc3RydWN0
aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwor
ICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCisKK3ByaXZhdGU6
CisgICAgCisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CisgICAgCisgICAg
dHlwZWRlZiBSZWRCbGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJlZTsKKyAgICB0eXBlZGVmIFRy
ZWU6Ok5vZGUgRnJlZVNwYWNlTm9kZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBm
cm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyB0aGUgYWxsb2Nh
dGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKKyAgICAvLyBy
ZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBpbi11c2UuCisgICAgdm9pZCogZmluZEFuZFJlbW92ZUZy
ZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hl
biBtZW1vcnkgZnJvbSBhbiBhbGxvY2F0aW9uIGlzIGZyZWVkLgorICAgIHZvaWQgYWRkRnJlZVNw
YWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhZGRp
bmcgZnJlZSBzcGFjZTsgaXQKKyAgICAvLyBpcyBjYWxsZWQgZnJvbSBib3RoIGFkZEZyZWVTcGFj
ZUZyb21SZWxlYXNlZEhhbmRsZSBhbmQgZnJvbQorICAgIC8vIGFkZEZyZXNoRnJlZVNwYWNlLgor
ICAgIHZvaWQgYWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIAorICAgIC8vIE1hbmFnZW1lbnQgb2YgdXNlZCBzcGFjZS4KKyAgICAKKyAgICB2b2lkIGlu
Y3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsK
KyAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNp
emVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBVdGlsaXRpZXMuCisgICAgCisgICAgc2l6ZV90IHJv
dW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBGcmVlU3BhY2VOb2RlKiBhbGxv
Y0ZyZWVTcGFjZU5vZGUoKTsKKyAgICB2b2lkIGZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5v
ZGUqKTsKKyAgICAKKyAgICBzaXplX3QgbV9hbGxvY2F0aW9uR3JhbnVsZTsKKyAgICB1bnNpZ25l
ZCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlOworICAgIHNpemVfdCBtX3BhZ2VTaXplOworICAgIHVu
c2lnbmVkIG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgVHJlZSBtX2ZyZWVTcGFjZVNpemVNYXA7
CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD4gbV9wYWdlT2NjdXBh
bmN5TWFwOworICAgIAorICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBt
X2J5dGVzUmVzZXJ2ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAg
U3BpbkxvY2sgbV9sb2NrOworCisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX21hbGxvY0Jh
bGFuY2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAg
IHVuc2lnbmVkIG1fbnVtQWxsb2NhdGlvbnM7CisgICAgdW5zaWduZWQgbV9udW1GcmVlczsKKyNl
bmRpZgorfTsKKworaW5saW5lIE1ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKK3sKKyAg
ICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsg
bm9kZTspIHsKKyAgICAgICAgRnJlZVNwYWNlTm9kZSogbmV4dCA9IG1fZnJlZVNwYWNlU2l6ZU1h
cC5zdWNjZXNzb3Iobm9kZSk7CisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9k
ZSk7CisgICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOworICAgICAgICBub2RlID0gbmV4
dDsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVCghbV9tYWxsb2NCYWxhbmNlKTsK
KyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFdURl9NZXRhQWxs
b2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxs
b2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisjZGVmaW5lIFdURl9NZXRhQWxsb2Nh
dG9ySGFuZGxlX2gKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJSZWZDb3Vu
dGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBN
ZXRhQWxsb2NhdG9yOworCitjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlOiBwdWJsaWMgUmVmQ291
bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcykKKyAgICAgICAgOiBtX2FsbG9jYXRvcigwKQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQp
CisgICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFT
U0VSVChzdGFydCk7CisgICAgfQorICAgIAorcHVibGljOgorICAgIH5NZXRhQWxsb2NhdG9ySGFu
ZGxlKCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
Y3JlYXRlU2VsZk1hbmFnZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZShz
dGFydCwgc2l6ZUluQnl0ZXMpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCogc3RhcnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CisgICAgfQorICAgIAorICAgIHZvaWQqIGVuZCgp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9zaXplSW5CeXRlcyk7CisgICAgfQorICAg
ICAgICAKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2l6ZUluQnl0ZXM7CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIHNocmluayhzaXplX3QgbmV3
U2l6ZUluQnl0ZXMpOworICAgIAorICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICB7CisgICAgICAg
IHJldHVybiAhIW1fYWxsb2NhdG9yOworICAgIH0KKyAgICAgICAgCisgICAgTWV0YUFsbG9jYXRv
ciogYWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CisgICAg
ICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBNZXRhQWxsb2NhdG9yOworICAgIAorICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2Nh
dG9yOworICAgIHZvaWQqIG1fc3RhcnQ7CisgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Cit9Owor
Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1Ry
ZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJl
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1Ry
ZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEJhc2VkIG9uIFJl
ZC1CbGFjayB0cmVlIGltcGxlbWVudGF0aW9uIGJ5IEVtaW4gTWFydGluaWFuCisgKiAtIGh0dHA6
Ly93d3cubWl0LmVkdS9+ZW1pbi9zb3VyY2VfY29kZS9pbmRleC5odG1sICAgICAgICAgCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBSZWRCbGFja1RyZWVfaAorI2RlZmluZSBSZWRCbGFja1RyZWVfaAorCisjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBUaGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJlZSB3aXRoIHRoZSBmb2xsb3dpbmcg
cHJvcGVydGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Ygbm9kZXMgaW4gdGhlIHRyZWUgaXMg
ZW50aXJlbHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlvdSBhcmUgaW4gcG9zc2Vzc2lvbiBv
ZiBhIHBvaW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0ZQorLy8gICBpdCBmcm9tIHRoZSB0
cmVlLiBUaGUgdHJlZSB3aWxsIHN1YnNlcXVlbnRseSBubyBsb25nZXIgaGF2ZSBhCisvLyAgIHJl
ZmVyZW5jZSB0byB0aGlzIG5vZGUuCisvLyAtIFRoZSBrZXkgdHlwZSBtdXN0IGltcGxlbWVudCBv
cGVyYXRvcjwgYW5kID09LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBW
YWx1ZVR5cGU+CitjbGFzcyBSZWRCbGFja1RyZWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlZEJsYWNrVHJlZSk7CitwdWJsaWM6CisgICAgY2xhc3MgUmF3Tm9kZSB7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBSZWRCbGFja1RyZWU7CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGVz
ZSBtZXRob2RzIHNob3VsZCBwYWNrIHRoZSBwYXJlbnQgYW5kIHJlZCBpbnRvIGEgc2luZ2xlCisg
ICAgICAgIC8vIHdvcmQuIEJ1dCBkb2luZyBzbyBhcHBlYXJzIHRvIHJldmVhbCBhIGJ1ZyBpbiB0
aGUgY29tcGlsZXIuCisgICAgICAgIFJhd05vZGUqIHBhcmVudCgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgUmF3Tm9kZSogc2V0UGFyZW50KFJhd05vZGUqIG5ld1BhcmVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fcGFyZW50ID0gbmV3UGFyZW50OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBib29sIGlzUmVkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fcmVkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNldFJlZChib29s
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9yZWQgPSB2YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogbV9sZWZ0OworICAgICAgICBSYXdO
b2RlKiBtX3JpZ2h0OworICAgICAgICBSYXdOb2RlKiBtX3BhcmVudDsKKyAgICAgICAgYm9vbCBt
X3JlZDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIE5vZGU6IHB1YmxpYyBSYXdOb2RlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBWYWx1ZVR5cGUgdmFsdWU7
CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUoKQorICAgIHsKKyAgICAgICAgbV9uaWxT
ZW50aW5lbC5zZXRQYXJlbnQoJm1fbmlsU2VudGluZWwpOworICAgICAgICBtX25pbFNlbnRpbmVs
Lm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVsLm1fcmlnaHQg
PSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50aW5lbC5zZXRSZWQoZmFsc2UpOwor
ICAgICAgICAKKyAgICAgICAgbV9yb290LnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAg
ICAgIG1fcm9vdC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290Lm1fcmln
aHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290LnNldFJlZChmYWxzZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgaW5zZXJ0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpbnNl
cnRIZWxwKG5vZGUpOworCisgICAgICAgIFJhd05vZGUqIHggPSBub2RlOworICAgICAgICBSYXdO
b2RlKiB5OworICAgICAgICAKKyAgICAgICAgeC0+c2V0UmVkKHRydWUpOworICAgICAgICB3aGls
ZSAoeC0+cGFyZW50KCktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIGlmICh4LT5wYXJlbnQoKSA9
PSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAgIHkgPSB4
LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlz
UmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAg
ICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAg
ICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX3JpZ2h0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICB9
IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5ID0geC0+cGFyZW50KCkt
PnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlzUmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVu
dCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+
cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQo
KS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0
ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdCgpLT5tX2xlZnQtPnNldFJlZChmYWxzZSk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgICAg
ICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlbW92
ZShOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAgUmF3Tm9kZSog
eDsKKworICAgICAgICB5ID0gKHotPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpIHx8IHotPm1fcmln
aHQgPT0gbmlsU2VudGluZWwoKSkgPyB6IDogc3VjY2Vzc29ySW50ZXJuYWwoeik7CisgICAgICAg
IHggPSB5LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSA/IHktPm1fcmlnaHQgOiB5LT5tX2xlZnQ7
CisgICAgICAgIGlmIChyb290KCkgPT0geC0+c2V0UGFyZW50KHktPnBhcmVudCgpKSkKKyAgICAg
ICAgICAgIHJvb3QoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgICAgIHktPnBhcmVudCgp
LT5tX2xlZnQgPSB4OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHktPnBhcmVu
dCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSAhPSB6KSB7CisgICAg
ICAgICAgICBBU1NFUlQoeSAhPSBuaWxTZW50aW5lbCgpKTsKKworICAgICAgICAgICAgaWYgKCF5
LT5pc1JlZCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZpeFVwKHgpOworICAKKyAgICAgICAg
ICAgIHktPm1fbGVmdCA9IHotPm1fbGVmdDsKKyAgICAgICAgICAgIHktPm1fcmlnaHQgPSB6LT5t
X3JpZ2h0OworICAgICAgICAgICAgeS0+c2V0UGFyZW50KHotPnBhcmVudCgpKTsKKyAgICAgICAg
ICAgIHktPnNldFJlZCh6LT5pc1JlZCgpKTsKKyAgICAgICAgICAgIHotPm1fbGVmdC0+c2V0UGFy
ZW50KHotPm1fcmlnaHQtPnNldFBhcmVudCh5KSk7CisgICAgICAgICAgICBpZiAoeiA9PSB6LT5w
YXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgICAgIHotPnBhcmVudCgpLT5tX2xlZnQgPSB5
OyAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6LT5wYXJlbnQoKS0+bV9yaWdo
dCA9IHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpCisg
ICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAoeCk7CisgICAgICAgIH0KKyAgCisgICAgICAgIEFT
U0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5p
c1JlZCgpKTsKKworICAgICAgICByZXR1cm4gejsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmly
c3QoKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogbm9kZSA9IHJvb3QoKS0+bV9sZWZ0OworICAg
ICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+
bV9sZWZ0OworICAgICAgICAgICAgaWYgKG5leHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYXNOb2RlKG5vZGUpOworICAgICAgICAgICAgbm9kZSA9IG5leHQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogbGFzdCgpCisgICAgeworICAgICAgICBS
YXdOb2RlKiBub2RlID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIGlmIChub2RlID09IG5pbFNl
bnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5tX3JpZ2h0OworICAgICAgICAgICAg
aWYgKG5leHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2Rl
KG5vZGUpOworICAgICAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgTm9kZSogc3VjY2Vzc29yKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBSYXdOb2Rl
KiByZXN1bHQgPSBzdWNjZXNzb3JJbnRlcm5hbChub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBh
c05vZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcHJlZGVjZXNzb3IoTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHggPSBub2RlOworICAgICAgICBSYXdOb2Rl
KiB5OworCisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9ICh5ID0geC0+bV9sZWZ0KSkgewor
ICAgICAgICAgICAgd2hpbGUgKHktPm1fcmlnaHQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgICAgICB5ID0geS0+bV9yaWdodDsKKyAgICAgICAgICAgIHJldHVybiBhc05vZGUoeSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgd2hp
bGUgKHggPT0geS0+bV9sZWZ0KSB7IAorICAgICAgICAgICAgaWYgKHkgPT0gcm9vdCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICB5
ID0geS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gbmlsU2VudGluZWwo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYXNOb2RlKHkpOworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBmaW5kRXhhY3QoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsK
KyAgICAgICAgUmF3Tm9kZSogeCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBpZiAoeCA9PSBu
aWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxlICghKGFz
Tm9kZSh4KS0+a2V5ID09IGtleSkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoeCktPmtleSA+
IGtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICAgICAgaWYgKHggPT0gbmls
U2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYXNOb2RlKHgpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiByZW1vdmUoY29uc3Qg
S2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZmluZEV4YWN0KGtl
eSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZExlYXN0
R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIFJh
d05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3Tm9kZSogYmVzdCA9
IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtl
eSA8IGtleSkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9yaWdodDsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJlc3QgPSBjdXJyZW50OworICAgICAg
ICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3
Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNlbnRpbmVsKCkp
IHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChhc05vZGUo
Y3VycmVudCktPmtleSA8IGtleSkgeworICAgICAgICAgICAgICAgIGJlc3QgPSBjdXJyZW50Owor
ICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7CisgICAgICAgICAgICB9
IGVsc2UgCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fcmlnaHQ7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBpcyBhbiBPKG4pIG9wZXJhdGlvbi4KKyAgICBzaXplX3Qgc2l6ZSgpCisgICAgeworICAg
ICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChOb2RlKiBjdXJyZW50ID0gZmly
c3QoKTsgY3VycmVudDsgY3VycmVudCA9IHN1Y2Nlc3NvcihjdXJyZW50KSkKKyAgICAgICAgICAg
IHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBU
aGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJvb2wgaXNFbXB0eSgpCisgICAgeworICAg
ICAgICByZXR1cm4gcm9vdCgpLT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKTsKKyAgICB9CisgICAg
CisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpCisgICAgeworICAg
ICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGlu
ZWwoKS0+aXNSZWQoKSk7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKHJvb3QoKS0+
bV9sZWZ0KTsKKyAgICAgICAgQVNTRVJUKHJvb3QoKS0+bV9yaWdodCA9PSBuaWxTZW50aW5lbCgp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAgIHByaW50Zigi
VHJlZSBhdCAlcDpcbiIsIHRoaXMpOworICAgICAgICBkdW1wUmVjdXJzZShyb290KCktPm1fbGVm
dCk7CisgICAgICAgIHByaW50ZigiICAgcm9vdDogJXAsICVwLCAlcFxuIiwgcm9vdCgpLT5tX2xl
ZnQsIHJvb3QoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocm9vdCgpLT5wYXJl
bnRBbmRSZWQpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgbmlsOiAlcCwgJXAsICVwXG4iLCBuaWxT
ZW50aW5lbCgpLT5tX2xlZnQsIG5pbFNlbnRpbmVsKCktPm1fcmlnaHQsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KG5pbFNlbnRpbmVsKCktPnBhcmVudEFuZFJlZCkpOworICAgIH0KKyNlbmRpZgor
Citwcml2YXRlOgorICAgIHZvaWQgbGVmdFJvdGF0ZShSYXdOb2RlKiB4KQorICAgIHsKKyAgICAg
ICAgUmF3Tm9kZSogeTsKKworICAgICAgICB5ID0geC0+bV9yaWdodDsKKyAgICAgICAgeC0+bV9y
aWdodCA9IHktPm1fbGVmdDsKKworICAgICAgICBpZiAoeS0+bV9sZWZ0ICE9IG5pbFNlbnRpbmVs
KCkpCisgICAgICAgICAgICB5LT5tX2xlZnQtPnNldFBhcmVudCh4KTsKKyAgCisgICAgICAgIHkt
PnNldFBhcmVudCh4LT5wYXJlbnQoKSk7CisKKyAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCkt
Pm1fbGVmdCkKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX2xlZnQgPSB5OworICAgICAgICBl
bHNlCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9yaWdodCA9IHk7CisgICAgICAgIHktPm1f
bGVmdCA9IHg7CisgICAgICAgIHgtPnNldFBhcmVudCh5KTsKKworICAgICAgICBBU1NFUlQoIW5p
bFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJpZ2h0Um90YXRl
KFJhd05vZGUqIHkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4OworCisgICAgICAgIHggPSB5
LT5tX2xlZnQ7CisgICAgICAgIHktPm1fbGVmdCA9IHgtPm1fcmlnaHQ7CisKKyAgICAgICAgaWYg
KG5pbFNlbnRpbmVsKCkgIT0geC0+bV9yaWdodCkKKyAgICAgICAgICAgIHgtPm1fcmlnaHQtPnNl
dFBhcmVudCh5KTsKKworICAgICAgICB4LT5zZXRQYXJlbnQoeS0+cGFyZW50KCkpOworICAgICAg
ICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgeS0+cGFyZW50KCkt
Pm1fbGVmdCA9IHg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHktPnBhcmVudCgpLT5tX3Jp
Z2h0ID0geDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHk7CisgICAgICAgIHktPnNldFBhcmVudCh4
KTsKKworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGluc2VydEhlbHAoTm9kZSogeikKKyAgICB7CisgICAgICAgIFJhd05vZGUq
IHg7CisgICAgICAgIFJhd05vZGUqIHk7CisgIAorICAgICAgICB6LT5tX2xlZnQgPSB6LT5tX3Jp
Z2h0ID0gbmlsU2VudGluZWwoKTsKKyAgICAgICAgeSA9IHJvb3QoKTsKKyAgICAgICAgeCA9IHJv
b3QoKS0+bV9sZWZ0OworICAgICAgICB3aGlsZSAoeCAhPSBuaWxTZW50aW5lbCgpKSB7CisgICAg
ICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIGlmICh6LT5rZXkgPCBhc05vZGUoeCktPmtleSkK
KyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICB9CisgICAgICAgIHotPnNldFBhcmVu
dCh5KTsKKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpIHx8IHotPmtleSA8IGFzTm9kZSh5KS0+a2V5
KQorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gejsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
eS0+bV9yaWdodCA9IHo7CisKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgp
KTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogc3VjY2Vzc29ySW50ZXJuYWwoUmF3Tm9kZSog
eCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAgIAorICAgICAgICBpZiAobmls
U2VudGluZWwoKSAhPSAoeSA9IHgtPm1fcmlnaHQpKSB7CisgICAgICAgICAgICB3aGlsZSAoeS0+
bV9sZWZ0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgeSA9IHktPm1fbGVmdDsK
KyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB5ID0g
eC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlICh4ID09IHktPm1fcmlnaHQpIHsKKyAgICAgICAg
ICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOworICAgICAgICB9CisgICAg
ICAgIGlmICh5ID09IHJvb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBuaWxTZW50aW5lbCgpOwor
ICAgICAgICByZXR1cm4geTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmVGaXhVcChSYXdO
b2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogcmVhbFJvb3QgPSByb290KCktPm1fbGVm
dDsKKyAgICAgICAgUmF3Tm9kZSogdzsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICgheC0+aXNS
ZWQoKSAmJiByZWFsUm9vdCAhPSB4KSB7CisgICAgICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQo
KS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0Owor
ICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHct
PnNldFJlZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZCh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpICYmICF3LT5tX2xlZnQt
PmlzUmVkKCkpIHsgCisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmln
aHRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1f
cmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0
UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50
KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHctPm1fcmlnaHQtPnNldFJl
ZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUoeC0+cGFyZW50KCkpOwor
ICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVm
dDsKKyAgICAgICAgICAgICAgICBpZiAody0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICB3LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0
UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkgJiYgIXct
Pm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUp
OworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LT5tX2xlZnQtPmlzUmVkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHctPm1fcmlnaHQtPnNldFJlZChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0Um90YXRlKHcpOworICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVu
dCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
dy0+c2V0UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+
cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHctPm1fbGVmdC0+
c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50
KCkpOworICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHgtPnNldFJlZChmYWxzZSk7CisK
KyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIW5pbFNl
bnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShSYXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKG5vZGUtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bV9sZWZ0LT5p
c1JlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bV9yaWdodC0+aXNSZWQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uobm9kZS0+bV9sZWZ0KTsK
KyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcFJlY3Vyc2UoUmF3Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHByaW50ZigiICAgbm9kZTogJXBcbiIsIG5vZGUpOworICAgICAgICBwcmludGYoIiAgICAgIGNv
bG9yID0gJXNcbiIsIG5vZGUtPmlzUmVkKCkgPyAicmVkIiA6ICJibGFjayIpOworICAgICAgICBw
cmludGYoIiAgICAgIGxlZnQgID0gJXBcbiIsIG5vZGUtPm1fbGVmdCk7CisgICAgICAgIHByaW50
ZigiICAgICAgcmlnaHQgPSAlcFxuIiwgbm9kZS0+bV9yaWdodCk7CisgICAgICAgIGR1bXBSZWN1
cnNlKG5vZGUtPm1fbGVmdCk7CisgICAgICAgIGR1bXBSZWN1cnNlKG5vZGUtPm1fcmlnaHQpOwor
ICAgIH0KKyNlbmRpZgorICAgIAorICAgIFJhd05vZGUqIHJvb3QoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICZtX3Jvb3Q7CisgICAgfQorICAgIAorICAgIFJhd05vZGUqIG5pbFNlbnRpbmVsKCkK
KyAgICB7CisgICAgICAgIHJldHVybiAmbV9uaWxTZW50aW5lbDsKKyAgICB9CisgICAgCisgICAg
Tm9kZSogYXNOb2RlKFJhd05vZGUqIHJhd05vZGUpCisgICAgeworICAgICAgICBBU1NFUlQocmF3
Tm9kZSAhPSByb290KCkpOworICAgICAgICBBU1NFUlQocmF3Tm9kZSAhPSBuaWxTZW50aW5lbCgp
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGUqPihyYXdOb2RlKTsKKyAgICB9Cisg
ICAgCisgICAgUmF3Tm9kZSBtX3Jvb3Q7CisgICAgUmF3Tm9kZSBtX25pbFNlbnRpbmVsOworfTsK
KworfQorCisjZW5kaWYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZp
c2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvSGFzaFRhYmxl
LmNwcCBcCiAgICAgd3RmL01ENS5jcHAgXAogICAgIHd0Zi9NYWluVGhyZWFkLmNwcCBcCisgICAg
d3RmL01ldGFBbGxvY2F0b3IuY3BwIFwKICAgICB3dGYvTnVsbFB0ci5jcHAgXAogICAgIHd0Zi9P
U1JhbmRvbVNvdXJjZS5jcHAgXAogICAgIHd0Zi9xdC9NYWluVGhyZWFkUXQuY3BwIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiA5NDM1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDI5LDcgKzI0MjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGJhY2t0cmFjaygpOwogCiAgICAg
ICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxEYXRhLT5yZWdleEFsbG9jYXRvcik7Cisg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CiAgICAgICAg
IGppdE9iamVjdC5zZXQobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiAgICAgICAgIGppdE9i
amVjdC5zZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMSArNjUsMTEgQEAgcHVi
bGljOgogCiAgICAgaW50IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJl
c3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQotICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVybiBtX3JlZi5tX2NvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQorICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVybiBtX3Jl
Zi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEx
LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGV4
ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2aWR1YWwK
KyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJlc3QtZml0
LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAgICAgICBy
ZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYW5k
IHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5vZGVzIGRp
cmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZMVHJlZSBu
b3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAgICAgQ2hh
bmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVmZXJlbmNl
IGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDogQWRkZWQuCisKIDIwMTEtMDgtMjkgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnppcCBpbml0aWFs
aXphdGlvbiBsaXN0cyBhbmQgY29uc3RydWN0b3JzIGluIEpTQ2VsbCBoaWVyYXJjaHkgKDMvNykK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk0MzU3KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMzEgQEAKKzIwMTEtMDktMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZy
ZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1
Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2Nh
dG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9j
YXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2
aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVp
dGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlz
LgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1
c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBUZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcDogQWRkZWQuCisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQ
STo6UGFpcjo6ZmluZEV4YWN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OnJlbW92
ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0Rm91bmRBbmRSZW1v
dmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0RXF1YWwpOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAgICAg
IChUZXN0V2ViS2l0QVBJOjpQYWlyOjp0ZXN0RHJpdmVyKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OlRFU1RfRik6CisKIDIwMTEtMDktMDEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJFR1JFU1NJT04gKE5SV1QpOiBMZWFrcyBWaWV3ZXIgY2FuJ3QgbG9hZCBs
ZWFrcyBmcm9tIHRlc3QgcnVucyB0aGF0IHVzZWQgTlJXVApJbmRleDogVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDk0MzU3KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw4
IEBACiAJb2JqZWN0cyA9IHsKIAogLyogQmVnaW4gUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KKwkJ
MEZDNkM0Q0MxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDQjE0MTAyN0UwMDA1QjdG
MEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLzsgfTsKKwkJMEZDNkM0Q0YxNDEwMzRBRDAwNUI3RjBD
IC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3Bw
ICovOyB9OwogCQkxQTAyQzg0RjEyNUQ0QTg0MDBFM0Y0QkQgLyogRmluZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0RTEyNUQ0QTg0MDBF
M0Y0QkQgLyogRmluZC5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBm
aW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUE1
RkVGREQxMjcwRTJBMzAwMEUyOTIxIC8qIEV2YWx1YXRlSmF2YVNjcmlwdC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTVGRUZEQzEyNzBFMkEzMDAw
RTI5MjEgLyogRXZhbHVhdGVKYXZhU2NyaXB0LmNwcCAqLzsgfTsKQEAgLTEyNCw2ICsxMjYsOCBA
QAogLyogRW5kIFBCWENvcHlGaWxlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBQ
QlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KKwkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8q
IFJlZEJsYWNrVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBS
ZWRCbGFja1RyZWUuY3BwOyBwYXRoID0gV1RGL1JlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1ldGFBbGxvY2F0
b3IuY3BwOyBwYXRoID0gV1RGL01ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQTAyQzg0QjEyNUQ0QTVFMDBFM0Y0QkQgLyogZmluZC5odG1sICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dC5odG1sOyBwYXRoID0gZmluZC5odG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkxQTAyQzg0RTEyNUQ0QTg0MDBFM0Y0QkQgLyogRmluZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUE1RkVGREMxMjcwRTJBMzAwMEUyOTIxIC8qIEV2YWx1YXRlSmF2YVNjcmlwdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmFsdWF0ZUphdmFTY3JpcHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzU0LDYgKzM1OCw4IEBACiAJCUJD
OTA5NjQ2MTI1NTYxODkwMDA4Mzc1NiAvKiBXVEYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxs
b2NhdG9yLmNwcCAqLywKKwkJCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tU
cmVlLmNwcCAqLywKIAkJCQlBN0E5NjZEQTE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRo
bWV0aWNPcGVyYXRpb25zLmNwcCAqLywKIAkJCQlDMDEzNjNDNzEzQzM5OTczMDBFRjM5NjQgLyog
U3RyaW5nT3BlcmF0b3JzLmNwcCAqLywKIAkJCQlCQzkwOTY0QjEyNTU2MUJGMDAwODM3NTYgLyog
VmVjdG9yQmFzaWMuY3BwICovLApAQCAtNTYxLDYgKzU2Nyw4IEBACiAJCQkJQzA4NTg3RkMxM0ZF
QzM5QjAwMUVGNEU1IC8qIEluc3RhbmNlTWV0aG9kU3dpenpsZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQlDMDg1ODgwMDEzRkVDM0E2MDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RTd2l6emxlci5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTM3REM2NzhEMTQwRDdDNTAwMEFCQ0NEQiAvKiBET01SYW5n
ZU9mU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZDNkM0Q0MxNDEwMjdFMDAwNUI3RjBD
IC8qIFJlZEJsYWNrVHJlZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkM2QzRDRjE0MTAzNEFE
MDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E5NjZE
QjE0MEVDQ0M4MDA1RUY5QjQgLyogQ2hlY2tlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTWV0YUFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9N
ZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlIDxKYXZhU2NyaXB0Q29yZS9NZXRhQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvVmVjdG9yLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0
V2ViS2l0QVBJIHsKKworY2xhc3MgTWV0YUFsbG9jYXRvclRlc3Q6IHB1YmxpYyB0ZXN0aW5nOjpU
ZXN0IHsKK3B1YmxpYzoKKyAgICBlbnVtIFNhbml0eUNoZWNrTW9kZSB7IFJ1blNhbml0eUNoZWNr
LCBEb250UnVuU2FuaXR5Q2hlY2sgfTsKKyAgICAKKyAgICBlbnVtIEhlYXBHcm93dGhNb2RlIHsg
RG9udEdyb3dIZWFwLCBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZSwgRm9yVGVzdERlbWFuZEFs
bG9jRG9udENvYWxlc2NlIH07CisgICAgCisgICAgSGVhcEdyb3d0aE1vZGUgY3VycmVudEhlYXBH
cm93dGhNb2RlOworICAgIHNpemVfdCBhbGxvd0FsbG9jYXRlUGFnZXM7CisgICAgc2l6ZV90IHJl
cXVlc3RlZE51bVBhZ2VzOworCisgICAgY2xhc3MgU2ltcGxlVGVzdEFsbG9jYXRvcjogcHVibGlj
IE1ldGFBbGxvY2F0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgU2ltcGxlVGVzdEFsbG9jYXRv
cihNZXRhQWxsb2NhdG9yVGVzdCogcGFyZW50KQorICAgICAgICAgICAgOiBNZXRhQWxsb2NhdG9y
KDMyKQorICAgICAgICAgICAgLCBtX3BhcmVudChwYXJlbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGFkZEZyZXNoRnJlZVNwYWNlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICog
cGFnZVNpemUoKSksIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIH5TaW1wbGVUZXN0QWxsb2NhdG9yKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5hbGxvY2F0b3JEZXN0cm95
ZWQpOworICAgICAgICAgICAgbV9wYXJlbnQtPmFsbG9jYXRvckRlc3Ryb3llZCA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFj
ZShzaXplX3QmIG51bVBhZ2VzKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKG1fcGFy
ZW50LT5jdXJyZW50SGVhcEdyb3d0aE1vZGUpIHsKKyAgICAgICAgICAgIGNhc2UgRG9udEdyb3dI
ZWFwOgorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZToKKyAgICAgICAgICAgIGNhc2Ug
Rm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlOiB7CisgICAgICAgICAgICAgICAgRVhQRUNU
X1RSVUUobV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyk7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX1RSVUUobV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyA+PSBudW1QYWdlcyk7CisgICAg
ICAgICAgICAgICAgbV9wYXJlbnQtPnJlcXVlc3RlZE51bVBhZ2VzID0gbnVtUGFnZXM7CisgICAg
ICAgICAgICAgICAgbnVtUGFnZXMgPSBtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2VzOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHVuc2lnbmVkIG9mZnNldDsKKyAgICAgICAg
ICAgICAgICBpZiAobV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBGb3JUZXN0RGVt
YW5kQWxsb2NDb2FsZXNjZSkKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IDE7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgdm9pZCogcmVzdWx0ID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwICsgb2Zmc2V0KSAqIHBhZ2VT
aXplKCkpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fcGFyZW50LT5hbGxv
d0FsbG9jYXRlUGFnZXMgPSAwOworICAgICAgICAgICAgICAgIG1fcGFyZW50LT5jdXJyZW50SGVh
cEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZm9yIChzaXplX3QgY291bnRlciA9IDA7IGNvdW50ZXIgPCBudW1QYWdlcyArIG9mZnNl
dDsgKytjb3VudGVyKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyZW50LT5wYWdlTWFwLT5h
cHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVDb3Vu
dGVyID0gMDsgYnl0ZUNvdW50ZXIgPCBwYWdlU2l6ZSgpOyArK2J5dGVDb3VudGVyKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9wYXJlbnQtPm1lbW9yeU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9wYXJl
bnQtPmFkZGl0aW9uYWxQYWdlc0luSGVhcCArPSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIHRoZSBwYWdlIHNob3VsZCBiZSBib3RoIGZyZWUgYW5kIHVubWFwcGVk
LgorICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5wYWdlU3RhdGUocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkpOworICAgICAgICAgICAgZm9y
ICh1aW50cHRyX3QgYWRkcmVzcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKTsg
YWRkcmVzcyA8IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSArIHBhZ2VTaXplKCk7
ICsrYWRkcmVzcykKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9wYXJlbnQtPmJ5dGVT
dGF0ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihhZGRyZXNzKSkpOworICAgICAgICAgICAgbV9w
YXJlbnQtPnBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdl
U2l6ZSgpKSA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IHRoZSBwYWdlIHNob3VsZCBiZSBmcmVlIG9mIG9iamVjdHMgYXQgdGhpcyBwb2ludCwgYnV0IGl0
IHNob3VsZCBzdGlsbAorICAgICAgICAgICAgLy8gYmUgbWFwcGVkLgorICAgICAgICAgICAgRVhQ
RUNUX1RSVUUobV9wYXJlbnQtPnBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKCFtX3BhcmVudC0+Ynl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGFkZHJlc3MpKSk7CisgICAgICAgICAgICBtX3BhcmVudC0+cGFnZVN0YXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgTWV0YUFsbG9jYXRvclRl
c3QqIG1fcGFyZW50OworICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgYmFzZVBh
Z2UgPSAxOworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBkZWZhdWx0UGFnZXNJbkhlYXAgPSAx
MDA7CisgICAgCisgICAgdW5zaWduZWQgYWRkaXRpb25hbFBhZ2VzSW5IZWFwOworICAgIAorICAg
IFZlY3Rvcjxib29sLCAwPiogbWVtb3J5TWFwOworICAgIFZlY3Rvcjxib29sLCAwPiogcGFnZU1h
cDsKKyAgICBib29sIGFsbG9jYXRvckRlc3Ryb3llZDsKKyAgICAKKyAgICBTaW1wbGVUZXN0QWxs
b2NhdG9yKiBhbGxvY2F0b3I7CisgICAgCisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7
CisgICAgICAgIG1lbW9yeU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAgcGFn
ZU1hcCA9IG5ldyBWZWN0b3I8Ym9vbCwgMD4oKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhl
YXA7ICsrcGFnZSkgeworICAgICAgICAgICAgcGFnZU1hcC0+YXBwZW5kKGZhbHNlKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYnl0ZUluUGFnZSA9IDA7IGJ5dGVJblBhZ2UgPCBwYWdlU2l6
ZSgpOyArK2J5dGVJblBhZ2UpCisgICAgICAgICAgICAgICAgbWVtb3J5TWFwLT5hcHBlbmQoZmFs
c2UpOworICAgICAgICB9CisKKyAgICAgICAgYWxsb2NhdG9yRGVzdHJveWVkID0gZmFsc2U7Cisg
ICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBEb250R3Jvd0hlYXA7Cisg
ICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAgIGFkZGl0aW9uYWxQYWdlc0lu
SGVhcCA9IDA7CisgICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0gMDsKKyAgICAgICAgCisgICAg
ICAgIGFsbG9jYXRvciA9IG5ldyBTaW1wbGVUZXN0QWxsb2NhdG9yKHRoaXMpOworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgRVhQRUNUX1RS
VUUoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIEVYUEVD
VF9FUShhbGxvd0FsbG9jYXRlUGFnZXMsIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpOworICAgICAg
ICBFWFBFQ1RfRVEocmVxdWVzdGVkTnVtUGFnZXMsIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpOwor
ICAgICAgICAKKyAgICAgICAgLy8gbWVtb3J5IHNob3VsZCBiZSBmcmVlLgorICAgICAgICBmb3Ig
KHVuc2lnbmVkIHBhZ2UgPSBiYXNlUGFnZTsgcGFnZSA8IGJhc2VQYWdlICsgZGVmYXVsdFBhZ2Vz
SW5IZWFwOyArK3BhZ2UpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFwYWdlU3RhdGUocGFn
ZSkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlSW5QYWdlID0gMDsgYnl0ZUluUGFn
ZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJV
RSghYnl0ZVN0YXRlKHBhZ2UgKiBwYWdlU2l6ZSgpICsgYnl0ZUluUGFnZSkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGlzIGF1dG9tYXRpY2FsbHkgdGVzdHMgdGhh
dCB0aGUgYWxsb2NhdG9yIGRpZCBub3QgbGVhaworICAgICAgICAvLyBtZW1vcnksIHNvIGxvbmcg
YXMgdGhlc2UgdGVzdHMgYXJlIHJ1bm5pbmcgd2l0aCAhZGVmaW5lZChOREVCVUcpLgorICAgICAg
ICAvLyBTZWUgTWV0YUFsbG9jYXRvcjo6bV9tYWxsb2NCYWxhbmNlLgorICAgICAgICBkZWxldGUg
YWxsb2NhdG9yOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoYWxsb2NhdG9yRGVzdHJv
eWVkKTsKKyAgICAgICAgCisgICAgICAgIGRlbGV0ZSBtZW1vcnlNYXA7CisgICAgICAgIGRlbGV0
ZSBwYWdlTWFwOworICAgIH0KKyAgICAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBhbGxvY2F0
ZShzaXplX3Qgc2l6ZUluQnl0ZXMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBS
dW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRs
ZSA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpLmxlYWtSZWYoKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUoaGFuZGxlKTsKKyAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0
ZXMoKSwgc2l6ZUluQnl0ZXMpOworICAgICAgICAKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAgICAg
ICB1aW50cHRyX3QgZW5kQnl0ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJbkJ5dGVzOworICAgICAgICBm
b3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRC
eXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghYnl0ZVN0YXRl
KGN1cnJlbnRCeXRlKSk7CisgICAgICAgICAgICBieXRlU3RhdGUoY3VycmVudEJ5dGUpID0gdHJ1
ZTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9k
ZSA9PSBSdW5TYW5pdHlDaGVjaykKKyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAg
IAorICAgICAgICByZXR1cm4gaGFuZGxlOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZyZWUoTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2Rl
ID0gUnVuU2FuaXR5Q2hlY2spCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUpOwor
ICAgICAgICAKKyAgICAgICAgbm90aWZ5RnJlZShoYW5kbGUtPnN0YXJ0KCksIGhhbmRsZS0+c2l6
ZUluQnl0ZXMoKSk7CisgICAgICAgIGhhbmRsZS0+ZGVyZWYoKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChzYW5pdHlDaGVja01vZGUgPT0gUnVuU2FuaXR5Q2hlY2spCisgICAgICAgICAgICBzYW5p
dHlDaGVjaygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGlmeUZyZWUodm9pZCogc3RhcnQs
IHNpemVfdCBzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBzdGFydEJ5dGUg
PSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpOworICAgICAgICB1aW50cHRyX3Qg
ZW5kQnl0ZSA9IHN0YXJ0Qnl0ZSArIHNpemVJbkJ5dGVzOworICAgICAgICBmb3IgKHVpbnRwdHJf
dCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJl
bnRCeXRlKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShieXRlU3RhdGUoY3VycmVudEJ5dGUp
KTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICB2b2lkIHNhbml0eUNoZWNrKCkKKyAgICB7CisjaWZuZGVmIE5E
RUJVRworICAgICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5ieXRlc1Jlc2VydmVkKCkgLSBhbGxv
Y2F0b3ItPmJ5dGVzQWxsb2NhdGVkKCksIGFsbG9jYXRvci0+ZGVidWdGcmVlU3BhY2VTaXplKCkp
OworI2VuZGlmCisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSwg
KGRlZmF1bHRQYWdlc0luSGVhcCArIGFkZGl0aW9uYWxQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgp
KTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYnl0ZXNB
bGxvY2F0ZWQoKSk7CisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVk
KCksIGJ5dGVzQ29tbWl0dGVkKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbmZpcm0oTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0
Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpOworICAg
ICAgICBjb25maXJtKHN0YXJ0Qnl0ZSwgc3RhcnRCeXRlICsgaGFuZGxlLT5zaXplSW5CeXRlcygp
LCB0cnVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb25maXJtSGlnaFdhdGVybWFyayhNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICBjb25maXJtKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPmVuZCgpKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBh
Z2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNlKTsKKyAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgdm9pZCBjb25maXJtKHVpbnRwdHJfdCBzdGFydEJ5dGUsIHVpbnRwdHJfdCBlbmRCeXRl
LCBib29sIHZhbHVlKQorICAgIHsKKyAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudEJ5dGUg
PSBzdGFydEJ5dGU7IGN1cnJlbnRCeXRlIDwgZW5kQnl0ZTsgKytjdXJyZW50Qnl0ZSkgeworICAg
ICAgICAgICAgRVhQRUNUX0VRKGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSksIHZhbHVlKTsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYWdlU3RhdGUo
Y3VycmVudEJ5dGUgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF2YWx1
ZSkgeworICAgICAgICAgICAgdWludHB0cl90IGZpcnN0RnJlZVBhZ2UgPSAoc3RhcnRCeXRlICsg
cGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAgICAgIHVpbnRwdHJfdCBsYXN0
RnJlZVBhZ2UgPSAoZW5kQnl0ZSAtIHBhZ2VTaXplKCkpIC8gcGFnZVNpemUoKTsKKyAgICAgICAg
ICAgIGZvciAodWludHB0cl90IGN1cnJlbnRQYWdlID0gZmlyc3RGcmVlUGFnZTsgY3VycmVudFBh
Z2UgPD0gbGFzdEZyZWVQYWdlOyArK2N1cnJlbnRQYWdlKQorICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKCFwYWdlU3RhdGUoY3VycmVudFBhZ2UpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3Vs
dCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1lbW9yeU1h
cC0+c2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAobWVtb3J5TWFwLT5hdChpbmRl
eCkpCisgICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkKCkKKyAgICB7
CisgICAgICAgIHNpemVfdCByZXN1bHQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBwYWdlTWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlm
IChwYWdlTWFwLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgcmVzdWx0Kys7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHJlc3VsdCAqIHBhZ2VTaXplKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wmIGJ5dGVTdGF0ZSh2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJ5
dGVTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykpOworICAgIH0KKyAg
ICAKKyAgICBib29sJiBieXRlU3RhdGUodWludHB0cl90IGFkZHJlc3MpCisgICAgeworICAgICAg
ICB1aW50cHRyX3QgYnl0ZUluZGV4ID0gYWRkcmVzcyAtIGJhc2VQYWdlICogcGFnZVNpemUoKTsK
KyAgICAgICAgcmV0dXJuIG1lbW9yeU1hcC0+YXQoYnl0ZUluZGV4KTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCYgcGFnZVN0YXRlKHVpbnRwdHJfdCBwYWdlKQorICAgIHsKKyAgICAgICAgdWludHB0
cl90IHBhZ2VJbmRleCA9IHBhZ2UgLSBiYXNlUGFnZTsKKyAgICAgICAgcmV0dXJuIHBhZ2VNYXAt
PmF0KHBhZ2VJbmRleCk7CisgICAgfQorCisgICAgLy8gVGVzdCBoZWxwZXJzCisKKyAgICB2b2lk
IHRlc3RPbmVBbGxvYyhzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIC8vIFRlc3RzIHRoZSBt
b3N0IGJhc2ljIGJlaGF2aW9yOiBhbGxvY2F0ZSBvbmUgdGhpbmcgYW5kIGZyZWUgaXQuIEFsc28K
KyAgICAgICAgLy8gdmVyaWZpZXMgdGhhdCB0aGUgc3RhdGUgb2YgcGFnZXMgaXMgY29ycmVjdC4K
KyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRl
KHNpemUpOworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGhh
bmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2VTdGF0
ZShiYXNlUGFnZSkpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAg
ICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZSho
YW5kbGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc2l6ZV90
IGZpcnN0U2l6ZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgcmlnaHQtY29hbGVzY2lu
ZyBieSByZXBlYXRlZGx5IGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcuIFRoZSBpZGVhCisgICAgICAg
IC8vIGlzIHRoYXQgaWYgeW91IGFsbG9jYXRlIHNvbWV0aGluZyBhbmQgdGhlbiBmcmVlIGl0LCB0
aGVuIHRoZSBoZWFwIHNob3VsZAorICAgICAgICAvLyBsb29rIGlkZW50aWNhbCB0byB3aGF0IGl0
IHdhcyBiZWZvcmUgdGhlIGFsbG9jYXRpb24gZHVlIHRvIGEgcmlnaHQtY29hbGVzY2UKKyAgICAg
ICAgLy8gb2YgdGhlIGZyZWVkIGNodW5rIGFuZCB0aGUgYWxyZWFkeS1mcmVlIG1lbW9yeSwgYW5k
IHNvIHN1YnNlcXVlbnQKKyAgICAgICAgLy8gYWxsb2NhdGlvbnMgc2hvdWxkIGJlaGF2ZSB0aGUg
c2FtZSBhcyB0aGUgZmlyc3Qgb25lLgorICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGhh
bmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6
ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIGZpcnN0U2l6
ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGhhbmRsZSk7Cisg
ICAgICAgIAorICAgICAgICB2YV9saXN0IGFyZ0xpc3Q7CisgICAgICAgIHZhX3N0YXJ0KGFyZ0xp
c3QsIGZpcnN0U2l6ZSk7CisgICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0ZXMgPSB2YV9h
cmcoYXJnTGlzdCwgaW50KSkgeworICAgICAgICAgICAgaGFuZGxlID0gYWxsb2NhdGUoc2l6ZUlu
Qnl0ZXMpOworICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0
ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlKTsK
KyAgICAgICAgfQorICAgICAgICB2YV9lbmQoYXJnTGlzdCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShzaXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc2Vjb25k
U2l6ZSwgc2l6ZV90IHRoaXJkU2l6ZSkKKyAgICB7CisgICAgICAgIC8vIEFsbG9jYXRlcyBzb21l
dGhpbmcgb2Ygc2l6ZSBmaXJzdFNpemUsIHRoZW4gc29tZXRoaW5nIG9mIHNpemUgc2Vjb25kU2l6
ZSwgYW5kIHRoZW4KKyAgICAgICAgLy8gZnJlZXMgdGhlIGZpcnN0IGFsbG9jYXRpb24sIGFuZCB0
aGVuIHRoZSBzZWNvbmQsIGFuZCB0aGVuIGF0dGVtcHRzIHRvIGFsbG9jYXRlIHRoZQorICAgICAg
ICAvLyB0aGlyZCwgYXNzZXJ0aW5nIHRoYXQgaXQgYWxsb2NhdGVkIGF0IHRoZSBiYXNlIGFkZHJl
c3Mgb2YgdGhlIGhlYXAuCisgICAgICAgIAorICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0ZXN0
IG1heSBjYXVzZSByaWdodC1hbGxvY2F0aW9uLCB3aGljaCB3aWxsIGNhdXNlIHRoZSB0ZXN0IHRv
IGZhaWwuCisgICAgICAgIC8vIFRodXMgdGhlIGNvcnJlY3Qgd2F5IG9mIHJ1bm5pbmcgdGhpcyB0
ZXN0IGlzIHRvIGVuc3VyZSB0aGF0IHNlY29uZFNpemUgaXMKKyAgICAgICAgLy8gcGlja2VkIGlu
IHN1Y2ggYSB3YXkgdGhhdCBpdCBuZXZlciBzdHJhZGRsZXMgYSBwYWdlLgorICAgICAgICAKKyAg
ICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNp
emUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEo
Zmlyc3RIYW5kbGUtPnNpemVJbkJ5dGVzKCksIGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAg
ICBjb25maXJtKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmly
c3RIYW5kbGUpOworCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9
IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBm
aXJzdFNpemUpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c2l6ZUluQnl0ZXMo
KSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGZpcnN0SGFuZGxlKTsK
KyAgICAgICAgY29uZmlybShzZWNvbmRIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVy
bWFyayhzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7
CisgICAgICAgIAorICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7CisgICAgICAgIGNvbmZp
cm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKHNl
Y29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNp
emUoKSwgKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCksIGZhbHNl
KTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHRoaXJkSGFuZGxlID0g
YWxsb2NhdGUodGhpcmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKHRoaXJkSGFuZGxlLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHRoaXJkSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0aGlyZFNpemUpOwor
ICAgICAgICAKKyAgICAgICAgY29uZmlybSh0aGlyZEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUodGhpcmRI
YW5kbGUpOworICAgIH0KKyAgICAKKyAgICBlbnVtIFRlc3RGSUZPQWxsb2NNb2RlIHsgRmlsbEF0
RW5kLCBFYWdlckZpbGwgfTsKKyAgICB2b2lkIHRlc3RGSUZPQWxsb2MoVGVzdEZJRk9BbGxvY01v
ZGUgbW9kZSwgLi4uKQorICAgIHsKKyAgICAgICAgLy8gVGhpcyB3aWxsIHRlc3QgdGhlIHNpbXBs
ZSBjYXNlIG9mIG5vLWNvYWxlc2NlIChmcmVlaW5nIHRoZSBsZWZ0LW1vc3QKKyAgICAgICAgLy8g
Y2h1bmsgaW4gbWVtb3J5IHdoZW4gdGhlIGNodW5rIHRvIHRoZSByaWdodCBvZiBpdCBpcyBhbGxv
Y2F0ZWQpIGFuZAorICAgICAgICAvLyBmdWxseSBleGVyY2lzZSBsZWZ0LWNvYWxlc2NpbmcgYW5k
IGZ1bGwtY29hbGVzY2luZy4gSW4gRWFnZXJGaWxsCisgICAgICAgIC8vIG1vZGUsIHRoaXMgYWxz
byB0ZXN0cyBwZXJmZWN0LWZpdCBhbGxvY2F0aW9uIGFuZCBuby1jb2FsZXNjaW5nIGZyZWUuCisg
ICAgICAgIAorICAgICAgICBzaXplX3QgdG90YWxTaXplID0gMDsKKyAgICAgICAgCisgICAgICAg
IFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAg
ICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICAgICAgdmFfc3RhcnQoYXJnTGlzdCwgbW9kZSk7Cisg
ICAgICAgIHdoaWxlIChzaXplX3Qgc2l6ZUluQnl0ZXMgPSB2YV9hcmcoYXJnTGlzdCwgaW50KSkg
eworICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6
ZUluQnl0ZXMpOworICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplKSk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgICAg
IGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGhhbmRsZXMuYXBwZW5kKGhhbmRsZSk7CisgICAgICAgICAgICB0b3RhbFNpemUgKz0gc2l6ZUlu
Qnl0ZXM7CisgICAgICAgIH0KKyAgICAgICAgdmFfZW5kKGFyZ0xpc3QpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlcy5zaXplKCk7ICsr
aW5kZXgpCisgICAgICAgICAgICBjb25maXJtKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAg
CisgICAgICAgIHNpemVfdCBzaXplU29GYXIgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAg
c2l6ZVNvRmFyICs9IGhhbmRsZXMuYXQoaW5kZXgpLT5zaXplSW5CeXRlcygpOworICAgICAgICAg
ICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSk7CisgICAgICAgICAgICBpZiAobW9kZSA9PSBFYWdl
ckZpbGwpIHsKKyAgICAgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBh
bGxvY2F0ZShzaXplU29GYXIpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOwor
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVTb0Zh
cik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29uZmlybShiYXNlUGFnZSAq
IHBhZ2VTaXplKCksIGJhc2VQYWdlICogcGFnZVNpemUoKSArIHRvdGFsU2l6ZSwgdHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgaGFuZGxlcy5zaXplKCkgLSAxKQorICAgICAgICAg
ICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhoYW5kbGVzLmxhc3QoKSk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayho
YW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZyZWUoaGFuZGxlKTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFn
ZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgc2l6ZVNvRmFyLCBmYWxzZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChzaXplU29GYXIg
PT0gdG90YWxTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdl
U2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFs
c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1vZGUgPT0gRmlsbEF0RW5kKSB7CisgICAgICAg
ICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbEhhbmRsZSA9IGFsbG9jYXRlKHRvdGFsU2l6
ZSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoZmluYWxIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAgICAgRVhQ
RUNUX0VRKGZpbmFsSGFuZGxlLT5zaXplSW5CeXRlcygpLCB0b3RhbFNpemUpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBjb25maXJtKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgICAgIGNvbmZp
cm1IaWdoV2F0ZXJtYXJrKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZnJlZShmaW5hbEhhbmRsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0
RmlsbEhlYXAoc2l6ZV90IHNpemVJbkJ5dGVzLCBzaXplX3QgbnVtQWxsb2NhdGlvbnMpCisgICAg
eworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgbnVtQWxsb2NhdGlv
bnM7ICsraW5kZXgpCisgICAgICAgICAgICBoYW5kbGVzLmFwcGVuZChhbGxvY2F0ZShzaXplSW5C
eXRlcywgRG9udFJ1blNhbml0eUNoZWNrKSk7CisgICAgICAgIAorICAgICAgICBzYW5pdHlDaGVj
aygpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUo
c2l6ZUluQnl0ZXMpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsg
aW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxl
cy5hdChpbmRleCksIERvbnRSdW5TYW5pdHlDaGVjayk7CisgICAgICAgIAorICAgICAgICBzYW5p
dHlDaGVjaygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RSaWdodEFsbG9jYXRpb24oc2l6
ZV90IGZpcnN0TGVmdFNpemUsIHNpemVfdCBmaXJzdFJpZ2h0U2l6ZSwgc2l6ZV90IHNlY29uZExl
ZnRTaXplLCBzaXplX3Qgc2Vjb25kUmlnaHRTaXplKQorICAgIHsKKyAgICAgICAgTWV0YUFsbG9j
YXRvckhhbmRsZSogZmlyc3RMZWZ0ID0gYWxsb2NhdGUoZmlyc3RMZWZ0U2l6ZSk7CisgICAgICAg
IEVYUEVDVF9FUShmaXJzdExlZnQtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogZmlyc3RSaWdodCA9IGFsbG9jYXRlKGZpcnN0UmlnaHRTaXplKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGZpcnN0UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBh
Z2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kTGVmdCA9IGFsbG9jYXRlKHNlY29uZExlZnRT
aXplKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZExlZnQtPnN0YXJ0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIGZpcnN0TGVmdC0+c2l6ZUluQnl0
ZXMoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kUmln
aHQgPSBhbGxvY2F0ZShzZWNvbmRSaWdodFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25k
UmlnaHQtPmVuZCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0
UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSAtIGZpcnN0UmlnaHQtPnNpemVJbkJ5dGVzKCkpKTsK
KyAgICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RMZWZ0KTsKKyAgICAgICAgZnJlZShmaXJzdFJp
Z2h0KTsKKyAgICAgICAgZnJlZShzZWNvbmRMZWZ0KTsKKyAgICAgICAgZnJlZShzZWNvbmRSaWdo
dCk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9j
YXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEo
ZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNp
emUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdGVzdEJlc3RGaXQoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHN0ZXAsIHVuc2lnbmVk
IG51bVNsb3RzLCBTYW5pdHlDaGVja01vZGUgc2FuaXR5Q2hlY2tNb2RlKQorICAgIHsKKyAgICAg
ICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzVG9GcmVlOworICAgICAg
ICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXM7CisgICAgICAgIFZlY3Rv
cjx2b2lkKiwgMD4gbG9jYXRpb25zOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemUgPSBm
aXJzdFNpemU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNs
b3RzOyArK2luZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiB0b0ZyZWUg
PSBhbGxvY2F0ZShzaXplLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgaWYgKCFoYW5k
bGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHdoaWxlICh0b0ZyZWUtPnN0YXJ0KCkg
IT0gaGFuZGxlcy5sYXN0KCktPmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZXNU
b0ZyZWUuYXBwZW5kKHRvRnJlZSk7CisgICAgICAgICAgICAgICAgICAgIHRvRnJlZSA9IGFsbG9j
YXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmcmFnZ2VyID0gYWxsb2Nh
dGUoMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoZnJhZ2dlci0+
c3RhcnQoKSwgdG9GcmVlLT5lbmQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxvY2F0
aW9ucy5hcHBlbmQodG9GcmVlLT5zdGFydCgpKTsKKworICAgICAgICAgICAgaGFuZGxlc1RvRnJl
ZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGZyYWdnZXIpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzaXplICs9IHN0ZXA7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChsb2NhdGlvbnMuc2l6ZSgpID09IG51bVNsb3RzKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXNUb0Zy
ZWUuc2l6ZSgpOyArK2luZGV4KQorICAgICAgICAgICAgZnJlZShoYW5kbGVzVG9GcmVlLmF0KGlu
ZGV4KSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgCisgICAgICAgIHNpemUgPSBmaXJzdFNp
emU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG51bVNsb3RzOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBiZXN0Rml0ID0gYWxs
b2NhdGUoc2l6ZSAtIDMyLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShiZXN0Rml0LT5zdGFydCgpID09IGxvY2F0aW9ucy5hdChpbmRleCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJlc3RGaXQtPmVuZCgpID09IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihsb2NhdGlvbnMuYXQoaW5k
ZXgpKSArIHNpemUpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogc21hbGwgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAg
IGlmIChiZXN0Rml0LT5zdGFydCgpID09IGxvY2F0aW9ucy5hdChpbmRleCkpCisgICAgICAgICAg
ICAgICAgRVhQRUNUX0VRKHNtYWxsLT5zdGFydCgpLCBiZXN0Rml0LT5lbmQoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKHNtYWxsLT5lbmQoKSwgYmVzdEZp
dC0+c3RhcnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZyZWUoYmVzdEZpdCwgc2Fu
aXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIGZyZWUoc21hbGwsIHNhbml0eUNoZWNrTW9kZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7
ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpLCBzYW5pdHlDaGVj
a01vZGUpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBh
bGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpLCBzYW5pdHlDaGVja01vZGUp
OworICAgICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5h
bCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0U2hyaW5rKHNp
emVfdCBmaXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplKQorICAgIHsKKyAgICAgICAgLy8gQWxs
b2NhdGUgdGhlIHRoaW5nIHRoYXQgd2lsbCBiZSBzaHJ1bmsKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFNocmluayBpdCwgYW5kIG1ha2Ugc3VyZSB0aGF0IG91ciBzdGF0ZSByZWZsZWN0cyB0aGUg
c2hyaW5rYWdlLgorICAgICAgICBub3RpZnlGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihoYW5kbGUtPnN0YXJ0KCkpICsgc2Vjb25kU2l6ZSks
IGZpcnN0U2l6ZSAtIHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgaGFuZGxlLT5zaHJp
bmsoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCks
IHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBoZWFwIGlzIG5vdCBlbXB0eS4KKyAgICAgICAg
RVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFn
ZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgLy8gQWxsb2NhdGUgdGhlIHJlbWFpbmRlciBv
ZiB0aGUgaGVhcC4KKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogcmVtYWluZGVyID0gYWxs
b2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSAtIHNlY29uZFNpemUpOworICAg
ICAgICBFWFBFQ1RfRVEocmVtYWluZGVyLT5zdGFydCgpLCBoYW5kbGUtPmVuZCgpKTsKKyAgICAg
ICAgCisgICAgICAgIGZyZWUocmVtYWluZGVyKTsKKyAgICAgICAgZnJlZShoYW5kbGUpOworICAg
ICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgZW1wdHkgYW5kIGZpbmlz
aCB1cC4KKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmluYWwgPSBhbGxvY2F0ZShkZWZh
dWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpbmFsLT5z
dGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgCisgICAgICAgIGZyZWUoZmluYWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRl
c3REZW1hbmRBbGxvY0NvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdlcywg
c2l6ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9y
LT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkp
OworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBh
bGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9j
YXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2Nh
dG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUo
KSkpOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERl
bWFuZEFsbG9jQ29hbGVzY2U7CisgICAgICAgIGFsbG93QWxsb2NhdGVQYWdlcyA9IG51bVBhZ2Vz
OworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxlID0g
YWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRShjdXJy
ZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAgRVhQRUNUX0VRKGFs
bG93QWxsb2NhdGVQYWdlcywgc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSk7CisgICAgICAgIEVYUEVD
VF9FUShyZXF1ZXN0ZWROdW1QYWdlcywgKHNlY29uZFNpemUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBw
YWdlU2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNlY29uZEhhbmRsZS0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oKGJhc2VQYWdlICsgZGVmYXVsdFBhZ2VzSW5IZWFwKSAqIHBh
Z2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0gMDsKKyAg
ICAgICAgCisgICAgICAgIGZyZWUoZmlyc3RIYW5kbGUpOworICAgICAgICBmcmVlKHNlY29uZEhh
bmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhl
YXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVz
dERlbWFuZEFsbG9jRG9udENvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBudW1QYWdl
cywgc2l6ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAgICBmcmVlKGFsbG9jYXRlKGZpcnN0
U2l6ZSkpOworICAgICAgICBmcmVlKGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXpl
KTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKHNl
Y29uZFNpemUpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRl
ZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisg
ICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IEZvclRlc3REZW1hbmRBbGxvY0RvbnRDb2Fs
ZXNjZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgIAor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNv
bmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKGN1cnJlbnRIZWFwR3Jvd3Ro
TW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBFWFBFQ1RfRVEoYWxsb3dBbGxvY2F0ZVBh
Z2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKKyAgICAgICAgRVhQRUNUX0VRKHJlcXVlc3Rl
ZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0
PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgCisgICAgICAgIHJlcXVlc3RlZE51bVBhZ2VzID0gMDsKKyAgICAgICAgCisg
ICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhl
YXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisKKyAgICAgICAgZnJlZShmaXJzdEhhbmRs
ZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVD
VF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdl
cykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmaXJzdEhhbmRsZSA9IGFsbG9j
YXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNp
emUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEo
c2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2Ug
KyBkZWZhdWx0UGFnZXNJbkhlYXAgKyAxKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgZnJlZShm
aXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICB9Cit9OworCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEVtcHR5KQoreworICAgIC8vIFRlc3RzIHRoYXQgY3Jl
YXRpbmcgYW5kIGRlc3Ryb3lpbmcgYW4gYWxsb2NhdG9yIHdvcmtzLgorfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIEFsbG9jWmVybykgICAgCit7CisgICAgLy8gVGVzdHMgdGhhdCBhbGxv
Y2F0aW5nIGEgemVyby1sZW5ndGggYmxvY2sgcmV0dXJucyAwIGFuZAorICAgIC8vIGRvZXMgbm90
IGNoYW5nZSBhbnl0aGluZyBpbiBtZW1vcnkuCisgICAgCisgICAgQVNTRVJUKCFhbGxvY2F0b3It
PmFsbG9jYXRlKDApKTsKKyAgICAKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFs
bG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgIEVYUEVDVF9FUShm
aW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6
ZSgpKSk7CisgICAgZnJlZShmaW5hbCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
T25lQWxsb2MzMikKK3sKKyAgICB0ZXN0T25lQWxsb2MoMzIpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIE9uZUFsbG9jNjQpCit7CisgICAgdGVzdE9uZUFsbG9jKDY0KTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBPbmVBbGxvY1R3b1BhZ2VzKQoreworICAgIHRlc3RP
bmVBbGxvYyhwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
UmVwZWF0QWxsb2NGcmVlMzJUd2ljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAz
MiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlMzJU
aGVuNjQpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgNjQsIDApOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTY0VGhlbjMyKQoreworICAgIHRl
c3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlR3aWNlVGhlbjY0KQoreworICAgIHRlc3RSZXBlYXRBbGxv
Y0ZyZWUoMzIsIDMyLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVw
ZWF0QWxsb2NGcmVlMzJUaGVuNjRUd2ljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMy
LCA2NCwgNjQsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9j
RnJlZTY0VGhlbjMyVGhlbjY0KQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoNjQsIDMyLCA2
NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlMzJU
aHJpY2UpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDMyLCAwKTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42NFRoZW4zMikK
K3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTY0VGhlbjMyVHdpY2UpCit7CisgICAg
dGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWVUd29QYWdlc1RoZW4zMikKK3sKKyAgICB0ZXN0UmVw
ZWF0QWxsb2NGcmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAqIDIpLCAzMiwgMCk7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlMzJUaGVuVHdvUGFn
ZXMpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgc3RhdGljX2Nhc3Q8aW50PihwYWdl
U2l6ZSgpICogMiksIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFs
bG9jRnJlZVBhZ2VUaGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZShzdGF0
aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgKiAy
KSwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlVHdv
UGFnZXNUaGVuUGFnZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKHN0YXRpY19jYXN0PGlu
dD4ocGFnZVNpemUoKSAqIDIpLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkpLCAwKTsKK30K
KworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2UzMlBsdXMzMlRo
ZW4xMjgpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgMzIsIDEyOCk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlMzJQbHVzNjRUaGVu
MTI4KQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoMzIsIDY0LCAxMjgpOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTY0UGx1czMyVGhlbjEy
OCkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDY0LCAzMiwgMTI4KTsKK30KKworVEVT
VF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2UzMlBsdXNQYWdlTGVzczMy
VGhlblBhZ2UpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgcGFnZVNpemUoKSAt
IDMyLCBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVG
dWxsQ29hbGVzY2UzMlBsdXNQYWdlTGVzczMyVGhlblR3b1BhZ2VzKQoreworICAgIHRlc3RTaW1w
bGVGdWxsQ29hbGVzY2UoMzIsIHBhZ2VTaXplKCkgLSAzMiwgcGFnZVNpemUoKSAqIDIpOworfQor
CitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZVBhZ2VQbHVzMzJU
aGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZShwYWdlU2l6ZSgpLCAz
MiwgcGFnZVNpemUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBs
ZUZ1bGxDb2FsZXNjZVBhZ2VQbHVzUGFnZVRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0U2ltcGxl
RnVsbENvYWxlc2NlKHBhZ2VTaXplKCksIHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgKiAyKTsKK30K
KworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NGaWxsQXRFbmQzMlR3aWNlKQor
eworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDApOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMyVGhyaWNlKQoreworICAgIHRl
c3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFB
bGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NGaWxsQXRFbmQzMkZvdXJUaW1lcykKK3sKKyAgICB0ZXN0
RklGT0FsbG9jKEZpbGxBdEVuZCwgMzIsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZFBhZ2VMZXNzMzJUaGVuMzJUaGVuUGFn
ZUxlc3M2NFRoZW42NCkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEZpbGxBdEVuZCwgc3RhdGljX2Nh
c3Q8aW50PihwYWdlU2l6ZSgpIC0gMzIpLCAzMiwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgp
IC0gNjQpLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9j
RWFnZXJGaWxsMzJUd2ljZSkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMy
LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZpbGwz
MlRocmljZSkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAzMiwgMCk7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRWFnZXJGaWxsMzJGb3Vy
VGltZXMpCit7CisgICAgdGVzdEZJRk9BbGxvYyhFYWdlckZpbGwsIDMyLCAzMiwgMzIsIDMyLCAw
KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZpbGxQYWdl
TGVzczMyVGhlbjMyVGhlblBhZ2VMZXNzNjRUaGVuNjQpCit7CisgICAgdGVzdEZJRk9BbGxvYyhF
YWdlckZpbGwsIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAtIDMyKSwgMzIsIHN0YXRpY19j
YXN0PGludD4ocGFnZVNpemUoKSAtIDY0KSwgNjQsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIEZpbGxIZWFwMzIpCit7CisgICAgdGVzdEZpbGxIZWFwKDMyLCBkZWZhdWx0UGFn
ZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC8gMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRl
c3QsIEZpbGxIZWFwUGFnZSkKK3sKKyAgICB0ZXN0RmlsbEhlYXAocGFnZVNpemUoKSwgZGVmYXVs
dFBhZ2VzSW5IZWFwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGaWxsSGVhcFR3
b1BhZ2VzKQoreworICAgIHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgpICogMiwgZGVmYXVsdFBhZ2Vz
SW5IZWFwIC8gMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmlnaHRBbGxvY2F0
aW9uMzJUaGVuUGFnZVRoZW4zMlRoZW5QYWdlKQoreworICAgIHRlc3RSaWdodEFsbG9jYXRpb24o
MzIsIHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBSaWdodEFsbG9jYXRpb25RdWFydGVyUGFnZVRoZW5QYWdlVGhlblF1YXJ0ZXJQYWdl
VGhlblBhZ2UpCit7CisgICAgdGVzdFJpZ2h0QWxsb2NhdGlvbihwYWdlU2l6ZSgpIC8gNCwgcGFn
ZVNpemUoKSwgcGFnZVNpemUoKSAvIDQsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NFRocmljZSkKK3sKKyAgICB0ZXN0QmVzdEZpdCg2
NCwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0
LCBCZXN0Rml0NjRQbHVzNjRUZW5UaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg2NCwgNjQsIDEw
LCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJl
c3RGaXQ2NFBsdXM2NEh1bmRyZWRUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg2NCwgNjQsIDEw
MCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBC
ZXN0Rml0OTZQbHVzNjRUaHJpY2UpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDY0LCAzLCBSdW5T
YW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1
czY0VGVuVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDY0LCAxMCwgRG9udFJ1blNhbml0
eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzNjRI
dW5kcmVkVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDY0LCAxMDAsIERvbnRSdW5TYW5p
dHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1czk2
VGhyaWNlKQoreworICAgIHRlc3RCZXN0Rml0KDk2LCA5NiwgMywgUnVuU2FuaXR5Q2hlY2spOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM5NlRlblRpbWVzKQor
eworICAgIHRlc3RCZXN0Rml0KDk2LCA5NiwgMTAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1czk2RWlnaHR5VGltZXMpCit7
CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCA4MCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbms2NFRvMzIpCit7CisgICAgdGVzdFNocmlu
ayg2NCwgMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1BhZ2VUbzMy
KQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSwgMzIpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIFNocmlua1BhZ2VUb1BhZ2VMZXNzMzIpCit7CisgICAgdGVzdFNocmluayhw
YWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC0gMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRl
c3QsIFNocmlua1R3b1BhZ2VzVG8zMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAy
LCAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUb1Bh
Z2VQbHVzMzIpCit7CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgpICogMiwgcGFnZVNpemUoKSAr
IDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtUd29QYWdlc1RvUGFn
ZSkKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpKTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtUd29QYWdlc1RvUGFnZUxlc3MzMikKK3sK
KyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpIC0gMzIpOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2VzVG9Ud29QYWdlc0xlc3MzMikK
K3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpICogMiAtIDMyKTsK
K30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1hbmRBbGxvY0NvYWxlc2NlUGFnZVRo
ZW5Eb3VibGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHBhZ2VTaXplKCks
IGRlZmF1bHRQYWdlc0luSGVhcCwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRGVtYW5kQWxsb2NDb2FsZXNjZVBhZ2VUaGVu
VHJpcGxlSGVhcCkKK3sKKyAgICB0ZXN0RGVtYW5kQWxsb2NDb2FsZXNjZShwYWdlU2l6ZSgpLCBk
ZWZhdWx0UGFnZXNJbkhlYXAgKiAyLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsK
K30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1hbmRBbGxvY0RvbnRDb2FsZXNjZVBh
Z2VUaGVuRG91YmxlSGVhcCkKK3sKKyAgICB0ZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2UocGFn
ZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6
ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUuY3BwCShyZXZpc2lvbiAwKQor
KysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9SZWRC
bGFja1RyZWUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WZWN0b3IuaD4KKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBSZWRC
bGFja1RyZWVUZXN0OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgdW5zaWdu
ZWQgbV9jb3VudGVyOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAg
ICAgICBtX2NvdW50ZXIgPSAwOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRv
d24oKQorICAgIHsKKyAgICB9CisgICAgCisgICAgc3RydWN0IFBhaXIgeworICAgICAgICBjaGFy
IGtleTsKKyAgICAgICAgdW5zaWduZWQgdmFsdWU7CisgICAgICAgIAorICAgICAgICBQYWlyKCkg
eyB9CisgICAgICAgIAorICAgICAgICBQYWlyKGNoYXIga2V5LCB1bnNpZ25lZCB2YWx1ZSkKKyAg
ICAgICAgICAgIDoga2V5KGtleSkKKyAgICAgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBh
aXImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4ga2V5ID09IG90
aGVyLmtleTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvcjwoY29u
c3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrZXkg
PCBvdGhlci5rZXk7CisgICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgVmVjdG9y
PFBhaXIsIDE2PiBQYWlyVmVjdG9yOworICAgIAorICAgIFBhaXJWZWN0b3IgZmluZEV4YWN0KFBh
aXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIFBhaXJWZWN0b3Ig
cmVzdWx0OworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8
IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0
KGluZGV4KS5rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYXNWZWN0
b3IuYXQoaW5kZXgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KHJl
c3VsdC5iZWdpbigpLCByZXN1bHQuZW5kKCkpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmUoUGFpclZlY3RvciYgYXNWZWN0b3Is
IHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIGFzVmVjdG9yLmF0KGluZGV4KSA9IGFzVmVj
dG9yLmxhc3QoKTsKKyAgICAgICAgYXNWZWN0b3IucmVtb3ZlTGFzdCgpOworICAgIH0KKyAgICAK
KyAgICBQYWlyVmVjdG9yIGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChQYWlyVmVjdG9yJiBh
c1ZlY3RvciwgY2hhciBrZXkpCisgICAgeworICAgICAgICBjaGFyIGJlc3RLZXkgPSAwOyAvLyBh
c3NpZ25tZW50IHRvIG1ha2UgZ2NjIGhhcHB5CisgICAgICAgIGJvb2wgZm91bmRLZXkgPSBmYWxz
ZTsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhc1Zl
Y3Rvci5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRl
eCkua2V5ID49IGtleSkgeworICAgICAgICAgICAgICAgIGlmIChhc1ZlY3Rvci5hdChpbmRleCku
a2V5IDwgYmVzdEtleSB8fCAhZm91bmRLZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRL
ZXkgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBiZXN0S2V5ID0gYXNWZWN0b3IuYXQoaW5k
ZXgpLmtleTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIFBhaXJWZWN0b3IgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgaWYg
KCFmb3VuZEtleSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gZmluZEV4YWN0KGFzVmVjdG9yLCBiZXN0S2V5KTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBhc3NlcnRGb3VuZEFuZFJlbW92ZShQYWlyVmVjdG9yJiBhc1ZlY3RvciwgY2hhciBrZXks
IHVuc2lnbmVkIHZhbHVlKQorICAgIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsK
KyAgICAgICAgICAgIHNpemVfdCBmb3VuZEluZGV4ID0gMDsgLy8gbWFrZSBjb21waWxlcnMgaGFw
cHkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgICAgIGlmIChhc1Zl
Y3Rvci5hdChpbmRleCkua2V5ID09IGtleQorICAgICAgICAgICAgICAgICAgICAmJiBhc1ZlY3Rv
ci5hdChpbmRleCkudmFsdWUgPT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNU
X1RSVUUoIWZvdW5kKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRJbmRleCA9IGluZGV4Owor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoZm91bmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZW1vdmUo
YXNWZWN0b3IsIGZvdW5kSW5kZXgpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGRlbGliZXJh
dGVseSBwYXNzZXMgYSBjb3B5IG9mIHRoZSB2ZWN0b3IuCisgICAgdm9pZCBhc3NlcnRFcXVhbChS
ZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+JiBhc1RyZWUsIFBhaXJWZWN0b3IgYXNWZWN0b3Ip
CisgICAgeworICAgICAgICBmb3IgKFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUq
IGN1cnJlbnQgPSBhc1RyZWUuZmlyc3QoKTsgY3VycmVudDsgY3VycmVudCA9IGFzVHJlZS5zdWNj
ZXNzb3IoY3VycmVudCkpCisgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3Rv
ciwgY3VycmVudC0+a2V5LCBjdXJyZW50LT52YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
YXNzZXJ0U2FtZVZhbHVlc0ZvcktleShSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+JiBhc1Ry
ZWUsIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUsIFBhaXJWZWN0b3Ig
Zm91bmRWYWx1ZXMsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIHByZXZOb2RlID0gbm9kZTsK
KyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBub2RlID0gcHJldk5vZGU7CisgICAg
ICAgICAgICAgICAgcHJldk5vZGUgPSBhc1RyZWUucHJlZGVjZXNzb3IocHJldk5vZGUpOworICAg
ICAgICAgICAgfSB3aGlsZSAocHJldk5vZGUgJiYgcHJldk5vZGUtPmtleSA9PSBrZXkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+a2V5LCBrZXkpOworICAgICAg
ICAgICAgRVhQRUNUX1RSVUUoIXByZXZOb2RlIHx8IHByZXZOb2RlLT5rZXkgPCBrZXkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgYXNzZXJ0Rm91bmRB
bmRSZW1vdmUoZm91bmRWYWx1ZXMsIG5vZGUtPmtleSwgbm9kZS0+dmFsdWUpOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG5vZGUgPSBhc1RyZWUuc3VjY2Vzc29yKG5vZGUpOwor
ICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFub2RlIHx8IG5vZGUtPmtleSA+PSBrZXkpOwor
ICAgICAgICAgICAgfSB3aGlsZSAobm9kZSAmJiBub2RlLT5rZXkgPT0ga2V5KTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoZm91bmRWYWx1ZXMuaXNFbXB0eSgpKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGhlIGNvbnRyb2wgc3RyaW5nIGlzIGEgbnVsbC10ZXJtaW5h
dGVkIGxpc3Qgb2YgY29tbWFuZHMuIEVhY2gKKyAgICAvLyBjb21tYW5kIGlzIHR3byBjaGFyYWN0
ZXJzLCB3aXRoIHRoZSBmaXJzdCBpZGVudGlmeWluZyB0aGUgb3BlcmF0aW9uCisgICAgLy8gYW5k
IHRoZSBzZWNvbmQgZ2l2aW5nIGEga2V5LiBUaGUgY29tbWFuZHMgYXJlOgorICAgIC8vICAreCAg
QWRkIHgKKyAgICAvLyAgKnggIEZpbmQgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgKKyAgICAvLyAg
QHggIEZpbmQgYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSB0aGUgc21hbGxlc3Qga2V5IHRoYXQgaXMg
Z3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHgKKyAgICAvLyAgIXggIFJlbW92ZSBhbGwgZWxlbWVu
dHMgZXF1YWwgdG8geAorICAgIHZvaWQgdGVzdERyaXZlcihjb25zdCBjaGFyKiBjb250cm9sU3Ry
aW5nKQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciBhc1ZlY3RvcjsKKyAgICAgICAgUmVkQmxh
Y2tUcmVlPGNoYXIsIHVuc2lnbmVkPiBhc1RyZWU7CisgICAgICAgIAorICAgICAgICBmb3IgKGNv
bnN0IGNoYXIqIGN1cnJlbnQgPSBjb250cm9sU3RyaW5nOyAqY3VycmVudDsgY3VycmVudCArPSAy
KSB7CisgICAgICAgICAgICBjaGFyIGNvbW1hbmQgPSBjdXJyZW50WzBdOworICAgICAgICAgICAg
Y2hhciBrZXkgPSBjdXJyZW50WzFdOworICAgICAgICAgICAgdW5zaWduZWQgdmFsdWUgPSArK21f
Y291bnRlcjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKGNvbW1hbmQpOworICAg
ICAgICAgICAgQVNTRVJUKGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAo
Y29tbWFuZCkgeworICAgICAgICAgICAgY2FzZSAnKyc6IHsKKyAgICAgICAgICAgICAgICBSZWRC
bGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gbmV3IFJlZEJsYWNrVHJlZTxj
aGFyLCB1bnNpZ25lZD46Ok5vZGU7CisgICAgICAgICAgICAgICAgbm9kZS0+a2V5ID0ga2V5Owor
ICAgICAgICAgICAgICAgIG5vZGUtPnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgYXNU
cmVlLmluc2VydChub2RlKTsKKyAgICAgICAgICAgICAgICBhc1ZlY3Rvci5hcHBlbmQoUGFpcihr
ZXksIHZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlICcqJzogeworICAgICAgICAgICAgICAgIFJl
ZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBhc1RyZWUuZmluZEV4YWN0
KGtleSk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpCisgICAgICAgICAgICAgICAgICAgIEVY
UEVDVF9FUShub2RlLT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVl
c0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KSwga2V5KTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSAn
QCc6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2Rl
KiBub2RlID0gYXNUcmVlLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChrZXkpOworICAgICAg
ICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5v
ZGUtPmtleSA+PSBrZXkpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRTYW1lVmFsdWVzRm9y
S2V5KGFzVHJlZSwgbm9kZSwgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9yLCBr
ZXkpLCBub2RlLT5rZXkpOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoYXNWZWN0b3IsIGtl
eSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyEnOiB7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVu
c2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5yZW1vdmUoa2V5KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9FUShub2Rl
LT5rZXksIGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92
ZShhc1ZlY3Rvciwgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShmaW5kRXhhY3Qo
YXNWZWN0b3IsIGtleSkuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorI2lmbmRlZiBOREVC
VUcKKyAgICAgICAgICAgIGFzVHJlZS5jaGVja0NvbnNpc3RlbmN5KCk7CisjZW5kaWYKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShhc1RyZWUuc2l6ZSgpLCBhc1ZlY3Rvci5zaXplKCkpOworICAgICAg
ICAgICAgYXNzZXJ0RXF1YWwoYXNUcmVlLCBhc1ZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9Cit9
OworCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgRW1wdHkpCit7CisgICAgdGVzdERyaXZlcigi
Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBFbXB0eUdldEZpbmRSZW1vdmUpCit7
CisgICAgdGVzdERyaXZlcigiKnhAeSF6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0
LCBTaW5nbGVBZGQpCit7CisgICAgdGVzdERyaXZlcigiK2EiKTsKK30KKworVEVTVF9GKFJlZEJs
YWNrVHJlZVRlc3QsIFNpbmdsZUFkZEdldEZpbmRSZW1vdmVOb3RGb3VuZCkKK3sKKyAgICB0ZXN0
RHJpdmVyKCIrYSp4QHkheiIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgU2luZ2xl
QWRkR2V0RmluZFJlbW92ZSkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSphQGEhYSIpOworfQorCitU
RVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgVHdvQWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSti
Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBUaHJlZUFkZHMpCit7CisgICAgdGVz
dERyaXZlcigiK2ErYitjIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBGb3VyQWRk
cykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MrZCIpOworfQorCitURVNUX0YoUmVkQmxhY2tU
cmVlVGVzdCwgTG90c09mUmVwZWF0QWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MrZCth
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJl
ZVRlc3QsIExvdHNPZlJlcGVhdEFuZFVuaXF1ZUFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYSti
K2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24r
bytwK3ErcitzK3QrdSt2K3greSt6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBM
b3RzT2ZSZXBlYXRBbmRVbmlxdWVBZGRzQW5kR2V0c0FuZFJlbW92ZXMpCit7CisgICAgdGVzdERy
aXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStq
K2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6KmEqYipjKmQqZSpmKmcqaCppKmoqaypsKm0q
bipvKnAqcSpyKnMqdCp1KnYqdyp4KnkqeiFhIWIhYyFkIWUhZiFnIWghaSFqIWshbCFtIW4hbyFw
IXEhciFzIXQhdSF2IXcheCF5IXoiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFNp
bXBsZUJlc3RGaXRTZWFyY2gpCit7CisgICAgdGVzdERyaXZlcigiK2QrZCttK3dAZEBtQHdAYUBn
QHEiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEJpZ2dlckJlc3RGaXRTZWFyY2gp
Cit7CisgICAgdGVzdERyaXZlcigiK2QrZCtkK2QrZCtkK2QrZCtkK2QrZitmK2YrZitmK2YrZito
K2graStqK2srbCttK28rcCtxK3IrekBhQGJAY0BkQGVAZkBnQGhAaUBqQGtAbEBtQG5Ab0BwQHFA
ckBzQHRAdUB2QHdAeEB5QHoiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106079</attachid>
            <date>2011-09-01 18:35:00 -0700</date>
            <delta_ts>2011-09-08 23:06:12 -0700</delta_ts>
            <desc>the patch - added forgotten files</desc>
            <filename>metaalloc_patch_26.diff</filename>
            <type>text/plain</type>
            <size>227323</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAyIEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
Ojpyb3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VO
b2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5
dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZl
ZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpSYXdOb2RlOjpzZXRSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmZpcnN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3Qp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVh
bCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVx
dWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0
SGVscCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZHVtcFJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJv
b3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjphc05vZGUpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDktMDEgIERhbmllbCBCYXRlcyAgPGRiYXRlc0By
aW0uY29tPgogCiAgICAgICAgIFFOWCBHQ0MgZGlzdHJpYnV0aW9uIGRvZXNuJ3Qgc3VwcG9ydCB2
YXNwcmludGYoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUxMCw2ICs1MTAsOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTm9uQ29weWluZ1NvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9O
b25jb3B5YWJsZS5oIFwKQEAgLTU0Miw2ICs1NDUsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyU2VlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1JlZEJsYWNrVHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50
ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNp
b24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDMsNiArNDAzLDExIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRF
UEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFp
blRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVl
RnJlZVNwYWNlTm9kZUVQTlNfMTJSZWRCbGFja1RyZWVJbVB2RTROb2RlRQorX19aTjNXVEYxM01l
dGFBbGxvY2F0b3IxOGRlYnVnRnJlZVNwYWNlU2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRv
cjhhbGxvY2F0ZUVtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckMyRW0KIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzcsNiArNDQyLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNiw2ICs1MjMsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzYxLDYgKzc2MSwxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTkwMSw2ICs5MTMsMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDExICs1MSwxNSBAQAogCQkwRjI5NDc5QzEyNkU2OThDMDBCM0FCRjUgLyogRGVj
aW1hbE51bWJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjI5NDc5QjEyNkU2OThDMDBCM0FCRjUgLyogRGVjaW1hbE51bWJlci5jcHAgKi87IH07
CiAJCTBGNzcwMDkwMTQwMkZERTQwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzcwMDhFMTQwMkZERDYw
MDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjc3MDA5MjE0MDJGRjNDMDA3OEVCMzkgLyogU2FtcGxp
bmdDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovOyB9
OworCQkwRjk2M0IyNzEzRjc1M0JCMDAwMkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyNjEzRjc1Mzk5MDAw
MkQ5QjIgLyogUmVkQmxhY2tUcmVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovOyBzZXR0aW5ncyA9
IHtDT01QSUxFUl9GTEFHUyA9ICItZm5vLXN0cmljdC1hbGlhc2luZyI7IH07IH07CisJCTBGOTYz
QjJEMTNGODU0MDIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyog
TWV0YUFsbG9jYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0Iy
RTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTYzQjM4MTNGQzZGRTkwMDAy
RDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkM4MTUx
NTE0MDUxMTlCMDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBW
VGFibGVTcGVjdHJ1bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTBGQzgxNTE2MTQwNTExQjUwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM4MTUxMjE0
MDUxMTg2MDBDRkE2MDMgLyogVlRhYmxlU3BlY3RydW0uY3BwICovOyB9OwogCQkwRkM4MTUwQTE0
MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVy
U3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi87
IH07CisJCTBGQzgxNTE1MTQwNTExOUIwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MTQxNDA1MTE4
RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi87IH07
CiAJCTE0MDAwNjc3MTJBNkY3ODMwMDY0RDEyMyAvKiBPU0FsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQwMDA2NzYxMkE2Rjc4MzAwNjRE
MTIzIC8qIE9TQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMTQwMDA2OTMxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9z
aXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQw
MDA2OTIxMkE2RjlFMTAwNjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovOyB9OwogCQkx
NDA1NjZDNDEwN0VDMjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwODk0RDUwRkFGQkEyRDAw
MDAxODY1IC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCAqLzsgfTsKQEAgLTU1NCw3ICs1NTgsNyBA
QAogCQlCQzE4QzQ2QjBFMTZGNUNEMDBCMzQ0NjAgLyogU3ltYm9sVGFibGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0QTM5NkE2MENEMjkzMzEwMEI1
QjRGRiAvKiBTeW1ib2xUYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCUJDMThDNDZDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1BhY2tlZENhY2hl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1REE0Nzk2
NTBDRkJDRjU2MDA5MzI4QTAgLyogVENQYWNrZWRDYWNoZS5oICovOyB9OwogCQlCQzE4QzQ2RDBF
MTZGNUNEMDBCMzQ0NjAgLyogVENQYWdlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RTA4RTgwQTE3MDAyQ0JFRTcgLyogVENQYWdlTWFw
LmggKi87IH07Ci0JCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgw
QTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovOyB9OworCQlCQzE4QzQ2RTBFMTZGNUNEMDBC
MzQ0NjAgLyogVENTcGluTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjU0MUJENkYwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3BpbkxvY2suaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzE4QzQ2RjBF
MTZGNUNEMDBCMzQ0NjAgLyogVENTeXN0ZW1BbGxvYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU0MUJENzEwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lz
dGVtQWxsb2MuaCAqLzsgfTsKIAkJQkMxOEM0NzAwRTE2RjVDRDAwQjM0NDYwIC8qIFRocmVhZGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFFRTc5
MjIwRDZDOTVDRDAwRkVBM0JBIC8qIFRocmVhZGluZy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDcxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBU
aHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRTFCN0M4QkQwREEzQTMzNjAwNzRCMERDIC8qIFRocmVhZFNwZWNpZmljLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTczOSwxMSArNzQz
LDE1IEBACiAJCTBGMjk0NzlCMTI2RTY5OEMwMEIzQUJGNSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERlY2ltYWxOdW1iZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA4RTE0MDJGREQ2MDA3OEVCMzkgLyog
U2FtcGxpbmdDb3VudGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNhbXBs
aW5nQ291bnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjc3MDA5MTE0MDJG
RjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNhbXBsaW5nQ291bnRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkQmxhY2tUcmVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
TWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGOTYzQjJF
MTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTIxNDA1MTE4NjAwQ0ZBNjAzIC8qIFZUYWJs
ZVNwZWN0cnVtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZUYWJs
ZVNwZWN0cnVtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEZDODE1MTQxNDA1
MTE4RDAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZUYWJsZVNwZWN0cnVtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzgxNTA4MTQwNDNCQ0EwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdyaXRlQmFycmllclN1cHBvcnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwOTE0MDQzQkQyMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXcml0ZUJhcnJpZXJTdXBwb3J0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
QzgxNTEyMTQwNTExODYwMENGQTYwMyAvKiBWVGFibGVTcGVjdHJ1bS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGQzgxNTE0MTQwNTExOEQwMENGQTYwMyAvKiBWVGFibGVTcGVj
dHJ1bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWVGFibGVTcGVjdHJ1bS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDAwMDY3NjEyQTZGNzgzMDA2NEQxMjMg
LyogT1NBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT1NBbGxv
Y2F0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQwMDA2OTIxMkE2RjlFMTAw
NjREMTIzIC8qIE9TQWxsb2NhdG9yUG9zaXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gT1NBbGxvY2F0b3JQb3NpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE2NzIsNiArMTY4MCwxMCBAQAogCQk2NTE2MkVGMTA4RTZBMjFD
MDA3NTU2Q0QgLyogd3RmICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5o
ICovLAorCQkJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAq
LywKKwkJCQkwRjk2M0IyQTEzRjg1M0JEMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oICovLAor
CQkJCTBGOTYzQjI2MTNGNzUzOTkwMDAyRDlCMiAvKiBSZWRCbGFja1RyZWUuaCAqLywKIAkJCQkw
NkQzNThBMDBEQUFEOUM0MDAzQjE3NEUgLyogbWFjICovLAogCQkJCTg2NTY1NzNFMTE1QkUzNTIw
MDI5MUY0MCAvKiB0ZXh0ICovLAogCQkJCUUxOTU2NzhEMDlFN0NGMTIwMEI4OUQxMyAvKiB1bmlj
b2RlICovLApAQCAtMjI1NCw2ICsyMjY2LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2
NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5
ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNF
NjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJl
ZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAz
IC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1
MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yNTQ2LDcgKzI1NjIsNiBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50
YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QzBFMTZGNUNEMDBCMzQ0NjAg
LyogVENQYWNrZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkQwRTE2RjVDRDAw
QjM0NDYwIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NkUwRTE2RjVD
RDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZGMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzFF
REVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjNCRDMxRUQxMjY3MzU3NzAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yODY2LDYgKzI4ODEsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNC
MkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDODE1MTYxNDA1MTFCNTAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzcwMDkyMTQwMkZGM0MwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHJldmlzaW9uIDk0MzU3
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikK
IAorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgogI2luY2x1ZGUgInN0ZGludC5oIgogI2luY2x1
ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmg+CkBAIC0x
MjgsMTkgKzEyOSwyMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBBc3Nl
bWJsZXJMYWJlbChtX2luZGV4KTsKICAgICAgICAgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFi
bGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRv
cikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxl
Q29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlm
ICghbV9pbmRleCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgdm9p
ZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhnbG9iYWxEYXRhLCBtX2luZGV4KTsKKyAgICAg
ICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBnbG9iYWxEYXRh
LmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CiAKICAg
ICAgICAgICAgIGlmICghcmVzdWx0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAg
ICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBtX2luZGV4
KTsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShyZXN1bHQt
PnN0YXJ0KCksIHJlc3VsdC0+c2l6ZUluQnl0ZXMoKSk7CiAKLSAgICAgICAgICAgIHJldHVybiBt
ZW1jcHkocmVzdWx0LCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICBtZW1jcHkocmVz
dWx0LT5zdGFydCgpLCBtX2J1ZmZlciwgbV9pbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBy
ZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIGxhYmVsKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDIyICs2OSw4IEBAIGNsYXNzIExpbmtCdWZmZXIgewogI2VuZGlmCiAKIHB1YmxpYzoK
LSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIq
IG1hc20sIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sKQotICAgICAg
ICA6IG1fZXhlY3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKDAp
Ci0gICAgICAgICwgbV9jb2RlKDApCi0gICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKLSAgICAg
ICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAs
IG1fY29tcGxldGVkKGZhbHNlKQotI2VuZGlmCi0gICAgewotICAgICAgICBsaW5rQ29kZSgpOwot
ICAgIH0KLQotICAgIExpbmtCdWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fz
c2VtYmxlciogbWFzbSwgRXhlY3V0YWJsZUFsbG9jYXRvciYgYWxsb2NhdG9yKQotICAgICAgICA6
IG1fZXhlY3V0YWJsZVBvb2woYWxsb2NhdG9yLnBvb2xGb3JTaXplKGdsb2JhbERhdGEsIG1hc20t
Pm1fYXNzZW1ibGVyLmNvZGVTaXplKCkpKQotICAgICAgICAsIG1fc2l6ZSgwKQorICAgIExpbmtC
dWZmZXIoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlciogbWFzbSkKKyAg
ICAgICAgOiBtX3NpemUoMCkKICAgICAgICAgLCBtX2NvZGUoMCkKICAgICAgICAgLCBtX2Fzc2Vt
YmxlcihtYXNtKQogICAgICAgICAsIG1fZ2xvYmFsRGF0YSgmZ2xvYmFsRGF0YSkKQEAgLTE4NSwx
NCArMTcxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigp
OwogCi0gICAgICAgIHJldHVybiBDb2RlUmVmKG1fY29kZSwgbV9leGVjdXRhYmxlUG9vbCwgbV9z
aXplKTsKLSAgICB9Ci0KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBmaW5hbGl6ZUNvZGVBZGRlbmR1
bSgpCi0gICAgewotICAgICAgICBwZXJmb3JtRmluYWxpemF0aW9uKCk7Ci0KLSAgICAgICAgcmV0
dXJuIENvZGVMb2NhdGlvbkxhYmVsKGNvZGUoKSk7CisgICAgICAgIHJldHVybiBDb2RlUmVmKG1f
ZXhlY3V0YWJsZU1lbW9yeSk7CiAgICAgfQogCiAgICAgQ29kZVB0ciB0cmFtcG9saW5lQXQoTGFi
ZWwgbGFiZWwpCkBAIC0yMzIsMTQgKzIxMSwxOSBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAg
QVNTRVJUKCFtX2NvZGUpOwogI2lmICFFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCi0gICAgICAg
IG1fY29kZSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9i
YWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVt
b3J5ID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmV4ZWN1dGFibGVDb3B5KCptX2dsb2JhbERh
dGEpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9jb2RlID0gbV9leGVjdXRhYmxlTWVtb3J5LT5zdGFydCgpOwogICAgICAg
ICBtX3NpemUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKICAgICAgICAg
QVNTRVJUKG1fY29kZSk7CiAjZWxzZQogICAgICAgICBzaXplX3QgaW5pdGlhbFNpemUgPSBtX2Fz
c2VtYmxlci0+bV9hc3NlbWJsZXIuY29kZVNpemUoKTsKLSAgICAgICAgbV9jb2RlID0gKHVpbnQ4
X3QqKW1fZXhlY3V0YWJsZVBvb2wtPmFsbG9jKCptX2dsb2JhbERhdGEsIGluaXRpYWxTaXplKTsK
LSAgICAgICAgaWYgKCFtX2NvZGUpCisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fZ2xv
YmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5hbGxvY2F0ZSgqbV9nbG9iYWxEYXRhLCBpbml0
aWFsU2l6ZSk7CisgICAgICAgIGlmICghbV9leGVjdXRhYmxlTWVtb3J5KQogICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX2NvZGUgPSAodWludDhfdCopbV9leGVjdXRhYmxlTWVtb3J5LT5z
dGFydCgpOworICAgICAgICBBU1NFUlQobV9jb2RlKTsKICAgICAgICAgRXhlY3V0YWJsZUFsbG9j
YXRvcjo6bWFrZVdyaXRhYmxlKG1fY29kZSwgaW5pdGlhbFNpemUpOwogICAgICAgICB1aW50OF90
KiBpbkRhdGEgPSAodWludDhfdCopbV9hc3NlbWJsZXItPnVubGlua2VkQ29kZSgpOwogICAgICAg
ICB1aW50OF90KiBvdXREYXRhID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4obV9jb2RlKTsK
QEAgLTI5Nyw3ICsyODEsNyBAQCBwcml2YXRlOgogCiAgICAgICAgIGp1bXBzVG9MaW5rLmNsZWFy
KCk7CiAgICAgICAgIG1fc2l6ZSA9IHdyaXRlUHRyICsgaW5pdGlhbFNpemUgLSByZWFkUHRyOwot
ICAgICAgICBtX2V4ZWN1dGFibGVQb29sLT50cnlTaHJpbmsobV9jb2RlLCBpbml0aWFsU2l6ZSwg
bV9zaXplKTsKKyAgICAgICAgbV9leGVjdXRhYmxlTWVtb3J5LT5zaHJpbmsobV9zaXplKTsKIAog
I2lmIERVTVBfTElOS19TVEFUSVNUSUNTCiAgICAgICAgIGR1bXBMaW5rU3RhdGlzdGljcyhtX2Nv
ZGUsIGluaXRpYWxTaXplLCBtX3NpemUpOwpAQCAtMzY2LDcgKzM1MCw3IEBAIHByaXZhdGU6CiAg
ICAgfQogI2VuZGlmCiAgICAgCi0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFi
bGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFibGVN
ZW1vcnk7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICAgICB2b2lkKiBtX2NvZGU7CiAgICAgTWFjcm9B
c3NlbWJsZXIqIG1fYXNzZW1ibGVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSwyMiArMTk5LDU5IEBAIHByaXZhdGU6CiAvLyBw
b2ludGVyIHRvIHRoZSBjb2RlLCBhbmQgYSByZWYgcG9pbnRlciB0byB0aGUgcG9vbCBmcm9tIHdp
dGhpbiB3aGljaCBpdAogLy8gd2FzIGFsbG9jYXRlZC4KIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiB7Citwcml2YXRlOgorICAgIC8vIFRoaXMgaXMgcHJpdmF0ZSBiZWNhdXNlIGl0J3MgZGFu
Z2Vyb3VzIGVub3VnaCB0aGF0IHdlIHdhbnQgdXNlcyBvZiBpdAorICAgIC8vIHRvIGJlIGVhc3kg
dG8gZmluZCAtIGhlbmNlIHRoZSBzdGF0aWMgY3JlYXRlIG1ldGhvZCBiZWxvdy4KKyAgICBleHBs
aWNpdCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIp
CisgICAgICAgIDogbV9jb2RlUHRyKGNvZGVQdHIpCisgICAgeworICAgICAgICBBU1NFUlQobV9j
b2RlUHRyKTsKKyAgICB9CisKIHB1YmxpYzoKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKQot
ICAgICAgICA6IG1fc2l6ZSgwKQogICAgIHsKICAgICB9CiAKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0YWJsZVBv
b2wsIHNpemVfdCBzaXplKQotICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICAsIG1fZXhl
Y3V0YWJsZVBvb2woZXhlY3V0YWJsZVBvb2wpCi0gICAgICAgICwgbV9zaXplKHNpemUpCisgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmKFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
ZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgOiBtX2NvZGVQdHIoZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKSkKKyAgICAgICAgLCBtX2V4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZU1lbW9yeSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPmlzTWFuYWdlZCgpKTsK
KyAgICAgICAgQVNTRVJUKG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKSk7CisgICAgICAgIEFT
U0VSVChtX2NvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICAvLyBVc2UgdGhpcyBvbmx5IHdoZW4g
eW91IGtub3cgdGhhdCB0aGUgY29kZVB0ciByZWZlcnMgdG8gY29kZSB0aGF0IGlzCisgICAgLy8g
YWxyZWFkeSBiZWluZyBrZXB0IGFsaXZlIHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gVHlwaWNh
bGx5IHRoaXMgbWVhbnMKKyAgICAvLyB0aGF0IGNvZGVQdHIgaXMgaW1tb3J0YWwuCisgICAgc3Rh
dGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGNvZGVQdHIpCisgICAgeworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmKGNvZGVQdHIpOworICAgIH0KKyAgICAKKyAgICBFeGVjdXRhYmxlTWVtb3J5
SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2V4ZWN1dGFibGVNZW1vcnkuZ2V0KCk7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjb2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvZGVQdHI7Cisg
ICAgfQorICAgIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CisgICAgICAgIGlmICgh
bV9leGVjdXRhYmxlTWVtb3J5KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBtX2V4ZWN1dGFibGVNZW1vcnktPnNpemVJbkJ5dGVzKCk7CiAgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fY29kZVB0cjsgfQogCi0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIG1fY29kZTsKLSAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhl
Y3V0YWJsZVBvb2w7Ci0gICAgc2l6ZV90IG1fc2l6ZTsKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIG1fY29kZVB0cjsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlz
aW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5NSw5ICsxNTk1LDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYi5tX29mZnNldCAtIGEubV9vZmZzZXQ7CiAgICAgfQogICAgIAotICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1
dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB7Ci0gICAgICAgIHJldHVy
biBtX2Zvcm1hdHRlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAg
ICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSk7CiAgICAg
fQogCiAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7IG1f
Zm9ybWF0dGVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkBAIC0xOTM5LDkgKzE5MzksOSBA
QCBwcml2YXRlOgogICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KSBjb25zdCB7
IHJldHVybiBtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KTsgfQogICAgICAgICB2b2lkKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuZGF0YSgpOyB9CiAKLSAgICAgICAgdm9pZCog
ZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
YWxsb2NhdG9yKQorICAgICAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4
ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEsIGFsbG9jYXRv
cik7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0
YSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIHJld2luZFRvTGFiZWwoQXNzZW1ibGVyTGFi
ZWwgcmV3aW5kVG8pIHsgbV9idWZmZXIucmV3aW5kVG9MYWJlbChyZXdpbmRUbyk7IH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDk0
MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOTksNyArMjk5LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBFTkFC
TEUoSklUKQogICAgICAgICBKSVRDb2RlJiBnZXRKSVRDb2RlKCkgeyByZXR1cm4gbV9pc0NvbnN0
cnVjdG9yID8gb3duZXJFeGVjdXRhYmxlKCktPmdlbmVyYXRlZEpJVENvZGVGb3JDb25zdHJ1Y3Qo
KSA6IG93bmVyRXhlY3V0YWJsZSgpLT5nZW5lcmF0ZWRKSVRDb2RlRm9yQ2FsbCgpOyB9Ci0gICAg
ICAgIEV4ZWN1dGFibGVQb29sKiBleGVjdXRhYmxlUG9vbCgpIHsgcmV0dXJuIGdldEpJVENvZGUo
KS5nZXRFeGVjdXRhYmxlUG9vbCgpOyB9CisgICAgICAgIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUq
IGV4ZWN1dGFibGVNZW1vcnkoKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZU1l
bW9yeSgpOyB9CiAjZW5kaWYKIAogICAgICAgICBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4ZWN1
dGFibGUoKSBjb25zdCB7IHJldHVybiBtX293bmVyRXhlY3V0YWJsZS5nZXQoKTsgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xh
c3MgU3RydWN0dXJlQ2hhaW47CiAKICNpZiBFTkFCTEUoSklUKQotICAgIHR5cGVkZWYgQ29kZUxv
Y2F0aW9uTGFiZWwgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0U3R1YlJvdXRpbmVUeXBl
OworICAgIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIFBvbHltb3JwaGljQWNjZXNzU3Ry
dWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKIAogICAgIC8vIFN0cnVjdHVyZSB1c2VkIGJ5IG9w
X2dldF9ieV9pZF9zZWxmX2xpc3QgYW5kIG9wX2dldF9ieV9pZF9wcm90b19saXN0IGluc3RydWN0
aW9uIHRvIGhvbGQgZGF0YSBvZmYgdGhlIG1haW4gb3Bjb2RlIHN0cmVhbS4KICAgICBzdHJ1Y3Qg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICB9IHB1dEJ5SWRSZXBsYWNlOwogICAgICAgICB9IHU7CiAKLSAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgc3R1YlJvdXRpbmU7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViUm91dGluZTsKICAgICAgICAgQ29kZUxvY2F0aW9uQ2FsbCBjYWxsUmV0dXJuTG9jYXRpb247
CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGhvdFBhdGhCZWdpbjsKICAgICB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkyOCw3ICs5MjgsNyBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21w
aWxlKEpJVENvZGUmIGVudHJ5CiAgICAgLy8gR2VuZXJhdGUgdGhlIGJvZHkgb2YgdGhlIHByb2dy
YW0uCiAgICAgY29tcGlsZUJvZHkoKTsKICAgICAvLyBMaW5rCi0gICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9j
YXRvcik7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwog
ICAgIGxpbmsobGlua0J1ZmZlcik7CiAgICAgZW50cnkgPSBKSVRDb2RlKGxpbmtCdWZmZXIuZmlu
YWxpemVDb2RlKCksIEpJVENvZGU6OkRGR0pJVCk7CiB9CkBAIC05ODYsNyArOTg2LDcgQEAgdm9p
ZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogCiAKICAgICAvLyA9PT0gTGlu
ayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9n
bG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICAKICAg
ICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sg
b3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0MzU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1
ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2Ny
YXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dD
YXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhl
Y1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWlu
KiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93
Q2FzZUxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCYgc3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1
YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6
ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nl
c3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmJiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAm
ZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBzdGF0aWMgdm9pZCBn
ZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3RvcmVTY3JhdGNo
KHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWls
LCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKS0+ZXhlY3V0YWJsZVBvb2woKSk7Cisg
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgIAog
ICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVs
KTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0K
IAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNzYsMTUgKzE3Niwx
NCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAog
ICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gs
IHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAg
ICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKICAgICAgICAgbGlua1Jlc3RvcmVTY3Jh
dGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAg
ICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICBzdHViSW5mby5z
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAKICAgICAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQo
c3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zm
c2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAg
ICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIHN0YXRpYyBib29s
IHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3Ry
dWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUp
OwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRP
ZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLnN0dWJSb3V0
aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRp
b24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQ
cm90b0J1aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5
cGVDaGFpbik7CkBAIC0zMjQsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlE
TGlzdChFeGVjU3RhdAogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vz
c19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5l
KTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVs
dGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVj
dHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5
bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2Rl
UmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRl
bHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxp
c3Q7CkBAIC0zNTAsMjEgKzM0OSwyMSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0
KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNz
ID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsK
KyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwog
ICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFi
ZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0
aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKICAgICAgICAg
CiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90b0JlZ2luKTsK
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAg
Ci0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGVBZGRlbmR1bSgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0gICAgICAgIHBv
bHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwg
Y29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAg
ICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9i
YWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0
dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50
cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29k
ZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFj
Y2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJv
dXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBo
aWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0
YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFz
ZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0
KCkpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7
CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7
CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vz
c1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNDE5LDE4ICs0MTgsMTgg
QEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChsaXN0
SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1YkluZm8u
dS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlz
dFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxp
c3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNT
RVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKICAgICAg
ICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8s
IHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxS
ZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxh
c3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNj
ZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0
cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1Yklu
Zm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAg
ICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwg
c3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAg
anVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NDgsMTggKzU0NywxNyBAQCBz
dGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHVi
Sml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICAgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAgICAgcGF0Y2hC
dWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9m
ZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgICAgIGlmIChuZWVkVG9S
ZXN0b3JlU2NyYXRjaCkKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUs
IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRh
Q2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXRj
aEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxh
YmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgICAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHVi
SW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rp
b24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5p
bml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJ
KHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxl
QWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDIgKzI3LDExMSBAQAogCiAjaW5j
bHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUg
PHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjZW5kaWYK
KwogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKIAot
RXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNp
emVfdCBzaXplKQorY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFB
bGxvY2F0b3IgeworcHVibGljOgorICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAg
ICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAz
MiBieXRlcworICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJlYWxsb2NhdGUgYW55IG1lbW9yeSBo
ZXJlLgorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5EZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9y
KCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXNlcnZhdGlvbnMu
c2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXNlcnZhdGlvbnMuYXQoaSkuZGVhbGxvY2F0ZSgp
OworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFj
ZShzaXplX3QmIG51bVBhZ2VzKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld051bVBhZ2VzID0g
KCgobnVtUGFnZXMgKiBwYWdlU2l6ZSgpICsgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpF
IC0gMSkgLyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgKiBKSVRfQUxMT0NBVE9SX0xB
UkdFX0FMTE9DX1NJWkUpICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChuZXdOdW1QYWdlcyA+PSBudW1QYWdlcyk7CisgICAgICAgIAorICAg
ICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgUGFnZVJlc2Vy
dmF0aW9uIHJlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKG51bVBhZ2VzICog
cGFnZVNpemUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xf
V1JJVEFCTEUsIHRydWUpOworICAgICAgICBpZiAoIXJlc2VydmF0aW9uKQorICAgICAgICAgICAg
Q1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQocmVzZXJ2YXRp
b24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2UoKTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAg
eworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCksIEVYRUNVVEFC
TEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRvcjo6
ZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxQYWdlUmVzZXJ2YXRpb24sIDE2PiByZXNlcnZhdGlvbnM7Cit9OworCitzdGF0aWMgRGVtYW5k
RXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOworCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQogewotICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRp
b24gPSBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29k
ZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgIGlmICghYWxsb2Nh
dGlvbikKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gYWxsb2NhdGlvbjsKKyAgICBBU1NF
UlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFibGVBbGxv
Y2F0b3IoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRh
YmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4
ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBhbGxvY2F0aW9uLmRlYWxs
b2NhdGUoKTsKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxs
b2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwog
Ym9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9Ci0gICAgCisKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRs
ZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNp
emVJbkJ5dGVzKQoreworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQg
PSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogc2l6ZV90
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0gICAgcmV0dXJu
IDA7Ci19IAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7Cit9CiAKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6ZHVtcFByb2ZpbGUoKQoreworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUoKTsKK30KICNl
bmRpZgogCisjZW5kaWYgLy8gRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKwog
I2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogCiAjaWYgT1MoV0lORE9XUykgfHwg
T1MoU1lNQklBTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFs
bG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0
YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3
IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1p
dHM+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9j
YXRvckhhbmRsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgogI2luY2x1ZGUg
PHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTEwMiwx
MjAgKzEwMywyNyBAQCBpbmxpbmUgc2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplCiAK
IG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEV4ZWN1dGFibGVQb29sPiB7Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxM
T0NBVE9SX0RFTUFORCkKLSAgICB0eXBlZGVmIFBhZ2VBbGxvY2F0aW9uIEFsbG9jYXRpb247Ci0j
ZWxzZQotICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgQWxsb2Nh
dGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgICAgIDogbV9iYXNlKGJhc2Up
Ci0gICAgICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAg
ICAgdm9pZCogYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgp
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX2Jhc2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1fYmFzZTsKLSAg
ICAgICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB9OwotI2VuZGlmCi0gICAgdHlwZWRlZiBWZWN0b3I8
QWxsb2NhdGlvbiwgMj4gQWxsb2NhdGlvbkxpc3Q7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4p
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVQb29sKGdsb2Jh
bERhdGEsIG4pKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBhbGxvYyhKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZVB0ciA8PSBtX2Vu
ZCk7Ci0KLSAgICAgICAgLy8gUm91bmQgJ24nIHVwIHRvIGEgbXVsdGlwbGUgb2Ygd29yZCBzaXpl
OyBpZiBhbGwgYWxsb2NhdGlvbnMgYXJlIG9mCi0gICAgICAgIC8vIHdvcmQgc2l6ZWQgcXVhbnRp
dGllcywgdGhlbiBhbGwgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQuCi0g
ICAgICAgIG4gPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgc2l6ZW9mKHZvaWQqKSk7Ci0KLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obikgPCAobV9lbmQgLSBtX2ZyZWVQdHIp
KSB7Ci0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVQdHI7Ci0gICAgICAgICAgICBt
X2ZyZWVQdHIgKz0gbjsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQot
ICAgICAgICAvLyBJbnN1ZmZpY2llbnQgc3BhY2UgdG8gYWxsb2NhdGUgaW4gdGhlIGV4aXN0aW5n
IHBvb2wKLSAgICAgICAgLy8gc28gd2UgbmVlZCBhbGxvY2F0ZSBpbnRvIGEgbmV3IHBvb2wKLSAg
ICAgICAgcmV0dXJuIHBvb2xBbGxvY2F0ZShnbG9iYWxEYXRhLCBuKTsKLSAgICB9Ci0gICAgCi0g
ICAgdm9pZCB0cnlTaHJpbmsodm9pZCogYWxsb2NhdGlvbiwgc2l6ZV90IG9sZFNpemUsIHNpemVf
dCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0
aW9uKSArIG9sZFNpemUgIT0gbV9mcmVlUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyByb3VuZFVwQWxs
b2NhdGlvblNpemUobmV3U2l6ZSwgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgfQotCi0gICAgfkV4ZWN1
dGFibGVQb29sKCkKLSAgICB7Ci0gICAgICAgIEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBlbmQg
PSBtX3Bvb2xzLmVuZCgpOwotICAgICAgICBmb3IgKEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBw
dHIgPSBtX3Bvb2xzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgRXhl
Y3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoKnB0cik7Ci0gICAgfQotCi0gICAgc2l6ZV90IGF2
YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIChtX3Bvb2xzLnNpemUoKSA+IDEpID8gMCA6IG1fZW5k
IC0gbV9mcmVlUHRyOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEFsbG9jYXRpb24gc3lzdGVt
QWxsb2Moc2l6ZV90IG4pOwotICAgIHN0YXRpYyB2b2lkIHN5c3RlbVJlbGVhc2UoQWxsb2NhdGlv
biYgYWxsb2MpOwotCi0gICAgRXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG4p
OwotCi0gICAgdm9pZCogcG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQot
ICAgIGNoYXIqIG1fZnJlZVB0cjsKLSAgICBjaGFyKiBtX2VuZDsKLSAgICBBbGxvY2F0aW9uTGlz
dCBtX3Bvb2xzOwotfTsKK3R5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU7CiAKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0g
UHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0g
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewot
ICAgICAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29s
ID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NBVE9SX0xBUkdF
X0FMTE9DX1NJWkUpOwotI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAgICB9CisgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cihKU0dsb2JhbERhdGEmKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb2Nh
dG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHVu
ZGVyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKKyAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICBzdGF0aWMg
dm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBwb29sRm9yU2l6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQot
ICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc21hbGwgYWxsb2Nh
dG9yCi0gICAgICAgIEFTU0VSVChtX3NtYWxsQWxsb2NhdGlvblBvb2wpOwotICAgICAgICBpZiAo
biA8IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAgICAgICByZXR1
cm4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwotCi0gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlz
IGxhcmdlLCB3ZSBqdXN0IHByb3ZpZGUgYSB1bnNoYXJlZCBhbGxvY2F0b3IKLSAgICAgICAgaWYg
KG4gPiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4g
RXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBuKTsKLQotICAgICAgICAvLyBDcmVh
dGUgYSBuZXcgYWxsb2NhdG9yCi0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbCA9
IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmV3IGFsbG9jYXRvciB3aWxsIHJlc3Vs
dCBpbiBtb3JlIGZyZWUgc3BhY2UgdGhhbiBpbgotICAgICAgICAvLyB0aGUgY3VycmVudCBzbWFs
bCBhbGxvY2F0b3IsIHRoZW4gd2Ugd2lsbCB1c2UgaXQgaW5zdGVhZAotICAgICAgICBpZiAoKHBv
b2wtPmF2YWlsYWJsZSgpIC0gbikgPiBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgp
KQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29sID0gcG9vbDsKLSAgICAgICAgcmV0
dXJuIHBvb2wucmVsZWFzZSgpOwotICAgIH0KKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1v
cnlIYW5kbGU+IGFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAK
ICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCBtYWtl
V3JpdGFibGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMzQ4LDUwICsyNTYsOSBAQCBw
cml2YXRlOgogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2
b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0dGluZyk7CiAj
ZW5kaWYKLQotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29s
OwogfTsKIAotaW5saW5lIEV4ZWN1dGFibGVQb29sOjpFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3Vu
ZFVwQWxsb2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlvbiBtZW0gPSBz
eXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghbWVtLmJhc2UoKSkgewotICAgICAgICBy
ZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgbWVtID0gc3lzdGVt
QWxsb2MoYWxsb2NTaXplKTsKLSAgICB9Ci0gICAgbV9wb29scy5hcHBlbmQobWVtKTsKLSAgICBt
X2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWVtLmJhc2UoKSk7Ci0gICAgaWYgKCFtX2Zy
ZWVQdHIpCi0gICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIG1fZW5k
ID0gbV9mcmVlUHRyICsgYWxsb2NTaXplOwotICAgIGRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIo
KTsKLX0KLQotaW5saW5lIHZvaWQqIEV4ZWN1dGFibGVQb29sOjpwb29sQWxsb2NhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0g
cm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIAotICAgIEFsbG9jYXRp
b24gcmVzdWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIXJlc3VsdC5iYXNl
KCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
ICAgIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0
LmJhc2UoKSkKLSAgICAgICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAg
IH0KLSAgICAKLSAgICBBU1NFUlQobV9lbmQgPj0gbV9mcmVlUHRyKTsKLSAgICBpZiAoKGFsbG9j
U2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAg
ICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0aW9uIHBvb2wKLSAgICAgICAgbV9mcmVlUHRyID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgbjsKLSAgICAgICAgbV9lbmQgPSBzdGF0
aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBhbGxvY1NpemU7Ci0gICAgfQotCi0gICAg
bV9wb29scy5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsKLX0KLQot
fQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUo
QVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVB
bGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVk
Vk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAogI2luY2x1ZGUg
PGVycm5vLmg+CiAKLSNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4u
aD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1
ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5o
PgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIApAQCAtNDYsNDgxICs0NSwxMDAgQEAgdXNpbmcg
bmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jZGVmaW5lIFR3b1Bvdyhu
KSAoMXVsbCA8PCBuKQotCi1jbGFzcyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgewotcHVibGlj
OgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGJsb2Nr
U2l6ZSwgdW5zaWduZWQgbG9nMkJsb2NrU2l6ZSkKLSAgICAgICAgOiBtX2Jsb2NrU2l6ZShibG9j
a1NpemUpCi0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2tTaXplID09IFR3b1Bvdyhsb2cyQmxv
Y2tTaXplKSk7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5l
ZWRlZCB0byBob2xkIHNpemUuCi0gICAgICAgIHNpemVfdCBibG9ja01hc2sgPSBibG9ja1NpemUg
LSAxOwotICAgICAgICBtX2Jsb2NrQ291bnQgPSAoc2l6ZSArIGJsb2NrTWFzaykgPj4gbG9nMkJs
b2NrU2l6ZTsKLQotICAgICAgICAvLyBBbGlnbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdv
ID49IG1fYmxvY2tDb3VudC4KLSAgICAgICAgbV9ibG9ja0FsaWdubWVudCA9IDE7Ci0gICAgICAg
IHdoaWxlIChtX2Jsb2NrQWxpZ25tZW50IDwgbV9ibG9ja0NvdW50KQotICAgICAgICAgICAgbV9i
bG9ja0FsaWdubWVudCArPSBtX2Jsb2NrQWxpZ25tZW50OwotICAgIH0KLQotICAgIHNpemVfdCBi
bG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrU2l6ZTsgfQotICAgIHNpemVfdCBibG9j
a0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0NvdW50OyB9Ci0gICAgc2l6ZV90IGJsb2Nr
QWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0FsaWdubWVudDsgfQotCi0gICAgc2l6
ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tTaXplICogbV9ibG9ja0Nv
dW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9ibG9ja1NpemU7Ci0gICAgc2l6
ZV90IG1fYmxvY2tDb3VudDsKLSAgICBzaXplX3QgbV9ibG9ja0FsaWdubWVudDsKLX07Ci0KLXRl
bXBsYXRlPHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlTGVhZiB7
Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IDEyOyAvLyAyXjEyID09IHBhZ2VzaXpl
Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lv
blNpemUgKyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9u
U2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCByZWdpb25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NF
UlQoZW50cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVMZWFm
X2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJsZUxlYWYoKQot
ICAgICAgICA6IG1fYWxsb2NhdGVkKDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxvY2F0aW9u
VGFibGVMZWFmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0gc3VicmVnaW9u
U2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAgICAgIHNpemVfdCBhbGln
bm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50
ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBj
aGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAo
KDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAv
LyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICgh
KG1fYWxsb2NhdGVkICYgbWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2FsbG9jYXRlZCB8PSBt
YXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkpIDw8
IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8PD0g
YWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9Ci0K
LSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mm
IHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkg
PT0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24gPj4g
bG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9j
a0NvdW50KCk7Ci0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkg
PDwgZW50cnk7Ci0KLSAgICAgICAgQVNTRVJUKChtX2FsbG9jYXRlZCAmIG1hc2spID09IG1hc2sp
OwotICAgICAgICBtX2FsbG9jYXRlZCAmPSB+bWFzazsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1w
dHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX2FsbG9jYXRlZDsKLSAgICB9Ci0KLSAgICBi
b29sIGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gIX5tX2FsbG9jYXRlZDsKLSAgICB9
Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lv
blNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFz
c0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRh
YmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAg
ICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQg
PSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAg
Iik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyUwMTZsbHhdXG4iLCAoaW50KXBh
cmVudE9mZnNldCwgbV9hbGxvY2F0ZWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IEJpdEZpZWxkIG1fYWxsb2NhdGVkOwotfTsKLQotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWw+
Ci1jbGFzcyBMYXp5QWxsb2NhdGlvblRhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qg
dW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gTmV4dExldmVsOjplbnRyaWVzOwotCi0g
ICAgTGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgICAgIDogbV9wdHIoMCkKLSAgICB7Ci0gICAg
fQotCi0gICAgfkxhenlBbGxvY2F0aW9uVGFibGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlz
RW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3B0cikKLSAgICAgICAg
ICAgIG1fcHRyID0gbmV3IE5leHRMZXZlbCgpOwotICAgICAgICByZXR1cm4gbV9wdHItPmFsbG9j
YXRlKHNpemVDbGFzcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwg
QWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NF
UlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZnJlZShsb2NhdGlvbiwgc2l6ZUNsYXNzKTsKLSAg
ICAgICAgaWYgKG1fcHRyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3B0cjsK
LSAgICAgICAgICAgIG1fcHRyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNF
bXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIW1fcHRyOwotICAgIH0KLQotICAgIGJvb2wg
aXNGdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciAmJiBtX3B0ci0+aXNGdWxsKCk7
Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biBOZXh0TGV2ZWw6OnNpemUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBk
dW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmR1bXAocGFyZW50T2Zmc2V0
LCBpbmRlbnQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNp
emVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4g
TmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5l
eHRMZXZlbCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWwsIHVuc2lnbmVk
IGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5IHsKLSAgICB0eXBl
ZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGxvZzJTdWJyZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSAr
IGxvZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0g
VHdvUG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lv
blNpemUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBlbnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRy
aWVzIDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeV9l
bnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnko
KQotICAgICAgICA6IG1fZnVsbCgwKQotICAgICAgICAsIG1faGFzU3ViYWxsb2NhdGlvbigwKQot
ICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghaXNGdWxsKCkpOwotCi0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJy
ZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxOwotICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSwgYml0ICs9IGJpdCkgewotICAg
ICAgICAgICAgICAgIGlmIChtX2Z1bGwgJiBiaXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fc3ViYWxsb2NhdGlvbnNb
aV0uYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0g
bm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBkaWRuJ3QgYWxyZWFk
eSBoYXZlIGEgc3VicmVnaW9uLCBpdCBkb2VzIG5vdyEKLSAgICAgICAgICAgICAgICAgICAgbV9o
YXNTdWJhbGxvY2F0aW9uIHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWlycm9yIHRo
ZSBzdWJhbGxvY2F0aW9uJ3MgZnVsbCBiaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N1
YmFsbG9jYXRpb25zW2ldLmlzRnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mdWxs
IHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpICogc3VicmVnaW9uU2l6ZSkg
fCBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBIGJsb2NrIGlzIGFs
bG9jYXRlZCBpZiBlaXRoZXIgaXQgaXMgZnVsbHkgYWxsb2NhdGVkIG9yIGNvbnRhaW5zIHN1YmFs
bG9jYXRpb25zLgotICAgICAgICBCaXRGaWVsZCBhbGxvY2F0ZWQgPSBtX2Z1bGwgfCBtX2hhc1N1
YmFsbG9jYXRpb247Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9j
a0FsaWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3Vu
dCgpOwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVl
IGJsb2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8
PCAoYWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxp
Z25tZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBp
ICs9IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEoYWxsb2NhdGVkICYgbWFzaykpIHsK
LSAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gbWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4g
KGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlv
biwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAg
IHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwotCi0gICAgICAg
IGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAg
ICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGVudHJ5OwotICAgICAgICAgICAgbV9zdWJhbGxvY2F0
aW9uc1tlbnRyeV0uZnJlZShsb2NhdGlvbiAmIChzdWJyZWdpb25TaXplIC0gMSksIHNpemVDbGFz
cyk7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3ViYWxsb2NhdGlvbiBpcyBub3cgZW1w
dHkuCi0gICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlvbiAmPSB+Yml0OwotICAgICAgICAgICAg
Ly8gTm8gbmVlZCB0byBjaGVjaywgaXQgY2xlYXJseSBpc24ndCBmdWxsIGFueSBtb3JlIQotICAg
ICAgICAgICAgbV9mdWxsICY9IH5iaXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBz
aXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAgICAgQml0Rmll
bGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsKLSAgICAgICAgICAgIEFT
U0VSVCgobV9mdWxsICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoIShtX2hh
c1N1YmFsbG9jYXRpb24gJiBtYXNrKSk7Ci0gICAgICAgICAgICBtX2Z1bGwgJj0gfm1hc2s7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuICEobV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBib29sIGlz
RnVsbCgpCi0gICAgeyAgIAotICAgICAgICByZXR1cm4gIX5tX2Z1bGw7Ci0gICAgfQotCi0gICAg
c3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwot
ICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXpl
KHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCBzdWJyZWdpb25TaXplKSB7
Ci0gICAgICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gTmV4dExl
dmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLnNpemUo
KSA8IE5leHRMZXZlbDo6c2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBzaXplQ2xhc3M7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXpl
LCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5E
RUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5k
ZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7
ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiUwOHg6IFsiLCAoaW50KXBhcmVudE9mZnNldCk7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxk
IGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIGNoYXIgYyA9IG1faGFzU3ViYWxsb2NhdGlv
biAmIGJpdAotICAgICAgICAgICAgICAgID8gKG1fZnVsbCAmIGJpdCA/ICdOJyA6ICduJykKLSAg
ICAgICAgICAgICAgICA6IChtX2Z1bGwgJiBiaXQgPyAnRicgOiAnLScpOwotICAgICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIlYyIsIGMpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiXVxuIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7
ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAgICAg
ICAgc2l6ZV90IG9mZnNldCA9IHBhcmVudE9mZnNldCB8IChzdWJyZWdpb25TaXplICogaSk7Ci0g
ICAgICAgICAgICBpZiAobV9oYXNTdWJhbGxvY2F0aW9uICYgYml0KQotICAgICAgICAgICAgICAg
IG1fc3ViYWxsb2NhdGlvbnNbaV0uZHVtcChvZmZzZXQsIGluZGVudCArIDEpOwotICAgICAgICB9
Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsIG1fc3ViYWxsb2NhdGlv
bnNbZW50cmllc107Ci0gICAgLy8gU3VicmVnaW9ucyBleGlzdCBpbiBvbmUgb2YgZm91ciBzdGF0
ZXM6Ci0gICAgLy8gKDEpIGVtcHR5IChib3RoIGJpdHMgY2xlYXIpCi0gICAgLy8gKDIpIGZ1bGx5
IGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBhbGxvY2F0aW9uIChtX2Z1bGwgc2V0KQotICAgIC8vICgz
KSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKG1faGFzU3ViYWxs
b2NhdGlvbiBzZXQpCi0gICAgLy8gKDQpIGZ1bGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9j
YXRpb25zIChib3RoIGJpdHMgc2V0KQotICAgIEJpdEZpZWxkIG1fZnVsbDsKLSAgICBCaXRGaWVs
ZCBtX2hhc1N1YmFsbG9jYXRpb247Ci19OwotCi0KLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlTGVh
Zjw2PiBQYWdlVGFibGVzMjU2S0I7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxQ
YWdlVGFibGVzMjU2S0IsIDY+IFBhZ2VUYWJsZXMxNk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFi
bGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDE+IFBhZ2VU
YWJsZXMzMk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRp
b25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDY+IFBhZ2VUYWJsZXMxR0I7Ci0KICNpZiBDUFUoQVJN
KQotdHlwZWRlZiBQYWdlVGFibGVzMTZNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMg
Y29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BV
KFg4Nl82NCkKLXR5cGVkZWYgUGFnZVRhYmxlczFHQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7Citz
dGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CiAj
ZWxzZQotdHlwZWRlZiBQYWdlVGFibGVzMzJNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0
aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogI2VuZGlm
CiAKLQotY2xhc3MgRml4ZWRWTVBvb2xBbGxvY2F0b3IKLXsKK2NsYXNzIEZpeGVkVk1Qb29sRXhl
Y3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgotICAgIEZp
eGVkVk1Qb29sQWxsb2NhdG9yKCkKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3Io
KQorICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9u
cyB0byAzMiBieXRlcwogICAgIHsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMyNTZLQjo6c2l6
ZSgpID09IDI1NiAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczE2TUI6OnNpemUo
KSA9PSAxNiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMzMk1COjpz
aXplKCkgPT0gMzIgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMUdC
OjpzaXplKCkgPT0gMTAyNCAqIDEwMjQgKiAxMDI0KTsKLQotICAgICAgICBtX3Jlc2VydmF0aW9u
ID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoRml4ZWRWTVBvb2xQYWdl
VGFibGVzOjpzaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9Q
T09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZh
dGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxsb2NhdG9yOjpK
U0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNpZiAhRU5B
QkxFKElOVEVSUFJFVEVSKQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgaWYgKCFt
X3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgorICAgICAgICBpZiAo
bV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgp
ID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNl
cnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0K
LSAKLSAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyhzaXplX3QgcmVxdWVzdGVk
U2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShyZXF1ZXN0ZWRT
aXplKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplQ2xhc3Muc2l6ZSgpOwotICAgICAgICBB
U1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPj0gRml4ZWRWTVBvb2xQYWdlVGFibGVz
OjpzaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0gICAgICAgIGlmIChtX3BhZ2VzLmlzRnVsbCgpKQotICAgICAgICAgICAgcmV0dXJu
IEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAgICAgIHNpemVfdCBvZmZz
ZXQgPSBtX3BhZ2VzLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0g
bm90Rm91bmQpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24o
MCwgMCk7Ci0KLSAgICAgICAgdm9pZCogcG9pbnRlciA9IG9mZnNldFRvUG9pbnRlcihvZmZzZXQp
OwotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwb2ludGVyLCBzaXplKTsKLSAgICAgICAg
cmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKHBvaW50ZXIsIHNpemUpOwotICAgIH0K
LQotICAgIHZvaWQgZnJlZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQor
ICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXpl
X3QmKQogICAgIHsKLSAgICAgICAgdm9pZCogcG9pbnRlciA9IGFsbG9jYXRpb24uYmFzZSgpOwot
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGFsbG9jYXRpb24uc2l6ZSgpOwotICAgICAgICBBU1NFUlQo
c2l6ZSk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwb2ludGVyLCBzaXplKTsK
LQotICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JT
aXplKHNpemUpOwotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLnNpemUoKSA9PSBzaXplKTsKLSAg
ICAgICAgbV9wYWdlcy5mcmVlKHBvaW50ZXJUb09mZnNldChwb2ludGVyKSwgc2l6ZUNsYXNzKTsK
KyAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9j
YXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQot
ICAgIHNpemVfdCBhbGxvY2F0ZWQoKQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVk
UGFnZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzZXJ2YXRpb24uY29t
bWl0dGVkKCk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkp
OwogICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAh
IW1fcmVzZXJ2YXRpb247CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFn
ZVNpemUoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFz
cyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gRml4ZWRW
TVBvb2xQYWdlVGFibGVzOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9pZCog
b2Zmc2V0VG9Qb2ludGVyKHNpemVfdCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZh
dGlvbi5iYXNlKCkpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9pbnRlclRvT2Zm
c2V0KHZvaWQqIHBvaW50ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxpbnRwdHJfdD4ocG9pbnRlcikgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2Vy
dmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRp
b247Ci0gICAgRml4ZWRWTVBvb2xQYWdlVGFibGVzIG1fcGFnZXM7CiB9OwogCitzdGF0aWMgRml4
ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CiAKLXN0YXRpYyBTcGluTG9j
ayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIEZpeGVkVk1Qb29sQWxs
b2NhdG9yKiBhbGxvY2F0b3IgPSAwOwotCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRp
YWxpemVBbGxvY2F0b3IoKQoreworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0
b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7Cit9CiAKLXNpemVfdCBF
eGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQorRXhlY3V0YWJsZUFsbG9j
YXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tIb2xkZXIoJnNwaW5sb2NrKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yID8gYWxs
b2NhdG9yLT5hbGxvY2F0ZWQoKSA6IDA7Ci19ICAgCisgICAgQVNTRVJUKGFsbG9jYXRvcik7Cit9
CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7Ci0gICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBpZiAoIWFsbG9jYXRvcikK
LSAgICAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sQWxsb2NhdG9yKCk7Ci0gICAgcmV0
dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgpOworICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNS
ZXNlcnZlZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJl
c3N1cmUoKQogewotICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCB0YWtlIHRoZSBzcGluIGxv
Y2sgaGVyZSwgYnV0IHdlIGRvbid0IGNhcmUgaWYgd2UgZ2V0IHN0YWxlIGRhdGEuCi0gICAgLy8g
VGhpcyBpcyBvbmx5IHJlYWxseSBhIGhldXJpc3RpYyBhbnl3YXkuCi0gICAgcmV0dXJuIGFsbG9j
YXRvciAmJiAoYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA+IChGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6
OnNpemUoKSAvIDIpKTsKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3Mg
PSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgcmV0dXJuIHN0YXRpc3RpY3Mu
Ynl0ZXNBbGxvY2F0ZWQgPiBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLyAyOwogfQogCi1FeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90
IHNpemUpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5
dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAg
QVNTRVJUKGFsbG9jYXRvcik7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Moc2l6ZSk7Cisg
ICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxs
b2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIHJlbGVhc2VF
eGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3It
PmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworc2l6
ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisgICAgcmV0
dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9v
bDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikg
CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigm
c3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJlZShh
bGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9CisjZW5kaWYKIAog
fQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VU
QUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTQ5LDcgKzU0OSw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGls
ZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0
YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9n
bG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFk
ZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEsMjAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwg
Y2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRyYW1wb2xpbmVT
dHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAgICAgICAg
IHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgSklU
IGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyhleGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMp
OworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyhnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0
aWMgQ29kZVB0ciBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBOYXRpdmVGdW5jdGlv
biBmdW5jKQorICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIENvZGVQdHIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVJlZigpOwogICAg
ICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBqaXQu
cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCBm
dW5jKTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KGdsb2JhbERhdGEsIGZ1bmMpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgcGF0
Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBT
dHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MpOwpAQCAtMjc0LDkgKzI3NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJl
KiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25z
dCBQcm9wZXJ0eVNsb3QmLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJl
dHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKTsKICAgICAgICAgdm9pZCBwcml2YXRl
Q29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwg
U3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5B
ZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KTsKIAotICAgICAgICB2b2lkIHBy
aXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4q
IGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUg
KnRyYW1wb2xpbmVzKTsKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFt
cG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwotICAgICAgICBD
b2RlUHRyIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQ
b29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBOYXRpdmVGdW5jdGlvbiBm
dW5jKTsKKyAgICAgICAgQ29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9i
YWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAg
ICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICNlbmRpZgogI2VuZGlmCiAgICAgICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5l
cmF0b3I7Ci0gICAgICAgIHN0YXRpYyBDb2RlUHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKTsKKyAgICAg
ICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOwogICAgIH0gSklUX0NMQVNTX0FMSUdOTUVOVDsKIAogICAgIGlubGluZSB2b2lkIEpJVDo6
ZW1pdF9vcF9sb29wKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsMTIgKzU2LDEy
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIGJvb2wgb3BlcmF0b3IgISgpIGNvbnN0CiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAhbV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgICAgICAgICByZXR1cm4gIW1fcmVmOwogICAgICAgICB9CiAKICAgICAgICAg
Q29kZVB0ciBhZGRyZXNzRm9yQ2FsbCgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X3JlZi5tX2NvZGU7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuY29kZSgpOwogICAgICAgICB9
CiAKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBvZmZzZXQgaW4gYnl0ZXMg
b2YgJ3BvaW50ZXJJbnRvQ29kZScgaW50bwpAQCAtNjksNyArNjksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gYmxvY2sgb2YgY29kZS4gIEl0IGlzIEFTU0VSVGVkIHRoYXQgbm8gY29k
ZWJsb2NrID40Z2IgaW4gc2l6ZS4KICAgICAgICAgdW5zaWduZWQgb2Zmc2V0T2Yodm9pZCogcG9p
bnRlckludG9Db2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbnRwdHJfdCByZXN1bHQgPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRf
Y2FzdDxpbnRwdHJfdD4obV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgICAg
ICAgICAgaW50cHRyX3QgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRl
ckludG9Db2RlKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KG1fcmVmLmNvZGUoKS5leGVj
dXRhYmxlQWRkcmVzcygpKTsKICAgICAgICAgICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnRwdHJf
dD4oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCkpID09IHJlc3VsdCk7CiAgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3VsdCk7CiAgICAgICAgIH0KQEAgLTc3
LDI0ICs3NywyNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gRXhlY3V0ZSB0aGUgY29k
ZSEKICAgICAgICAgaW5saW5lIEpTVmFsdWUgZXhlY3V0ZShSZWdpc3RlckZpbGUqIHJlZ2lzdGVy
RmlsZSwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAg
ICAgICAgewotICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUoY3Rp
VHJhbXBvbGluZShtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJGaWxl
LCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwgZ2xv
YmFsRGF0YSkpOworICAgICAgICAgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlOjpkZWNvZGUo
Y3RpVHJhbXBvbGluZShtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJG
aWxlLCBjYWxsRnJhbWUsIDAsIFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSwg
Z2xvYmFsRGF0YSkpOwogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmV4Y2VwdGlvbiA/
IGpzTnVsbCgpIDogcmVzdWx0OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCogc3RhcnQoKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9jb2RlLmRhdGFMb2NhdGlvbigp
OworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLmNvZGUoKS5kYXRhTG9jYXRpb24oKTsKICAgICAg
ICAgfQogCiAgICAgICAgIHNpemVfdCBzaXplKCkKICAgICAgICAgewotICAgICAgICAgICAgQVNT
RVJUKG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKTsKLSAgICAgICAgICAgIHJldHVy
biBtX3JlZi5tX3NpemU7CisgICAgICAgICAgICBBU1NFUlQobV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIG1fcmVmLnNpemUoKTsKICAgICAgICAg
fQogCi0gICAgICAgIEV4ZWN1dGFibGVQb29sKiBnZXRFeGVjdXRhYmxlUG9vbCgpCisgICAgICAg
IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGUqIGdldEV4ZWN1dGFibGVNZW1vcnkoKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9leGVjdXRhYmxlUG9vbC5nZXQoKTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3JlZi5leGVjdXRhYmxlTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIEpJVFR5cGUgaml0VHlwZSgpCkBAIC0xMDQsOSArMTA0LDkgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgLy8gSG9zdCBmdW5jdGlvbnMgYXJlIGEgYml0IHNwZWNpYWw7
IHRoZXkgaGF2ZSBhIG1fY29kZSBwb2ludGVyIGJ1dCB0aGV5CiAgICAgICAgIC8vIGRvIG5vdCBp
bmRpdmlkdWxseSByZWYgdGhlIGV4ZWN1dGFibGUgcG9vbCBjb250YWluaW5nIHRoZSB0cmFtcG9s
aW5lLgotICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29kZVB0ciBjb2RlKQor
ICAgICAgICBzdGF0aWMgSklUQ29kZSBIb3N0RnVuY3Rpb24oQ29kZVJlZiBjb2RlKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLmRhdGFMb2NhdGlvbigpLCAwLCAw
LCBIb3N0Q2FsbFRodW5rKTsKKyAgICAgICAgICAgIHJldHVybiBKSVRDb2RlKGNvZGUsIEhvc3RD
YWxsVGh1bmspOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBjbGVhcigpCkBAIC0xMTYsOCAr
MTE2LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgIHByaXZhdGU6Ci0gICAg
ICAgIEpJVENvZGUodm9pZCogY29kZSwgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gZXhlY3V0
YWJsZVBvb2wsIHNpemVfdCBzaXplLCBKSVRUeXBlIGppdFR5cGUpCi0gICAgICAgICAgICA6IG1f
cmVmKGNvZGUsIGV4ZWN1dGFibGVQb29sLCBzaXplKQorICAgICAgICBKSVRDb2RlKFBhc3NSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSwgSklUVHlwZSBqaXRU
eXBlKQorICAgICAgICAgICAgOiBtX3JlZihleGVjdXRhYmxlTWVtb3J5KQogICAgICAgICAgICAg
LCBtX2ppdFR5cGUoaml0VHlwZSkKICAgICAgICAgewogICAgICAgICB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiA5NDM1
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxl
UG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xp
bmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFu
ZGxlPiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiB7CiAjaWYg
RU5BQkxFKEpJVF9VU0VfU09GVF9NT0RVTE8pCiAgICAgTGFiZWwgc29mdE1vZEJlZ2luID0gYWxp
Z24oKTsKQEAgLTE1Miw3ICsxNTIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNo
aW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xp
bmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRo
ZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0
b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmso
c3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0
cmluZ19mYWlsKSk7CkBAIC0xNjMsNyArMTYzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDY29uc3Ry
dWN0LCBGdW5jdGlvblB0cihjdGlfb3BfY29uc3RydWN0X2ppdENvbXBpbGUpKTsKIAogICAgIENv
ZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7Ci0gICAgKmV4ZWN1
dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJsZVBvb2w7CisgICAgUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkgPSBmaW5hbENvZGUuZXhlY3V0YWJs
ZU1lbW9yeSgpOwogCiAgICAgdHJhbXBvbGluZXMtPmN0aVZpcnR1YWxDYWxsID0gcGF0Y2hCdWZm
ZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlW
aXJ0dWFsQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDb25zdHJ1
Y3RCZWdpbik7CkBAIC0xNzUsNiArMTc1LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJ
TWFjaGluZVRyYW1wbwogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogICAgIHRyYW1w
b2xpbmVzLT5jdGlTb2Z0TW9kdWxvID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHNvZnRNb2RC
ZWdpbik7CiAjZW5kaWYKKyAgICAKKyAgICByZXR1cm4gZXhlY3V0YWJsZU1lbW9yeS5yZWxlYXNl
KCk7CiB9CiAKIEpJVDo6TGFiZWwgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBib29sIGlzQ29uc3RydWN0KQpAQCAtMzEyLDEwICszMTQs
OSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDCiAgICAgcmV0dXJu
IG5hdGl2ZUNhbGxUaHVuazsKIH0KIAotSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCitKSVQ6OkNvZGVS
ZWYgSklUOjpwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQogewogICAgIENhbGwgbmF0aXZlQ2FsbDsKLSAgICBM
YWJlbCBuYXRpdmVDYWxsVGh1bmsgPSBhbGlnbigpOwogCiAgICAgZW1pdFB1dEltbWVkaWF0ZVRv
Q2FsbEZyYW1lSGVhZGVyKDAsIFJlZ2lzdGVyRmlsZTo6Q29kZUJsb2NrKTsKIApAQCAtNDQ3LDEy
ICs0NDgsMTAgQEAgSklUOjpDb2RlUHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdgogICAg
IHJldCgpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBj
b2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBv
YmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBl
eGVjdXRhYmxlUG9vbCk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsobmF0aXZlQ2FsbCwgRnVuY3Rpb25QdHIo
ZnVuYykpOwotICAgIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotCi0gICAgcmV0dXJuIHBh
dGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDYWxsVGh1bmspOworICAgIHJldHVybiBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVj
dXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJl
ICp0cmFtcG9saW5lcykKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogewogICAgIC8vICgyKSBUaGUg
c2Vjb25kIGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZvciBzdHJpbmcg
bGVuZ3RoCiAgICAgTGFiZWwgc3RyaW5nTGVuZ3RoQmVnaW4gPSBhbGlnbigpOwpAQCAtMTUzLDcg
KzE1Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBD
YWxsIHN0cmluZ19mYWlsdXJlQ2FzZXMzQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChzdHJp
bmdfZmFpbHVyZUNhc2VzMyk7CiAKICAgICAvLyBBbGwgdHJhbXBvbGluZXMgY29uc3RydWN0ZWQh
IGNvcHkgdGhlIGNvZGUsIGxpbmsgdXAgY2FsbHMsIGFuZCBzZXQgdGhlIHBvaW50ZXJzIG9uIHRo
ZSBNYWNoaW5lIG9iamVjdC4KLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERh
dGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczFDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5
X2lkX3N0cmluZ19mYWlsKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNh
c2VzMkNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKQEAg
LTE2NCw3ICsxNjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
CiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxsQ29tcGlsZUNvbnN0cnVjdCwgRnVuY3Rpb25QdHIo
Y3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAKICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9
IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFs
Q29kZS5tX2V4ZWN1dGFibGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiBleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4ZWN1dGFibGVNZW1vcnkoKTsKIAogICAg
IHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5l
QXQodmlydHVhbENhbGxMaW5rQmVnaW4pOwogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ29u
c3RydWN0TGluayA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ29uc3RydWN0TGlu
a0JlZ2luKTsKQEAgLTE3Myw2ICsxNzMsOCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvCiAgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNhbGwgPSBwYXRjaEJ1ZmZl
ci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpTmF0
aXZlQ29uc3RydWN0ID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNvbnN0cnVjdFRo
dW5rKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpU3RyaW5nTGVuZ3RoVHJhbXBvbGluZSA9IHBhdGNo
QnVmZmVyLnRyYW1wb2xpbmVBdChzdHJpbmdMZW5ndGhCZWdpbik7CisgICAgCisgICAgcmV0dXJu
IGV4ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwogfQogCiBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0Nv
bnN0cnVjdCkKQEAgLTI5MSw5ICsyOTMsOSBAQCBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElOYXRpdmVDCiAgICAgcmV0dXJuIG5hdGl2ZUNhbGxUaHVuazsKIH0KIAotSklUOjpDb2Rl
UHRyIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uKQorSklUOjpD
b2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24pCiB7Ci0gICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgcmV0dXJuIENvZGVSZWY6OmNyZWF0ZVNlbGZNYW5h
Z2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAog
dm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nl
c3MzMl82NC5jcHAJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2
NSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9tZXRob2RfY2hlY2soSW5zdHIKICAgICBtX2J5
dGVjb2RlT2Zmc2V0ICs9IE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X2lkKTsKIH0KIAotSklUOjpD
b2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitKSVQ6OkNvZGVSZWYgSklUOjpzdHJpbmdH
ZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIEpT
SW50ZXJmYWNlSklUIGppdDsKICAgICBKdW1wTGlzdCBmYWlsdXJlczsKQEAgLTE5Myw4ICsxOTMs
OCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVy
biBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0
cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIo
bV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0
TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5l
cmF0b3IpLmNvZGUoKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJl
Z1QwKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NDEsNyAr
NTQxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAgIHJl
c3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKICAgICBDYWxsIGZhaWx1cmVD
YWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhbGwsIEZ1bmN0aW9uUHRyKGRpcmVjdCA/IGN0
aV9vcF9wdXRfYnlfaWRfZGlyZWN0X2ZhaWwgOiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwpKTsKICAg
ICAKQEAgLTU1MCwxMCArNTUwLDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRy
YW5zaXRpbwogICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rp
b25QdHIoY3RpX29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAg
Ci0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsK
KyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIGVudHJ5TGFi
ZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFk
ZHJlc3MsIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsK
IH0KIAogdm9pZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBj
YWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYwNiw3ICs2
MDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgbW92
ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpLCByZWdUMSk7CiAgICAgSnVtcCBzdWNj
ZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dD
YXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBh
dGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MTcsMTMgKzYxNiwxMiBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2
ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9u
J3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3Bf
cHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0
aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFp
bCkpOwpAQCAtNjY2LDcgKzY2NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byhTdHIKICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAgICAgCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsg
dGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUu
CiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxs
KTsKQEAgLTY4NCwxMyArNjgyLDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byhTdHIKICAgICB9CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQg
c28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwg
ZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1
YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBh
dGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhl
cmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0g
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJ
bmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAKICAgICAvLyBXZSBkb24ndCB3YW50IHRv
IHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRf
Z2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJu
QWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03
MjMsNyArNzIwLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAog
CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkp
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAg
aWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytp
dGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC03MzEsNyArNzI4LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAgICB9CiAgICAgfSAg
ICAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUg
Y2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFz
dFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBpZiAoIWxhc3RQ
cm90b0JlZ2luKQogICAgICAgICBsYXN0UHJvdG9CZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsK
ICAgICAKQEAgLTc0MCwxNCArNzM3LDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29k
ZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0
KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJl
bCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudElu
ZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBz
dHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBq
dW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVh
ZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRo
QmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwog
ICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNv
ZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0KFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgU3RydWN0dXJlKiBwcm90b3R5cGVTdHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlk
ZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxG
cmFtZSogY2FsbEZyYW1lKQpAQCAtNzg3LDcgKzc4NCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90b0xpc3QKICAgICAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAg
ICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2Nv
ZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBm
b3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsg
aXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgICAgIGlmIChpdGVyLT50
bykKQEAgLTc5NSwyMSArNzkyLDIxIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90b0xpc3QKICAgICAgICAgfQogICAgIH0KICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0
aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBj
YXNlIHJvdXRpbmUuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwcm90
b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2Rl
KCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMSwgbGFzdFByb3RvQmVnaW4p
OwogICAgIHBhdGNoQnVmZmVyLmxpbmsoZmFpbHVyZUNhc2VzMiwgbGFzdFByb3RvQmVnaW4pOwog
ICAgIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2Rl
LCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVs
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVt
KCk7CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgp
OwogCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxs
RnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRy
eUxhYmVsLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZVN0cnVjdHVyZSk7CisgICAgcHJvdG90eXBlU3Ry
dWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBw
cm90b3R5cGVTdHJ1Y3R1cmUpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAg
dG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgog
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgp
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBy
b3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYg
aWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTQsNyArODUxLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlR2V0QnlJZENoYWluTGlzdAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2Rl
QmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9y
IChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0
ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8p
CkBAIC04NjIsMjIgKzg1OSwyMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hh
aW5MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlv
biB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2Fz
ZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90
eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgp
KTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90b0Jl
Z2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGUoKTsKICAgICAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28g
dGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxv
Y2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAg
ICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+
Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5l
LCBzdHJ1Y3R1cmUsIGNoYWluKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
ICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUo
KSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4q
IGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9w
ZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0
dXJuQWRkcmVzcywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC05MjEsNyArOTE4LDcgQEAgdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgICAgICBjb21waWxlR2V0
RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMSwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAg
ICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYg
KG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJh
dG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVy
KSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC05MzUsMTMgKzkzMiwxMyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2
ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgQ29kZVJlZiBz
dHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIHN0dWJJbmZvLT5z
dHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhl
IGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0
ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBh
dGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7
CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBh
dGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUu
Y29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4g
b25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9u
UHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDk0MzU3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFj
ZSBKU0MgewogI2lmIFVTRShKU1ZBTFVFNjQpCiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQ
b29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAg
ICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC03Nyw4ICs3Nyw4IEBAIEpJVDo6Q29kZVB0ciBKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmUKICAgICBqaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJl
Z1QwKTsKICAgICBqaXQucmV0KCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
Z2xvYmFsRGF0YSwgJmppdCwgcG9vbCk7Ci0gICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpLm1fY29kZTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAm
aml0KTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
QEAgLTEyMiw3ICsxMjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0
cnVjCiAgICAgSnVtcCBub25DZWxsID0ganVtcCgpOwogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsg
Ly8gYmFzZSBhcnJheSBjaGVjawogICAgIEp1bXAgbm90U3RyaW5nID0gYnJhbmNoUHRyKE5vdEVx
dWFsLCBBZGRyZXNzKHJlZ1QwKSwgVHJ1c3RlZEltbVB0cihtX2dsb2JhbERhdGEtPmpzU3RyaW5n
VlB0cikpOwotICAgIGVtaXROYWtlZENhbGwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcikpOworICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9u
TGFiZWwobV9nbG9iYWxEYXRhLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRv
cikuY29kZSgpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1Qw
KTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CkBAIC01NTUs
NyArNTU1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwogICAg
IHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xpbmUoKTsKICAgICBDYWxsIGZhaWx1
cmVDYWxsID0gdGFpbFJlY3Vyc2l2ZUNhbGwoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOwor
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3Bf
cHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAKQEAgLTU2
NCwxMCArNTY0LDkgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUHV0QnlJZFRyYW5zaXRpbwog
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fY2FsbHNbMF0uZnJvbSwgRnVuY3Rpb25QdHIoY3Rp
X29wX3B1dF9ieV9pZF90cmFuc2l0aW9uX3JlYWxsb2MpKTsKICAgICB9CiAgICAgCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIGVudHJ5TGFiZWwpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9UcmFtcG9saW5lKHJldHVybkFkZHJlc3MsIENv
ZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLT5zdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9p
ZCBKSVQ6OnBhdGNoR2V0QnlJZFNlbGYoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIHNpemVfdCBjYWNoZWRPZmZz
ZXQsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKQEAgLTYxNSw3ICs2MTQsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgZW1pdEZhc3RBcml0
aEludFRvSW1tTm9DaGVjayhyZWdUMiwgcmVnVDApOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAo
KTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9j
b2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9u
IHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNl
IHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZv
LT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xv
d0Nhc2VDYWxsKTsKQEAgLTYyNiwxMyArNjI1LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVBhdGNoR2V0QXJyYXlMZW4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZv
LT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQp
KTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdp
bGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUu
Y29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNl
IC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNo
QnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIo
Y3RpX29wX2dldF9ieV9pZF9hcnJheV9mYWlsKSk7CkBAIC02NzMsNyArNjcxLDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgIH0gZWxzZQogICAgICAgICBj
b21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsK
ICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7Ci0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFVz
ZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRv
IHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBz
bG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0
KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjkwLDEzICs2ODgsMTIgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvKFN0cgogICAgICAgICB9CiAgICAg
fQogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwg
YmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRp
bmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVy
LmZpbmFsaXplQ29kZSgpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93
IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29k
ZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBB
dE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNo
QnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmso
anVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29k
ZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0g
aW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3Rp
X29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkBAIC03MjYsNyArNzIzLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgICAgICBjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KHJlZ1QwLCByZWdUMCwgc3RydWN0dXJlLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFs
RGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHVi
TGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9
IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTcz
Niw3ICs3MzMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAg
ICAgfQogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWls
dXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENv
ZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFs
YXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJl
dHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2Fs
bCk7CiAKQEAgLTc0NSwxNCArNzQyLDE0IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRTZWxmTGlzdCgKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWJDb2RlID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlKCk7CiAKLSAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVu
dEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUpOworICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIHN0dWJDb2RlLCBzdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5j
b2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlz
dCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc5MSw3ICs3ODgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04MDEsMjAgKzc5OCwyMCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEs
IGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxh
c3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlM
YWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOworICAgIHByb3Rv
dHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlLCBwcm90b3R5
cGVTdHJ1Y3R1cmUpOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNh
c2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxv
Y2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9m
ZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVm
ZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVt
cExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViQ29kZS5jb2RlKCkpKTsKIH0KIAogdm9p
ZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyog
c3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0
dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNo
YWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKQEAgLTg1Nyw3ICs4NTQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlk
Q2hhaW5MaXN0CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJl
Z1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC04NjcsMjIgKzg2NCwyMiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
ZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQ
cm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5z
dHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVM
b2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0u
c3R1YlJvdXRpbmUuY29kZSgpKTsKIAogICAgIHBhdGNoQnVmZmVyLmxpbmsoYnVja2V0c09mRmFp
bCwgbGFzdFByb3RvQmVnaW4pOwogCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0
aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0
byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5o
b3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsK
IAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBz
byB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBwcm90b3R5cGVTdHJ1Y3R1cmVz
LT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgY2hhaW4pOwor
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRp
bmUsIHN0cnVjdHVyZSwgY2hhaW4pOwogCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAg
ICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBj
aGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVy
dHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTI1LDcgKzkyMiw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERp
cmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBz
dWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtOTQx
LDEzICs5MzgsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgog
ICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJl
bEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCiAgICAgLy8gVHJhY2sg
dGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVy
LgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6
ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7
CisgICAgQ29kZVJlZiBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwor
ICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHN0dWJSb3V0aW5lOwogCiAgICAgLy8gRmluYWxs
eSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVt
cCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHVi
SW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hU
b1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2sp
OwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7Cisg
ICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViUm91dGluZS5jb2RlKCkpKTsKIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9y
ZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgog
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBG
dW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTcsOCAr
NzU3LDggQEAgSklUVGh1bmtzOjpKSVRUaHVua3MoSlNHbG9iYWxEYXRhKiBnbG9iYQogICAgIGlm
ICghZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvci5pc1ZhbGlkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEpJVDo6Y29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRh
LCAmbV9leGVjdXRhYmxlUG9vbCwgJm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7Ci0gICAgQVNTRVJU
KG1fZXhlY3V0YWJsZVBvb2wpOworICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IEpJVDo6Y29tcGls
ZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCAmbV90cmFtcG9saW5lU3RydWN0dXJl
KTsKKyAgICBBU1NFUlQoISFtX2V4ZWN1dGFibGVNZW1vcnkpOwogI2lmIENQVShBUk1fVEhVTUIy
KQogICAgIC8vIFVuZm9ydHVuYXRlIHRoZSBhcm0gY29tcGlsZXIgZG9lcyBub3QgbGlrZSB0aGUg
dXNlIG9mIG9mZnNldG9mIG9uIEpJVFN0YWNrRnJhbWUgKHNpbmNlIGl0IGNvbnRhaW5zIG5vbiBQ
T0QgdHlwZXMpLAogICAgIC8vIGFuZCB0aGUgT0JKRUNUX09GRlNFVE9GIG1hY3JvIGRvZXMgbm90
IGFwcGVhciBjb25zdGFudGlzaCBlbm91Z2ggZm9yIGl0IHRvIGJlIGhhcHB5IHdpdGggaXRzIHVz
ZSBpbiBDT01QSUxFX0FTU0VSVApAQCAtMTYwOCw3ICsxNjA4LDcgQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogCiAgICAgICAgIGlmIChzdHViSW5mby0+YWNjZXNz
VHlwZSA9PSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGYpIHsKICAgICAgICAgICAgIEFTU0VSVCghc3R1
YkluZm8tPnN0dWJSb3V0aW5lKTsKLSAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxE
YXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIENvZGVMb2NhdGlvbkxhYmVsKCks
IHN0dWJJbmZvLT51LmdldEJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOworICAg
ICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNz
U3RydWN0dXJlTGlzdChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCksIHN0dWJJbmZvLT51LmdldEJ5SWRT
ZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCkpOwogICAgICAgICAgICAgc3R1YkluZm8tPmlu
aXRHZXRCeUlkU2VsZkxpc3QocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LCAxKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZv
LT51LmdldEJ5SWRTZWxmTGlzdC5zdHJ1Y3R1cmVMaXN0OwpAQCAtMTYzNCwxMiArMTYzNCwxMiBA
QCBzdGF0aWMgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBnCiAgICAgc3dpdGNoIChz
dHViSW5mby0+YWNjZXNzVHlwZSkgewogICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9wcm90bzoK
ICAgICAgICAgcHJvdG90eXBlU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0
cnVjdHVyZUxpc3QoZ2xvYmFsRGF0YSwgb3duZXIsIHN0dWJJbmZvLT5zdHViUm91dGluZSwgc3R1
YkluZm8tPnUuZ2V0QnlJZFByb3RvLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCksIHN0dWJJbmZv
LT51LmdldEJ5SWRQcm90by5wcm90b3R5cGVTdHJ1Y3R1cmUuZ2V0KCkpOwotICAgICAgICBzdHVi
SW5mby0+c3R1YlJvdXRpbmUgPSBDb2RlTG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5m
by0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fzc2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1Yklu
Zm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfY2hhaW46CiAgICAgICAgIHBy
b3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51Lmdl
dEJ5SWRDaGFpbi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlk
Q2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBDb2Rl
TG9jYXRpb25MYWJlbCgpOworICAgICAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYoKTsKICAgICAgICAgc3R1YkluZm8tPmluaXRHZXRCeUlkUHJvdG9MaXN0
KHByb3RvdHlwZVN0cnVjdHVyZUxpc3QsIDIpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfcHJvdG9fbGlzdDoKQEAgLTM1NzIsMTEgKzM1NzIsMTEgQEAgREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIHRvXwogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKS50b09iamVjdChjYWxsRnJhbWUpKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIEpJVFRodW5rczo6Y3RpU3R1YihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVu
a0dlbmVyYXRvciBnZW5lcmF0b3IpCiB7Ci0gICAgc3RkOjpwYWlyPENUSVN0dWJNYXA6Oml0ZXJh
dG9yLCBib29sPiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIoKSk7CisgICAgc3RkOjpwYWlyPENUSVN0dWJNYXA6Oml0ZXJhdG9yLCBib29s
PiBlbnRyeSA9IG1fY3RpU3R1Yk1hcC5hZGQoZ2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYoKSk7CiAgICAgaWYgKGVudHJ5LnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29u
ZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLmdldCgpKTsKKyAgICAg
ICAgZW50cnkuZmlyc3QtPnNlY29uZCA9IGdlbmVyYXRvcihnbG9iYWxEYXRhKTsKICAgICByZXR1
cm4gZW50cnkuZmlyc3QtPnNlY29uZDsKIH0KIApAQCAtMzU4NCw3ICszNTg0LDcgQEAgTmF0aXZl
RXhlY3V0YWJsZSogSklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFpcjxIb3N0
RnVuY3Rpb25TdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0
dWJNYXAtPmFkZChmdW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAo
ISplbnRyeS5maXJzdC0+c2Vjb25kKQotICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgq
Z2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNv
bXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wsIGZ1bmN0aW9u
KSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25z
dHJ1Y3RvcikpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwg
TmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBKSVQ6OmNvbXBpbGVDVElOYXRp
dmVDYWxsKGdsb2JhbERhdGEsIGZ1bmN0aW9uKSwgZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGN0aU5hdGl2ZUNvbnN0cnVjdCgpKSwgY2Fs
bEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNl
Y29uZC5nZXQoKTsKIH0KIApAQCAtMzU5Miw4ICszNTkyLDggQEAgTmF0aXZlRXhlY3V0YWJsZSog
SklUVGh1bmtzOjpob3N0RnVuY3RpbwogewogICAgIHN0ZDo6cGFpcjxIb3N0RnVuY3Rpb25TdHVi
TWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2hvc3RGdW5jdGlvblN0dWJNYXAtPmFkZChm
dW5jdGlvbiwgV2VhazxOYXRpdmVFeGVjdXRhYmxlPigpKTsKICAgICBpZiAoISplbnRyeS5maXJz
dC0+c2Vjb25kKSB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlID0gZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkgPyBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9v
bC5nZXQoKSkgOiBNYWNyb0Fzc2VtYmxlckNvZGVQdHIoKTsKLSAgICAgICAgZW50cnkuZmlyc3Qt
PnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFs
RGF0YSwgY29kZSwgZnVuY3Rpb24sIGN0aU5hdGl2ZUNvbnN0cnVjdCgpLCBjYWxsSG9zdEZ1bmN0
aW9uQXNDb25zdHJ1Y3RvcikpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9
IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEpIDogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmKCk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9i
YWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlO
YXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAg
fQogICAgIHJldHVybiBlbnRyeS5maXJzdC0+c2Vjb25kLmdldCgpOwogfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NCw3ICsyOTQs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aU5h
dGl2ZUNvbnN0cnVjdCgpIHsgcmV0dXJuIG1fdHJhbXBvbGluZVN0cnVjdHVyZS5jdGlOYXRpdmVD
b25zdHJ1Y3Q7IH0KICAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGN0aVNvZnRNb2R1bG8o
KSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpU29mdE1vZHVsbzsgfQogCi0gICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGN0aVN0dWIoSlNHbG9iYWxEYXRhKiwgVGh1bmtHZW5lcmF0b3IpOwogCiAgICAgICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGhvc3RGdW5jdGlvblN0dWIoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVu
Y3Rpb24pOwogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xv
YmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uLCBUaHVua0dlbmVyYXRvcik7CkBAIC0zMDIsMTEgKzMw
MiwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjbGVhckhvc3RGdW5jdGlvblN0
dWJzKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICB0eXBlZGVmIEhhc2hNYXA8VGh1bmtHZW5l
cmF0b3IsIE1hY3JvQXNzZW1ibGVyQ29kZVB0cj4gQ1RJU3R1Yk1hcDsKKyAgICAgICAgdHlwZWRl
ZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY+IENUSVN0dWJN
YXA7CiAgICAgICAgIENUSVN0dWJNYXAgbV9jdGlTdHViTWFwOwogICAgICAgICB0eXBlZGVmIEhh
c2hNYXA8TmF0aXZlRnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4gPiBIb3N0RnVuY3Rp
b25TdHViTWFwOwogICAgICAgICBPd25QdHI8SG9zdEZ1bmN0aW9uU3R1Yk1hcD4gbV9ob3N0RnVu
Y3Rpb25TdHViTWFwOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fZXhlY3V0YWJs
ZVBvb2w7CisgICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBtX2V4ZWN1dGFi
bGVNZW1vcnk7CiAKICAgICAgICAgVHJhbXBvbGluZVN0cnVjdHVyZSBtX3RyYW1wb2xpbmVTdHJ1
Y3R1cmU7CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3BlY2lhbGl6
ZWRUaHVua0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvU3Bl
Y2lhbGl6ZWRUaHVua0pJVC5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvU3BlY2lhbGl6ZWRUaHVua0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxMCAr
MzcsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBTcGVjaWFsaXplZFRodW5rSklUIDog
cHVibGljIEpTSW50ZXJmYWNlSklUIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgVGhpc0FyZ3VtZW50ID0gLTE7Ci0gICAgICAgIFNwZWNpYWxpemVkVGh1bmtKSVQoaW50
IGV4cGVjdGVkQXJnQ291bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCisgICAgICAgIFNwZWNpYWxpemVkVGh1bmtKSVQoaW50IGV4cGVjdGVkQXJnQ291
bnQsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKICAgICAgICAgICAgIDogbV9leHBlY3RlZEFy
Z0NvdW50KGV4cGVjdGVkQXJnQ291bnQpCiAgICAgICAgICAgICAsIG1fZ2xvYmFsRGF0YShnbG9i
YWxEYXRhKQotICAgICAgICAgICAgLCBtX3Bvb2wocG9vbCkKICAgICAgICAgewogICAgICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBoYXZlIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgYXJndW1lbnRz
CiAgICAgICAgICAgICBtX2ZhaWx1cmVzLmFwcGVuZChicmFuY2gzMihOb3RFcXVhbCwgQWRkcmVz
cyhjYWxsRnJhbWVSZWdpc3RlciwgUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50ICogKGludClz
aXplb2YoUmVnaXN0ZXIpKSwgVHJ1c3RlZEltbTMyKGV4cGVjdGVkQXJnQ291bnQgKyAxKSkpOwpA
QCAtMTIzLDEzICsxMjIsMTMgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXQoKTsK
ICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZpbmFs
aXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxi
YWNrKQorICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmluYWxpemUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmFsbGJhY2spCiAgICAgICAgIHsK
LSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0YSwgdGhpcywgbV9w
b29sLmdldCgpKTsKKyAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoZ2xvYmFsRGF0
YSwgdGhpcyk7CiAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKG1fZmFpbHVyZXMsIENvZGVM
b2NhdGlvbkxhYmVsKGZhbGxiYWNrKSk7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9jYWxscy5zaXplKCk7IGkrKykKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5s
aW5rKG1fY2FsbHNbaV0uZmlyc3QsIG1fY2FsbHNbaV0uc2Vjb25kKTsKLSAgICAgICAgICAgIHJl
dHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgICAgICAgICByZXR1
cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBB
c3N1bWVzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiB1c2VzIGZwUmVnaXN0ZXIwIGFzIHRoZSBm
aXJzdCBhcmd1bWVudApAQCAtMTYzLDcgKzE2Miw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICAKICAgICAgICAgaW50IG1fZXhwZWN0ZWRBcmdDb3VudDsKICAgICAgICAgSlNHbG9iYWxEYXRh
KiBtX2dsb2JhbERhdGE7Ci0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9wb29sOwog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgbV9mYWlsdXJlczsKICAgICAgICAgVmVj
dG9yPHN0ZDo6cGFpcjxDYWxsLCBGdW5jdGlvblB0cj4gPiBtX2NhbGxzOwogICAgIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCShyZXZp
c2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3Jz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjYgKzYzLDI2IEBAIHN0YXRpYyB2b2lkIGNoYXJU
b1N0cmluZyhTcGVjaWFsaXplZFRodW4KICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgZHN0KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
LCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1
bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIHN0cmluZ0NoYXJMb2FkKGppdCk7CiAgICAg
aml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICByZXR1cm4g
aml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZl
Q2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJBdFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wp
OworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIHN0cmlu
Z0NoYXJMb2FkKGppdCk7CiAgICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSk7CiAgICAgaml0LnJldHVybkpTQ2VsbChTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZyb21DaGFy
Q29kZVRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVj
aWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICAvLyBsb2FkIGNoYXIgY29kZQogICAg
IGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgY2hhclRvU3RyaW5nKGppdCwgZ2xvYmFsRGF0YSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MSk7CkBAIC05MCwxMSArOTAsMTEgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZyb21DaGFyQ29k
ZVRodW5rRwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEt
PmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIg
c3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBv
b2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAKICAgICBqaXQubG9hZERvdWJs
ZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuc3FydERvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKQEAgLTE3OCwxMiArMTc4LDEy
IEBAIGRlZmluZVVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZyk7CiBkZWZpbmVVbmFyeURvdWJsZU9w
V3JhcHBlcihmbG9vcik7CiBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKTsKIAotTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9v
clRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25J
bnRKdW1wOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpIHx8ICFqaXQuc3Vw
cG9ydHNGbG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVi
cy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
OjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwogICAgIG5vbkludEp1bXAubGluaygmaml0KTsKQEAgLTE5NywxMSAr
MTk3LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG8KICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNlaWxUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9v
bCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYg
KCFVbmFyeURvdWJsZU9wV3JhcHBlcihjZWlsKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50
KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0
dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMjIwLDExICsyMjAsMTEg
QEAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZVplcm9Db25zdGFudAogc3RhdGljIGNvbnN0
IGRvdWJsZSBvbmVDb25zdGFudCA9IDEuMDsKIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVI
YWxmQ29uc3RhbnQgPSAtMC41OwogICAgIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9v
bCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxE
YXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsK
ICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGpzUm91bmQpIHx8ICFqaXQuc3VwcG9ydHNG
bG9hdGluZ1BvaW50KCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVh
dGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZElu
dDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwog
ICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkBAIC0yMzks
MzcgKzIzOSwzNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvCiAg
ICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBleHBUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQor
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKIHsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGV4cCkpCi0gICAgICAg
IHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwotICAgIFNwZWNp
YWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkp
Ci0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiAgICAgaml0Lmxv
YWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LmNhbGxEb3VibGVUb0RvdWJsZShVbmFyeURv
dWJsZU9wV3JhcHBlcihleHApKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OmZwUmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGds
b2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3Jh
cHBlcihsb2cpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29s
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFn
ZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMt
PmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVD
YWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91
YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSk7CiAgICAgaml0LnJldHVybkRv
dWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFs
aXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsK
IH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNw
ZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRG91
YmxlQml0b3BzKCkpCi0gICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0
aXZlQ2FsbCgpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBqaXQubG9hZEludDMy
QXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIG5vbkludEp1bXApOwogICAg
IGppdC5yc2hpZnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigzMSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKQEAgLTI4Niwx
MSArMjg2LDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcigKICAg
ICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHBvd1RodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9i
YWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIsIGdsb2JhbERhdGEsIHBv
b2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDIsIGdsb2JhbERhdGEpOwogICAgIGlm
ICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJz
LT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0LmxvYWREb3VibGUoJm9uZUNvbnN0YW50LCBT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QxKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50
KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
aAkocmV2aXNpb24gOTQzNTcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCArMzEsMjAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgY2xhc3MgRXhlY3V0YWJsZVBvb2w7CiAgICAgY2xhc3MgSlNHbG9iYWxEYXRhOwog
ICAgIGNsYXNzIE5hdGl2ZUV4ZWN1dGFibGU7Ci0gICAgY2xhc3MgTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOworICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjsKIAotICAgIHR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUHRyICgqVGh1bmtHZW5lcmF0b3IpKEpTR2xvYmFsRGF0YSosIEV4ZWN1
dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCop
OwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1
bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fz
c2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRh
YmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBsb2dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0
ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0g
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
LCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOworICAgIHR5cGVkZWYgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmICgqVGh1bmtHZW5lcmF0b3IpKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYWJz
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGNlaWxUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRh
Kik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSopOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHR5cGVkZWYgRXhlY3V0YWJsZUJhc2UgQmFzZTsKIAog
I2lmIEVOQUJMRShKSVQpCi0gICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2FsbFRodW5r
LCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNvbnN0cnVj
dFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKKyAgICAgICAgc3RhdGljIE5hdGl2
ZUV4ZWN1dGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBjYWxsVGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY29uc3RydWN0VGh1bmssIE5hdGl2ZUZ1bmN0aW9uIGNvbnN0cnVjdG9yKQog
ICAgICAgICB7CiAgICAgICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwogICAg
ICAgICAgICAgaWYgKCFjYWxsVGh1bmspCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gOTQzNTcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTIgKzI5LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiRXhlY3V0YWJs
ZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKLSNpbmNsdWRlICJkdG9hLmgiCiAjaW5j
bHVkZSAiSWRlbnRpZmllci5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgImR0b2Eu
aCIKICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CiAKQEAgLTUzLDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVRocmVhZGluZ09uY2Uo
KQogICAgIFdyaXRlQmFycmllckNvdW50ZXJzOjppbml0aWFsaXplKCk7CiAjZW5kaWYKICAgICBK
U0dsb2JhbERhdGE6OnN0b3JlVlB0cnMoKTsKKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0
aWFsaXplQWxsb2NhdG9yKCk7CiAjaWYgRU5BQkxFKEpTQ19NVUxUSVBMRV9USFJFQURTKQogICAg
IFJlZ2lzdGVyRmlsZTo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTg2LDcgKzE4Niw2IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9i
YWxEYXRhKEdsb2JhbERhdGFUeXAKICAgICAsIGVtcHR5TGlzdChuZXcgTWFya2VkQXJndW1lbnRC
dWZmZXIpCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKICAgICAsIGV4ZWN1dGFibGVBbGxvY2F0b3Io
KnRoaXMpCi0gICAgLCByZWdleEFsbG9jYXRvcigqdGhpcykKICNlbmRpZgogICAgICwgbGV4ZXIo
bmV3IExleGVyKHRoaXMpKQogICAgICwgcGFyc2VyKG5ldyBQYXJzZXIpCkBAIC00NDAsNiArNDM5
LDkgQEAgdm9pZCBKU0dsb2JhbERhdGE6OnN0b3BTYW1wbGluZygpCiB2b2lkIEpTR2xvYmFsRGF0
YTo6ZHVtcFNhbXBsZURhdGEoRXhlY1N0YXRlKiBleGVjKQogewogICAgIGludGVycHJldGVyLT5k
dW1wU2FtcGxlRGF0YShleGVjKTsKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCk7CisjZW5kaWYKIH0KIAogdm9pZCBKU0dsb2JhbERh
dGE6OnJlY29tcGlsZUFsbEpTRnVuY3Rpb25zKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiA5NDM1NykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTMsNyArMTkzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogI2lmIEVOQUJMRShBU1NF
TUJMRVIpCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgZXhlY3V0YWJsZUFsbG9jYXRvcjsK
LSAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvciByZWdleEFsbG9jYXRvcjsKICNlbmRpZgogCiAj
aWYgIUVOQUJMRShKSVQpCkBAIC0yMTYsNyArMjE1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBP
d25QdHI8SklUVGh1bmtzPiBqaXRTdHViczsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQorICAgICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgZ2V0Q1RJU3R1YihUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBqaXRTdHVicy0+Y3RpU3R1Yih0aGlzLCBnZW5lcmF0b3Ip
OwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMu
dHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50
eHQJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBTRVQoV1RGX0hFQURFUlMK
ICAgICBNYWxsb2Nab25lU3VwcG9ydC5oCiAgICAgTWF0aEV4dHJhcy5oCiAgICAgTWVzc2FnZVF1
ZXVlLmgKKyAgICBNZXRhQWxsb2NhdG9yLmNwcAorICAgIE1ldGFBbGxvY2F0b3IuaAorICAgIE1l
dGFBbGxvY2F0b3JIYW5kbGUuaAogICAgIE5vbkNvcHlpbmdTb3J0LmgKICAgICBUaHJlYWRSZXN0
cmljdGlvblZlcmlmaWVyLmgKICAgICBOb25jb3B5YWJsZS5oCkBAIC02OSw2ICs3Miw3IEBAIFNF
VChXVEZfSEVBREVSUwogICAgIFBvc3NpYmx5TnVsbC5oCiAgICAgUmFuZG9tTnVtYmVyLmgKICAg
ICBSYW5kb21OdW1iZXJTZWVkLmgKKyAgICBSZWRCbGFja1RyZWUuaAogICAgIFJlZkNvdW50ZWQu
aAogICAgIFJlZkNvdW50ZWRMZWFrQ291bnRlci5oCiAgICAgUmVmUHRyLmgKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWV0
YUFsbG9jYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK01ldGFBbGxvY2F0b3JIYW5kbGU6Ok1ldGFBbGxvY2F0b3JIYW5kbGUoTWV0YUFs
bG9jYXRvciogYWxsb2NhdG9yLCB2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAg
IDogbV9hbGxvY2F0b3IoYWxsb2NhdG9yKQorICAgICwgbV9zdGFydChzdGFydCkKKyAgICAsIG1f
c2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKGFsbG9jYXRvcik7CisgICAg
QVNTRVJUKHN0YXJ0KTsKKyAgICBBU1NFUlQoc2l6ZUluQnl0ZXMpOworfQorCitNZXRhQWxsb2Nh
dG9ySGFuZGxlOjp+TWV0YUFsbG9jYXRvckhhbmRsZSgpCit7CisgICAgaWYgKCFtX2FsbG9jYXRv
cikKKyAgICAgICAgcmV0dXJuOworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0
b3ItPm1fbG9jayk7CisgICAgaWYgKG1fc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgbV9hbGxvY2F0
b3ItPmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kobV9zdGFydCwgbV9zaXplSW5CeXRlcyk7CisgICAg
ICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUobV9zdGFydCwg
bV9zaXplSW5CeXRlcyk7CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3JIYW5kbGU6OnNo
cmluayhzaXplX3QgbmV3U2l6ZUluQnl0ZXMpCit7CisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVz
IDw9IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbV9hbGxvY2F0b3IpIHsKKyAgICAg
ICAgbV9zaXplSW5CeXRlcyA9IG5ld1NpemVJbkJ5dGVzOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9hbGxvY2F0b3ItPm1fbG9jayk7
CisKKyAgICBuZXdTaXplSW5CeXRlcyA9IG1fYWxsb2NhdG9yLT5yb3VuZFVwKG5ld1NpemVJbkJ5
dGVzKTsKKyAgICAKKyAgICBBU1NFUlQobmV3U2l6ZUluQnl0ZXMgPD0gbV9zaXplSW5CeXRlcyk7
CisgICAgCisgICAgaWYgKG5ld1NpemVJbkJ5dGVzID09IG1fc2l6ZUluQnl0ZXMpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICB1aW50cHRyX3QgZnJlZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbmV3U2l6ZUluQnl0ZXM7CisgICAgc2l6ZV90IGZyZWVT
aXplID0gbV9zaXplSW5CeXRlcyAtIG5ld1NpemVJbkJ5dGVzOworICAgIHVpbnRwdHJfdCBmcmVl
RW5kID0gZnJlZVN0YXJ0ICsgZnJlZVNpemU7CisgICAgCisgICAgdWludHB0cl90IGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlID0gKGZyZWVTdGFydCArIG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0g
MSkgJiB+KG1fYWxsb2NhdG9yLT5tX3BhZ2VTaXplIC0gMSk7CisgICAgaWYgKGZpcnN0Q29tcGxl
dGVseUZyZWVQYWdlIDwgZnJlZUVuZCkKKyAgICAgICAgbV9hbGxvY2F0b3ItPmRlY3JlbWVudFBh
Z2VPY2N1cGFuY3kocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oZmlyc3RDb21wbGV0ZWx5RnJlZVBh
Z2UpLCBmcmVlU2l6ZSAtIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSAtIGZyZWVTdGFydCkpOwor
ICAgIAorICAgIG1fYWxsb2NhdG9yLT5hZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oZnJlZVN0YXJ0KSwgZnJlZVNpemUpOworICAgIAorICAgIG1f
c2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKK30KKworTWV0YUFsbG9jYXRvcjo6TWV0YUFs
bG9jYXRvcihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpCisgICAgOiBtX2FsbG9jYXRpb25HcmFu
dWxlKGFsbG9jYXRpb25HcmFudWxlKQorICAgICwgbV9wYWdlU2l6ZShwYWdlU2l6ZSgpKQorICAg
ICwgbV9ieXRlc0FsbG9jYXRlZCgwKQorICAgICwgbV9ieXRlc1Jlc2VydmVkKDApCisgICAgLCBt
X2J5dGVzQ29tbWl0dGVkKDApCisjaWZuZGVmIE5ERUJVRworICAgICwgbV9tYWxsb2NCYWxhbmNl
KDApCisjZW5kaWYKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICAsIG1f
bnVtQWxsb2NhdGlvbnMoMCkKKyAgICAsIG1fbnVtRnJlZXMoMCkKKyNlbmRpZgoreworICAgIG1f
bG9jay5Jbml0KCk7CisgICAgCisgICAgZm9yIChtX2xvZ1BhZ2VTaXplID0gMDsgbV9sb2dQYWdl
U2l6ZSA8IDMyOyArK21fbG9nUGFnZVNpemUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNp
emVfdD4oMSkgPDwgbV9sb2dQYWdlU2l6ZSA9PSBtX3BhZ2VTaXplKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1f
bG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSk7CisgICAgCisgICAgZm9yIChtX2xvZ0FsbG9jYXRp
b25HcmFudWxlID0gMDsgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA8IDMyOyArK21fbG9nQWxsb2Nh
dGlvbkdyYW51bGUpIHsKKyAgICAgICAgaWYgKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgbV9s
b2dBbGxvY2F0aW9uR3JhbnVsZSA9PSBtX2FsbG9jYXRpb25HcmFudWxlKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIAorICAgIEFTU0VSVChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8
IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSk7Cit9CisKK1Bh
c3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4gTWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUoc2l6
ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsK
KworICAgIGlmICghc2l6ZUluQnl0ZXMpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHNp
emVJbkJ5dGVzID0gcm91bmRVcChzaXplSW5CeXRlcyk7CisgICAgCisgICAgdm9pZCogc3RhcnQg
PSBmaW5kQW5kUmVtb3ZlRnJlZVNwYWNlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXN0YXJ0KSB7
CisgICAgICAgIHNpemVfdCByZXF1ZXN0ZWROdW1iZXJPZlBhZ2VzID0gKHNpemVJbkJ5dGVzICsg
bV9wYWdlU2l6ZSAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIHNpemVfdCBudW1iZXJP
ZlBhZ2VzID0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlczsKKyAgICAgICAgCisgICAgICAgIHN0YXJ0
ID0gYWxsb2NhdGVOZXdTcGFjZShudW1iZXJPZlBhZ2VzKTsKKyAgICAgICAgaWYgKCFzdGFydCkK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG51bWJlck9m
UGFnZXMgPj0gcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyk7CisgICAgICAgIAorICAgICAgICBzaXpl
X3Qgcm91bmRlZFVwU2l6ZSA9IG51bWJlck9mUGFnZXMgPDwgbV9sb2dQYWdlU2l6ZTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChyb3VuZGVkVXBTaXplID49IHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgCisgICAgICAgIG1fYnl0ZXNSZXNlcnZlZCArPSByb3VuZGVkVXBTaXplOworICAgICAgICAK
KyAgICAgICAgaWYgKHJvdW5kZWRVcFNpemUgPiBzaXplSW5CeXRlcykgeworICAgICAgICAgICAg
dm9pZCogZnJlZVNwYWNlU3RhcnQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgc2l6
ZV90IGZyZWVTcGFjZVNpemUgPSByb3VuZGVkVXBTaXplIC0gc2l6ZUluQnl0ZXM7CisgICAgICAg
ICAgICBhZGRGcmVlU3BhY2UoZnJlZVNwYWNlU3RhcnQsIGZyZWVTcGFjZVNpemUpOworICAgICAg
ICB9CisgICAgfQorICAgIGluY3JlbWVudFBhZ2VPY2N1cGFuY3koc3RhcnQsIHNpemVJbkJ5dGVz
KTsKKyAgICBtX2J5dGVzQWxsb2NhdGVkICs9IHNpemVJbkJ5dGVzOworI2lmIEVOQUJMRShNRVRB
X0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtQWxsb2NhdGlvbnMrKzsKKyNlbmRpZgorICAg
IHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZSh0aGlzLCBzdGFydCwgc2l6
ZUluQnl0ZXMpKTsKK30KKworTWV0YUFsbG9jYXRvcjo6U3RhdGlzdGljcyBNZXRhQWxsb2NhdG9y
OjpjdXJyZW50U3RhdGlzdGljcygpCit7CisgICAgU3BpbkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xv
Y2spOworICAgIFN0YXRpc3RpY3MgcmVzdWx0OworICAgIHJlc3VsdC5ieXRlc0FsbG9jYXRlZCA9
IG1fYnl0ZXNBbGxvY2F0ZWQ7CisgICAgcmVzdWx0LmJ5dGVzUmVzZXJ2ZWQgPSBtX2J5dGVzUmVz
ZXJ2ZWQ7CisgICAgcmVzdWx0LmJ5dGVzQ29tbWl0dGVkID0gbV9ieXRlc0NvbW1pdHRlZDsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBNZXRhQWxsb2NhdG9yOjpmaW5kQW5kUmVtb3Zl
RnJlZVNwYWNlKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBGcmVlU3BhY2VOb2RlKiBub2Rl
ID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChzaXplSW5C
eXRlcyk7CisgICAgCisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBBU1NFUlQobm9kZS0+a2V5ID49IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgIAorICAgIHZvaWQqIHJlc3VsdDsKKyAgICAKKyAg
ICBpZiAobm9kZS0+a2V5ID09IHNpemVJbkJ5dGVzKSB7CisgICAgICAgIC8vIEVhc3kgY2FzZTog
cGVyZmVjdCBmaXQsIHNvIGp1c3QgcmVtb3ZlIHRoZSBub2RlIGVudGlyZWx5LgorICAgICAgICBy
ZXN1bHQgPSBub2RlLT52YWx1ZTsKKyAgICAgICAgCisgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRB
ZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1ZSk7CisgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSkpOworICAgICAgICBmcmVlRnJlZVNw
YWNlTm9kZShub2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBUcnkgdG8gYmUgYSBnb29k
IGNpdGl6ZW4gYW5kIGVuc3VyZSB0aGF0IHRoZSByZXR1cm5lZCBjaHVuayBvZiBtZW1vcnkKKyAg
ICAgICAgLy8gc3RyYWRkbGVzIGFzIGZldyBwYWdlcyBhcyBwb3NzaWJsZSwgYnV0IG9ubHkgaW5z
b2ZhciBhcyBkb2luZyBzbyB3aWxsCisgICAgICAgIC8vIG5vdCBpbmNyZWFzZSBmcmFnbWVudGF0
aW9uLiBUaGUgaW50dWl0aW9uIGlzIHRoYXQgbWluaW1pemluZworICAgICAgICAvLyBmcmFnbWVu
dGF0aW9uIGlzIGEgc3RyaWN0bHkgaGlnaGVyIHByaW9yaXR5IHRoYW4gbWluaW1pemluZyB0aGUg
bnVtYmVyCisgICAgICAgIC8vIG9mIGNvbW1pdHRlZCBwYWdlcywgc2luY2UgaW4gdGhlIGxvbmcg
cnVuLCBzbWFsbGVyIGZyYWdtZW50YXRpb24gbWVhbnMKKyAgICAgICAgLy8gZmV3ZXIgY29tbWl0
dGVkIHBhZ2VzIGFuZCBmZXdlciBmYWlsdXJlcyBpbiBnZW5lcmFsLgorICAgICAgICAKKyAgICAg
ICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2Rl
LT52YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlID0g
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSAx
KSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgICAgICB1aW50cHRyX3QgbGFzdFBhZ2VGb3JM
ZWZ0QWxsb2NhdGlvbiA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+dmFsdWUp
ICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3Qg
Zmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Pihub2RlLT52YWx1ZSkgKyBub2RlLT5rZXkgLSBzaXplSW5CeXRlcykgPj4gbV9sb2dQYWdlU2l6
ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChsYXN0UGFnZUZvckxlZnRBbGxvY2F0aW9uIC0gZmly
c3RQYWdlICsgMSA8PSBsYXN0UGFnZSAtIGZpcnN0UGFnZUZvclJpZ2h0QWxsb2NhdGlvbiArIDEp
IHsKKyAgICAgICAgICAgIC8vIEFsbG9jYXRlIGluIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHJldHVy
bmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIHJpZ2h0LgorICAgICAgICAgICAg
cmVzdWx0ID0gbm9kZS0+dmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT52YWx1ZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG5vZGUtPmtleSAtPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZh
bHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPnZhbHVlKSArIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNl
U3RhcnRBZGRyZXNzTWFwLmFkZChub2RlLT52YWx1ZSwgbm9kZSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBpbiB0aGUgcmlnaHQgc2l6ZSBvZiB0aGUgcmV0dXJu
ZWQgY2h1bmssIGFuZCBzbGlkZSB0aGUgbm9kZSB0byB0aGUgbGVmdDsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmVzdWx0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KG5vZGUtPnZhbHVlKSArIG5vZGUtPmtleSAtIHNpemVJbkJ5dGVzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92
ZShyZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9k
ZS0+dmFsdWUpICsgbm9kZS0+a2V5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUt
PmtleSAtPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9mcmVlU3Bh
Y2VTaXplTWFwLmluc2VydChub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVz
c01hcC5hZGQocmVzdWx0LCBub2RlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxl
YXNlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIG1fbnVtRnJlZXMrKzsKKyNlbmRpZgorICAg
IG1fYnl0ZXNBbGxvY2F0ZWQgLT0gc2l6ZUluQnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0
LCBzaXplSW5CeXRlcyk7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlc2hGcmVlU3Bh
Y2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBTcGluTG9ja0hvbGRl
ciBsb2NrZXIoJm1fbG9jayk7CisgICAgbV9ieXRlc1Jlc2VydmVkICs9IHNpemVJbkJ5dGVzOwor
ICAgIGFkZEZyZWVTcGFjZShzdGFydCwgc2l6ZUluQnl0ZXMpOworfQorCitzaXplX3QgTWV0YUFs
bG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgU3Bp
bkxvY2tIb2xkZXIgbG9ja2VyKCZtX2xvY2spOworICAgIHNpemVfdCByZXN1bHQgPSAwOworICAg
IGZvciAoRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maXJzdCgpOyBu
b2RlOyBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLnN1Y2Nlc3Nvcihub2RlKSkKKyAgICAgICAg
cmVzdWx0ICs9IG5vZGUtPmtleTsKKyAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBDUkFT
SCgpOworICAgIHJldHVybiAwOworI2VuZGlmCit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRk
RnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgdm9pZCog
ZW5kID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3Bh
Y2VOb2RlKj46Oml0ZXJhdG9yIGxlZnROZWlnaGJvciA9IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01h
cC5maW5kKHN0YXJ0KTsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj46Oml0ZXJh
dG9yIHJpZ2h0TmVpZ2hib3IgPSBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5maW5kKGVuZCk7
CisgICAgCisgICAgaWYgKGxlZnROZWlnaGJvciAhPSBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAu
ZW5kKCkpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgd2UgY2FuIGNvYWxlc2NlIHdp
dGggb24gdGhlIGxlZnQuIFJlbW92ZSBpdCBmcm9tIHRoZSB0cmVlLCBhbmQKKyAgICAgICAgLy8g
cmVtb3ZlIGl0cyBlbmQgZnJvbSB0aGUgZW5kIGFkZHJlc3MgbWFwLgorICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90PihsZWZ0TmVpZ2hib3ItPnNlY29uZC0+dmFsdWUpICsgbGVmdE5laWdoYm9yLT5zZWNvbmQt
PmtleSkgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIAorICAgICAgICBGcmVlU3Bh
Y2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAKKyAgICAg
ICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPnZhbHVlOworICAgICAgICBzaXplX3QgbGVm
dFNpemUgPSBsZWZ0Tm9kZS0+a2V5OworICAgICAgICB2b2lkKiBsZWZ0RW5kID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBs
ZWZ0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQobGVmdEVuZCA9PSBzdGFydCk7Cisg
ICAgICAgIAorICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKGxlZnROb2RlKTsKKyAg
ICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLnJlbW92ZShsZWZ0RW5kKTsKKyAgICAgICAg
CisgICAgICAgIC8vIE5vdyBjaGVjayBpZiB0aGVyZSBpcyBhbHNvIHNvbWV0aGluZyB0byBjb2Fs
ZXNjZSB3aXRoIG9uIHRoZSByaWdodC4KKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9m
cmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIC8vIEZyZWVpbmcg
c29tZXRoaW5nIGluIHRoZSBtaWRkbGUgb2YgZnJlZSBibG9ja3MuIENvYWxlc2NlIGJvdGggbGVm
dCBhbmQKKyAgICAgICAgICAgIC8vIHJpZ2h0LCB3aGlsc3QgcmVtb3ZpbmcgdGhlIHJpZ2h0IG5l
aWdoYm9yIGZyb20gdGhlIG1hcHMuCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChy
aWdodE5laWdoYm9yLT5zZWNvbmQtPnZhbHVlID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHRO
ZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVp
Z2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+
a2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQq
PihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOworICAg
ICAgICAgICAgQVNTRVJUKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNpemUgKyBzaXplSW5CeXRlcyArIHJpZ2h0U2l6
ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNp
emVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRk
cmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFk
ZHJlc3NNYXAucmVtb3ZlKHJpZ2h0RW5kKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJl
ZUZyZWVTcGFjZU5vZGUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGVm
dE5vZGUtPmtleSArPSBzaXplSW5CeXRlcyArIHJpZ2h0U2l6ZTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLmluc2VydChsZWZ0Tm9kZSk7CisgICAgICAgICAg
ICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAuYWRkKHJpZ2h0RW5kLCBsZWZ0Tm9kZSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZWZ0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnRO
b2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBsZWZ0
Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYW5ub3QgY29hbGVz
Y2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0Lgor
ICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFk
ZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9
IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSBy
aWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdo
dE5vZGUtPmtleTsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0RW5kID0gcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHJpZ2h0U3RhcnQpICsgcmlnaHRT
aXplKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQVNTRVJUKHJpZ2h0U3RhcnQgPT0gZW5k
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocmlnaHRFbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCkgKyBzaXplSW5CeXRlcyAr
IHJpZ2h0U2l6ZSkgPT0gcmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2Zy
ZWVTcGFjZVNpemVNYXAucmVtb3ZlKHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUocmlnaHRTdGFydCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHJpZ2h0Tm9kZS0+a2V5ICs9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgcmlnaHRO
b2RlLT52YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0
QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxlc2NlIHdpdGgsIHNvIGNyZWF0ZSBhIG5ldyBmcmVl
IHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNw
YWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBub2RlLT5rZXkgPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIG5vZGUtPnZhbHVl
ID0gc3RhcnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5p
bnNlcnQobm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQo
c3RhcnQsIG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChl
bmQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6Omlu
Y3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQor
eworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
YWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBt
X2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7
IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwg
c2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOwor
ICAgICAgICBpZiAoaXRlciA9PSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpIHsKKyAgICAgICAg
ICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5hZGQocGFnZSwgMSk7CisgICAgICAgICAgICBtX2J5dGVz
Q29tbWl0dGVkICs9IG1fcGFnZVNpemU7CisgICAgICAgICAgICBub3RpZnlOZWVkUGFnZShyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihwYWdlIDw8IG1fbG9nUGFnZVNpemUpKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQrKzsKKyAgICB9Cit9CisKK3ZvaWQgTWV0YUFs
bG9jYXRvcjo6ZGVjcmVtZW50UGFnZU9jY3VwYW5jeSh2b2lkKiBhZGRyZXNzLCBzaXplX3Qgc2l6
ZUluQnl0ZXMpCit7CisgICAgdWludHB0cl90IGZpcnN0UGFnZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihhZGRyZXNzKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIHVpbnRwdHJfdCBsYXN0
UGFnZSA9IChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgKyBzaXplSW5CeXRl
cyAtIDEpID4+IG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgZm9yICh1aW50cHRyX3QgcGFnZSA9
IGZpcnN0UGFnZTsgcGFnZSA8PSBsYXN0UGFnZTsgKytwYWdlKSB7CisgICAgICAgIEhhc2hNYXA8
dWludHB0cl90LCBzaXplX3Q+OjppdGVyYXRvciBpdGVyID0gbV9wYWdlT2NjdXBhbmN5TWFwLmZp
bmQocGFnZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fcGFnZU9jY3VwYW5jeU1hcC5lbmQo
KSk7CisgICAgICAgIGlmICghLS0oaXRlci0+c2Vjb25kKSkgeworICAgICAgICAgICAgbV9wYWdl
T2NjdXBhbmN5TWFwLnJlbW92ZShpdGVyKTsKKyAgICAgICAgICAgIG1fYnl0ZXNDb21taXR0ZWQg
LT0gbV9wYWdlU2l6ZTsKKyAgICAgICAgICAgIG5vdGlmeVBhZ2VJc0ZyZWUocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpyb3VuZFVwKHNpemVfdCBzaXplSW5CeXRlcykKK3sK
KyAgICBpZiAoc3RkOjpudW1lcmljX2xpbWl0czxzaXplX3Q+OjptYXgoKSAtIG1fYWxsb2NhdGlv
bkdyYW51bGUgPD0gc2l6ZUluQnl0ZXMpCisgICAgICAgIENSQVNIKCk7CisgICAgcmV0dXJuIChz
aXplSW5CeXRlcyArIG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKSAmIH4obV9hbGxvY2F0aW9uR3Jh
bnVsZSAtIDEpOworfQorCitNZXRhQWxsb2NhdG9yOjpGcmVlU3BhY2VOb2RlKiBNZXRhQWxsb2Nh
dG9yOjphbGxvY0ZyZWVTcGFjZU5vZGUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBtX21hbGxv
Y0JhbGFuY2UrKzsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxGcmVlU3BhY2VOb2Rl
Kj4oZmFzdE1hbGxvYyhzaXplb2YoRnJlZVNwYWNlTm9kZSkpKTsKK30KKwordm9pZCBNZXRhQWxs
b2NhdG9yOjpmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKiBub2RlKQoreworI2lmbmRl
ZiBOREVCVUcKKyAgICBtX21hbGxvY0JhbGFuY2UtLTsKKyNlbmRpZgorICAgIGZhc3RGcmVlKG5v
ZGUpOworfQorCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIE1ldGFB
bGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKK3sKKyAgICBwcmludGYoIm51bSBhbGxvY2F0aW9ucyA9
ICV1LCBudW0gZnJlZXMgPSAldVxuIiwgbV9udW1BbGxvY2F0aW9ucywgbV9udW1GcmVlcyk7Cit9
CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV1RGX01ldGFBbGxvY2F0b3JfaAorI2RlZmluZSBXVEZfTWV0YUFsbG9j
YXRvcl9oCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiSGFzaE1hcC5oIgor
I2luY2x1ZGUgIk1ldGFBbGxvY2F0b3JIYW5kbGUuaCIKKyNpbmNsdWRlICJOb25jb3B5YWJsZS5o
IgorI2luY2x1ZGUgIlBhZ2VCbG9jay5oIgorI2luY2x1ZGUgIlJlZEJsYWNrVHJlZS5oIgorI2lu
Y2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJSZWZQdHIuaCIKKyNpbmNsdWRlICJUQ1Nw
aW5Mb2NrLmgiCisKK25hbWVzcGFjZSBXVEYgeworCisjZGVmaW5lIEVOQUJMRV9NRVRBX0FMTE9D
QVRPUl9QUk9GSUxFIDAKKworY2xhc3MgTWV0YUFsbG9jYXRvciB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoTWV0YUFsbG9jYXRvcik7CitwdWJsaWM6CisgICAgCisgICAgTWV0YUFsbG9jYXRv
cihzaXplX3QgYWxsb2NhdGlvbkdyYW51bGUpOworICAgIAorICAgIHZpcnR1YWwgfk1ldGFBbGxv
Y2F0b3IoKTsKKyAgICAKKyAgICBQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IGFsbG9j
YXRlKHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gTm9uLWF0b21pYyBtZXRob2Rz
IGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHNpemVfdCBieXRlc0FsbG9j
YXRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNBbGxvY2F0ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNSZXNl
cnZlZCgpIHsgcmV0dXJuIG1fYnl0ZXNSZXNlcnZlZDsgfQorICAgIHNpemVfdCBieXRlc0NvbW1p
dHRlZCgpIHsgcmV0dXJuIG1fYnl0ZXNDb21taXR0ZWQ7IH0KKyAgICAKKyAgICAvLyBBdG9taWMg
bWV0aG9kIGZvciBnZXR0aW5nIGFsbG9jYXRvciBzdGF0aXN0aWNzLgorICAgIHN0cnVjdCBTdGF0
aXN0aWNzIHsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQWxsb2NhdGVkOworICAgICAgICBzaXplX3Qg
Ynl0ZXNSZXNlcnZlZDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzQ29tbWl0dGVkOworICAgIH07Cisg
ICAgU3RhdGlzdGljcyBjdXJyZW50U3RhdGlzdGljcygpOworCisgICAgLy8gQWRkIG1vcmUgZnJl
ZSBzcGFjZSB0byB0aGUgYWxsb2NhdG9yLiBDYWxsIHRoaXMgZGlyZWN0bHkgZnJvbQorICAgIC8v
IHRoZSBjb25zdHJ1Y3RvciBpZiB5b3Ugd2lzaCB0byBvcGVyYXRlIHRoZSBhbGxvY2F0b3Igd2l0
aGluIGEKKyAgICAvLyBmaXhlZCBwb29sLgorICAgIHZvaWQgYWRkRnJlc2hGcmVlU3BhY2Uodm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisKKyAgICAvLyBUaGlzIGlzIG1lYW50IG9u
bHkgZm9yIGltcGxlbWVudGluZyB0ZXN0cy4gTmV2ZXIgY2FsbCB0aGlzIGluIHJlbGVhc2UKKyAg
ICAvLyBidWlsZHMuCisgICAgc2l6ZV90IGRlYnVnRnJlZVNwYWNlU2l6ZSgpOworICAgIAorI2lm
IEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKTsK
KyNlbHNlCisgICAgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoK
KyAgICAKKyAgICAvLyBBbGxvY2F0ZSBuZXcgdmlydHVhbCBzcGFjZSwgYnV0IGRvbid0IGNvbW1p
dC4gVGhpcyBtYXkgcmV0dXJuIG1vcmUKKyAgICAvLyBwYWdlcyB0aGFuIHdlIGFza2VkLCBpbiB3
aGljaCBjYXNlIG51bVBhZ2VzIGlzIGNoYW5nZWQuCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0
ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpID0gMDsKKyAgICAKKyAgICAvLyBDb21taXQgYSBw
YWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKSA9IDA7Cisg
ICAgCisgICAgLy8gVW5jb21taXQgYSBwYWdlLgorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdl
SXNGcmVlKHZvaWQqIHBhZ2UpID0gMDsKKyAgICAKKyAgICAvLyBOT1RFOiBub25lIG9mIHRoZSBh
Ym92ZSBtZXRob2RzIGFyZSBjYWxsZWQgZHVyaW5nIGFsbG9jYXRvcgorICAgIC8vIGRlc3RydWN0
aW9uLCBpbiBwYXJ0IGJlY2F1c2UgYSBNZXRhQWxsb2NhdG9yIGNhbm5vdCBkaWUgc28gbG9uZwor
ICAgIC8vIGFzIHRoZXJlIGFyZSBIYW5kbGVzIHRoYXQgcmVmZXIgdG8gaXQuCisKK3ByaXZhdGU6
CisgICAgCisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU7CisgICAgCisgICAg
dHlwZWRlZiBSZWRCbGFja1RyZWU8c2l6ZV90LCB2b2lkKj4gVHJlZTsKKyAgICB0eXBlZGVmIFRy
ZWU6Ok5vZGUgRnJlZVNwYWNlTm9kZTsKKyAgICAKKyAgICAvLyBSZW1vdmUgZnJlZSBzcGFjZSBm
cm9tIHRoZSBhbGxvY2F0b3IuIFRoaXMgaXMgZWZmZWN0aXZlbHkKKyAgICAvLyB0aGUgYWxsb2Nh
dGUoKSBmdW5jdGlvbiwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgbWFyayB0aGUKKyAgICAvLyBy
ZXR1cm5lZCBzcGFjZSBhcyBiZWluZyBpbi11c2UuCisgICAgdm9pZCogZmluZEFuZFJlbW92ZUZy
ZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworCisgICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hl
biBtZW1vcnkgZnJvbSBhbiBhbGxvY2F0aW9uIGlzIGZyZWVkLgorICAgIHZvaWQgYWRkRnJlZVNw
YWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIAorICAgIC8vIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBvZiBhZGRp
bmcgZnJlZSBzcGFjZTsgaXQKKyAgICAvLyBpcyBjYWxsZWQgZnJvbSBib3RoIGFkZEZyZWVTcGFj
ZUZyb21SZWxlYXNlZEhhbmRsZSBhbmQgZnJvbQorICAgIC8vIGFkZEZyZXNoRnJlZVNwYWNlLgor
ICAgIHZvaWQgYWRkRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIAorICAgIC8vIE1hbmFnZW1lbnQgb2YgdXNlZCBzcGFjZS4KKyAgICAKKyAgICB2b2lkIGlu
Y3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKTsK
KyAgICB2b2lkIGRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNp
emVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBVdGlsaXRpZXMuCisgICAgCisgICAgc2l6ZV90IHJv
dW5kVXAoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBGcmVlU3BhY2VOb2RlKiBhbGxv
Y0ZyZWVTcGFjZU5vZGUoKTsKKyAgICB2b2lkIGZyZWVGcmVlU3BhY2VOb2RlKEZyZWVTcGFjZU5v
ZGUqKTsKKyAgICAKKyAgICBzaXplX3QgbV9hbGxvY2F0aW9uR3JhbnVsZTsKKyAgICB1bnNpZ25l
ZCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlOworICAgIHNpemVfdCBtX3BhZ2VTaXplOworICAgIHVu
c2lnbmVkIG1fbG9nUGFnZVNpemU7CisgICAgCisgICAgVHJlZSBtX2ZyZWVTcGFjZVNpemVNYXA7
CisgICAgSGFzaE1hcDx2b2lkKiwgRnJlZVNwYWNlTm9kZSo+IG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFjZUVu
ZEFkZHJlc3NNYXA7CisgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD4gbV9wYWdlT2NjdXBh
bmN5TWFwOworICAgIAorICAgIHNpemVfdCBtX2J5dGVzQWxsb2NhdGVkOworICAgIHNpemVfdCBt
X2J5dGVzUmVzZXJ2ZWQ7CisgICAgc2l6ZV90IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgCisgICAg
U3BpbkxvY2sgbV9sb2NrOworCisjaWZuZGVmIE5ERUJVRworICAgIHNpemVfdCBtX21hbGxvY0Jh
bGFuY2U7CisjZW5kaWYKKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQorICAg
IHVuc2lnbmVkIG1fbnVtQWxsb2NhdGlvbnM7CisgICAgdW5zaWduZWQgbV9udW1GcmVlczsKKyNl
bmRpZgorfTsKKworaW5saW5lIE1ldGFBbGxvY2F0b3I6On5NZXRhQWxsb2NhdG9yKCkKK3sKKyAg
ICBmb3IgKEZyZWVTcGFjZU5vZGUqIG5vZGUgPSBtX2ZyZWVTcGFjZVNpemVNYXAuZmlyc3QoKTsg
bm9kZTspIHsKKyAgICAgICAgRnJlZVNwYWNlTm9kZSogbmV4dCA9IG1fZnJlZVNwYWNlU2l6ZU1h
cC5zdWNjZXNzb3Iobm9kZSk7CisgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUobm9k
ZSk7CisgICAgICAgIGZyZWVGcmVlU3BhY2VOb2RlKG5vZGUpOworICAgICAgICBub2RlID0gbmV4
dDsKKyAgICB9CisjaWZuZGVmIE5ERUJVRworICAgIEFTU0VSVCghbV9tYWxsb2NCYWxhbmNlKTsK
KyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFdURl9NZXRhQWxs
b2NhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxs
b2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1
dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAor
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
KyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXVEZfTWV0YUFsbG9jYXRvckhhbmRsZV9oCisjZGVmaW5lIFdURl9NZXRhQWxsb2Nh
dG9ySGFuZGxlX2gKKworI2luY2x1ZGUgIkFzc2VydGlvbnMuaCIKKyNpbmNsdWRlICJSZWZDb3Vu
dGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgiCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBN
ZXRhQWxsb2NhdG9yOworCitjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlOiBwdWJsaWMgUmVmQ291
bnRlZDxNZXRhQWxsb2NhdG9ySGFuZGxlPiB7Citwcml2YXRlOgorICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUoTWV0YUFsbG9jYXRvciosIHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOwor
ICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5C
eXRlcykKKyAgICAgICAgOiBtX2FsbG9jYXRvcigwKQorICAgICAgICAsIG1fc3RhcnQoc3RhcnQp
CisgICAgICAgICwgbV9zaXplSW5CeXRlcyhzaXplSW5CeXRlcykKKyAgICB7CisgICAgICAgIEFT
U0VSVChzdGFydCk7CisgICAgfQorICAgIAorcHVibGljOgorICAgIH5NZXRhQWxsb2NhdG9ySGFu
ZGxlKCk7CisgICAgCisgICAgc3RhdGljIFBhc3NSZWZQdHI8TWV0YUFsbG9jYXRvckhhbmRsZT4g
Y3JlYXRlU2VsZk1hbmFnZWRIYW5kbGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTWV0YUFsbG9jYXRvckhhbmRsZShz
dGFydCwgc2l6ZUluQnl0ZXMpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCogc3RhcnQoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CisgICAgfQorICAgIAorICAgIHZvaWQqIGVuZCgp
CisgICAgeworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG1fc3RhcnQpICsgbV9zaXplSW5CeXRlcyk7CisgICAgfQorICAg
ICAgICAKKyAgICBzaXplX3Qgc2l6ZUluQnl0ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
c2l6ZUluQnl0ZXM7CisgICAgfQorICAgICAgICAKKyAgICB2b2lkIHNocmluayhzaXplX3QgbmV3
U2l6ZUluQnl0ZXMpOworICAgIAorICAgIGJvb2wgaXNNYW5hZ2VkKCkKKyAgICB7CisgICAgICAg
IHJldHVybiAhIW1fYWxsb2NhdG9yOworICAgIH0KKyAgICAgICAgCisgICAgTWV0YUFsbG9jYXRv
ciogYWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2FsbG9jYXRvcik7CisgICAg
ICAgIHJldHVybiBtX2FsbG9jYXRvcjsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBNZXRhQWxsb2NhdG9yOworICAgIAorICAgIE1ldGFBbGxvY2F0b3IqIG1fYWxsb2Nh
dG9yOworICAgIHZvaWQqIG1fc3RhcnQ7CisgICAgc2l6ZV90IG1fc2l6ZUluQnl0ZXM7Cit9Owor
Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1Ry
ZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJl
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWRCbGFja1Ry
ZWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEJhc2VkIG9uIFJl
ZC1CbGFjayB0cmVlIGltcGxlbWVudGF0aW9uIGJ5IEVtaW4gTWFydGluaWFuCisgKiAtIGh0dHA6
Ly93d3cubWl0LmVkdS9+ZW1pbi9zb3VyY2VfY29kZS9pbmRleC5odG1sICAgICAgICAgCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBSZWRCbGFja1RyZWVfaAorI2RlZmluZSBSZWRCbGFja1RyZWVfaAorCisjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgorI2luY2x1ZGUgIk5vbmNvcHlhYmxlLmgiCisKK25hbWVzcGFjZSBXVEYgewor
CisvLyBUaGlzIGltcGxlbWVudHMgYSByZWQtYmxhY2sgdHJlZSB3aXRoIHRoZSBmb2xsb3dpbmcg
cHJvcGVydGllczoKKy8vIC0gVGhlIGFsbG9jYXRpb24gb2Ygbm9kZXMgaW4gdGhlIHRyZWUgaXMg
ZW50aXJlbHkgdXAgdG8gdGhlIHVzZXIuCisvLyAtIElmIHlvdSBhcmUgaW4gcG9zc2Vzc2lvbiBv
ZiBhIHBvaW50ZXIgdG8gYSBub2RlLCB5b3UgY2FuIGRlbGV0ZQorLy8gICBpdCBmcm9tIHRoZSB0
cmVlLiBUaGUgdHJlZSB3aWxsIHN1YnNlcXVlbnRseSBubyBsb25nZXIgaGF2ZSBhCisvLyAgIHJl
ZmVyZW5jZSB0byB0aGlzIG5vZGUuCisvLyAtIFRoZSBrZXkgdHlwZSBtdXN0IGltcGxlbWVudCBv
cGVyYXRvcjwgYW5kID09LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBW
YWx1ZVR5cGU+CitjbGFzcyBSZWRCbGFja1RyZWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFJlZEJsYWNrVHJlZSk7CitwdWJsaWM6CisgICAgY2xhc3MgUmF3Tm9kZSB7CisgICAgICAgIGZy
aWVuZCBjbGFzcyBSZWRCbGFja1RyZWU7CisgICAgICAgIAorICAgICAgICAvLyBOT1RFOiB0aGVz
ZSBtZXRob2RzIHNob3VsZCBwYWNrIHRoZSBwYXJlbnQgYW5kIHJlZCBpbnRvIGEgc2luZ2xlCisg
ICAgICAgIC8vIHdvcmQuIEJ1dCBkb2luZyBzbyBhcHBlYXJzIHRvIHJldmVhbCBhIGJ1ZyBpbiB0
aGUgY29tcGlsZXIuCisgICAgICAgIFJhd05vZGUqIHBhcmVudCgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3BhcmVudDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgUmF3Tm9kZSogc2V0UGFyZW50KFJhd05vZGUqIG5ld1BhcmVudCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fcGFyZW50ID0gbmV3UGFyZW50OworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBib29sIGlzUmVkKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fcmVkOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIHNldFJlZChib29s
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9yZWQgPSB2YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgUmF3Tm9kZSogbV9sZWZ0OworICAgICAgICBSYXdO
b2RlKiBtX3JpZ2h0OworICAgICAgICBSYXdOb2RlKiBtX3BhcmVudDsKKyAgICAgICAgYm9vbCBt
X3JlZDsKKyAgICB9OworICAgIAorICAgIGNsYXNzIE5vZGU6IHB1YmxpYyBSYXdOb2RlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEtleVR5cGUga2V5OworICAgICAgICBWYWx1ZVR5cGUgdmFsdWU7
CisgICAgfTsKKyAgICAKKyAgICBSZWRCbGFja1RyZWUoKQorICAgIHsKKyAgICAgICAgbV9uaWxT
ZW50aW5lbC5zZXRQYXJlbnQoJm1fbmlsU2VudGluZWwpOworICAgICAgICBtX25pbFNlbnRpbmVs
Lm1fbGVmdCA9ICZtX25pbFNlbnRpbmVsOworICAgICAgICBtX25pbFNlbnRpbmVsLm1fcmlnaHQg
PSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9uaWxTZW50aW5lbC5zZXRSZWQoZmFsc2UpOwor
ICAgICAgICAKKyAgICAgICAgbV9yb290LnNldFBhcmVudCgmbV9uaWxTZW50aW5lbCk7CisgICAg
ICAgIG1fcm9vdC5tX2xlZnQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290Lm1fcmln
aHQgPSAmbV9uaWxTZW50aW5lbDsKKyAgICAgICAgbV9yb290LnNldFJlZChmYWxzZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgaW5zZXJ0KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpbnNl
cnRIZWxwKG5vZGUpOworCisgICAgICAgIFJhd05vZGUqIHggPSBub2RlOworICAgICAgICBSYXdO
b2RlKiB5OworICAgICAgICAKKyAgICAgICAgeC0+c2V0UmVkKHRydWUpOworICAgICAgICB3aGls
ZSAoeC0+cGFyZW50KCktPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIGlmICh4LT5wYXJlbnQoKSA9
PSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fbGVmdCkgeworICAgICAgICAgICAgICAgIHkgPSB4
LT5wYXJlbnQoKS0+cGFyZW50KCktPm1fcmlnaHQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlz
UmVkKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7
CisgICAgICAgICAgICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAg
ICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAg
ICAgICB4ID0geC0+cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX3JpZ2h0KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIHgtPnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAg
ICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICB9
IAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB5ID0geC0+cGFyZW50KCkt
PnBhcmVudCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgaWYgKHktPmlzUmVkKCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgICAgIHktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVu
dCgpLT5wYXJlbnQoKS0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB4ID0geC0+
cGFyZW50KCktPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5tX2xlZnQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHggPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0
Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHgt
PnBhcmVudCgpLT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQo
KS0+cGFyZW50KCktPnNldFJlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0
ZSh4LT5wYXJlbnQoKS0+cGFyZW50KCkpOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgcm9vdCgpLT5tX2xlZnQtPnNldFJlZChmYWxzZSk7Cisg
ICAgICAgIAorICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgICAg
ICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgfQorICAgIAorICAgIE5vZGUqIHJlbW92
ZShOb2RlKiB6KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogeTsKKyAgICAgICAgUmF3Tm9kZSog
eDsKKworICAgICAgICB5ID0gKHotPm1fbGVmdCA9PSBuaWxTZW50aW5lbCgpIHx8IHotPm1fcmln
aHQgPT0gbmlsU2VudGluZWwoKSkgPyB6IDogc3VjY2Vzc29ySW50ZXJuYWwoeik7CisgICAgICAg
IHggPSB5LT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKSA/IHktPm1fcmlnaHQgOiB5LT5tX2xlZnQ7
CisgICAgICAgIGlmIChyb290KCkgPT0geC0+c2V0UGFyZW50KHktPnBhcmVudCgpKSkKKyAgICAg
ICAgICAgIHJvb3QoKS0+bV9sZWZ0ID0geDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgICAgIHktPnBhcmVudCgp
LT5tX2xlZnQgPSB4OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHktPnBhcmVu
dCgpLT5tX3JpZ2h0ID0geDsKKyAgICAgICAgfQorICAgICAgICBpZiAoeSAhPSB6KSB7CisgICAg
ICAgICAgICBBU1NFUlQoeSAhPSBuaWxTZW50aW5lbCgpKTsKKworICAgICAgICAgICAgaWYgKCF5
LT5pc1JlZCgpKQorICAgICAgICAgICAgICAgIHJlbW92ZUZpeFVwKHgpOworICAKKyAgICAgICAg
ICAgIHktPm1fbGVmdCA9IHotPm1fbGVmdDsKKyAgICAgICAgICAgIHktPm1fcmlnaHQgPSB6LT5t
X3JpZ2h0OworICAgICAgICAgICAgeS0+c2V0UGFyZW50KHotPnBhcmVudCgpKTsKKyAgICAgICAg
ICAgIHktPnNldFJlZCh6LT5pc1JlZCgpKTsKKyAgICAgICAgICAgIHotPm1fbGVmdC0+c2V0UGFy
ZW50KHotPm1fcmlnaHQtPnNldFBhcmVudCh5KSk7CisgICAgICAgICAgICBpZiAoeiA9PSB6LT5w
YXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgICAgIHotPnBhcmVudCgpLT5tX2xlZnQgPSB5
OyAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB6LT5wYXJlbnQoKS0+bV9yaWdo
dCA9IHk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIXktPmlzUmVkKCkpCisg
ICAgICAgICAgICAgICAgcmVtb3ZlRml4VXAoeCk7CisgICAgICAgIH0KKyAgCisgICAgICAgIEFT
U0VSVCghcm9vdCgpLT5pc1JlZCgpKTsKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5p
c1JlZCgpKTsKKworICAgICAgICByZXR1cm4gejsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmly
c3QoKQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogbm9kZSA9IHJvb3QoKS0+bV9sZWZ0OworICAg
ICAgICBpZiAobm9kZSA9PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBSYXdOb2RlKiBuZXh0ID0gbm9kZS0+
bV9sZWZ0OworICAgICAgICAgICAgaWYgKG5leHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gYXNOb2RlKG5vZGUpOworICAgICAgICAgICAgbm9kZSA9IG5leHQ7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgTm9kZSogbGFzdCgpCisgICAgeworICAgICAgICBS
YXdOb2RlKiBub2RlID0gcm9vdCgpLT5tX2xlZnQ7CisgICAgICAgIGlmIChub2RlID09IG5pbFNl
bnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsK
KyAgICAgICAgICAgIFJhd05vZGUqIG5leHQgPSBub2RlLT5tX3JpZ2h0OworICAgICAgICAgICAg
aWYgKG5leHQgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXNOb2Rl
KG5vZGUpOworICAgICAgICAgICAgbm9kZSA9IG5leHQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgTm9kZSogc3VjY2Vzc29yKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBSYXdOb2Rl
KiByZXN1bHQgPSBzdWNjZXNzb3JJbnRlcm5hbChub2RlKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9
PSBuaWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBh
c05vZGUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogcHJlZGVjZXNzb3IoTm9kZSog
bm9kZSkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHggPSBub2RlOworICAgICAgICBSYXdOb2Rl
KiB5OworCisgICAgICAgIGlmIChuaWxTZW50aW5lbCgpICE9ICh5ID0geC0+bV9sZWZ0KSkgewor
ICAgICAgICAgICAgd2hpbGUgKHktPm1fcmlnaHQgIT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAg
ICAgICAgICB5ID0geS0+bV9yaWdodDsKKyAgICAgICAgICAgIHJldHVybiBhc05vZGUoeSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgd2hp
bGUgKHggPT0geS0+bV9sZWZ0KSB7IAorICAgICAgICAgICAgaWYgKHkgPT0gcm9vdCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICB5
ID0geS0+cGFyZW50KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHkgPT0gbmlsU2VudGluZWwo
KSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gYXNOb2RlKHkpOworICAg
IH0KKyAgICAKKyAgICBOb2RlKiBmaW5kRXhhY3QoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsK
KyAgICAgICAgUmF3Tm9kZSogeCA9IHJvb3QoKS0+bV9sZWZ0OworICAgICAgICBpZiAoeCA9PSBu
aWxTZW50aW5lbCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHdoaWxlICghKGFz
Tm9kZSh4KS0+a2V5ID09IGtleSkpIHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoeCktPmtleSA+
IGtleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICAgICAgaWYgKHggPT0gbmls
U2VudGluZWwoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gYXNOb2RlKHgpOworICAgIH0KKyAgICAKKyAgICBOb2RlKiByZW1vdmUoY29uc3Qg
S2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZmluZEV4YWN0KGtl
eSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZExlYXN0
R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIFJh
d05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3Tm9kZSogYmVzdCA9
IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNlbnRpbmVsKCkpIHsKKyAgICAgICAg
ICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtl
eSA8IGtleSkKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bV9yaWdodDsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGJlc3QgPSBjdXJyZW50OworICAgICAg
ICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAgICB9CisgICAgCisgICAgTm9k
ZSogZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7
CisgICAgICAgIFJhd05vZGUqIGN1cnJlbnQgPSByb290KCktPm1fbGVmdDsKKyAgICAgICAgUmF3
Tm9kZSogYmVzdCA9IDA7CisgICAgICAgIHdoaWxlIChjdXJyZW50ICE9IG5pbFNlbnRpbmVsKCkp
IHsKKyAgICAgICAgICAgIGlmIChhc05vZGUoY3VycmVudCktPmtleSA9PSBrZXkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGFzTm9kZShjdXJyZW50KTsKKyAgICAgICAgICAgIGlmIChhc05vZGUo
Y3VycmVudCktPmtleSA8IGtleSkgeworICAgICAgICAgICAgICAgIGJlc3QgPSBjdXJyZW50Owor
ICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5tX2xlZnQ7CisgICAgICAgICAgICB9
IGVsc2UgCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPm1fcmlnaHQ7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGFzTm9kZShiZXN0KTsKKyAgICB9CisgICAgCisgICAgLy8g
VGhpcyBpcyBhbiBPKG4pIG9wZXJhdGlvbi4KKyAgICBzaXplX3Qgc2l6ZSgpCisgICAgeworICAg
ICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yIChOb2RlKiBjdXJyZW50ID0gZmly
c3QoKTsgY3VycmVudDsgY3VycmVudCA9IHN1Y2Nlc3NvcihjdXJyZW50KSkKKyAgICAgICAgICAg
IHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBU
aGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJvb2wgaXNFbXB0eSgpCisgICAgeworICAg
ICAgICByZXR1cm4gcm9vdCgpLT5tX2xlZnQgPT0gbmlsU2VudGluZWwoKTsKKyAgICB9CisgICAg
CisjaWZuZGVmIE5ERUJVRworICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpCisgICAgeworICAg
ICAgICBBU1NFUlQoIXJvb3QoKS0+aXNSZWQoKSk7CisgICAgICAgIEFTU0VSVCghbmlsU2VudGlu
ZWwoKS0+aXNSZWQoKSk7CisgICAgICAgIGNoZWNrQ29uc2lzdGVuY3lSZWN1cnNlKHJvb3QoKS0+
bV9sZWZ0KTsKKyAgICAgICAgQVNTRVJUKHJvb3QoKS0+bV9yaWdodCA9PSBuaWxTZW50aW5lbCgp
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAgIHByaW50Zigi
VHJlZSBhdCAlcDpcbiIsIHRoaXMpOworICAgICAgICBkdW1wUmVjdXJzZShyb290KCktPm1fbGVm
dCk7CisgICAgICAgIHByaW50ZigiICAgcm9vdDogJXAsICVwLCAlcFxuIiwgcm9vdCgpLT5tX2xl
ZnQsIHJvb3QoKS0+bV9yaWdodCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocm9vdCgpLT5wYXJl
bnRBbmRSZWQpKTsKKyAgICAgICAgcHJpbnRmKCIgICAgbmlsOiAlcCwgJXAsICVwXG4iLCBuaWxT
ZW50aW5lbCgpLT5tX2xlZnQsIG5pbFNlbnRpbmVsKCktPm1fcmlnaHQsIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KG5pbFNlbnRpbmVsKCktPnBhcmVudEFuZFJlZCkpOworICAgIH0KKyNlbmRpZgor
Citwcml2YXRlOgorICAgIHZvaWQgbGVmdFJvdGF0ZShSYXdOb2RlKiB4KQorICAgIHsKKyAgICAg
ICAgUmF3Tm9kZSogeTsKKworICAgICAgICB5ID0geC0+bV9yaWdodDsKKyAgICAgICAgeC0+bV9y
aWdodCA9IHktPm1fbGVmdDsKKworICAgICAgICBpZiAoeS0+bV9sZWZ0ICE9IG5pbFNlbnRpbmVs
KCkpCisgICAgICAgICAgICB5LT5tX2xlZnQtPnNldFBhcmVudCh4KTsKKyAgCisgICAgICAgIHkt
PnNldFBhcmVudCh4LT5wYXJlbnQoKSk7CisKKyAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCkt
Pm1fbGVmdCkKKyAgICAgICAgICAgIHgtPnBhcmVudCgpLT5tX2xlZnQgPSB5OworICAgICAgICBl
bHNlCisgICAgICAgICAgICB4LT5wYXJlbnQoKS0+bV9yaWdodCA9IHk7CisgICAgICAgIHktPm1f
bGVmdCA9IHg7CisgICAgICAgIHgtPnNldFBhcmVudCh5KTsKKworICAgICAgICBBU1NFUlQoIW5p
bFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHJpZ2h0Um90YXRl
KFJhd05vZGUqIHkpCisgICAgeworICAgICAgICBSYXdOb2RlKiB4OworCisgICAgICAgIHggPSB5
LT5tX2xlZnQ7CisgICAgICAgIHktPm1fbGVmdCA9IHgtPm1fcmlnaHQ7CisKKyAgICAgICAgaWYg
KG5pbFNlbnRpbmVsKCkgIT0geC0+bV9yaWdodCkKKyAgICAgICAgICAgIHgtPm1fcmlnaHQtPnNl
dFBhcmVudCh5KTsKKworICAgICAgICB4LT5zZXRQYXJlbnQoeS0+cGFyZW50KCkpOworICAgICAg
ICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bV9sZWZ0KQorICAgICAgICAgICAgeS0+cGFyZW50KCkt
Pm1fbGVmdCA9IHg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHktPnBhcmVudCgpLT5tX3Jp
Z2h0ID0geDsKKyAgICAgICAgeC0+bV9yaWdodCA9IHk7CisgICAgICAgIHktPnNldFBhcmVudCh4
KTsKKworICAgICAgICBBU1NFUlQoIW5pbFNlbnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGluc2VydEhlbHAoTm9kZSogeikKKyAgICB7CisgICAgICAgIFJhd05vZGUq
IHg7CisgICAgICAgIFJhd05vZGUqIHk7CisgIAorICAgICAgICB6LT5tX2xlZnQgPSB6LT5tX3Jp
Z2h0ID0gbmlsU2VudGluZWwoKTsKKyAgICAgICAgeSA9IHJvb3QoKTsKKyAgICAgICAgeCA9IHJv
b3QoKS0+bV9sZWZ0OworICAgICAgICB3aGlsZSAoeCAhPSBuaWxTZW50aW5lbCgpKSB7CisgICAg
ICAgICAgICB5ID0geDsKKyAgICAgICAgICAgIGlmICh6LT5rZXkgPCBhc05vZGUoeCktPmtleSkK
KyAgICAgICAgICAgICAgICB4ID0geC0+bV9sZWZ0OworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHggPSB4LT5tX3JpZ2h0OworICAgICAgICB9CisgICAgICAgIHotPnNldFBhcmVu
dCh5KTsKKyAgICAgICAgaWYgKHkgPT0gcm9vdCgpIHx8IHotPmtleSA8IGFzTm9kZSh5KS0+a2V5
KQorICAgICAgICAgICAgeS0+bV9sZWZ0ID0gejsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
eS0+bV9yaWdodCA9IHo7CisKKyAgICAgICAgQVNTRVJUKCFuaWxTZW50aW5lbCgpLT5pc1JlZCgp
KTsKKyAgICB9CisgICAgCisgICAgUmF3Tm9kZSogc3VjY2Vzc29ySW50ZXJuYWwoUmF3Tm9kZSog
eCkKKyAgICB7CisgICAgICAgIFJhd05vZGUqIHk7CisgICAgICAgIAorICAgICAgICBpZiAobmls
U2VudGluZWwoKSAhPSAoeSA9IHgtPm1fcmlnaHQpKSB7CisgICAgICAgICAgICB3aGlsZSAoeS0+
bV9sZWZ0ICE9IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICAgICAgeSA9IHktPm1fbGVmdDsK
KyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB5ID0g
eC0+cGFyZW50KCk7CisgICAgICAgIHdoaWxlICh4ID09IHktPm1fcmlnaHQpIHsKKyAgICAgICAg
ICAgIHggPSB5OworICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOworICAgICAgICB9CisgICAg
ICAgIGlmICh5ID09IHJvb3QoKSkKKyAgICAgICAgICAgIHJldHVybiBuaWxTZW50aW5lbCgpOwor
ICAgICAgICByZXR1cm4geTsKKyAgICB9CisgICAgCisgICAgdm9pZCByZW1vdmVGaXhVcChSYXdO
b2RlKiB4KQorICAgIHsKKyAgICAgICAgUmF3Tm9kZSogcmVhbFJvb3QgPSByb290KCktPm1fbGVm
dDsKKyAgICAgICAgUmF3Tm9kZSogdzsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICgheC0+aXNS
ZWQoKSAmJiByZWFsUm9vdCAhPSB4KSB7CisgICAgICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQo
KS0+bV9sZWZ0KSB7CisgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVudCgpLT5tX3JpZ2h0Owor
ICAgICAgICAgICAgICAgIGlmICh3LT5pc1JlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHct
PnNldFJlZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJlZCh0cnVl
KTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdFJvdGF0ZSh4LT5wYXJlbnQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9yaWdodDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCF3LT5tX3JpZ2h0LT5pc1JlZCgpICYmICF3LT5tX2xlZnQt
PmlzUmVkKCkpIHsgCisgICAgICAgICAgICAgICAgICAgIHctPnNldFJlZCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+bV9yaWdodC0+aXNSZWQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdy0+bV9sZWZ0LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmln
aHRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1f
cmlnaHQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0
UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50
KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHctPm1fcmlnaHQtPnNldFJl
ZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUoeC0+cGFyZW50KCkpOwor
ICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB3ID0geC0+cGFyZW50KCktPm1fbGVm
dDsKKyAgICAgICAgICAgICAgICBpZiAody0+aXNSZWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICB3LT5zZXRSZWQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0
UmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4LT5wYXJlbnQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHcgPSB4LT5wYXJlbnQoKS0+bV9sZWZ0OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIXctPm1fcmlnaHQtPmlzUmVkKCkgJiYgIXct
Pm1fbGVmdC0+aXNSZWQoKSkgeyAKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0UmVkKHRydWUp
OworICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF3LT5tX2xlZnQtPmlzUmVkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHctPm1fcmlnaHQtPnNldFJlZChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB3LT5zZXRSZWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBsZWZ0Um90YXRlKHcpOworICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHgtPnBhcmVu
dCgpLT5tX2xlZnQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
dy0+c2V0UmVkKHgtPnBhcmVudCgpLT5pc1JlZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+
cGFyZW50KCktPnNldFJlZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIHctPm1fbGVmdC0+
c2V0UmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeC0+cGFyZW50
KCkpOworICAgICAgICAgICAgICAgICAgICB4ID0gcmVhbFJvb3Q7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHgtPnNldFJlZChmYWxzZSk7CisK
KyAgICAgICAgQVNTRVJUKCFyb290KCktPmlzUmVkKCkpOworICAgICAgICBBU1NFUlQoIW5pbFNl
bnRpbmVsKCktPmlzUmVkKCkpOworICAgIH0KKyAgICAKKyNpZm5kZWYgTkRFQlVHCisgICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5UmVjdXJzZShSYXdOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
aWYgKG5vZGUgPT0gbmlsU2VudGluZWwoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKG5vZGUtPmlzUmVkKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bV9sZWZ0LT5p
c1JlZCgpKTsKKyAgICAgICAgICAgIEFTU0VSVCghbm9kZS0+bV9yaWdodC0+aXNSZWQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uobm9kZS0+bV9sZWZ0KTsK
KyAgICAgICAgY2hlY2tDb25zaXN0ZW5jeVJlY3Vyc2Uobm9kZS0+bV9yaWdodCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcFJlY3Vyc2UoUmF3Tm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmIChub2RlID09IG5pbFNlbnRpbmVsKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IHByaW50ZigiICAgbm9kZTogJXBcbiIsIG5vZGUpOworICAgICAgICBwcmludGYoIiAgICAgIGNv
bG9yID0gJXNcbiIsIG5vZGUtPmlzUmVkKCkgPyAicmVkIiA6ICJibGFjayIpOworICAgICAgICBw
cmludGYoIiAgICAgIGxlZnQgID0gJXBcbiIsIG5vZGUtPm1fbGVmdCk7CisgICAgICAgIHByaW50
ZigiICAgICAgcmlnaHQgPSAlcFxuIiwgbm9kZS0+bV9yaWdodCk7CisgICAgICAgIGR1bXBSZWN1
cnNlKG5vZGUtPm1fbGVmdCk7CisgICAgICAgIGR1bXBSZWN1cnNlKG5vZGUtPm1fcmlnaHQpOwor
ICAgIH0KKyNlbmRpZgorICAgIAorICAgIFJhd05vZGUqIHJvb3QoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICZtX3Jvb3Q7CisgICAgfQorICAgIAorICAgIFJhd05vZGUqIG5pbFNlbnRpbmVsKCkK
KyAgICB7CisgICAgICAgIHJldHVybiAmbV9uaWxTZW50aW5lbDsKKyAgICB9CisgICAgCisgICAg
Tm9kZSogYXNOb2RlKFJhd05vZGUqIHJhd05vZGUpCisgICAgeworICAgICAgICBBU1NFUlQocmF3
Tm9kZSAhPSByb290KCkpOworICAgICAgICBBU1NFUlQocmF3Tm9kZSAhPSBuaWxTZW50aW5lbCgp
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE5vZGUqPihyYXdOb2RlKTsKKyAgICB9Cisg
ICAgCisgICAgUmF3Tm9kZSBtX3Jvb3Q7CisgICAgUmF3Tm9kZSBtX25pbFNlbnRpbmVsOworfTsK
KworfQorCisjZW5kaWYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5w
cmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCShyZXZp
c2lvbiA5NDM1NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQkod29ya2lu
ZyBjb3B5KQpAQCAtMTQsNiArMTQsNyBAQCBTT1VSQ0VTICs9IFwKICAgICB3dGYvSGFzaFRhYmxl
LmNwcCBcCiAgICAgd3RmL01ENS5jcHAgXAogICAgIHd0Zi9NYWluVGhyZWFkLmNwcCBcCisgICAg
d3RmL01ldGFBbGxvY2F0b3IuY3BwIFwKICAgICB3dGYvTnVsbFB0ci5jcHAgXAogICAgIHd0Zi9P
U1JhbmRvbVNvdXJjZS5jcHAgXAogICAgIHd0Zi9xdC9NYWluVGhyZWFkUXQuY3BwIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCShyZXZpc2lvbiA5NDM1NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNDI5LDcgKzI0MjksNyBAQCBwdWJsaWM6CiAgICAgICAgIGJhY2t0cmFjaygpOwogCiAgICAg
ICAgIC8vIExpbmsgJiBmaW5hbGl6ZSB0aGUgY29kZS4KLSAgICAgICAgTGlua0J1ZmZlciBsaW5r
QnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzLCBnbG9iYWxEYXRhLT5yZWdleEFsbG9jYXRvcik7Cisg
ICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgICAg
IG1fYmFja3RyYWNraW5nU3RhdGUubGlua0RhdGFMYWJlbHMobGlua0J1ZmZlcik7CiAgICAgICAg
IGppdE9iamVjdC5zZXQobGlua0J1ZmZlci5maW5hbGl6ZUNvZGUoKSk7CiAgICAgICAgIGppdE9i
amVjdC5zZXRGYWxsQmFjayhtX3Nob3VsZEZhbGxCYWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS95YXJyL1lhcnJKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUveWFyci9ZYXJySklULmgJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3lhcnIvWWFyckpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSwxMSArNjUsMTEgQEAgcHVi
bGljOgogCiAgICAgaW50IGV4ZWN1dGUoY29uc3QgVUNoYXIqIGlucHV0LCB1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgbGVuZ3RoLCBpbnQqIG91dHB1dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJl
c3MoKSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CisgICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PFlhcnJKSVRDb2RlPihtX3JlZi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSkoaW5wdXQsIHN0YXJ0LCBsZW5ndGgsIG91dHB1dCk7CiAgICAgfQogCiAjaWYgRU5BQkxFKFJF
R0VYUF9UUkFDSU5HKQotICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVybiBtX3JlZi5tX2NvZGUu
ZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQorICAgIHZvaWQgKmdldEFkZHIoKSB7IHJldHVybiBtX3Jl
Zi5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0MzU3KQorKysgU291cmNlL0phdmFT
Y3JpcHRHbHVlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEx
LTA4LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgVGhlIGV4
ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2aWR1YWwK
KyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJlc3QtZml0
LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAgICAgICBy
ZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1vcnkgYW5k
IHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5vZGVzIGRp
cmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZMVHJlZSBu
b3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAgICAgQ2hh
bmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVmZXJlbmNl
IGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaDogQWRkZWQuCisKIDIwMTEtMDgtMjkgIE1hcmsgSGFo
bmVuYmVyZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnppcCBpbml0aWFs
aXphdGlvbiBsaXN0cyBhbmQgY29uc3RydWN0b3JzIGluIEpTQ2VsbCBoaWVyYXJjaHkgKDMvNykK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9Gb3J3
YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9NZXRhQWxsb2NhdG9ySGFuZGxlLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA5NDM3
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDI3IEBACisyMDExLTA5LTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgVGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVl
IGluZGl2aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNl
ZCBhIGJlc3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRv
cgorICAgICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0
ZSBtZW1vcnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlk
dWFsIG5vZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRo
ZXIgQVZMVHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4K
KyAgICAgICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNl
IGEgcmVmZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyBsYXlvdXQgdGVzdHMgYmVjYXVz
ZSBiZWhhdmlvciBpcyBub3QgY2hhbmdlZC4gIE5ldyBBUEkgdW5pdAorICAgICAgICB0ZXN0czoK
KyAgICAgICAgVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAKKyAgICAgICAgVGVzdHMvV1RGL01l
dGFBbGxvY2F0b3IuY3BwCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oOiBBZGRlZC4KKwogMjAxMS0wOS0wMSAgS2VudGFybyBIYXJhICA8aGFy
YWtlbkBnb29nbGUuY29tPgogCiAgICAgICAgIEdlbmVyYXRlIGEgRmlsZVJlYWRlciBjb25zdHJ1
Y3RvciBvZiBWOCB1c2luZyB0aGUgSURMICdDb25zdHJ1Y3RvcicgZXh0ZW5kZWQgYXR0cmlidXRl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRv
ckhhbmRsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJz
L3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvTWV0YUFsbG9jYXRvckhh
bmRsZS5oPgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gOTQzNTcpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwzMSBAQAorMjAxMS0wOS0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSBleGVjdXRhYmxlIGFsbG9jYXRvciBtYWtlcyBpdCBkaWZmaWN1
bHQgdG8gZnJlZSBpbmRpdmlkdWFsCisgICAgICAgIGNodW5rcyBvZiBleGVjdXRhYmxlIG1lbW9y
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYzNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAg
IEludHJvZHVjZWQgYSBiZXN0LWZpdCwgYmFsYW5jZWQtdHJlZSBiYXNlZCBhbGxvY2F0b3IuIFRo
ZSBhbGxvY2F0b3IKKyAgICAgICAgcmVxdWlyZWQgYSBiYWxhbmNlZCB0cmVlIHRoYXQgZG9lcyBu
b3QgYWxsb2NhdGUgbWVtb3J5IGFuZCB0aGF0CisgICAgICAgIHBlcm1pdHMgdGhlIHJlbW92YWwg
b2YgaW5kaXZpZHVhbCBub2RlcyBkaXJlY3RseSAoYXMgb3Bwb3NlZCB0byBieQorICAgICAgICBr
ZXkpOyBuZWl0aGVyIEFWTFRyZWUgbm9yIFdlYkNvcmUncyBQT0RSZWRCbGFja1RyZWUgc3VwcG9y
dGVkIHRoaXMuCisgICAgICAgIENoYW5nZWQgYWxsIHJlZmVyZW5jZXMgdG8gZXhlY3V0YWJsZSBj
b2RlIHRvIHVzZSBhIHJlZmVyZW5jZSBjb3VudGVkCisgICAgICAgIGhhbmRsZS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpQYWlyOjpmaW5kRXhhY3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFp
cjo6cmVtb3ZlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OmZpbmRMZWFzdEdyZWF0
ZXJUaGFuT3JFcXVhbCk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3NlcnRGb3Vu
ZEFuZFJlbW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3NlcnRFcXVhbCk6
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjphc3NlcnRTYW1lVmFsdWVzRm9yS2V5KToK
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OnRlc3REcml2ZXIpOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVF9GKToKKwogMjAxMS0wOS0wMSAgRXJpYyBTZWlkZWwgIDxlcmljQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgUkVHUkVTU0lPTiAoTlJXVCk6IExlYWtzIFZpZXdlciBjYW4n
dCBsb2FkIGxlYWtzIGZyb20gdGVzdCBydW5zIHRoYXQgdXNlZCBOUldUCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQzNTcpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
Nyw2ICs3LDggQEAKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlv
biAqLworCQkwRkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzZDNENCMTQxMDI3
RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovOyB9OworCQkwRkM2QzRDRjE0MTAzNEFE
MDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9j
YXRvci5jcHAgKi87IH07CiAJCTFBMDJDODRGMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDJDODRFMTI1
RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLzsgfTsKIAkJMUEwMkM4NzAxMjVENENGRDAwRTNG
NEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0QTVFMDBFM0Y0QkQgLyogZmluZC5odG1sICovOyB9
OwogCQkxQTVGRUZERDEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVhdGVKYXZhU2NyaXB0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNUZFRkRDMTI3
MEUyQTMwMDBFMjkyMSAvKiBFdmFsdWF0ZUphdmFTY3JpcHQuY3BwICovOyB9OwpAQCAtMTI0LDYg
KzEyNiw4IEBACiAvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8q
IEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwRkM2QzRDQjE0MTAyN0UwMDA1
QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFJlZEJsYWNrVHJlZS5jcHA7IHBhdGggPSBXVEYvUmVkQmxhY2tUcmVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1l
dGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTWV0
YUFsbG9jYXRvci5jcHA7IHBhdGggPSBXVEYvTWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQTVGRUZEQzEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVhdGVKYXZhU2Ny
aXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2YWx1YXRlSmF2
YVNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zNTQsNiArMzU4LDgg
QEAKIAkJQkM5MDk2NDYxMjU1NjE4OTAwMDgzNzU2IC8qIFdURiAqLyA9IHsKIAkJCWlzYSA9IFBC
WEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8q
IE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGQzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBS
ZWRCbGFja1RyZWUuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVj
a2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCUMwMTM2M0M3MTNDMzk5NzMwMEVG
Mzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICovLAogCQkJCUJDOTA5NjRCMTI1NTYxQkYwMDA4
Mzc1NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi8sCkBAIC01NjEsNiArNTY3LDggQEAKIAkJCQlDMDg1
ODdGQzEzRkVDMzlCMDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RTd2l6emxlci5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCUMwODU4ODAwMTNGRUMzQTYwMDFFRjRFNSAvKiBJbnN0YW5jZU1ldGhvZFN3
aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdEQzY3OEQxNDBEN0M1MDAwQUJDQ0RCIC8q
IERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkM2QzRDQzE0MTAyN0Uw
MDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzZDNENG
MTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxs
b2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9N
ZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENv
bXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxK
YXZhU2NyaXB0Q29yZS9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBNZXRhQWxsb2NhdG9yVGVzdDogcHVibGljIHRl
c3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIGVudW0gU2FuaXR5Q2hlY2tNb2RlIHsgUnVuU2Fu
aXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVjayB9OworICAgIAorICAgIGVudW0gSGVhcEdyb3d0
aE1vZGUgeyBEb250R3Jvd0hlYXAsIEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlLCBGb3JUZXN0
RGVtYW5kQWxsb2NEb250Q29hbGVzY2UgfTsKKyAgICAKKyAgICBIZWFwR3Jvd3RoTW9kZSBjdXJy
ZW50SGVhcEdyb3d0aE1vZGU7CisgICAgc2l6ZV90IGFsbG93QWxsb2NhdGVQYWdlczsKKyAgICBz
aXplX3QgcmVxdWVzdGVkTnVtUGFnZXM7CisKKyAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9y
OiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBTaW1wbGVUZXN0
QWxsb2NhdG9yKE1ldGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCisgICAgICAgICAgICA6IE1ldGFB
bGxvY2F0b3IoMzIpCisgICAgICAgICAgICAsIG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgewor
ICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFz
ZVBhZ2UgKiBwYWdlU2l6ZSgpKSwgZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgflNpbXBsZVRlc3RBbGxvY2F0b3Io
KQorICAgICAgICB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9wYXJlbnQtPmFsbG9jYXRv
ckRlc3Ryb3llZCk7CisgICAgICAgICAgICBtX3BhcmVudC0+YWxsb2NhdG9yRGVzdHJveWVkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0
ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRj
aCAobV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSkgeworICAgICAgICAgICAgY2FzZSBE
b250R3Jvd0hlYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlOgorICAgICAgICAg
ICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U6IHsKKyAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2VzKTsKKyAgICAgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2VzID49IG51bVBhZ2Vz
KTsKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+cmVxdWVzdGVkTnVtUGFnZXMgPSBudW1QYWdl
czsKKyAgICAgICAgICAgICAgICBudW1QYWdlcyA9IG1fcGFyZW50LT5hbGxvd0FsbG9jYXRlUGFn
ZXM7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0Owor
ICAgICAgICAgICAgICAgIGlmIChtX3BhcmVudC0+Y3VycmVudEhlYXBHcm93dGhNb2RlID09IEZv
clRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAw
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2b2lkKiByZXN1bHQgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXAgKyBvZmZzZXQp
ICogcGFnZVNpemUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9wYXJl
bnQtPmFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAgICAgICAgICAgbV9wYXJlbnQtPmN1
cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudGVyID0gMDsgY291bnRlciA8IG51bVBhZ2Vz
ICsgb2Zmc2V0OyArK2NvdW50ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJlbnQtPnBh
Z2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
Ynl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRlciA8IHBhZ2VTaXplKCk7ICsrYnl0ZUNvdW50ZXIp
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudC0+bWVtb3J5TWFwLT5hcHBlbmQoZmFs
c2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBtX3BhcmVudC0+YWRkaXRpb25hbFBhZ2VzSW5IZWFwICs9IG51bVBhZ2VzOworICAgICAgICAK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJlIGJvdGggZnJlZSBhbmQg
dW5tYXBwZWQuCisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9wYXJlbnQtPnBhZ2VTdGF0ZShy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAg
ICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFn
ZVNpemUoKTsgKythZGRyZXNzKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFtX3BhcmVu
dC0+Ynl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJlc3MpKSk7CisgICAgICAg
ICAgICBtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdl
KSAvIHBhZ2VTaXplKCkpID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmly
dHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJlIGZyZWUgb2Ygb2JqZWN0cyBhdCB0aGlzIHBvaW50
LCBidXQgaXQgc2hvdWxkIHN0aWxsCisgICAgICAgICAgICAvLyBiZSBtYXBwZWQuCisgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90
IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJlc3MgPCBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6ZSgpOyArK2FkZHJlc3Mp
CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5ieXRlU3RhdGUocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcykpKTsKKyAgICAgICAgICAgIG1fcGFyZW50LT5wYWdl
U3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBNZXRhQWxs
b2NhdG9yVGVzdCogbV9wYXJlbnQ7CisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBiYXNlUGFnZSA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRQYWdlc0lu
SGVhcCA9IDEwMDsKKyAgICAKKyAgICB1bnNpZ25lZCBhZGRpdGlvbmFsUGFnZXNJbkhlYXA7Cisg
ICAgCisgICAgVmVjdG9yPGJvb2wsIDA+KiBtZW1vcnlNYXA7CisgICAgVmVjdG9yPGJvb2wsIDA+
KiBwYWdlTWFwOworICAgIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOworICAgIAorICAgIFNpbXBs
ZVRlc3RBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAo
KQorICAgIHsKKyAgICAgICAgbWVtb3J5TWFwID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAg
ICAgICBwYWdlTWFwID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBwYWdlID0gYmFzZVBhZ2U7IHBhZ2UgPCBiYXNlUGFnZSArIGRlZmF1bHRQ
YWdlc0luSGVhcDsgKytwYWdlKSB7CisgICAgICAgICAgICBwYWdlTWFwLT5hcHBlbmQoZmFsc2Up
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlSW5QYWdlID0gMDsgYnl0ZUluUGFnZSA8
IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFw
cGVuZChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBhbGxvY2F0b3JEZXN0cm95ZWQgPSBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93
SGVhcDsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gMDsKKyAgICAgICAgYWRkaXRpb25h
bFBhZ2VzSW5IZWFwID0gMDsKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAg
ICAKKyAgICAgICAgYWxsb2NhdG9yID0gbmV3IFNpbXBsZVRlc3RBbGxvY2F0b3IodGhpcyk7Cisg
ICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBF
WFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQYWdlcywgc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSk7
CisgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWROdW1QYWdlcywgc3RhdGljX2Nhc3Q8c2l6ZV90
PigwKSk7CisgICAgICAgIAorICAgICAgICAvLyBtZW1vcnkgc2hvdWxkIGJlIGZyZWUuCisgICAg
ICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2UgKyBkZWZh
dWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXBhZ2VT
dGF0ZShwYWdlKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5dGVJblBhZ2UgPSAwOyBi
eXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5QYWdlKQorICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKCFieXRlU3RhdGUocGFnZSAqIHBhZ2VTaXplKCkgKyBieXRlSW5QYWdlKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoaXMgYXV0b21hdGljYWxseSB0
ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3IgZGlkIG5vdCBsZWFrCisgICAgICAgIC8vIG1lbW9yeSwg
c28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBhcmUgcnVubmluZyB3aXRoICFkZWZpbmVkKE5ERUJVRyku
CisgICAgICAgIC8vIFNlZSBNZXRhQWxsb2NhdG9yOjptX21hbGxvY0JhbGFuY2UuCisgICAgICAg
IGRlbGV0ZSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRShhbGxvY2F0
b3JEZXN0cm95ZWQpOworICAgICAgICAKKyAgICAgICAgZGVsZXRlIG1lbW9yeU1hcDsKKyAgICAg
ICAgZGVsZXRlIHBhZ2VNYXA7CisgICAgfQorICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNr
TW9kZSA9IFJ1blNhbml0eUNoZWNrKQorICAgIHsKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRs
ZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykubGVha1JlZigpOwor
ICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUpOworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5z
aXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICB1aW50cHRyX3Qg
c3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7
CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7Cisg
ICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0
ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFi
eXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKKyAgICAgICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0
ZSkgPSB0cnVlOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFnZVN0YXRlKGN1cnJlbnRCeXRl
IC8gcGFnZVNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5
Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsK
KyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgfQorICAgIAorICAgIHZvaWQg
ZnJlZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlD
aGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKGhh
bmRsZSk7CisgICAgICAgIAorICAgICAgICBub3RpZnlGcmVlKGhhbmRsZS0+c3RhcnQoKSwgaGFu
ZGxlLT5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgaGFuZGxlLT5kZXJlZigpOworICAgICAgICAK
KyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlDaGVjaykKKyAgICAgICAg
ICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbm90aWZ5RnJlZSh2b2lk
KiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0
YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFydCk7CisgICAgICAgIHVp
bnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAo
dWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7
ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJ5dGVTdGF0ZShjdXJy
ZW50Qnl0ZSkpOworICAgICAgICAgICAgYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSA9IGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc2FuaXR5Q2hlY2soKQorICAgIHsKKyNp
Zm5kZWYgTkRFQlVHCisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQo
KSAtIGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWxsb2NhdG9yLT5kZWJ1Z0ZyZWVTcGFj
ZVNpemUoKSk7CisjZW5kaWYKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXNSZXNl
cnZlZCgpLCAoZGVmYXVsdFBhZ2VzSW5IZWFwICsgYWRkaXRpb25hbFBhZ2VzSW5IZWFwKSAqIHBh
Z2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgp
LCBieXRlc0FsbG9jYXRlZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXND
b21taXR0ZWQoKSwgYnl0ZXNDb21taXR0ZWQoKSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29u
ZmlybShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgeworICAgICAgICB1aW50cHRy
X3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQo
KSk7CisgICAgICAgIGNvbmZpcm0oc3RhcnRCeXRlLCBzdGFydEJ5dGUgKyBoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIHRydWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbmZpcm1IaWdoV2F0ZXJt
YXJrKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKKyAgICB7CisgICAgICAgIGNvbmZpcm0o
cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+ZW5kKCkpLCAoYmFzZVBhZ2UgKyBk
ZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICB2b2lkIGNvbmZpcm0odWludHB0cl90IHN0YXJ0Qnl0ZSwgdWludHB0cl90
IGVuZEJ5dGUsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJy
ZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRl
KSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYnl0ZVN0YXRlKGN1cnJlbnRCeXRlKSwgdmFsdWUp
OworICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBh
Z2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXZhbHVlKSB7CisgICAgICAgICAgICB1aW50cHRyX3QgZmlyc3RGcmVlUGFnZSA9IChzdGFy
dEJ5dGUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpOworICAgICAgICAgICAgdWludHB0
cl90IGxhc3RGcmVlUGFnZSA9IChlbmRCeXRlIC0gcGFnZVNpemUoKSkgLyBwYWdlU2l6ZSgpOwor
ICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudFBhZ2UgPSBmaXJzdEZyZWVQYWdlOyBj
dXJyZW50UGFnZSA8PSBsYXN0RnJlZVBhZ2U7ICsrY3VycmVudFBhZ2UpCisgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUoIXBhZ2VTdGF0ZShjdXJyZW50UGFnZSkpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpCisgICAgeworICAgICAgICBzaXpl
X3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwg
bWVtb3J5TWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtZW1vcnlNYXAt
PmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQo
KQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VNYXAtPnNpemUoKTsgKytpbmRleCkgeworICAgICAg
ICAgICAgaWYgKHBhZ2VNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICogcGFnZVNpemUoKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCYgYnl0ZVN0YXRlKHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBy
ZXR1cm4gYnl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSk7Cisg
ICAgfQorICAgIAorICAgIGJvb2wmIGJ5dGVTdGF0ZSh1aW50cHRyX3QgYWRkcmVzcykKKyAgICB7
CisgICAgICAgIHVpbnRwdHJfdCBieXRlSW5kZXggPSBhZGRyZXNzIC0gYmFzZVBhZ2UgKiBwYWdl
U2l6ZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5TWFwLT5hdChieXRlSW5kZXgpOworICAgIH0K
KyAgICAKKyAgICBib29sJiBwYWdlU3RhdGUodWludHB0cl90IHBhZ2UpCisgICAgeworICAgICAg
ICB1aW50cHRyX3QgcGFnZUluZGV4ID0gcGFnZSAtIGJhc2VQYWdlOworICAgICAgICByZXR1cm4g
cGFnZU1hcC0+YXQocGFnZUluZGV4KTsKKyAgICB9CisKKyAgICAvLyBUZXN0IGhlbHBlcnMKKwor
ICAgIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gVGVz
dHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6IGFsbG9jYXRlIG9uZSB0aGluZyBhbmQgZnJlZSBp
dC4gQWxzbworICAgICAgICAvLyB2ZXJpZmllcyB0aGF0IHRoZSBzdGF0ZSBvZiBwYWdlcyBpcyBj
b3JyZWN0LgorICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0g
YWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnN0YXJ0KCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBF
Q1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
cGFnZVN0YXRlKGJhc2VQYWdlKSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7
CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAg
ICBmcmVlKGhhbmRsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdFJlcGVhdEFsbG9jRnJl
ZShzaXplX3QgZmlyc3RTaXplLCAuLi4pCisgICAgeworICAgICAgICAvLyBUZXN0cyByaWdodC1j
b2FsZXNjaW5nIGJ5IHJlcGVhdGVkbHkgYWxsb2NhdGluZyBhbmQgZnJlZWluZy4gVGhlIGlkZWEK
KyAgICAgICAgLy8gaXMgdGhhdCBpZiB5b3UgYWxsb2NhdGUgc29tZXRoaW5nIGFuZCB0aGVuIGZy
ZWUgaXQsIHRoZW4gdGhlIGhlYXAgc2hvdWxkCisgICAgICAgIC8vIGxvb2sgaWRlbnRpY2FsIHRv
IHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBkdWUgdG8gYSByaWdodC1jb2FsZXNj
ZQorICAgICAgICAvLyBvZiB0aGUgZnJlZWQgY2h1bmsgYW5kIHRoZSBhbHJlYWR5LWZyZWUgbWVt
b3J5LCBhbmQgc28gc3Vic2VxdWVudAorICAgICAgICAvLyBhbGxvY2F0aW9ucyBzaG91bGQgYmVo
YXZlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBvbmUuCisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICBFWFBF
Q1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwg
Zmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAg
Y29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoaGFu
ZGxlKTsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsKKyAgICAgICAgdmFfc3Rh
cnQoYXJnTGlzdCwgZmlyc3RTaXplKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBzaXplSW5CeXRl
cyA9IHZhX2FyZyhhcmdMaXN0LCBpbnQpKSB7CisgICAgICAgICAgICBoYW5kbGUgPSBhbGxvY2F0
ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICAgICAgY29uZmly
bUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZSho
YW5kbGUpOworICAgICAgICB9CisgICAgICAgIHZhX2VuZChhcmdMaXN0KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVf
dCBzZWNvbmRTaXplLCBzaXplX3QgdGhpcmRTaXplKQorICAgIHsKKyAgICAgICAgLy8gQWxsb2Nh
dGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0U2l6ZSwgdGhlbiBzb21ldGhpbmcgb2Ygc2l6ZSBz
ZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAgICAvLyBmcmVlcyB0aGUgZmlyc3QgYWxsb2NhdGlv
biwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5kIHRoZW4gYXR0ZW1wdHMgdG8gYWxsb2NhdGUgdGhl
CisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRpbmcgdGhhdCBpdCBhbGxvY2F0ZWQgYXQgdGhlIGJh
c2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAgICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFsbG9jYXRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhl
IHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8gVGh1cyB0aGUgY29ycmVjdCB3YXkgb2YgcnVubmlu
ZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgc2Vjb25kU2l6ZSBpcworICAgICAgICAvLyBw
aWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IG5ldmVyIHN0cmFkZGxlcyBhIHBhZ2UuCisgICAg
ICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRl
KGZpcnN0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVY
UEVDVF9FUShmaXJzdEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAg
CisgICAgICAgIGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVy
bWFyayhmaXJzdEhhbmRsZSk7CisKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25k
SGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRI
YW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNp
emUoKSArIGZpcnN0U2l6ZSkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zaXpl
SW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oZmlyc3RI
YW5kbGUpOworICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpcnN0
SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oc2Vjb25kSGFuZGxlKTsKKyAgICAg
ICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2Ug
KiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUo
KSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogdGhpcmRI
YW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOworICAgICAgICBFWFBFQ1RfRVEodGhpcmRIYW5k
bGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUo
KSkpOworICAgICAgICBFWFBFQ1RfRVEodGhpcmRIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRoaXJk
U2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHRoaXJkSGFuZGxlKTsKKyAgICAgICAg
Y29uZmlybUhpZ2hXYXRlcm1hcmsodGhpcmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJl
ZSh0aGlyZEhhbmRsZSk7CisgICAgfQorICAgIAorICAgIGVudW0gVGVzdEZJRk9BbGxvY01vZGUg
eyBGaWxsQXRFbmQsIEVhZ2VyRmlsbCB9OworICAgIHZvaWQgdGVzdEZJRk9BbGxvYyhUZXN0RklG
T0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAgeworICAgICAgICAvLyBUaGlzIHdpbGwgdGVzdCB0
aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVzY2UgKGZyZWVpbmcgdGhlIGxlZnQtbW9zdAorICAg
ICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hlbiB0aGUgY2h1bmsgdG8gdGhlIHJpZ2h0IG9mIGl0
IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAgIC8vIGZ1bGx5IGV4ZXJjaXNlIGxlZnQtY29hbGVz
Y2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiBJbiBFYWdlckZpbGwKKyAgICAgICAgLy8gbW9kZSwg
dGhpcyBhbHNvIHRlc3RzIHBlcmZlY3QtZml0IGFsbG9jYXRpb24gYW5kIG5vLWNvYWxlc2Npbmcg
ZnJlZS4KKyAgICAgICAgCisgICAgICAgIHNpemVfdCB0b3RhbFNpemUgPSAwOworICAgICAgICAK
KyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAg
ICAKKyAgICAgICAgdmFfbGlzdCBhcmdMaXN0OworICAgICAgICB2YV9zdGFydChhcmdMaXN0LCBt
b2RlKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0
LCBpbnQpKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxv
Y2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyB0b3RhbFNp
emUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAg
ICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKKyAgICAgICAgICAgIHRvdGFsU2l6ZSAr
PSBzaXplSW5CeXRlczsKKyAgICAgICAgfQorICAgICAgICB2YV9lbmQoYXJnTGlzdCk7CisgICAg
ICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzLnNp
emUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxlcy5hdChpbmRleCkpOwor
ICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemVTb0ZhciA9IDA7CisgICAgICAgIGZvciAodW5z
aWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBzaXplU29GYXIgKz0gaGFuZGxlcy5hdChpbmRleCktPnNpemVJbkJ5dGVzKCk7Cisg
ICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAgICAgICAgIGlmIChtb2Rl
ID09IEVhZ2VyRmlsbCkgeworICAgICAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhh
bmRsZSA9IGFsbG9jYXRlKHNpemVTb0Zhcik7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGhh
bmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6
ZSgpKSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwg
c2l6ZVNvRmFyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjb25maXJtKGJh
c2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplLCB0
cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBoYW5kbGVzLnNpemUoKSAtIDEpCisg
ICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZXMubGFzdCgpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0
ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZnJlZSho
YW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGNvbmZpcm0oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBzaXplU29GYXIsIGZhbHNl
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHNp
emVTb0ZhciA9PSB0b3RhbFNpemUpOworICAgICAgICAKKyAgICAgICAgY29uZmlybShiYXNlUGFn
ZSAqIHBhZ2VTaXplKCksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6
ZSgpLCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9PSBGaWxsQXRFbmQpIHsK
KyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsSGFuZGxlID0gYWxsb2NhdGUo
dG90YWxTaXplKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShmaW5hbEhhbmRsZS0+c3RhcnQoKSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoZmluYWxIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRvdGFsU2l6ZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oZmluYWxIYW5kbGUpOworICAgICAgICAg
ICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmluYWxIYW5kbGUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2
b2lkIHRlc3RGaWxsSGVhcChzaXplX3Qgc2l6ZUluQnl0ZXMsIHNpemVfdCBudW1BbGxvY2F0aW9u
cykKKyAgICB7CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxl
czsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1B
bGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRl
KHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAgICAgCisgICAgICAgIHNh
bml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5h
bGxvY2F0ZShzaXplSW5CeXRlcykpOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQorICAgICAgICAgICAgZnJl
ZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNoZWNrKTsKKyAgICAgICAgCisgICAg
ICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdFJpZ2h0QWxsb2Nh
dGlvbihzaXplX3QgZmlyc3RMZWZ0U2l6ZSwgc2l6ZV90IGZpcnN0UmlnaHRTaXplLCBzaXplX3Qg
c2Vjb25kTGVmdFNpemUsIHNpemVfdCBzZWNvbmRSaWdodFNpemUpCisgICAgeworICAgICAgICBN
ZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdExlZnQgPSBhbGxvY2F0ZShmaXJzdExlZnRTaXplKTsK
KyAgICAgICAgRVhQRUNUX0VRKGZpcnN0TGVmdC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBmaXJzdFJpZ2h0ID0gYWxsb2NhdGUoZmlyc3RSaWdodFNpemUpOworICAg
ICAgICBFWFBFQ1RfRVEoZmlyc3RSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAg
IAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRMZWZ0ID0gYWxsb2NhdGUoc2Vj
b25kTGVmdFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kTGVmdC0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RMZWZ0LT5z
aXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBz
ZWNvbmRSaWdodCA9IGFsbG9jYXRlKHNlY29uZFJpZ2h0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9F
UShzZWNvbmRSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSAr
IGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpIC0gZmlyc3RSaWdodC0+c2l6ZUluQnl0
ZXMoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdExlZnQpOworICAgICAgICBmcmVl
KGZpcnN0UmlnaHQpOworICAgICAgICBmcmVlKHNlY29uZExlZnQpOworICAgICAgICBmcmVlKHNl
Y29uZFJpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFs
ID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIEVY
UEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2Ug
KiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpbmFsKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCB0ZXN0QmVzdEZpdChzaXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc3RlcCwg
dW5zaWduZWQgbnVtU2xvdHMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUpCisgICAg
eworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+IGhhbmRsZXNUb0ZyZWU7
CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAg
ICAgVmVjdG9yPHZvaWQqLCAwPiBsb2NhdGlvbnM7CisgICAgICAgIAorICAgICAgICBzaXplX3Qg
c2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4
IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUq
IHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBp
ZiAoIWhhbmRsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRvRnJlZS0+
c3RhcnQoKSAhPSBoYW5kbGVzLmxhc3QoKS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlc1RvRnJlZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAgICAgICAgICAgdG9GcmVl
ID0gYWxsb2NhdGUoc2l6ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZyYWdnZXIg
PSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShm
cmFnZ2VyLT5zdGFydCgpLCB0b0ZyZWUtPmVuZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbG9jYXRpb25zLmFwcGVuZCh0b0ZyZWUtPnN0YXJ0KCkpOworCisgICAgICAgICAgICBoYW5k
bGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOworICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoZnJh
Z2dlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5zaXplKCkgPT0gbnVtU2xvdHMp
OworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFu
ZGxlc1RvRnJlZS5zaXplKCk7ICsraW5kZXgpCisgICAgICAgICAgICBmcmVlKGhhbmRsZXNUb0Zy
ZWUuYXQoaW5kZXgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAKKyAgICAgICAgc2l6ZSA9
IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVt
U2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGJlc3RG
aXQgPSBhbGxvY2F0ZShzaXplIC0gMzIsIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0
KGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmVzdEZpdC0+ZW5kKCkgPT0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxvY2F0aW9u
cy5hdChpbmRleCkpICsgc2l6ZSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBzbWFsbCA9IGFsbG9jYXRlKDMyLCBzYW5pdHlDaGVja01vZGUpOworICAg
ICAgICAgICAgaWYgKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KSkKKyAg
ICAgICAgICAgICAgICBFWFBFQ1RfRVEoc21hbGwtPnN0YXJ0KCksIGJlc3RGaXQtPmVuZCgpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoc21hbGwtPmVuZCgp
LCBiZXN0Rml0LT5zdGFydCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnJlZShiZXN0
Rml0LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgZnJlZShzbWFsbCwgc2FuaXR5Q2hl
Y2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSArPSBzdGVwOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBu
dW1TbG90czsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxlcy5hdChpbmRleCksIHNh
bml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBm
aW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCksIHNhbml0eUNo
ZWNrTW9kZSk7CisgICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBm
cmVlKGZpbmFsLCBzYW5pdHlDaGVja01vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RT
aHJpbmsoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAg
ICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhhdCB3aWxsIGJlIHNocnVuaworICAgICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAK
KyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQgbWFrZSBzdXJlIHRoYXQgb3VyIHN0YXRlIHJlZmxl
Y3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAgIG5vdGlmeUZyZWUocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSkgKyBzZWNv
bmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBoYW5k
bGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBzYW5pdHlDaGVjaygpOwor
ICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAgaXMgbm90IGVtcHR5Lgor
ICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhl
YXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgcmVt
YWluZGVyIG9mIHRoZSBoZWFwLgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiByZW1haW5k
ZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpIC0gc2Vjb25kU2l6
ZSk7CisgICAgICAgIEVYUEVDVF9FUShyZW1haW5kZXItPnN0YXJ0KCksIGhhbmRsZS0+ZW5kKCkp
OworICAgICAgICAKKyAgICAgICAgZnJlZShyZW1haW5kZXIpOworICAgICAgICBmcmVlKGhhbmRs
ZSk7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBlbXB0eSBh
bmQgZmluaXNoIHVwLgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9j
YXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEo
ZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNp
emUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IG51
bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKCFh
bGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdl
U2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhh
bmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJV
RSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBw
YWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBG
b3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZTsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0g
bnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRI
YW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9U
UlVFKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXApOworICAgICAgICBFWFBF
Q1RfRVEoYWxsb3dBbGxvY2F0ZVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkg
LSAxKSAvIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zdGFy
dCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhl
YXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMg
PSAwOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUo
c2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxsb2NhdGUoKGRlZmF1bHRQ
YWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCB0ZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90
IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAgIGZyZWUoYWxsb2Nh
dGUoZmlyc3RTaXplKSk7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFw
ICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0
ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAg
ICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShm
aXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxs
b2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxv
Y2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAg
ICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9j
RG9udENvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKKyAg
ICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9IGFsbG9j
YXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoY3VycmVudEhl
YXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIEVYUEVDVF9FUShhbGxvd0Fs
bG9jYXRlUGFnZXMsIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpOworICAgICAgICBFWFBFQ1RfRVEo
cmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRTaXplICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNp
emUoKSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICogcGFn
ZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAg
ICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQ
YWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKworICAgICAgICBmcmVlKGZp
cnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAg
ICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCAr
IG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAgICAgIGZpcnN0SGFuZGxl
ID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUo
c2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVY
UEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChi
YXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICogcGFnZVNpemUoKSkpOworICAgICAg
ICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgIH0K
K307CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRW1wdHkpCit7CisgICAgLy8gVGVzdHMg
dGhhdCBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBhbiBhbGxvY2F0b3Igd29ya3MuCit9CisKK1RF
U1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQWxsb2NaZXJvKSAgICAKK3sKKyAgICAvLyBUZXN0cyB0
aGF0IGFsbG9jYXRpbmcgYSB6ZXJvLWxlbmd0aCBibG9jayByZXR1cm5zIDAgYW5kCisgICAgLy8g
ZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAKKyAgICBBU1NFUlQoIWFs
bG9jYXRvci0+YWxsb2NhdGUoMCkpOworICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZp
bmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgRVhQ
RUNUX0VRKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAq
IHBhZ2VTaXplKCkpKTsKKyAgICBmcmVlKGZpbmFsKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBPbmVBbGxvYzMyKQoreworICAgIHRlc3RPbmVBbGxvYygzMik7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgT25lQWxsb2M2NCkKK3sKKyAgICB0ZXN0T25lQWxsb2MoNjQp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIE9uZUFsbG9jVHdvUGFnZXMpCit7Cisg
ICAgdGVzdE9uZUFsbG9jKHBhZ2VTaXplKCkgKiAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlR3aWNlKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0Zy
ZWUoMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxv
Y0ZyZWUzMlRoZW42NCkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgMCk7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVuMzIpCit7
CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVHdpY2VUaGVuNjQpCit7CisgICAgdGVzdFJl
cGVhdEFsbG9jRnJlZSgzMiwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42NFR3aWNlKQoreworICAgIHRlc3RSZXBlYXRBbGxv
Y0ZyZWUoMzIsIDY0LCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVw
ZWF0QWxsb2NGcmVlNjRUaGVuMzJUaGVuNjQpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2
NCwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxv
Y0ZyZWUzMlRocmljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIsIDAp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVGhlbjY0
VGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCAzMiwgMCk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVuMzJUd2ljZSkK
K3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMzIsIDApOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZVR3b1BhZ2VzVGhlbjMyKQoreworICAg
IHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIDMy
LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRo
ZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMyLCBzdGF0aWNfY2FzdDxp
bnQ+KHBhZ2VTaXplKCkgKiAyKSwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
UmVwZWF0QWxsb2NGcmVlUGFnZVRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NG
cmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSksIHN0YXRpY19jYXN0PGludD4ocGFnZVNp
emUoKSAqIDIpLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxv
Y0ZyZWVUd29QYWdlc1RoZW5QYWdlKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGlj
X2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSks
IDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMy
UGx1czMyVGhlbjEyOCkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCAzMiwgMTI4
KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2UzMlBs
dXM2NFRoZW4xMjgpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgNjQsIDEyOCk7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlNjRQbHVz
MzJUaGVuMTI4KQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UoNjQsIDMyLCAxMjgpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1c1Bh
Z2VMZXNzMzJUaGVuUGFnZSkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCBwYWdl
U2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3Qs
IFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1c1BhZ2VMZXNzMzJUaGVuVHdvUGFnZXMpCit7CisgICAg
dGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgcGFnZVNpemUoKSAtIDMyLCBwYWdlU2l6ZSgpICog
Mik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlUGFn
ZVBsdXMzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHBhZ2VT
aXplKCksIDMyLCBwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVz
dCwgU2ltcGxlRnVsbENvYWxlc2NlUGFnZVBsdXNQYWdlVGhlblR3b1BhZ2VzKQoreworICAgIHRl
c3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgcGFnZVNpemUoKSwgcGFnZVNpemUoKSAq
IDIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMy
VHdpY2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwgMCk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0RW5kMzJUaHJpY2UpCit7
CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMyRm91clRpbWVzKQorewor
ICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RF
U1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0RW5kUGFnZUxlc3MzMlRoZW4z
MlRoZW5QYWdlTGVzczY0VGhlbjY0KQoreworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCBz
dGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgLSAzMiksIDMyLCBzdGF0aWNfY2FzdDxpbnQ+KHBh
Z2VTaXplKCkgLSA2NCksIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBG
SUZPQWxsb2NFYWdlckZpbGwzMlR3aWNlKQoreworICAgIHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxs
LCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0Vh
Z2VyRmlsbDMyVGhyaWNlKQoreworICAgIHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIs
IDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZp
bGwzMkZvdXJUaW1lcykKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAz
MiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0VhZ2Vy
RmlsbFBhZ2VMZXNzMzJUaGVuMzJUaGVuUGFnZUxlc3M2NFRoZW42NCkKK3sKKyAgICB0ZXN0RklG
T0FsbG9jKEVhZ2VyRmlsbCwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpIC0gMzIpLCAzMiwg
c3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpIC0gNjQpLCA2NCwgMCk7Cit9CisKK1RFU1RfRihN
ZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXAzMikKK3sKKyAgICB0ZXN0RmlsbEhlYXAoMzIsIGRl
ZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgRmlsbEhlYXBQYWdlKQoreworICAgIHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgp
LCBkZWZhdWx0UGFnZXNJbkhlYXApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZp
bGxIZWFwVHdvUGFnZXMpCit7CisgICAgdGVzdEZpbGxIZWFwKHBhZ2VTaXplKCkgKiAyLCBkZWZh
dWx0UGFnZXNJbkhlYXAgLyAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSaWdo
dEFsbG9jYXRpb24zMlRoZW5QYWdlVGhlbjMyVGhlblBhZ2UpCit7CisgICAgdGVzdFJpZ2h0QWxs
b2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIFJpZ2h0QWxsb2NhdGlvblF1YXJ0ZXJQYWdlVGhlblBhZ2VUaGVuUXVh
cnRlclBhZ2VUaGVuUGFnZSkKK3sKKyAgICB0ZXN0UmlnaHRBbGxvY2F0aW9uKHBhZ2VTaXplKCkg
LyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUoKSk7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1czY0VGhyaWNlKQoreworICAgIHRlc3RC
ZXN0Rml0KDY0LCA2NCwgMywgUnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NFRlblRpbWVzKQoreworICAgIHRlc3RCZXN0Rml0KDY0
LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgQmVzdEZpdDY0UGx1czY0SHVuZHJlZFRpbWVzKQoreworICAgIHRlc3RCZXN0Rml0KDY0
LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIEJlc3RGaXQ5NlBsdXM2NFRocmljZSkKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgNjQs
IDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0
Rml0OTZQbHVzNjRUZW5UaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgNjQsIDEwLCBEb250
UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5
NlBsdXM2NEh1bmRyZWRUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgNjQsIDEwMCwgRG9u
dFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0
OTZQbHVzOTZUaHJpY2UpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCAzLCBSdW5TYW5pdHlD
aGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1czk2VGVu
VGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCAxMCwgRG9udFJ1blNhbml0eUNoZWNr
KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzOTZFaWdodHlU
aW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgOTYsIDgwLCBEb250UnVuU2FuaXR5Q2hlY2sp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmluazY0VG8zMikKK3sKKyAgICB0
ZXN0U2hyaW5rKDY0LCAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5r
UGFnZVRvMzIpCit7CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgpLCAzMik7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rUGFnZVRvUGFnZUxlc3MzMikKK3sKKyAgICB0ZXN0
U2hyaW5rKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgLSAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUbzMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNp
emUoKSAqIDIsIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtUd29Q
YWdlc1RvUGFnZVBsdXMzMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdl
U2l6ZSgpICsgMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1Bh
Z2VzVG9QYWdlKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2VzVG9QYWdlTGVz
czMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgLSAzMik7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUb1R3b1BhZ2Vz
TGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKiAy
IC0gMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIERlbWFuZEFsbG9jQ29hbGVz
Y2VQYWdlVGhlbkRvdWJsZUhlYXApCit7CisgICAgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFn
ZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwLCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6
ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1hbmRBbGxvY0NvYWxlc2Nl
UGFnZVRoZW5UcmlwbGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHBhZ2VT
aXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCAqIDIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VT
aXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIERlbWFuZEFsbG9jRG9udENv
YWxlc2NlUGFnZVRoZW5Eb3VibGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxvY0RvbnRDb2Fs
ZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAsIGRlZmF1bHRQYWdlc0luSGVhcCAq
IHBhZ2VTaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAJKHJldmlz
aW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1ZlY3Rvci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2Ns
YXNzIFJlZEJsYWNrVHJlZVRlc3Q6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAg
ICB1bnNpZ25lZCBtX2NvdW50ZXI7CisgICAgCisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAg
ICB7CisgICAgICAgIG1fY291bnRlciA9IDA7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBUZWFyRG93bigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdHJ1Y3QgUGFpciB7CisgICAg
ICAgIGNoYXIga2V5OworICAgICAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICAgICAgCisgICAgICAg
IFBhaXIoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFBhaXIoY2hhciBrZXksIHVuc2lnbmVkIHZh
bHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAgICAgLCB2YWx1ZSh2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBr
ZXkgPT0gb3RoZXIua2V5OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJh
dG9yPChjb25zdCBQYWlyJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGtleSA8IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgIH07CisgICAgCisgICAgdHlwZWRl
ZiBWZWN0b3I8UGFpciwgMTY+IFBhaXJWZWN0b3I7CisgICAgCisgICAgUGFpclZlY3RvciBmaW5k
RXhhY3QoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgUGFp
clZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7
IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBpZiAoYXNW
ZWN0b3IuYXQoaW5kZXgpLmtleSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChhc1ZlY3Rvci5hdChpbmRleCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGQ6
OnNvcnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92ZShQYWlyVmVjdG9yJiBh
c1ZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgYXNWZWN0b3IuYXQoaW5kZXgp
ID0gYXNWZWN0b3IubGFzdCgpOworICAgICAgICBhc1ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAg
fQorICAgIAorICAgIFBhaXJWZWN0b3IgZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKFBhaXJW
ZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAgIGNoYXIgYmVzdEtleSA9
IDA7IC8vIGFzc2lnbm1lbnQgdG8gbWFrZSBnY2MgaGFwcHkKKyAgICAgICAgYm9vbCBmb3VuZEtl
eSA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRl
eCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9y
LmF0KGluZGV4KS5rZXkgPj0ga2V5KSB7CisgICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0
KGluZGV4KS5rZXkgPCBiZXN0S2V5IHx8ICFmb3VuZEtleSkgeworICAgICAgICAgICAgICAgICAg
ICBmb3VuZEtleSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJlc3RLZXkgPSBhc1ZlY3Rv
ci5hdChpbmRleCkua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAg
ICAgICBpZiAoIWZvdW5kS2V5KQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
CisgICAgICAgIHJldHVybiBmaW5kRXhhY3QoYXNWZWN0b3IsIGJlc3RLZXkpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGFzc2VydEZvdW5kQW5kUmVtb3ZlKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBj
aGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgICAgICAgICAgc2l6ZV90IGZvdW5kSW5kZXggPSAwOyAvLyBtYWtlIGNvbXBp
bGVycyBoYXBweQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9
IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAg
aWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5CisgICAgICAgICAgICAgICAgICAgICYm
IGFzVmVjdG9yLmF0KGluZGV4KS52YWx1ZSA9PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRSghZm91bmQpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0g
aW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBFWFBFQ1RfVFJVRShmb3VuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJlbW92ZShhc1ZlY3RvciwgZm91bmRJbmRleCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMg
ZGVsaWJlcmF0ZWx5IHBhc3NlcyBhIGNvcHkgb2YgdGhlIHZlY3Rvci4KKyAgICB2b2lkIGFzc2Vy
dEVxdWFsKFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4mIGFzVHJlZSwgUGFpclZlY3RvciBh
c1ZlY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVk
Pjo6Tm9kZSogY3VycmVudCA9IGFzVHJlZS5maXJzdCgpOyBjdXJyZW50OyBjdXJyZW50ID0gYXNU
cmVlLnN1Y2Nlc3NvcihjdXJyZW50KSkKKyAgICAgICAgICAgIGFzc2VydEZvdW5kQW5kUmVtb3Zl
KGFzVmVjdG9yLCBjdXJyZW50LT5rZXksIGN1cnJlbnQtPnZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBhc3NlcnRTYW1lVmFsdWVzRm9yS2V5KFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25l
ZD4mIGFzVHJlZSwgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSwgUGFp
clZlY3RvciBmb3VuZFZhbHVlcywgY2hhciBrZXkpCisgICAgeworICAgICAgICBpZiAobm9kZSkg
eworICAgICAgICAgICAgRVhQRUNUX0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogcHJldk5vZGUg
PSBub2RlOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIG5vZGUgPSBwcmV2Tm9k
ZTsKKyAgICAgICAgICAgICAgICBwcmV2Tm9kZSA9IGFzVHJlZS5wcmVkZWNlc3NvcihwcmV2Tm9k
ZSk7CisgICAgICAgICAgICB9IHdoaWxlIChwcmV2Tm9kZSAmJiBwcmV2Tm9kZS0+a2V5ID09IGtl
eSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9FUShub2RlLT5rZXksIGtleSk7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghcHJldk5vZGUgfHwgcHJldk5vZGUtPmtleSA8IGtl
eSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBhc3Nl
cnRGb3VuZEFuZFJlbW92ZShmb3VuZFZhbHVlcywgbm9kZS0+a2V5LCBub2RlLT52YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9kZSA9IGFzVHJlZS5zdWNjZXNzb3Io
bm9kZSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW5vZGUgfHwgbm9kZS0+a2V5ID49
IGtleSk7CisgICAgICAgICAgICB9IHdoaWxlIChub2RlICYmIG5vZGUtPmtleSA9PSBrZXkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRShmb3VuZFZhbHVlcy5pc0Vt
cHR5KCkpOworICAgIH0KKyAgICAKKyAgICAvLyBUaGUgY29udHJvbCBzdHJpbmcgaXMgYSBudWxs
LXRlcm1pbmF0ZWQgbGlzdCBvZiBjb21tYW5kcy4gRWFjaAorICAgIC8vIGNvbW1hbmQgaXMgdHdv
IGNoYXJhY3RlcnMsIHdpdGggdGhlIGZpcnN0IGlkZW50aWZ5aW5nIHRoZSBvcGVyYXRpb24KKyAg
ICAvLyBhbmQgdGhlIHNlY29uZCBnaXZpbmcgYSBrZXkuIFRoZSBjb21tYW5kcyBhcmU6CisgICAg
Ly8gICt4ICBBZGQgeAorICAgIC8vICAqeCAgRmluZCBhbGwgZWxlbWVudHMgZXF1YWwgdG8geAor
ICAgIC8vICBAeCAgRmluZCBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIHRoZSBzbWFsbGVzdCBrZXkg
dGhhdCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8geAorICAgIC8vICAheCAgUmVtb3ZlIGFs
bCBlbGVtZW50cyBlcXVhbCB0byB4CisgICAgdm9pZCB0ZXN0RHJpdmVyKGNvbnN0IGNoYXIqIGNv
bnRyb2xTdHJpbmcpCisgICAgeworICAgICAgICBQYWlyVmVjdG9yIGFzVmVjdG9yOworICAgICAg
ICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+IGFzVHJlZTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoY29uc3QgY2hhciogY3VycmVudCA9IGNvbnRyb2xTdHJpbmc7ICpjdXJyZW50OyBjdXJy
ZW50ICs9IDIpIHsKKyAgICAgICAgICAgIGNoYXIgY29tbWFuZCA9IGN1cnJlbnRbMF07CisgICAg
ICAgICAgICBjaGFyIGtleSA9IGN1cnJlbnRbMV07CisgICAgICAgICAgICB1bnNpZ25lZCB2YWx1
ZSA9ICsrbV9jb3VudGVyOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQoY29tbWFu
ZCk7CisgICAgICAgICAgICBBU1NFUlQoa2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
c3dpdGNoIChjb21tYW5kKSB7CisgICAgICAgICAgICBjYXNlICcrJzogeworICAgICAgICAgICAg
ICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBuZXcgUmVkQmxh
Y2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZTsKKyAgICAgICAgICAgICAgICBub2RlLT5rZXkg
PSBrZXk7CisgICAgICAgICAgICAgICAgbm9kZS0+dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAg
ICAgICBhc1RyZWUuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgICAgIGFzVmVjdG9yLmFwcGVu
ZChQYWlyKGtleSwgdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgJyonOiB7CisgICAgICAgICAg
ICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IGFzVHJlZS5m
aW5kRXhhY3Qoa2V5KTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZSkKKyAgICAgICAgICAgICAg
ICAgICAgRVhQRUNUX0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAgICBhc3NlcnRT
YW1lVmFsdWVzRm9yS2V5KGFzVHJlZSwgbm9kZSwgZmluZEV4YWN0KGFzVmVjdG9yLCBrZXkpLCBr
ZXkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBjYXNlICdAJzogeworICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25l
ZD46Ok5vZGUqIG5vZGUgPSBhc1RyZWUuZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGtleSk7
CisgICAgICAgICAgICAgICAgaWYgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNU
X1RSVUUobm9kZS0+a2V5ID49IGtleSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydFNhbWVW
YWx1ZXNGb3JLZXkoYXNUcmVlLCBub2RlLCBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoYXNW
ZWN0b3IsIGtleSksIG5vZGUtPmtleSk7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChhc1Zl
Y3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAnISc6IHsKKyAgICAgICAg
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8
Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLnJlbW92ZShrZXkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNU
X0VRKG5vZGUtPmtleSwga2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydEZvdW5k
QW5kUmVtb3ZlKGFzVmVjdG9yLCBub2RlLT5rZXksIG5vZGUtPnZhbHVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGZp
bmRFeGFjdChhc1ZlY3Rvciwga2V5KS5pc0VtcHR5KCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisjaWZu
ZGVmIE5ERUJVRworICAgICAgICAgICAgYXNUcmVlLmNoZWNrQ29uc2lzdGVuY3koKTsKKyNlbmRp
ZgorICAgICAgICAgICAgRVhQRUNUX0VRKGFzVHJlZS5zaXplKCksIGFzVmVjdG9yLnNpemUoKSk7
CisgICAgICAgICAgICBhc3NlcnRFcXVhbChhc1RyZWUsIGFzVmVjdG9yKTsKKyAgICAgICAgfQor
ICAgIH0KK307CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBFbXB0eSkKK3sKKyAgICB0ZXN0
RHJpdmVyKCIiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEVtcHR5R2V0RmluZFJl
bW92ZSkKK3sKKyAgICB0ZXN0RHJpdmVyKCIqeEB5IXoiKTsKK30KKworVEVTVF9GKFJlZEJsYWNr
VHJlZVRlc3QsIFNpbmdsZUFkZCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSIpOworfQorCitURVNU
X0YoUmVkQmxhY2tUcmVlVGVzdCwgU2luZ2xlQWRkR2V0RmluZFJlbW92ZU5vdEZvdW5kKQorewor
ICAgIHRlc3REcml2ZXIoIithKnhAeSF6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0
LCBTaW5nbGVBZGRHZXRGaW5kUmVtb3ZlKQoreworICAgIHRlc3REcml2ZXIoIithKmFAYSFhIik7
Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBUd29BZGRzKQoreworICAgIHRlc3REcml2
ZXIoIithK2IiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFRocmVlQWRkcykKK3sK
KyAgICB0ZXN0RHJpdmVyKCIrYStiK2MiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3Qs
IEZvdXJBZGRzKQoreworICAgIHRlc3REcml2ZXIoIithK2IrYytkIik7Cit9CisKK1RFU1RfRihS
ZWRCbGFja1RyZWVUZXN0LCBMb3RzT2ZSZXBlYXRBZGRzKQoreworICAgIHRlc3REcml2ZXIoIith
K2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCIpOworfQorCitURVNUX0YoUmVk
QmxhY2tUcmVlVGVzdCwgTG90c09mUmVwZWF0QW5kVW5pcXVlQWRkcykKK3sKKyAgICB0ZXN0RHJp
dmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYSti
K2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrZStmK2craCtpK2or
aytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJl
ZVRlc3QsIExvdHNPZlJlcGVhdEFuZFVuaXF1ZUFkZHNBbmRHZXRzQW5kUmVtb3ZlcykKK3sKKyAg
ICB0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2Er
YitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrZStm
K2craCtpK2oraytsK20rbitvK3ArcStyK3MrdCt1K3YreCt5K3oqYSpiKmMqZCplKmYqZypoKmkq
aiprKmwqbSpuKm8qcCpxKnIqcyp0KnUqdip3KngqeSp6IWEhYiFjIWQhZSFmIWchaCFpIWohayFs
IW0hbiFvIXAhcSFyIXMhdCF1IXYhdyF4IXkheiIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVl
VGVzdCwgU2ltcGxlQmVzdEZpdFNlYXJjaCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrZCtkK20rd0Bk
QG1Ad0BhQGdAcSIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgQmlnZ2VyQmVzdEZp
dFNlYXJjaCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrZCtkK2QrZCtkK2QrZCtkK2QrZCtmK2YrZitm
K2YrZitmK2graCtpK2oraytsK20rbytwK3Ercit6QGFAYkBjQGRAZUBmQGdAaEBpQGpAa0BsQG1A
bkBvQHBAcUByQHNAdEB1QHZAd0B4QHlAeiIpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106842</attachid>
            <date>2011-09-08 23:06:12 -0700</date>
            <delta_ts>2011-09-08 23:13:58 -0700</delta_ts>
            <desc>the patch - replaced the red black tree with one based on PODRedBlackTree</desc>
            <filename>metaalloc_patch_27.diff</filename>
            <type>text/plain</type>
            <size>227531</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAyIEBA
CisyMDExLTA4LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaDoKKyAg
ICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdK
SVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6OmNvbXBpbGUp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVuY3Rpb24pOgorICAg
ICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpnZW5lcmF0ZVBy
b3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQp
OgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlND
OjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5
Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxlQWxsb2NhdG9yKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBv
b2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjppbml0aWFsaXplQWxs
b2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFs
bG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKToK
KyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQpOgorICAgICAgICAo
SlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogaml0L0pJ
VC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAqIGpp
dC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6CisgICAgICAgICog
aml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0b3IgISk6CisgICAg
ICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAgKEpTQzo6SklUQ29k
ZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRlKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChKU0M6
OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENvZGU6OkpJVENvZGUp
OgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJp
dmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToK
KyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdl
dEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQ
cm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3Qp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0
L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OnN0cmluZ0dl
dEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNp
dGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVu
Z3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byk6Cisg
ICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAgICAgICAgKEpTQzo6
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICogaml0L0pJVFN0dWJz
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgorICAgICAgICAoSlND
OjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBvbHltb3JwaGljQWNj
ZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6OmN0aVN0dWIp
OgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRodW5rSklULmg6Cisg
ICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVkVGh1bmtKSVQpOgor
ICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6CisgICAgICAgICog
aml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJDb2RlQXRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpzcXJ0VGh1
bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6cm91bmRUaHVua0dl
bmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVua0dlbmVyYXRvcik6
CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBqaXQvVGh1bmtH
ZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChK
U0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVudGltZS9Jbml0aWFs
aXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZ09uY2Up
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmR1
bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5oOgorICAgICAg
ICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAqIHd0Zi9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAgICAgICAoV1RGOjpN
ZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRv
cjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphbGxvY2F0
ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmN1cnJlbnRTdGF0aXN0aWNzKToKKyAg
ICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZSk6CisgICAg
ICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSk6
CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZXNoRnJlZVNwYWNlKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZGVidWdGcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdU
Rjo6TWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9j
YXRvcjo6aW5jcmVtZW50UGFnZU9jY3VwYW5jeSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0
b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9y
Ojpyb3VuZFVwKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VO
b2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUpOgor
ICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAgICAgICogd3Rm
L01ldGFBbGxvY2F0b3IuaDogQWRkZWQuCisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5
dGVzQWxsb2NhdGVkKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6Ynl0ZXNSZXNlcnZl
ZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmJ5dGVzQ29tbWl0dGVkKToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRh
QWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRCbGFja1RyZWUuaDog
QWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6UmF3Tm9kZTo6cGFyZW50KToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpSYXdOb2RlOjpzZXRQYXJlbnQpOgorICAgICAgICAo
V1RGOjpSZWRCbGFja1RyZWU6OlJhd05vZGU6OmlzUmVkKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpSYXdOb2RlOjpzZXRSZWQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OlJl
ZEJsYWNrVHJlZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0KToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpyZW1vdmUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmZpcnN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsYXN0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpzdWNjZXNzb3IpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpmaW5kRXhhY3Qp
OgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVh
bCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVx
dWFsKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpzaXplKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjppc0VtcHR5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpjaGVj
a0NvbnNpc3RlbmN5KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpkdW1wKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpsZWZ0Um90YXRlKToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpyaWdodFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6aW5zZXJ0
SGVscCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6c3VjY2Vzc29ySW50ZXJuYWwpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeFVwKToKKyAgICAgICAgKFdURjo6
UmVkQmxhY2tUcmVlOjpjaGVja0NvbnNpc3RlbmN5UmVjdXJzZSk6CisgICAgICAgIChXVEY6OlJl
ZEJsYWNrVHJlZTo6ZHVtcFJlY3Vyc2UpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJv
b3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Om5pbFNlbnRpbmVsKToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjphc05vZGUpOgorICAgICAgICAqIHd0Zi93dGYucHJpOgorICAg
ICAgICAqIHlhcnIvWWFyckpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6OllhcnJHZW5lcmF0
b3I6OmNvbXBpbGUpOgorICAgICAgICAqIHlhcnIvWWFyckpJVC5oOgorICAgICAgICAoSlNDOjpZ
YXJyOjpZYXJyQ29kZUJsb2NrOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6WWFycjo6WWFyckNv
ZGVCbG9jazo6Z2V0QWRkcik6CisKIDIwMTEtMDktMDggIE9saXZlciBIdW50ICA8b2xpdmVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBVc2UgYnVtcCBhbGxvY2F0b3IgZm9yIGluaXRpYWwgcHJvcGVy
dHkgc3RvcmFnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAgLTUyOSw2ICs1MjksOSBAQCBqYXZhc2NyaXB0Y29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ENS5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0
b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJ
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2FnZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS93dGYvTm9uQ29weWluZ1NvcnQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9O
b25jb3B5YWJsZS5oIFwKQEAgLTU2MSw2ICs1NjQsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyU2VlZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL1JlZEJsYWNrVHJlZS5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50
ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIu
Y3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNp
b24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3
b3JraW5nIGNvcHkpCkBAIC00MDIsNiArNDAyLDExIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRF
UEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJkZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFp
blRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9tTnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2Nh
dG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0KK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVl
RnJlZVNwYWNlTm9kZUVQTlNfMTJSZWRCbGFja1RyZWVJbVB2RTROb2RlRQorX19aTjNXVEYxM01l
dGFBbGxvY2F0b3IxOGRlYnVnRnJlZVNwYWNlU2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRv
cjhhbGxvY2F0ZUVtCitfX1pOM1dURjEzTWV0YUFsbG9jYXRvckMyRW0KIF9fWk4zV1RGMTNTdHJp
bmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBfX1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5r
VG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00
MzYsNiArNDQxLDggQEAgX19aTjNXVEYxOGNhbGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4
Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMyXwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3
MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21EYXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxs
b2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pOM1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYK
IF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFkaW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5n
TnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMxXwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0
aWNzRXYKQEAgLTUxNiw2ICs1MjMsNyBAQCBfX1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01h
dGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJlZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19a
TjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhwYWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUK
IF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNXVEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9XVEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpA
QCAtODM3LDYgKzgzNywxOCBAQAogCQkJPgogCQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2
ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8
RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgor
CQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJCTwvRmlsZT4KQEAgLTk3Nyw2ICs5ODksMTAgQEAK
IAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVk
QmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmlsZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0i
Li5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJCT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDYgKzUxLDEwIEBACiAJCTBCRjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXpl
TGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYy
NDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIw
MDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8q
IFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNw
cCAqLzsgfTsKKwkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3
NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGOTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRh
QWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0
dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAiLWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9Owor
CQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkExM0Y4NTNCRDAwMDJE
OUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OworCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRv
ckhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IzODEzRkM2
RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9m
aWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIw
MENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdy
aXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JDQTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuY3BwICovOyB9OwpAQCAtNTU4LDcgKzU2Miw3IEBACiAJCUJDMThDNDZCMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMTRBMzk2QTYwQ0QyOTMzMTAwQjVCNEZGIC8qIFN5bWJvbFRhYmxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NkMw
RTE2RjVDRDAwQjM0NDYwIC8qIFRDUGFja2VkQ2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVEQTQ3OTY1MENGQkNGNTYwMDkzMjhBMCAvKiBUQ1Bh
Y2tlZENhY2hlLmggKi87IH07CiAJCUJDMThDNDZEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1BhZ2VN
YXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFC
RDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1BhZ2VNYXAuaCAqLzsgfTsKLQkJQkMxOEM0NkUwRTE2
RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZGMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2Nr
LmggKi87IH07CisJCUJDMThDNDZFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgw
QTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUJDMThDNDZGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3Rl
bUFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
NTQxQkQ3MTA4RTgwQTE3MDAyQ0JFRTcgLyogVENTeXN0ZW1BbGxvYy5oICovOyB9OwogCQlCQzE4
QzQ3MDBFMTZGNUNEMDBCMzQ0NjAgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUVFNzkyMjBENkM5NUNEMDBGRUEzQkEgLyogVGhy
ZWFkaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJQkMxOEM0NzEwRTE2RjVDRDAwQjM0NDYwIC8qIFRocmVhZFNwZWNpZmljLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUI3QzhCRDBEQTNBMzM2MDA3
NEIwREMgLyogVGhyZWFkU3BlY2lmaWMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwpAQCAtNzc4LDYgKzc4MiwxMCBAQAogCQkwRjI0MkRBNTEzRjNCMUJC
MDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZERDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBT
YW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNC
MjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjk2M0IyQjEzRjg1M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTWV0YUFsbG9jYXRvckhhbmRsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkM4MTUwODE0MDQzQkNBMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBw
b3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDODE1MDkxNDA0M0JEMjAw
Q0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9ydC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTc2Myw2ICsxNzcxLDEwIEBACiAJCTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3
dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8sCisJCQkJMEY5
NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGOTYz
QjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggKi8sCisJCQkJMEY5NjNCMjYx
M0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oICovLAogCQkJCUMyRUU1OTlEMTNGQzk3
MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVyLmNwcCAqLywKIAkJCQlDMkVFNTk5RTEzRkM5NzJB
MDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5oICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3
REMwRCAvKiBkdG9hICovLApAQCAtMjM4Myw2ICsyMzk1LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1
NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQx
NDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAgLyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGOTYzQjJGMTNGQzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9y
SGFuZGxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyog
TWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJE
OUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5
QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVtLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJCMzFC
OTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0yNjg2LDcgKzI3MDIsNiBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3
NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QzBFMTZG
NUNEMDBCMzQ0NjAgLyogVENQYWNrZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NkQwRTE2RjVDRDAwQjM0NDYwIC8qIFRDUGFnZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMx
OEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDZGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NzFFREVBNjExNjlFMEQzMDA1RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRjNCRDMxRUQxMjY3MzU3NzAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDQ5LDYgKzMwNjQsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1
aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAo
CisJCQkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGll
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZH
UHJvcGFnYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgx
Q0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiA5NDgz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIp
CiAKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEuaCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNs
dWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgpAQCAt
MTI4LDE5ICsxMjksMjEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gQXNz
ZW1ibGVyTGFiZWwobV9pbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkKiBleGVjdXRh
YmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0
b3IpCisgICAgICAgIFBhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJs
ZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBp
ZiAoIW1faW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHZv
aWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2MoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CisgICAg
ICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xvYmFsRGF0
YS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9jYXRlKGdsb2JhbERhdGEsIG1faW5kZXgpOwogCiAg
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAg
ICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgbV9pbmRl
eCk7CisgICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0
LT5zdGFydCgpLCByZXN1bHQtPnNpemVJbkJ5dGVzKCkpOwogCi0gICAgICAgICAgICByZXR1cm4g
bWVtY3B5KHJlc3VsdCwgbV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgbWVtY3B5KHJl
c3VsdC0+c3RhcnQoKSwgbV9idWZmZXIsIG1faW5kZXgpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQg
cmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCBsYWJlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC02OSwyMiArNjksOCBAQCBjbGFzcyBMaW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6
Ci0gICAgTGlua0J1ZmZlcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVy
KiBtYXNtLCBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCkKLSAgICAg
ICAgOiBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZSgw
KQotICAgICAgICAsIG1fY29kZSgwKQotICAgICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCi0gICAg
ICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxEYXRhKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAg
LCBtX2NvbXBsZXRlZChmYWxzZSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgbGlua0NvZGUoKTsK
LSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9B
c3NlbWJsZXIqIG1hc20sIEV4ZWN1dGFibGVBbGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAg
OiBtX2V4ZWN1dGFibGVQb29sKGFsbG9jYXRvci5wb29sRm9yU2l6ZShnbG9iYWxEYXRhLCBtYXNt
LT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpKSkKLSAgICAgICAgLCBtX3NpemUoMCkKKyAgICBMaW5r
QnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisg
ICAgICAgIDogbV9zaXplKDApCiAgICAgICAgICwgbV9jb2RlKDApCiAgICAgICAgICwgbV9hc3Nl
bWJsZXIobWFzbSkKICAgICAgICAgLCBtX2dsb2JhbERhdGEoJmdsb2JhbERhdGEpCkBAIC0xODUs
MTQgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24o
KTsKIAotICAgICAgICByZXR1cm4gQ29kZVJlZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBvb2wsIG1f
c2l6ZSk7Ci0gICAgfQotCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZmluYWxpemVDb2RlQWRkZW5k
dW0oKQotICAgIHsKLSAgICAgICAgcGVyZm9ybUZpbmFsaXphdGlvbigpOwotCi0gICAgICAgIHJl
dHVybiBDb2RlTG9jYXRpb25MYWJlbChjb2RlKCkpOworICAgICAgICByZXR1cm4gQ29kZVJlZiht
X2V4ZWN1dGFibGVNZW1vcnkpOwogICAgIH0KIAogICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExh
YmVsIGxhYmVsKQpAQCAtMjMyLDE0ICsyMTEsMTkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAg
IEFTU0VSVCghbV9jb2RlKTsKICNpZiAhRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQotICAgICAg
ICBtX2NvZGUgPSBtX2Fzc2VtYmxlci0+bV9hc3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xv
YmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1l
bW9yeSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2VtYmxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxE
YXRhKTsKKyAgICAgICAgaWYgKCFtX2V4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIG1fY29kZSA9IG1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKICAgICAg
ICAgbV9zaXplID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgICAg
IEFTU0VSVChtX2NvZGUpOwogI2Vsc2UKICAgICAgICAgc2l6ZV90IGluaXRpYWxTaXplID0gbV9h
c3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVTaXplKCk7Ci0gICAgICAgIG1fY29kZSA9ICh1aW50
OF90KiltX2V4ZWN1dGFibGVQb29sLT5hbGxvYygqbV9nbG9iYWxEYXRhLCBpbml0aWFsU2l6ZSk7
Ci0gICAgICAgIGlmICghbV9jb2RlKQorICAgICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2ds
b2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuYWxsb2NhdGUoKm1fZ2xvYmFsRGF0YSwgaW5p
dGlhbFNpemUpOworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgbV9jb2RlID0gKHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1lbW9yeS0+
c3RhcnQoKTsKKyAgICAgICAgQVNTRVJUKG1fY29kZSk7CiAgICAgICAgIEV4ZWN1dGFibGVBbGxv
Y2F0b3I6Om1ha2VXcml0YWJsZShtX2NvZGUsIGluaXRpYWxTaXplKTsKICAgICAgICAgdWludDhf
dCogaW5EYXRhID0gKHVpbnQ4X3QqKW1fYXNzZW1ibGVyLT51bmxpbmtlZENvZGUoKTsKICAgICAg
ICAgdWludDhfdCogb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7
CkBAIC0yOTcsNyArMjgxLDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBqdW1wc1RvTGluay5jbGVh
cigpOwogICAgICAgICBtX3NpemUgPSB3cml0ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsK
LSAgICAgICAgbV9leGVjdXRhYmxlUG9vbC0+dHJ5U2hyaW5rKG1fY29kZSwgaW5pdGlhbFNpemUs
IG1fc2l6ZSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7CiAK
ICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwogICAgICAgICBkdW1wTGlua1N0YXRpc3RpY3MobV9j
b2RlLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsKQEAgLTM2Niw3ICszNTAsNyBAQCBwcml2YXRlOgog
ICAgIH0KICNlbmRpZgogICAgIAotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRh
YmxlUG9vbDsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxl
TWVtb3J5OwogICAgIHNpemVfdCBtX3NpemU7CiAgICAgdm9pZCogbV9jb2RlOwogICAgIE1hY3Jv
QXNzZW1ibGVyKiBtX2Fzc2VtYmxlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gOTQ4
MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksMjIgKzE5OSw1OSBAQCBwcml2YXRlOgogLy8g
cG9pbnRlciB0byB0aGUgY29kZSwgYW5kIGEgcmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3
aXRoaW4gd2hpY2ggaXQKIC8vIHdhcyBhbGxvY2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgeworcHJpdmF0ZToKKyAgICAvLyBUaGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCdzIGRh
bmdlcm91cyBlbm91Z2ggdGhhdCB3ZSB3YW50IHVzZXMgb2YgaXQKKyAgICAvLyB0byBiZSBlYXN5
IHRvIGZpbmQgLSBoZW5jZSB0aGUgc3RhdGljIGNyZWF0ZSBtZXRob2QgYmVsb3cuCisgICAgZXhw
bGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRy
KQorICAgICAgICA6IG1fY29kZVB0cihjb2RlUHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1f
Y29kZVB0cik7CisgICAgfQorCiBwdWJsaWM6CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkK
LSAgICAgICAgOiBtX3NpemUoMCkKICAgICB7CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQ
b29sLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX2V4
ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZihQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+
IGV4ZWN1dGFibGVNZW1vcnkpCisgICAgICAgIDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnkt
PnN0YXJ0KCkpCisgICAgICAgICwgbV9leGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVNZW1vcnkp
CisgICAgeworICAgICAgICBBU1NFUlQobV9leGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7
CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpOworICAgICAgICBB
U1NFUlQobV9jb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgLy8gVXNlIHRoaXMgb25seSB3aGVu
IHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQdHIgcmVmZXJzIHRvIGNvZGUgdGhhdCBpcworICAgIC8v
IGFscmVhZHkgYmVpbmcga2VwdCBhbGl2ZSB0aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGlj
YWxseSB0aGlzIG1lYW5zCisgICAgLy8gdGhhdCBjb2RlUHRyIGlzIGltbW9ydGFsLgorICAgIHN0
YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKKyAgICB9CisgICAgCisgICAgRXhlY3V0YWJsZU1lbW9y
eUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9leGVjdXRhYmxlTWVtb3J5LmdldCgpOworICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb2RlUHRyOwor
ICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAo
IW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbV9leGVjdXRhYmxlTWVtb3J5LT5zaXplSW5CeXRlcygpOwogICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2NvZGVQdHI7IH0KIAotICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7Ci0gICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4
ZWN1dGFibGVQb29sOwotICAgIHNpemVfdCBtX3NpemU7Citwcml2YXRlOgorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBtX2NvZGVQdHI7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5k
bGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZp
c2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTUsOSArMTU5NSw5IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGIubV9vZmZzZXQgLSBhLm1fb2Zmc2V0OwogICAgIH0KICAgICAKLSAgICB2b2lk
KiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29s
KiBhbGxvY2F0b3IpCisgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVj
dXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewotICAgICAgICByZXR1
cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNvcHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAg
ICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAg
IH0KIAogICAgIHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBt
X2Zvcm1hdHRlci5yZXdpbmRUb0xhYmVsKHJld2luZFRvKTsgfQpAQCAtMTkzOSw5ICsxOTM5LDkg
QEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3Qg
eyByZXR1cm4gbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCk7IH0KICAgICAgICAgdm9pZCog
ZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyLmRhdGEoKTsgfQogCi0gICAgICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBl
eGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVjdXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0
b3IpOworICAgICAgICAgICAgcmV0dXJuIG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERh
dGEpOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxh
YmVsIHJld2luZFRvKSB7IG1fYnVmZmVyLnJld2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5
NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMzI0LDcgKzMyNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENvZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAg
ICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRKSVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmpp
dFR5cGUoKTsgfQotICAgICAgICBFeGVjdXRhYmxlUG9vbCogZXhlY3V0YWJsZVBvb2woKSB7IHJl
dHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0YWJsZVBvb2woKTsgfQorICAgICAgICBFeGVjdXRh
YmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxlTWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgp
LmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21w
aWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNjb3BlQ2hhaW5Ob2RlKikgPSAwOwogICAgICAgICB2
aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1lbnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9v
bCBjYW5Db21waWxlV2l0aERGRygpID0gMDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogCiAj
aWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVmIENvZGVMb2NhdGlvbkxhYmVsIFBvbHltb3JwaGlj
QWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0aW5lVHlwZTsKKyAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5
cGU7CiAKICAgICAvLyBTdHJ1Y3R1cmUgdXNlZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0IGFu
ZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBpbnN0cnVjdGlvbiB0byBob2xkIGRhdGEgb2ZmIHRo
ZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAgc3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0
dXJlTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
U3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTcz
LDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgfSBwdXRCeUlkUmVwbGFj
ZTsKICAgICAgICAgfSB1OwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHN0dWJSb3V0aW5l
OworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAgICAgIENv
ZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxvY2F0aW9uOwogICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBob3RQYXRoQmVnaW47CiAgICAgfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTks
NyArOTU5LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAg
IC8vIEdlbmVyYXRlIHRoZSBib2R5IG9mIHRoZSBwcm9ncmFtLgogICAgIGNvbXBpbGVCb2R5KCk7
CiAgICAgLy8gTGluawotICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIg
bGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwog
ICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpE
RkdKSVQpOwogfQpAQCAtMTAxNyw3ICsxMDE3LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGls
ZUZ1bmN0aW9uKEpJVENvZAogCiAKICAgICAvLyA9PT0gTGluayA9PT0KLSAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxl
QWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsKICAgICAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRo
ZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJpdHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24g
c3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBz
dGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0Y2goTGlua0J1ZmZlCiAgICAgbGlua1Jlc3RvcmVT
Y3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwg
ZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFi
ZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXN0YXRpYyB2
b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1
cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50
LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwg
c3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUxhYmVsLCBDb2RlTG9jYXRp
b25MYWJlbCYgc3R1YlJvdXRpbmUpCitzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1
Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxhYmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9u
TGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkK
IHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwog
CkBAIC0xMzMsMTEgKzEzMywxMSBAQCBzdGF0aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nl
c3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3RvcmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3Rv
cmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNjZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAg
IAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBleGVj
LT5jb2RlQmxvY2soKS0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRj
aChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1
cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93Q2FzZUxhYmVsKTsKICAgICAKLSAgICBzdHViUm91
dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7CisgICAgc3R1YlJvdXRp
bmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogc3RhdGljIGJvb2wgdHJ5Q2Fj
aGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVT
dHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNzYsMTUgKzE3NiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlD
YWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgIAogICAgICAgICBlbWl0UmVzdG9yZVNj
cmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9yZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3Ms
IGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNo
QnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgp
KTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQp
OwogICAgICAgICAKICAgICAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVk
VG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8sIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7
CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRp
bmUgPSBlbnRyeUxhYmVsOworICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2Fs
bFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5j
b2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVj
U3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZv
LCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgIAogICAgIFJlcGF0Y2hC
dWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFD
YWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKKyAgICByZXBhdGNoQnVm
ZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5z
dHViUm91dGluZS5jb2RlKCkpKTsKICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5j
YWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlvbkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7CiAgICAg
CiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRDaGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkBAIC0zMjQsNyAr
MzIzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgIAog
ICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewog
ICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBo
aWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkluZm8uY2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwg
c3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAg
ICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxmTGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qs
IDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0
dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0cnVjdHVyZUxpc3Q7CkBAIC0zNTAsMjEgKzM0OSwy
MSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIAog
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAg
ICAgICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1
YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKLSAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3Qt
Pmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1
cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgICAg
IEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsKICAgICAgICAgCiAgICAgICAgIHBhdGNoQnVmZmVy
Lmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90b0JlZ2luKTsKICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChz
dHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlz
dC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1
dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAg
ICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAg
ICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlN
T1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBA
IC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4
ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4p
IHsKICAgICAgICAgQVNTRVJUKCEhc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0
KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHVi
Um91dGluZSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4uY2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5m
by5zdHViUm91dGluZSA9IENvZGVMb2NhdGlvbkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZvLnN0
dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLmlu
aXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBl
bHNlIHsKICAgICAgICAgQVNTRVJUKHN0dWJJbmZvLmFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5
X2lkX3Byb3RvX2xpc3QpOwpAQCAtNDE5LDE4ICs0MTgsMTggQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19M
SVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAgc3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxp
c3RTaXplKys7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHVi
Um91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2Rl
TG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0g
MV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4p
OwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWw7CisgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGluZTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRl
UHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywgc3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3Vu
dCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0
T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvRG9uZSksIGxhc3RQcm90b0JlZ2luLCBlbnRyeUxh
YmVsKTsKKyAgICAgICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5m
bywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwg
bGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5lKTsKICAgICAgICAgCi0gICAgICAgIHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRh
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsK
ICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0
cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9j
ayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0
aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlz
dEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC01NDgsMTggKzU0NywxNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1
dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBz
dWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1
dGFibGVQb29sKCkpOworICAgICAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFs
RGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb0RvbmUpKTsKICAgICAgICAgICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRjaCkKICAgICAg
ICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVD
YXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
ZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAg
ICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2Fs
bFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENo
ZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRv
U3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2Rl
KCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1
cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRCeUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24o
Kmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwg
c3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDk0ODMxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjcsNDIgKzI3LDExMSBAQAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9j
YXRvci5oIgogCisjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKyNpbmNs
dWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24u
aD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+CisjZW5kaWYKKwogI2lmIEVOQUJMRShBU1NFTUJM
RVIpCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5B
QkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKIAotRXhlY3V0YWJsZVBvb2w6OkFsbG9j
YXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3RlbUFsbG9jKHNpemVfdCBzaXplKQorY2xhc3MgRGVt
YW5kRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgeworcHVibGljOgor
ICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgICAgICA6IE1ldGFBbGxvY2F0b3Io
MzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcworICAgIHsKKyAgICAg
ICAgLy8gRG9uJ3QgcHJlYWxsb2NhdGUgYW55IG1lbW9yeSBoZXJlLgorICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIH5EZW1hbmRFeGVjdXRhYmxlQWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXNlcnZhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICByZXNlcnZhdGlvbnMuYXQoaSkuZGVhbGxvY2F0ZSgpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKQor
ICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld051bVBhZ2VzID0gKCgobnVtUGFnZXMgKiBwYWdlU2l6
ZSgpICsgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFIC0gMSkgLyBKSVRfQUxMT0NBVE9S
X0xBUkdFX0FMTE9DX1NJWkUgKiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpICsgcGFn
ZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChuZXdO
dW1QYWdlcyA+PSBudW1QYWdlcyk7CisgICAgICAgIAorICAgICAgICBudW1QYWdlcyA9IG5ld051
bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgUGFnZVJlc2VydmF0aW9uIHJlc2VydmF0aW9uID0g
UGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKG51bVBhZ2VzICogcGFnZVNpemUoKSwgT1NBbGxvY2F0
b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAg
ICAgICBpZiAoIXJlc2VydmF0aW9uKQorICAgICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgCisg
ICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQocmVzZXJ2YXRpb24pOworICAgICAgICAKKyAgICAg
ICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2UoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2
b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBhZ2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRv
cjo6Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCksIEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1
ZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQq
IHBhZ2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRvcjo6ZGVjb21taXQocGFnZSwgcGFnZVNp
emUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxQYWdlUmVzZXJ2YXRpb24sIDE2
PiByZXNlcnZhdGlvbnM7Cit9OworCitzdGF0aWMgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvciog
YWxsb2NhdG9yOworCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0
b3IoKQogewotICAgIFBhZ2VBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSBQYWdlQWxsb2NhdGlvbjo6
YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BP
T0xfV1JJVEFCTEUsIHRydWUpOwotICAgIGlmICghYWxsb2NhdGlvbikKLSAgICAgICAgQ1JBU0go
KTsKLSAgICByZXR1cm4gYWxsb2NhdGlvbjsKKyAgICBBU1NFUlQoIWFsbG9jYXRvcik7CisgICAg
YWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0b3IoKTsKIH0KIAotdm9pZCBF
eGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYg
YWxsb2NhdGlvbikKK0V4ZWN1dGFibGVBbGxvY2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNH
bG9iYWxEYXRhJikKIHsKLSAgICBhbGxvY2F0aW9uLmRlYWxsb2NhdGUoKTsKKyAgICBBU1NFUlQo
YWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29u
c3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0KLSAgICAKKwogYm9vbCBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gICAg
CisKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRv
cjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFJl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRl
KHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgQ1JBU0goKTsKKyAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwogc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6
OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0gICAgcmV0dXJuIDA7Ci19IAorICAgIHJldHVybiBh
bGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7Cit9CiAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FU
T1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJsZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQorewor
ICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUoKTsKK30KICNlbmRpZgogCisjZW5kaWYgLy8gRU5B
QkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKwogI2lmIEVOQUJMRShBU1NFTUJMRVJf
V1hfRVhDTFVTSVZFKQogCiAjaWYgT1MoV0lORE9XUykgfHwgT1MoU1lNQklBTikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZp
c2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c3RkZGVm
Lmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNsdWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgogI2luY2x1
ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTEwMiwxMjAgKzEwMywyNyBAQCBpbmxpbmUg
c2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6ZShzaXplCiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
bGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1YmxpYyBSZWZDb3VudGVkPEV4ZWN1dGFibGVQb29sPiB7
Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKLSAgICB0
eXBlZGVmIFBhZ2VBbGxvY2F0aW9uIEFsbG9jYXRpb247Ci0jZWxzZQotICAgIGNsYXNzIEFsbG9j
YXRpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgQWxsb2NhdGlvbih2b2lkKiBiYXNlLCBzaXpl
X3Qgc2l6ZSkKLSAgICAgICAgICAgIDogbV9iYXNlKGJhc2UpCi0gICAgICAgICAgICAsIG1fc2l6
ZShzaXplKQotICAgICAgICB7Ci0gICAgICAgIH0KLSAgICAgICAgdm9pZCogYmFzZSgpIHsgcmV0
dXJuIG1fYmFzZTsgfQotICAgICAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQot
ICAgICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2Jhc2U7IH0KLQotICAg
IHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1fYmFzZTsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZTsK
LSAgICB9OwotI2VuZGlmCi0gICAgdHlwZWRlZiBWZWN0b3I8QWxsb2NhdGlvbiwgMj4gQWxsb2Nh
dGlvbkxpc3Q7Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gY3JlYXRl
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IG4pCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVQb29sKGdsb2JhbERhdGEsIG4pKTsKLSAgICB9Ci0K
LSAgICB2b2lkKiBhbGxvYyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZVB0ciA8PSBtX2VuZCk7Ci0KLSAgICAgICAgLy8gUm91
bmQgJ24nIHVwIHRvIGEgbXVsdGlwbGUgb2Ygd29yZCBzaXplOyBpZiBhbGwgYWxsb2NhdGlvbnMg
YXJlIG9mCi0gICAgICAgIC8vIHdvcmQgc2l6ZWQgcXVhbnRpdGllcywgdGhlbiBhbGwgc3Vic2Vx
dWVudCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFsaWduZWQuCi0gICAgICAgIG4gPSByb3VuZFVwQWxs
b2NhdGlvblNpemUobiwgc2l6ZW9mKHZvaWQqKSk7Ci0KLSAgICAgICAgaWYgKHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4obikgPCAobV9lbmQgLSBtX2ZyZWVQdHIpKSB7Ci0gICAgICAgICAgICB2b2lk
KiByZXN1bHQgPSBtX2ZyZWVQdHI7Ci0gICAgICAgICAgICBtX2ZyZWVQdHIgKz0gbjsKLSAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJbnN1ZmZpY2ll
bnQgc3BhY2UgdG8gYWxsb2NhdGUgaW4gdGhlIGV4aXN0aW5nIHBvb2wKLSAgICAgICAgLy8gc28g
d2UgbmVlZCBhbGxvY2F0ZSBpbnRvIGEgbmV3IHBvb2wKLSAgICAgICAgcmV0dXJuIHBvb2xBbGxv
Y2F0ZShnbG9iYWxEYXRhLCBuKTsKLSAgICB9Ci0gICAgCi0gICAgdm9pZCB0cnlTaHJpbmsodm9p
ZCogYWxsb2NhdGlvbiwgc2l6ZV90IG9sZFNpemUsIHNpemVfdCBuZXdTaXplKQotICAgIHsKLSAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PGNoYXIqPihhbGxvY2F0aW9uKSArIG9sZFNpemUgIT0gbV9m
cmVlUHRyKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2ZyZWVQdHIgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyByb3VuZFVwQWxsb2NhdGlvblNpemUobmV3U2l6ZSwg
c2l6ZW9mKHZvaWQqKSk7Ci0gICAgfQotCi0gICAgfkV4ZWN1dGFibGVQb29sKCkKLSAgICB7Ci0g
ICAgICAgIEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBlbmQgPSBtX3Bvb2xzLmVuZCgpOwotICAg
ICAgICBmb3IgKEFsbG9jYXRpb25MaXN0OjppdGVyYXRvciBwdHIgPSBtX3Bvb2xzLmJlZ2luKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJl
bGVhc2UoKnB0cik7Ci0gICAgfQotCi0gICAgc2l6ZV90IGF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0
dXJuIChtX3Bvb2xzLnNpemUoKSA+IDEpID8gMCA6IG1fZW5kIC0gbV9mcmVlUHRyOyB9Ci0KLXBy
aXZhdGU6Ci0gICAgc3RhdGljIEFsbG9jYXRpb24gc3lzdGVtQWxsb2Moc2l6ZV90IG4pOwotICAg
IHN0YXRpYyB2b2lkIHN5c3RlbVJlbGVhc2UoQWxsb2NhdGlvbiYgYWxsb2MpOwotCi0gICAgRXhl
Y3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiwgc2l6ZV90IG4pOwotCi0gICAgdm9pZCogcG9vbEFs
bG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBuKTsKLQotICAgIGNoYXIqIG1fZnJlZVB0cjsK
LSAgICBjaGFyKiBtX2VuZDsKLSAgICBBbGxvY2F0aW9uTGlzdCBtX3Bvb2xzOwotfTsKK3R5cGVk
ZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlIEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU7CiAKIGNs
YXNzIEV4ZWN1dGFibGVBbGxvY2F0b3IgewogICAgIGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBX
cml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBwdWJsaWM6Ci0gICAgRXhlY3V0YWJsZUFsbG9jYXRv
cihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCi0gICAgewotICAgICAgICBpZiAoaXNWYWxpZCgp
KQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29sID0gRXhlY3V0YWJsZVBvb2w6OmNy
ZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpOwotI2lmICFF
TkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENSQVNIKCk7Ci0j
ZW5kaWYKLSAgICB9CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKTsKKyAg
ICAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFsaXplQWxsb2NhdG9yKCk7CiAKICAgICBib29sIGlz
VmFsaWQoKSBjb25zdDsKIAogICAgIHN0YXRpYyBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUoKTsK
KyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBzdGF0aWMgdm9p
ZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsg
fQorI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBwb29sRm9yU2l6ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgLy8gVHJ5
IHRvIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc21hbGwgYWxsb2NhdG9yCi0gICAgICAgIEFTU0VSVCht
X3NtYWxsQWxsb2NhdGlvblBvb2wpOwotICAgICAgICBpZiAobiA8IG1fc21hbGxBbGxvY2F0aW9u
UG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gbV9zbWFsbEFsbG9jYXRpb25Q
b29sOwotCi0gICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzIGxhcmdlLCB3ZSBqdXN0IHByb3Zp
ZGUgYSB1bnNoYXJlZCBhbGxvY2F0b3IKLSAgICAgICAgaWYgKG4gPiBKSVRfQUxMT0NBVE9SX0xB
UkdFX0FMTE9DX1NJWkUpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OmNyZWF0
ZShnbG9iYWxEYXRhLCBuKTsKLQotICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYWxsb2NhdG9yCi0g
ICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gcG9vbCA9IEV4ZWN1dGFibGVQb29sOjpjcmVh
dGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRPUl9MQVJHRV9BTExPQ19TSVpFKTsKLQotICAgICAg
ICAvLyBJZiB0aGUgbmV3IGFsbG9jYXRvciB3aWxsIHJlc3VsdCBpbiBtb3JlIGZyZWUgc3BhY2Ug
dGhhbiBpbgotICAgICAgICAvLyB0aGUgY3VycmVudCBzbWFsbCBhbGxvY2F0b3IsIHRoZW4gd2Ug
d2lsbCB1c2UgaXQgaW5zdGVhZAotICAgICAgICBpZiAoKHBvb2wtPmF2YWlsYWJsZSgpIC0gbikg
PiBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2YWlsYWJsZSgpKQotICAgICAgICAgICAgbV9zbWFs
bEFsbG9jYXRpb25Qb29sID0gcG9vbDsKLSAgICAgICAgcmV0dXJuIHBvb2wucmVsZWFzZSgpOwot
ICAgIH0KKyAgICBQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKEpT
R2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5CeXRlcyk7CiAKICNpZiBFTkFCTEUoQVNTRU1CTEVS
X1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMgdm9pZCBtYWtlV3JpdGFibGUodm9pZCogc3RhcnQs
IHNpemVfdCBzaXplKQpAQCAtMzQ4LDUwICsyNTYsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShB
U1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHN0YXRpYyB2b2lkIHJlcHJvdGVjdFJlZ2lvbih2
b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0dGluZyk7CiAjZW5kaWYKLQotICAgIFJlZlB0cjxF
eGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwogfTsKIAotaW5saW5lIEV4ZWN1
dGFibGVQb29sOjpFeGVjdXRhYmxlUG9vbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVf
dCBuKQotewotICAgIHNpemVfdCBhbGxvY1NpemUgPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwg
cGFnZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlvbiBtZW0gPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUp
OwotICAgIGlmICghbWVtLmJhc2UoKSkgewotICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9y
eShnbG9iYWxEYXRhKTsKLSAgICAgICAgbWVtID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAg
ICB9Ci0gICAgbV9wb29scy5hcHBlbmQobWVtKTsKLSAgICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2Fz
dDxjaGFyKj4obWVtLmJhc2UoKSk7Ci0gICAgaWYgKCFtX2ZyZWVQdHIpCi0gICAgICAgIENSQVNI
KCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIG1fZW5kID0gbV9mcmVlUHRyICsgYWxsb2NT
aXplOwotICAgIGRlcHJlY2F0ZWRUdXJuT2ZmVmVyaWZpZXIoKTsKLX0KLQotaW5saW5lIHZvaWQq
IEV4ZWN1dGFibGVQb29sOjpwb29sQWxsb2NhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBz
aXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxsb2NTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXpl
KG4sIHBhZ2VTaXplKCkpOwotICAgIAotICAgIEFsbG9jYXRpb24gcmVzdWx0ID0gc3lzdGVtQWxs
b2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIXJlc3VsdC5iYXNlKCkpIHsKLSAgICAgICAgcmVsZWFz
ZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHJlc3VsdCA9IHN5c3RlbUFs
bG9jKGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlmICghcmVzdWx0LmJhc2UoKSkKLSAgICAgICAgICAg
IENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQo
bV9lbmQgPj0gbV9mcmVlUHRyKTsKLSAgICBpZiAoKGFsbG9jU2l6ZSAtIG4pID4gc3RhdGljX2Nh
c3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0cikpIHsKLSAgICAgICAgLy8gUmVwbGFjZSBhbGxv
Y2F0aW9uIHBvb2wKLSAgICAgICAgbV9mcmVlUHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3Vs
dC5iYXNlKCkpICsgbjsKLSAgICAgICAgbV9lbmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0
LmJhc2UoKSkgKyBhbGxvY1NpemU7Ci0gICAgfQotCi0gICAgbV9wb29scy5hcHBlbmQocmVzdWx0
KTsKLSAgICByZXR1cm4gcmVzdWx0LmJhc2UoKTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgSlND
CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAmJiBFTkFCTEUoQVNTRU1CTEVSKQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpbmNsdWRl
ICJUQ1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1bmlzdGQu
aD4KLSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5oPgorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNlcnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WTVRh
Z3MuaD4KIApAQCAtNDYsNDgxICs0NSwxMDAgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFt
ZXNwYWNlIEpTQyB7CiAgICAgCi0jZGVmaW5lIFR3b1BvdyhuKSAoMXVsbCA8PCBuKQotCi1jbGFz
cyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgewotcHVibGljOgotICAgIEFsbG9jYXRpb25UYWJs
ZVNpemVDbGFzcyhzaXplX3Qgc2l6ZSwgc2l6ZV90IGJsb2NrU2l6ZSwgdW5zaWduZWQgbG9nMkJs
b2NrU2l6ZSkKLSAgICAgICAgOiBtX2Jsb2NrU2l6ZShibG9ja1NpemUpCi0gICAgewotICAgICAg
ICBBU1NFUlQoYmxvY2tTaXplID09IFR3b1Bvdyhsb2cyQmxvY2tTaXplKSk7Ci0KLSAgICAgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYmxvY2tzIG5lZWRlZCB0byBob2xkIHNpemUuCi0g
ICAgICAgIHNpemVfdCBibG9ja01hc2sgPSBibG9ja1NpemUgLSAxOwotICAgICAgICBtX2Jsb2Nr
Q291bnQgPSAoc2l6ZSArIGJsb2NrTWFzaykgPj4gbG9nMkJsb2NrU2l6ZTsKLQotICAgICAgICAv
LyBBbGlnbiB0byB0aGUgc21hbGxlc3QgcG93ZXIgb2YgdHdvID49IG1fYmxvY2tDb3VudC4KLSAg
ICAgICAgbV9ibG9ja0FsaWdubWVudCA9IDE7Ci0gICAgICAgIHdoaWxlIChtX2Jsb2NrQWxpZ25t
ZW50IDwgbV9ibG9ja0NvdW50KQotICAgICAgICAgICAgbV9ibG9ja0FsaWdubWVudCArPSBtX2Js
b2NrQWxpZ25tZW50OwotICAgIH0KLQotICAgIHNpemVfdCBibG9ja1NpemUoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrU2l6ZTsgfQotICAgIHNpemVfdCBibG9ja0NvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja0NvdW50OyB9Ci0gICAgc2l6ZV90IGJsb2NrQWxpZ25tZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja0FsaWdubWVudDsgfQotCi0gICAgc2l6ZV90IHNpemUoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG1fYmxvY2tTaXplICogbV9ibG9ja0NvdW50OwotICAgIH0KLQotcHJpdmF0
ZToKLSAgICBzaXplX3QgbV9ibG9ja1NpemU7Ci0gICAgc2l6ZV90IG1fYmxvY2tDb3VudDsKLSAg
ICBzaXplX3QgbV9ibG9ja0FsaWdubWVudDsKLX07Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxvZzJF
bnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlTGVhZiB7Ci0gICAgdHlwZWRlZiB1aW50NjRf
dCBCaXRGaWVsZDsKLQotcHVibGljOgotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyU3Vi
cmVnaW9uU2l6ZSA9IDEyOyAvLyAyXjEyID09IHBhZ2VzaXplCi0gICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9nMlN1YnJlZ2lvblNpemUgKyBsb2cyRW50cmllczsK
LQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc3VicmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyU3Vi
cmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCByZWdpb25TaXplID0gVHdvUG93
KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZW50cmllcyA9IFR3
b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09NUElMRV9BU1NFUlQoZW50cmllcyA8PSAoc2l6ZW9m
KEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9uVGFibGVMZWFmX2VudHJpZXNfZml0X2luX0JpdEZp
ZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJsZUxlYWYoKQotICAgICAgICA6IG1fYWxsb2NhdGVk
KDApCi0gICAgewotICAgIH0KLQotICAgIH5BbGxvY2F0aW9uVGFibGVMZWFmKCkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VS
VChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0gc3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VS
VCghaXNGdWxsKCkpOwotCi0gICAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBzaXplQ2xhc3MuYmxv
Y2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291
bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMgbWFzayB0byBjaGVjayBmb3Igc3BhbnMgb2YgZnJl
ZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkg
PDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQotICAgICAgICAvLyBTdGVwIGluIHVuaXRzIG9mIGFs
aWdubWVudCBzaXplLgotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsg
aSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAgICAgIGlmICghKG1fYWxsb2NhdGVkICYgbWFzaykp
IHsKLSAgICAgICAgICAgICAgICBtX2FsbG9jYXRlZCB8PSBtYXNrOwotICAgICAgICAgICAgICAg
IHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBjb3VudCkpIDw8IGxvZzJTdWJyZWdpb25TaXplOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgbWFzayA8PD0gYWxpZ25tZW50OwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsKLSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoc2l6ZV90
IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0gc3VicmVnaW9uU2l6ZSk7Ci0K
LSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9jYXRpb24gPj4gbG9nMlN1YnJlZ2lvblNpemU7Ci0g
ICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVDbGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAgIEJp
dEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkgPDwgZW50cnk7Ci0KLSAgICAgICAg
QVNTRVJUKChtX2FsbG9jYXRlZCAmIG1hc2spID09IG1hc2spOwotICAgICAgICBtX2FsbG9jYXRl
ZCAmPSB+bWFzazsKLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAg
cmV0dXJuICFtX2FsbG9jYXRlZDsKLSAgICB9Ci0KLSAgICBib29sIGlzRnVsbCgpCi0gICAgewot
ICAgICAgICByZXR1cm4gIX5tX2FsbG9jYXRlZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90
IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHJlZ2lvblNpemU7Ci0gICAgfQotCi0gICAg
c3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUp
Ci0gICAgewotICAgICAgICByZXR1cm4gQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzKHNpemUsIHN1
YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVH
Ci0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQg
PSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytp
KQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgICAgIik7Ci0gICAgICAgIGZwcmludGYo
c3RkZXJyLCAiJTA4eDogWyUwMTZsbHhdXG4iLCAoaW50KXBhcmVudE9mZnNldCwgbV9hbGxvY2F0
ZWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIEJpdEZpZWxkIG1fYWxsb2NhdGVk
OwotfTsKLQotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWw+Ci1jbGFzcyBMYXp5QWxsb2NhdGlv
blRhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNp
emUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25TaXplOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBlbnRyaWVzID0gTmV4dExldmVsOjplbnRyaWVzOwotCi0gICAgTGF6eUFsbG9jYXRpb25UYWJs
ZSgpCi0gICAgICAgIDogbV9wdHIoMCkKLSAgICB7Ci0gICAgfQotCi0gICAgfkxhenlBbGxvY2F0
aW9uVGFibGUoKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGlzRW1wdHkoKSk7Ci0gICAgfQotCi0g
ICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQot
ICAgIHsKLSAgICAgICAgaWYgKCFtX3B0cikKLSAgICAgICAgICAgIG1fcHRyID0gbmV3IE5leHRM
ZXZlbCgpOwotICAgICAgICByZXR1cm4gbV9wdHItPmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAg
fQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6ZUNs
YXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICBt
X3B0ci0+ZnJlZShsb2NhdGlvbiwgc2l6ZUNsYXNzKTsKLSAgICAgICAgaWYgKG1fcHRyLT5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBtX3B0cjsKLSAgICAgICAgICAgIG1fcHRyID0g
MDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgaXNFbXB0eSgpCi0gICAgewotICAgICAg
ICByZXR1cm4gIW1fcHRyOwotICAgIH0KLQotICAgIGJvb2wgaXNGdWxsKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3B0ciAmJiBtX3B0ci0+aXNGdWxsKCk7Ci0gICAgfQotCi0gICAgc3RhdGlj
IHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBOZXh0TGV2ZWw6OnNpemUoKTsK
LSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZz
ZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcHRy
KTsKLSAgICAgICAgbV9wdHItPmR1bXAocGFyZW50T2Zmc2V0LCBpbmRlbnQpOwotICAgIH0KLSNl
bmRpZgotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFzc0ZvclNpemUo
c2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gTmV4dExldmVsOjpjbGFzc0ZvclNp
emUoc2l6ZSk7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIE5leHRMZXZlbCogbV9wdHI7Ci19Owot
Ci10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWwsIHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3Mg
QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5IHsKLSAgICB0eXBlZGVmIHVpbnQ2NF90IEJpdEZpZWxk
OwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJTdWJyZWdpb25TaXpl
ID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
bG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVnaW9uU2l6ZSArIGxvZzJFbnRyaWVzOwotCi0gICAg
c3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdpb25TaXplID0gVHdvUG93KGxvZzJTdWJyZWdpb25T
aXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHJlZ2lvblNpemUgPSBUd29Qb3cobG9nMlJl
Z2lvblNpemUpOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gVHdvUG93KGxv
ZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FTU0VSVChlbnRyaWVzIDw9IChzaXplb2YoQml0Rmll
bGQpICogOCksIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeV9lbnRyaWVzX2ZpdF9pbl9CaXRGaWVs
ZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVEaXJlY3RvcnkoKQotICAgICAgICA6IG1fZnVsbCgw
KQotICAgICAgICAsIG1faGFzU3ViYWxsb2NhdGlvbigwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+
QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5
KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xh
c3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXpl
KCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAg
ICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAg
ICAgICBCaXRGaWVsZCBiaXQgPSAxOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGVudHJpZXM7ICsraSwgYml0ICs9IGJpdCkgewotICAgICAgICAgICAgICAgIGlmIChtX2Z1
bGwgJiBiaXQpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAg
IHNpemVfdCBsb2NhdGlvbiA9IG1fc3ViYWxsb2NhdGlvbnNbaV0uYWxsb2NhdGUoc2l6ZUNsYXNz
KTsKLSAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhpcyBkaWRuJ3QgYWxyZWFkeSBoYXZlIGEgc3VicmVnaW9uLCBp
dCBkb2VzIG5vdyEKLSAgICAgICAgICAgICAgICAgICAgbV9oYXNTdWJhbGxvY2F0aW9uIHw9IGJp
dDsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWlycm9yIHRoZSBzdWJhbGxvY2F0aW9uJ3MgZnVs
bCBiaXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX3N1YmFsbG9jYXRpb25zW2ldLmlzRnVs
bCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbV9mdWxsIHw9IGJpdDsKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIChpICogc3VicmVnaW9uU2l6ZSkgfCBsb2NhdGlvbjsKLSAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBBIGJsb2NrIGlzIGFsbG9jYXRlZCBpZiBlaXRoZXIgaXQg
aXMgZnVsbHkgYWxsb2NhdGVkIG9yIGNvbnRhaW5zIHN1YmFsbG9jYXRpb25zLgotICAgICAgICBC
aXRGaWVsZCBhbGxvY2F0ZWQgPSBtX2Z1bGwgfCBtX2hhc1N1YmFsbG9jYXRpb247Ci0KLSAgICAg
ICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVDbGFzcy5ibG9ja0FsaWdubWVudCgpOwotICAgICAg
ICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAvLyBVc2Ug
dGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFucyBvZiBmcmVlIGJsb2Nrcy4KLSAgICAgICAgQml0
RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCAoYWxpZ25tZW50IC0gY291bnQp
OwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5pdHMgb2YgYWxpZ25tZW50IHNpemUuCi0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyBpICs9IGFsaWdubWVudCkgewotICAg
ICAgICAgICAgaWYgKCEoYWxsb2NhdGVkICYgbWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2Z1
bGwgfD0gbWFzazsKLSAgICAgICAgICAgICAgICByZXR1cm4gKGkgKyAoYWxpZ25tZW50IC0gY291
bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1h
c2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0g
ICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6
ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2Nr
U2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwotCi0gICAgICAgIHNpemVfdCBlbnRyeSA9IGxvY2F0
aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwotCi0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tT
aXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxdWxs
IDw8IGVudHJ5OwotICAgICAgICAgICAgbV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uZnJlZShsb2Nh
dGlvbiAmIChzdWJyZWdpb25TaXplIC0gMSksIHNpemVDbGFzcyk7Ci0gICAgICAgICAgICAvLyBD
aGVjayBpZiB0aGUgc3ViYWxsb2NhdGlvbiBpcyBub3cgZW1wdHkuCi0gICAgICAgICAgICBpZiAo
bV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIG1faGFz
U3ViYWxsb2NhdGlvbiAmPSB+Yml0OwotICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjaywg
aXQgY2xlYXJseSBpc24ndCBmdWxsIGFueSBtb3JlIQotICAgICAgICAgICAgbV9mdWxsICY9IH5i
aXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xh
c3MuYmxvY2tDb3VudCgpOwotICAgICAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBj
b3VudCkgLSAxKSA8PCBlbnRyeTsKLSAgICAgICAgICAgIEFTU0VSVCgobV9mdWxsICYgbWFzaykg
PT0gbWFzayk7Ci0gICAgICAgICAgICBBU1NFUlQoIShtX2hhc1N1YmFsbG9jYXRpb24gJiBtYXNr
KSk7Ci0gICAgICAgICAgICBtX2Z1bGwgJj0gfm1hc2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICEobV9mdWxsIHwgbV9oYXNT
dWJhbGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAgICBib29sIGlzRnVsbCgpCi0gICAgeyAgIAotICAg
ICAgICByZXR1cm4gIX5tX2Z1bGw7Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkK
LSAgICB7Ci0gICAgICAgIHJldHVybiByZWdpb25TaXplOwotICAgIH0KLQotICAgIHN0YXRpYyBB
bGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xhc3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsK
LSAgICAgICAgaWYgKHNpemUgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBBbGxvY2F0
aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gTmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6
ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZUNsYXNzLnNpemUoKSA8IE5leHRMZXZlbDo6c2l6ZSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBzaXplQ2xhc3M7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXplLCBzdWJyZWdpb25TaXplLCBsb2cy
U3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0jaWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChz
aXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5zaWduZWQgaW5kZW50ID0gMCkKLSAgICB7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRlbnQ7ICsraSkKLSAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiICAgICIpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwOHg6IFsi
LCAoaW50KXBhcmVudE9mZnNldCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
bnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAgIEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgaTsKLSAg
ICAgICAgICAgIGNoYXIgYyA9IG1faGFzU3ViYWxsb2NhdGlvbiAmIGJpdAotICAgICAgICAgICAg
ICAgID8gKG1fZnVsbCAmIGJpdCA/ICdOJyA6ICduJykKLSAgICAgICAgICAgICAgICA6IChtX2Z1
bGwgJiBiaXQgPyAnRicgOiAnLScpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlYyIs
IGMpOwotICAgICAgICB9Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiXVxuIik7Ci0KLSAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSkgewotICAgICAgICAgICAg
Qml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwotICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHBh
cmVudE9mZnNldCB8IChzdWJyZWdpb25TaXplICogaSk7Ci0gICAgICAgICAgICBpZiAobV9oYXNT
dWJhbGxvY2F0aW9uICYgYml0KQotICAgICAgICAgICAgICAgIG1fc3ViYWxsb2NhdGlvbnNbaV0u
ZHVtcChvZmZzZXQsIGluZGVudCArIDEpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgTmV4dExldmVsIG1fc3ViYWxsb2NhdGlvbnNbZW50cmllc107Ci0gICAgLy8g
U3VicmVnaW9ucyBleGlzdCBpbiBvbmUgb2YgZm91ciBzdGF0ZXM6Ci0gICAgLy8gKDEpIGVtcHR5
IChib3RoIGJpdHMgY2xlYXIpCi0gICAgLy8gKDIpIGZ1bGx5IGFsbG9jYXRlZCBhcyBhIHNpbmds
ZSBhbGxvY2F0aW9uIChtX2Z1bGwgc2V0KQotICAgIC8vICgzKSBwYXJ0aWFsbHkgYWxsb2NhdGVk
IHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKG1faGFzU3ViYWxsb2NhdGlvbiBzZXQpCi0gICAgLy8g
KDQpIGZ1bGx5IGFsbG9jYXRlZCB0aHJvdWdoIHN1YmFsbG9jYXRpb25zIChib3RoIGJpdHMgc2V0
KQotICAgIEJpdEZpZWxkIG1fZnVsbDsKLSAgICBCaXRGaWVsZCBtX2hhc1N1YmFsbG9jYXRpb247
Ci19OwotCi0KLXR5cGVkZWYgQWxsb2NhdGlvblRhYmxlTGVhZjw2PiBQYWdlVGFibGVzMjU2S0I7
Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURpcmVjdG9yeTxQYWdlVGFibGVzMjU2S0IsIDY+IFBh
Z2VUYWJsZXMxNk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9j
YXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDE+IFBhZ2VUYWJsZXMzMk1COwotdHlwZWRlZiBB
bGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZN
Qj4sIDY+IFBhZ2VUYWJsZXMxR0I7Ci0KICNpZiBDUFUoQVJNKQotdHlwZWRlZiBQYWdlVGFibGVz
MTZNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9v
bFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0OwogI2VsaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYgUGFn
ZVRhYmxlczFHQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZp
eGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAqIDEwMjQ7CiAjZWxzZQotdHlwZWRlZiBQYWdlVGFi
bGVzMzJNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVk
UG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0OwogI2VuZGlmCiAKLQotY2xhc3MgRml4ZWRWTVBv
b2xBbGxvY2F0b3IKLXsKK2NsYXNzIEZpeGVkVk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVi
bGljIE1ldGFBbGxvY2F0b3IgewogcHVibGljOgotICAgIEZpeGVkVk1Qb29sQWxsb2NhdG9yKCkK
KyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVBbGxvY2F0b3IoKQorICAgICAgICA6IE1ldGFBbGxv
Y2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAgIHsK
LSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMyNTZLQjo6c2l6ZSgpID09IDI1NiAqIDEwMjQpOwot
ICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczE2TUI6OnNpemUoKSA9PSAxNiAqIDEwMjQgKiAxMDI0
KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMzMk1COjpzaXplKCkgPT0gMzIgKiAxMDI0ICog
MTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdlVGFibGVzMUdCOjpzaXplKCkgPT0gMTAyNCAqIDEw
MjQgKiAxMDI0KTsKLQotICAgICAgICBtX3Jlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpy
ZXNlcnZlV2l0aEd1YXJkUGFnZXMoRml4ZWRWTVBvb2xQYWdlVGFibGVzOjpzaXplKCksIE9TQWxs
b2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsK
KyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBhZ2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFy
ZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VU
QUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKICNpZiAhRU5BQkxFKElOVEVSUFJFVEVSKQotICAg
ICAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgaWYgKCFtX3Jlc2VydmF0aW9uKQogICAgICAg
ICAgICAgQ1JBU0goKTsKICNlbmRpZgorICAgICAgICBpZiAobV9yZXNlcnZhdGlvbikgeworICAg
ICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRpb24uc2l6ZSgpID09IGZpeGVkUG9vbFNpemUpOwor
ICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UobV9yZXNlcnZhdGlvbi5iYXNlKCksIG1fcmVz
ZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAgfQogICAgIH0KLSAKLSAgICBFeGVjdXRhYmxlUG9v
bDo6QWxsb2NhdGlvbiBhbGxvYyhzaXplX3QgcmVxdWVzdGVkU2l6ZSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChyZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNz
IHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShyZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgc2l6ZV90
IHNpemUgPSBzaXplQ2xhc3Muc2l6ZSgpOwotICAgICAgICBBU1NFUlQoc2l6ZSk7Ci0KLSAgICAg
ICAgaWYgKHNpemUgPj0gRml4ZWRWTVBvb2xQYWdlVGFibGVzOjpzaXplKCkpCi0gICAgICAgICAg
ICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24oMCwgMCk7Ci0gICAgICAgIGlmICht
X3BhZ2VzLmlzRnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxv
Y2F0aW9uKDAsIDApOwotCi0gICAgICAgIHNpemVfdCBvZmZzZXQgPSBtX3BhZ2VzLmFsbG9jYXRl
KHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChvZmZzZXQgPT0gbm90Rm91bmQpCi0gICAgICAgICAg
ICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24oMCwgMCk7Ci0KLSAgICAgICAgdm9p
ZCogcG9pbnRlciA9IG9mZnNldFRvUG9pbnRlcihvZmZzZXQpOwotICAgICAgICBtX3Jlc2VydmF0
aW9uLmNvbW1pdChwb2ludGVyLCBzaXplKTsKLSAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29s
OjpBbGxvY2F0aW9uKHBvaW50ZXIsIHNpemUpOwotICAgIH0KLQotICAgIHZvaWQgZnJlZShFeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvY2F0aW9uKQorICAgIAorcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmKQogICAgIHsKLSAgICAgICAg
dm9pZCogcG9pbnRlciA9IGFsbG9jYXRpb24uYmFzZSgpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9
IGFsbG9jYXRpb24uc2l6ZSgpOwotICAgICAgICBBU1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgbV9y
ZXNlcnZhdGlvbi5kZWNvbW1pdChwb2ludGVyLCBzaXplKTsKLQotICAgICAgICBBbGxvY2F0aW9u
VGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0gY2xhc3NGb3JTaXplKHNpemUpOwotICAgICAgICBB
U1NFUlQoc2l6ZUNsYXNzLnNpemUoKSA9PSBzaXplKTsKLSAgICAgICAgbV9wYWdlcy5mcmVlKHBv
aW50ZXJUb09mZnNldChwb2ludGVyKSwgc2l6ZUNsYXNzKTsKKyAgICAgICAgLy8gV2UncmUgb3Bl
cmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28gbmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb2hp
Yml0ZWQuCisgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZWQo
KQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBub3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fcmVzZXJ2YXRpb24uY29tbWl0dGVkKCk7CisgICAgICAgIG1f
cmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkpOwogICAgIH0KLQotICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUo
dm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW1fcmVzZXJ2YXRpb247CisgICAg
ICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7CiAgICAgfQogCiBw
cml2YXRlOgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90
IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gRml4ZWRWTVBvb2xQYWdlVGFibGVzOjpjbGFz
c0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi0gICAgdm9pZCogb2Zmc2V0VG9Qb2ludGVyKHNpemVf
dCBvZmZzZXQpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
cmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgb2Zmc2V0
KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9pbnRlclRvT2Zmc2V0KHZvaWQqIHBvaW50ZXIpCi0g
ICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikg
LSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAg
fQotCiAgICAgUGFnZVJlc2VydmF0aW9uIG1fcmVzZXJ2YXRpb247Ci0gICAgRml4ZWRWTVBvb2xQ
YWdlVGFibGVzIG1fcGFnZXM7CiB9OwogCitzdGF0aWMgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxs
b2NhdG9yKiBhbGxvY2F0b3I7CiAKLXN0YXRpYyBTcGluTG9jayBzcGlubG9jayA9IFNQSU5MT0NL
X0lOSVRJQUxJWkVSOwotc3RhdGljIEZpeGVkVk1Qb29sQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAw
OwotCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQorewor
ICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAgICBhbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xF
eGVjdXRhYmxlQWxsb2NhdG9yKCk7Cit9CiAKLXNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpj
b21taXR0ZWRCeXRlQ291bnQoKQorRXhlY3V0YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9j
YXRvcihKU0dsb2JhbERhdGEmKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIoJnNw
aW5sb2NrKTsKLSAgICByZXR1cm4gYWxsb2NhdG9yID8gYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA6
IDA7Ci19ICAgCisgICAgQVNTRVJUKGFsbG9jYXRvcik7Cit9CiAKIGJvb2wgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xk
ZXIoJnNwaW5sb2NrKTsKLSAgICBpZiAoIWFsbG9jYXRvcikKLSAgICAgICAgYWxsb2NhdG9yID0g
bmV3IEZpeGVkVk1Qb29sQWxsb2NhdG9yKCk7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+aXNWYWxp
ZCgpOworICAgIHJldHVybiAhIWFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpOwogfQogCiBib29s
IEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVyTWVtb3J5UHJlc3N1cmUoKQogewotICAgIC8vIFRl
Y2huaWNhbGx5IHdlIHNob3VsZCB0YWtlIHRoZSBzcGluIGxvY2sgaGVyZSwgYnV0IHdlIGRvbid0
IGNhcmUgaWYgd2UgZ2V0IHN0YWxlIGRhdGEuCi0gICAgLy8gVGhpcyBpcyBvbmx5IHJlYWxseSBh
IGhldXJpc3RpYyBhbnl3YXkuCi0gICAgcmV0dXJuIGFsbG9jYXRvciAmJiAoYWxsb2NhdG9yLT5h
bGxvY2F0ZWQoKSA+IChGaXhlZFZNUG9vbFBhZ2VUYWJsZXM6OnNpemUoKSAvIDIpKTsKKyAgICBN
ZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0YXRpc3RpY3MgPSBhbGxvY2F0b3ItPmN1cnJlbnRT
dGF0aXN0aWNzKCk7CisgICAgcmV0dXJuIHN0YXRpc3RpY3MuYnl0ZXNBbGxvY2F0ZWQgPiBzdGF0
aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLyAyOwogfQogCi1FeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlv
biBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxsb2Moc2l6ZV90IHNpemUpCitQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IHNpemVJbkJ5dGVzKQogewotICAgIFNwaW5Mb2Nr
SG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9jayk7Ci0gICAgQVNTRVJUKGFsbG9jYXRvcik7Ci0g
ICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Moc2l6ZSk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVN
ZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9jYXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOwor
ICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgIHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2Jh
bERhdGEpOworICAgICAgICByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVz
KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBDUkFTSCgpOworICAgIH0KKyAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7CisgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXND
b21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVj
dXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikgCisjaWYgRU5BQkxFKE1FVEFfQUxM
T0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkK
IHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2NrX2hvbGRlcigmc3BpbmxvY2spOwotICAgIEFTU0VS
VChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRvci0+ZnJlZShhbGxvY2F0aW9uKTsKKyAgICBhbGxv
Y2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9CisjZW5kaWYKIAogfQogCiAKLSNlbmRpZiAvLyBIQVZF
KEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFCTEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcwLDcg
KzU3MCw3IEBAIEpJVENvZGUgSklUOjpwcml2YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIAogICAg
IEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHkoKSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fZ2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRv
cik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAog
ICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJh
dGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEsMjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3Ry
dWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hlZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3Ms
IGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFj
aGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVz
KQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBv
bGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgh
Z2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsK
LSAgICAgICAgICAgIGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhleGVj
dXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgdHJhbXBvbGluZXMpOworICAgICAgICAgICAgcmV0dXJu
IGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCB0cmFt
cG9saW5lcyk7CiAgICAgICAgIH0KIAotICAgICAgICBzdGF0aWMgQ29kZVB0ciBjb21waWxlQ1RJ
TmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8RXhlY3V0YWJs
ZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorICAgICAgICBzdGF0
aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEs
IE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghZ2xvYmFs
RGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENvZGVQdHIoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ29kZVJlZigpOwogICAgICAgICAgICAgSklUIGppdChnbG9i
YWxEYXRhLCAwKTsKLSAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRp
dmVDYWxsKGV4ZWN1dGFibGVQb29sLCBnbG9iYWxEYXRhLCBmdW5jKTsKKyAgICAgICAgICAgIHJl
dHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmMpOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxv
Y2sqIGNvZGVibG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2Fj
aGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwpAQCAtMjc0LDkgKzI3
NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJ
ZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBz
aXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBzaXpl
X3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKTsKICAgICAgICAgdm9pZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3RydWN0dXJlKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNh
Y2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4qLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJl
c3MsIGJvb2wgZGlyZWN0KTsKIAotICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0ds
b2JhbERhdGEqIGRhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAg
ICAgICAgIExhYmVsIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBi
b29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwotICAgICAgICBDb2RlUHRyIHByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwg
SlNHbG9iYWxEYXRhKiBkYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKTsKKyAgICAgICAgQ29kZVJl
ZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNhbGwoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rp
b24pOwogICAgICAgICB2b2lkIHByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1
cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpOwogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2Uo
SnVtcCk7CkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2Vu
ZGlmCiAgICAgICAgIFdlYWtSYW5kb20gbV9yYW5kb21HZW5lcmF0b3I7Ci0gICAgICAgIHN0YXRp
YyBDb2RlUHRyIHN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYgc3Ry
aW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwogICAgICAgICAKICNpZiBF
TkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQogICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkocmV2aXNpb24gOTQ4MzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
ODMsMTIgKzgzLDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBv
cGVyYXRvciAhKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5t
X2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIHJldHVybiAhbV9yZWY7CiAg
ICAgICAgIH0KIAogICAgICAgICBDb2RlUHRyIGFkZHJlc3NGb3JDYWxsKCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZTsKKyAgICAgICAgICAgIHJldHVybiBtX3Jl
Zi5jb2RlKCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMg
dGhlIG9mZnNldCBpbiBieXRlcyBvZiAncG9pbnRlckludG9Db2RlJyBpbnRvCkBAIC05Niw3ICs5
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAvLyBibG9jayBvZiBjb2RlLiAgSXQgaXMg
QVNTRVJUZWQgdGhhdCBubyBjb2RlYmxvY2sgPjRnYiBpbiBzaXplLgogICAgICAgICB1bnNpZ25l
ZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50b0NvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRv
Q29kZSkgLSByZWludGVycHJldF9jYXN0PGludHB0cl90PihtX3JlZi5tX2NvZGUuZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBpbnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9j
YXN0PGludHB0cl90Pihwb2ludGVySW50b0NvZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJf
dD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogICAgICAgICAgICAgQVNTRVJU
KHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0g
cmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0
KTsKICAgICAgICAgfQpAQCAtMTA0LDI0ICsxMDQsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUhCiAgICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUo
UmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUsIENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0
ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVB
ZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFBy
b2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVz
dWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERhdGEpKTsKICAgICAgICAgICAgIHJldHVybiBn
bG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051bGwoKSA6IHJlc3VsdDsKICAgICAgICAgfQogCiAg
ICAgICAgIHZvaWQqIHN0YXJ0KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVm
Lm1fY29kZS5kYXRhTG9jYXRpb24oKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCku
ZGF0YUxvY2F0aW9uKCk7CiAgICAgICAgIH0KIAogICAgICAgICBzaXplX3Qgc2l6ZSgpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9yZWYubV9zaXplOworICAgICAgICAgICAgQVNTRVJU
KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiBt
X3JlZi5zaXplKCk7CiAgICAgICAgIH0KIAotICAgICAgICBFeGVjdXRhYmxlUG9vbCogZ2V0RXhl
Y3V0YWJsZVBvb2woKQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRh
YmxlTWVtb3J5KCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0
YWJsZVBvb2wuZ2V0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9y
eSgpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBKSVRUeXBlIGppdFR5cGUoKQpAQCAt
MTMxLDkgKzEzMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIC8vIEhvc3QgZnVuY3Rp
b25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhl
eQogICAgICAgICAvLyBkbyBub3QgaW5kaXZpZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wg
Y29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4KLSAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1
bmN0aW9uKENvZGVQdHIgY29kZSkKKyAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9u
KENvZGVSZWYgY29kZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29k
ZS5kYXRhTG9jYXRpb24oKSwgMCwgMCwgSG9zdENhbGxUaHVuayk7CisgICAgICAgICAgICByZXR1
cm4gSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRodW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgY2xlYXIoKQpAQCAtMTQzLDggKzE0Myw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9
CiAKICAgICBwcml2YXRlOgotICAgICAgICBKSVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8
RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRU
eXBlKQotICAgICAgICAgICAgOiBtX3JlZihjb2RlLCBleGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAg
ICAgICAgSklUQ29kZShQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFi
bGVNZW1vcnksIEpJVFR5cGUgaml0VHlwZSkKKyAgICAgICAgICAgIDogbV9yZWYoZXhlY3V0YWJs
ZU1lbW9yeSkKICAgICAgICAgICAgICwgbV9qaXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMy
XzY0LmNwcAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9s
aW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKK1Bhc3NSZWZQ
dHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVU
cmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUg
KnRyYW1wb2xpbmVzKQogewogI2lmIEVOQUJMRShKSVRfVVNFX1NPRlRfTU9EVUxPKQogICAgIExh
YmVsIHNvZnRNb2RCZWdpbiA9IGFsaWduKCk7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVD
YXNlczNDYWxsID0gbWFrZVRhaWxSZWN1cnNpdmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsK
IAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGlu
ayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0Lgot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxE
YXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVy
ZUNhc2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25Q
dHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5s
aW5rKGNhbGxDb21waWxlQ2NvbnN0cnVjdCwgRnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9q
aXRDb21waWxlKSk7CiAKICAgICBDb2RlUmVmIGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwotICAgICpleGVjdXRhYmxlUG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQ
b29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5
ID0gZmluYWxDb2RlLmV4ZWN1dGFibGVNZW1vcnkoKTsKIAogICAgIHRyYW1wb2xpbmVzLT5jdGlW
aXJ0dWFsQ2FsbCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbEJlZ2luKTsK
ICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1w
b2xpbmVBdCh2aXJ0dWFsQ29uc3RydWN0QmVnaW4pOwpAQCAtMTc1LDYgKzE3NSw4IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG8KICNpZiBFTkFCTEUoSklUX1VTRV9T
T0ZUX01PRFVMTykKICAgICB0cmFtcG9saW5lcy0+Y3RpU29mdE1vZHVsbyA9IHBhdGNoQnVmZmVy
LnRyYW1wb2xpbmVBdChzb2Z0TW9kQmVnaW4pOwogI2VuZGlmCisgICAgCisgICAgcmV0dXJuIGV4
ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwogfQogCiBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNv
bXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0NvbnN0
cnVjdCkKQEAgLTMxMiwxMCArMzE0LDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0
ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQ
b29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5j
dGlvbiBmdW5jKQorSklUOjpDb2RlUmVmIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxs
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgTmF0aXZlRnVuY3Rpb24gZnVuYykKIHsKICAgICBD
YWxsIG5hdGl2ZUNhbGw7Ci0gICAgTGFiZWwgbmF0aXZlQ2FsbFRodW5rID0gYWxpZ24oKTsKIAog
ICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxGcmFtZUhlYWRlcigwLCBSZWdpc3RlckZpbGU6OkNv
ZGVCbG9jayk7CiAKQEAgLTQ0NywxMiArNDQ4LDEwIEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZh
dGVDb21waWxlQ1RJTmF0aXYKICAgICByZXQoKTsKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBj
b25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9p
bnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgZXhlY3V0YWJsZVBvb2wpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKG5h
dGl2ZUNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmMpKTsKLSAgICBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKLQotICAgIHJldHVybiBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRo
dW5rKTsKKyAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiA5NDgzMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMpCitQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVNZW1vcnlIYW5kbGU+IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5l
cykKIHsKICAgICAvLyAoMikgVGhlIHNlY29uZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3Bl
cnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0aAogICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2lu
ID0gYWxpZ24oKTsKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVD
VElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBzdHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtl
VGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2ZhaWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRy
YW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQg
c2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFjaGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBw
YXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVB
bGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVu
Y3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVy
Lmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJDYWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5
X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjQsNyArMTY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVD
b25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAg
ICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAq
ZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUubV9leGVjdXRhYmxlUG9vbDsKKyAgICBSZWZQdHI8
RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVj
dXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0g
cGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZpcnR1YWxDYWxsTGlua0JlZ2luKTsKICAgICB0cmFt
cG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVjdExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5l
QXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdpbik7CkBAIC0xNzMsNiArMTczLDggQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAgIHRyYW1wb2xpbmVzLT5jdGlO
YXRpdmVDYWxsID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CiAg
ICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xp
bmVBdChuYXRpdmVDb25zdHJ1Y3RUaHVuayk7CiAgICAgdHJhbXBvbGluZXMtPmN0aVN0cmluZ0xl
bmd0aFRyYW1wb2xpbmUgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQoc3RyaW5nTGVuZ3RoQmVn
aW4pOworICAgIAorICAgIHJldHVybiBleGVjdXRhYmxlTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAog
SklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEsIGJvb2wgaXNDb25zdHJ1Y3QpCkBAIC0yOTEsOSArMjkzLDkgQEAgSklUOjpM
YWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxs
VGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2Fs
bChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBO
YXRpdmVGdW5jdGlvbikKK0pJVDo6Q29kZVJlZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uKQogewotICAgIHJl
dHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpOworICAgIHJldHVybiBD
b2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKSk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9k
X2NoZWNrKEluc3RyCiAgICAgbV9ieXRlY29kZU9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2dl
dF9ieV9pZCk7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklU
OjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVyZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFp
bHVyZXM7CkBAIC0xOTMsOCArMTkzLDggQEAgSklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGpp
dC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAm
aml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2Rl
OworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJl
dHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIz
Miw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1w
IG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5
IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcgPSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3Mo
cmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xvYmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAg
ZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHVi
R2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIo
c3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKS5jb2RlKCkpOwogICAgIEp1bXAgZmFpbGVkID0g
YnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0
X2J5X3ZhbCkpOwpAQCAtNTQxLDcgKzU0MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1
dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5l
KCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgCi0g
ICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9j
ay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9i
YWxEYXRhLCB0aGlzKTsKICAgICAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBG
dW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3BfcHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29w
X3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgCkBAIC01NTAsMTAgKzU1MCw5IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayht
X2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9y
ZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwg
PSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hC
dWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1f
Y29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShy
ZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxl
clRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+
c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENv
ZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVy
bkFkZHJlc3MpCkBAIC02MDYsNyArNjA1LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0
Y2hHZXRBcnJheUxlbgogICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwg
cmVnVDEpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMp
OwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBD
b2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAt
NjE3LDEzICs2MTYsMTIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxl
bgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8v
IFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRl
ZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRy
eUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZSgpOwogICAgIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZz
ZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkp
OwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBp
biBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlf
b3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsKQEAgLTY2Niw3ICs2NjQsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0g
anVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgCiAgICAgLy8gVXNlIHRoZSBwYXRj
aCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdp
bmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVn
aW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zm
c2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02ODQsMTMgKzY4MiwxMiBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8oU3RyCiAgICAgfQogCiAgICAgLy8gVHJhY2sgdGhl
IHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgot
ICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7Cisg
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAg
ICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0
aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBq
dW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9m
ZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hC
dWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBD
b2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBn
byB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtD
YWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlf
aWRfcHJvdG9fbGlzdCkpOwpAQCAtNzIzLDcgKzcyMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRTZWxmTGlzdCgKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAo
VmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVy
ICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpA
QCAtNzMxLDcgKzcyOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlz
dCgKICAgICAgICAgfQogICAgIH0gICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlv
biB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2Fz
ZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1v
cnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAg
IENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9s
eW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNv
ZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9CZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4g
PSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0
R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAgICAgCkBAIC03NDAsMTQgKzczNywxNCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQ
dXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBw
YXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+
bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSk7CisgICAgcG9seW1vcnBoaWNTdHJ1
Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgCiAgICAg
Ly8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBh
dGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRp
b24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5
SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9j
b2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlM
YWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJvdG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJ
bmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJl
LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXpl
X3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTc4Nyw3ICs3ODQsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVt
cCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1f
Z2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRz
U3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAg
ICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBAIC03OTUsMjEgKzc5MiwyMSBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9MaXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8g
VXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sg
dG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVs
IGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXgg
LSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9
IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4
IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVD
YXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNl
czIsIGxhc3RQcm90b0JlZ2luKTsKICAgICAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNr
IHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0
b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3Vs
dCkpOwogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZl
ci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1
cmUpOworICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1
YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKICAgICAKICAgICAvLyBG
aW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0
byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJy
YW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVC
bG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVs
KTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxh
YmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNB
Y2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3RydWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291
bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNp
emVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtODU0LDcgKzg1MSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAg
c3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0
dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVy
ID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAg
ICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtODYyLDIyICs4NTksMjIgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVz
ZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRv
IHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBs
YXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0g
MV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBD
b2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAt
IDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNr
ZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQ
dXRSZXN1bHQpKTsKICAgICAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5l
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0
dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAg
IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5n
bG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwg
c3RydWN0dXJlLCBjaGFpbik7CisgICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50
SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhl
Y3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCBjaGFpbik7CiAgICAgCiAgICAgLy8g
RmluYWxseSBwYXRjaCB0aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGgg
dG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24g
PSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRC
cmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2Rl
QmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJl
bCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlm
aWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpA
QCAtOTIxLDcgKzkxOCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihT
dHIKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJl
Z1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVj
dG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9
IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAt
OTM1LDEzICs5MzIsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0
cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5s
YWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8v
IFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRl
ZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIu
ZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRy
eUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKICAgICAKICAg
ICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3Qg
cGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2Nh
dGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlciht
X2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRy
eUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2Nh
dGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mu
Y3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlNDIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1KSVQ6
OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmlu
Z0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAg
SlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1bXBMaXN0IGZhaWx1cmVzOwpAQCAtNzcsOCArNzcs
OCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1v
dmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVy
biBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0xMjIsNyArMTIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1YwogICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJhc2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0
cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIo
bV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIpKTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFs
RGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0
TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3Qs
IHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3Bf
Z2V0X2J5X3ZhbCkpOwpAQCAtNTU1LDcgKzU1NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9s
aW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rp
b25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9ieV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRf
YnlfaWRfZmFpbCkpOwogCkBAIC01NjQsMTAgKzU2NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBd
LmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7
CiAgICAgfQogICAgIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9
IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRy
ZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBv
bGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRp
bmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayog
Y29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
CkBAIC02MTUsNyArNjE0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJh
eUxlbgogICAgIGVtaXRGYXN0QXJpdGhJbnRUb0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKICAg
ICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVXNl
IHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8g
dGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNs
b3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQo
LXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBAIC02MjYsMTMgKzYyNSwxMiBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRjaEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIu
bGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hP
ZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZl
IGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0
aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7
Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+
c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lk
X2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVy
bkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAt
NjczLDcgKzY3MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIK
ICAgICB9IGVsc2UKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwg
cmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIExp
bmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4
ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0
YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhlIHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhl
IGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJu
TG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsK
QEAgLTY5MCwxMyArNjg4LDEyIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90
byhTdHIKICAgICAgICAgfQogICAgIH0KICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNy
ZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9u
TGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0g
ICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkg
cGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAg
aGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1Yklu
Zm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsK
LSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAg
IHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1
YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBw
YXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dl
bmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFk
ZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzI2
LDcgKzcyMyw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAg
ICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNldChyZWdUMCwgcmVnVDAsIHN0cnVjdHVyZSwgY2Fj
aGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMp
OwogCiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJl
Y29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5l
bmQoKTsgKytpdGVyKSB7CkBAIC03MzYsNyArNzMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3Jt
YXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93
IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBv
bHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVs
KHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGlu
ZS5jb2RlKCkpOwogICAgIGlmICghbGFzdFByb3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0Jl
Z2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9m
ZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwogCkBAIC03NDUsMTQgKzc0MiwxNCBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1
cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNvZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3Jt
IHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4KICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3Ms
IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQ
dXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBz
dHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5
bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwg
bV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlKTsKIAog
ICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhv
dCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVy
KG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVu
dHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxv
Y2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9y
cGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50
SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVy
ZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6
ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC03OTEsNyArNzg4LDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBz
dWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxE
YXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZl
ciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODAx
LDIwICs3OTgsMjAgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAog
ICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZm
ZXIubGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIu
bGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0UHJvdG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNz
IHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBl
cmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJl
cy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJl
KTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNv
ZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNv
ZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxp
c3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVy
ZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9m
ZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC04NTcsNyArODU0LDcgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgICAgICBjb21waWxlR2V0RGlyZWN0
T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIGlmIChuZWVkc1N0dWJM
aW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0g
bV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODY3
LDIyICs4NjQsMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAog
ICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFp
bHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBD
b2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxp
c3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5s
aXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAKICAgICBwYXRjaEJ1
ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxhc3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1
Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhvdCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdp
bGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVzdCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZz
ZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVs
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJS
b3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAKICAgICAvLyBUcmFjayB0aGUg
c3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0g
ICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVs
LCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1Y3R1cmUsIGNoYWluKTsKIAogICAgIC8vIEZp
bmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRv
IGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJh
bmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJs
b2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwp
OworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFi
ZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdl
dEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmll
ciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwg
UmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAg
LTkyNSw3ICs5MjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3Ry
CiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RPZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNo
ZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQ
b29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7
CiAKICAgICBpZiAobmVlZHNTdHViTGluaykgewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVj
b3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2FsbHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVu
ZCgpOyArK2l0ZXIpIHsKQEAgLTk0MSwxMyArOTM4LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJ
bmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1
bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0
IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVs
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1
YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91
dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sg
aW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1
bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0
Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBh
dGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlv
biwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhhbiBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9v
cF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVu
Y3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19s
aXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNp
b24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzU3LDggKzc1Nyw4IEBAIEpJVFRodW5rczo6SklUVGh1bmtzKEpTR2xv
YmFsRGF0YSogZ2xvYmEKICAgICBpZiAoIWdsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3Iu
aXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5l
VHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1fZXhlY3V0YWJsZVBvb2wsICZtX3RyYW1wb2xpbmVT
dHJ1Y3R1cmUpOwotICAgIEFTU0VSVChtX2V4ZWN1dGFibGVQb29sKTsKKyAgICBtX2V4ZWN1dGFi
bGVNZW1vcnkgPSBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwg
Jm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7CisgICAgQVNTRVJUKCEhbV9leGVjdXRhYmxlTWVtb3J5
KTsKICNpZiBDUFUoQVJNX1RIVU1CMikKICAgICAvLyBVbmZvcnR1bmF0ZSB0aGUgYXJtIGNvbXBp
bGVyIGRvZXMgbm90IGxpa2UgdGhlIHVzZSBvZiBvZmZzZXRvZiBvbiBKSVRTdGFja0ZyYW1lIChz
aW5jZSBpdCBjb250YWlucyBub24gUE9EIHR5cGVzKSwKICAgICAvLyBhbmQgdGhlIE9CSkVDVF9P
RkZTRVRPRiBtYWNybyBkb2VzIG5vdCBhcHBlYXIgY29uc3RhbnRpc2ggZW5vdWdoIGZvciBpdCB0
byBiZSBoYXBweSB3aXRoIGl0cyB1c2UgaW4gQ09NUElMRV9BU1NFUlQKQEAgLTE2MDgsNyArMTYw
OCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAg
ICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUgPT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAg
ICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBw
b2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVM
aXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBDb2RlTG9jYXRpb25MYWJlbCgpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRh
KCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigp
LCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAg
ICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0
dXJlTGlzdCwgMSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QgPSBzdHViSW5mby0+dS5nZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsK
QEAgLTE2MzQsMTIgKzE2MzQsMTIgQEAgc3RhdGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJl
TGlzdCogZwogICAgIHN3aXRjaCAoc3R1YkluZm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfcHJvdG86CiAgICAgICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBu
ZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHVi
SW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZvLT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5nZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJl
LmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFi
ZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVT
dHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5
X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3Jw
aGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9iYWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJS
b3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlkQ2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWluLmNoYWluLmdldCgpKTsKLSAgICAgICAgc3R1Yklu
Zm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZv
LT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3Q6CkBAIC0zNTk4
LDExICszNTk4LDExIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCB0b18K
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCku
dG9PYmplY3QoY2FsbEZyYW1lKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVu
a3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5l
cmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogewotICAgIHN0ZDo6
cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRk
KGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCkpOworICAgIHN0ZDo6cGFpcjxDVElT
dHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRv
ciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkpOwogICAgIGlmIChlbnRyeS5zZWNvbmQpCi0gICAg
ICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRh
YmxlUG9vbC5nZXQoKSk7CisgICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3Io
Z2xvYmFsRGF0YSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQ7CiB9CiAKQEAgLTM2
MTAsNyArMzYxMCw3IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8K
IHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVu
dHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhl
Y3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50
cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0
ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBtX2V4
ZWN1dGFibGVQb29sLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwg
Y2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNl
Y29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0
YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0
aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlO
YXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAg
cmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQuZ2V0KCk7CiB9CiAKQEAgLTM2MTgsOCArMzYxOCw4
IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6
OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0
RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7
CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNlY29uZCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVQdHIgY29kZSA9IGdsb2JhbERhdGEtPmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2Jh
bERhdGEsIG1fZXhlY3V0YWJsZVBvb2wuZ2V0KCkpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7
Ci0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVj
dXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEsIGNvZGUsIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25z
dHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpKTsKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBnbG9iYWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRv
cihnbG9iYWxEYXRhKSA6IE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpOworICAgICAgICBlbnRyeS5m
aXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpn
bG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVT
ZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZlQ29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9u
QXNDb25zdHJ1Y3RvcikpOwogICAgIH0KICAgICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5n
ZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9u
IDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVDb25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xp
bmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ29uc3RydWN0OyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjdGlTb2Z0TW9kdWxvKCkgeyByZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0
aVNvZnRNb2R1bG87IH0KIAotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3R1YihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcik7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjdGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2Vu
ZXJhdG9yKTsKIAogICAgICAgICBOYXRpdmVFeGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpT
R2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9uKTsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSog
aG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERhdGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5l
cmF0b3IpOwpAQCAtMzAyLDExICszMDIsMTEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlw
ZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9yLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IENUSVN0
dWJNYXA7CisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmPiBDVElTdHViTWFwOwogICAgICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1h
cDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPE5hdGl2ZUZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4
ZWN1dGFibGU+ID4gSG9zdEZ1bmN0aW9uU3R1Yk1hcDsKICAgICAgICAgT3duUHRyPEhvc3RGdW5j
dGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9uU3R1Yk1hcDsKLSAgICAgICAgUmVmUHRyPEV4ZWN1
dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOworICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogCiAgICAgICAgIFRyYW1wb2xpbmVTdHJ1
Y3R1cmUgbV90cmFtcG9saW5lU3RydWN0dXJlOwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkocmV2aXNpb24gOTQ4MzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3Mg
U3BlY2lhbGl6ZWRUaHVua0pJVCA6IHB1YmxpYyBKU0ludGVyZmFjZUpJVCB7CiAgICAgcHVibGlj
OgogICAgICAgICBzdGF0aWMgY29uc3QgaW50IFRoaXNBcmd1bWVudCA9IC0xOwotICAgICAgICBT
cGVjaWFsaXplZFRodW5rSklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorICAgICAgICBTcGVjaWFsaXplZFRodW5r
SklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAg
ICAgICAgICA6IG1fZXhwZWN0ZWRBcmdDb3VudChleHBlY3RlZEFyZ0NvdW50KQogICAgICAgICAg
ICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0YSkKLSAgICAgICAgICAgICwgbV9wb29sKHBvb2wp
CiAgICAgICAgIHsKICAgICAgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0
ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAgICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJh
bmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoY2FsbEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6
QXJndW1lbnRDb3VudCAqIChpbnQpc2l6ZW9mKFJlZ2lzdGVyKSksIFRydXN0ZWRJbW0zMihleHBl
Y3RlZEFyZ0NvdW50ICsgMSkpKTsKQEAgLTEzNCwxMyArMTMzLDEzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgcmV0KCk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBmaW5hbGl6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3Jv
QXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaykKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IGZhbGxiYWNrKQogICAgICAgICB7Ci0gICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KGdsb2JhbERhdGEsIHRoaXMsIG1fcG9vbC5nZXQoKSk7CisgICAgICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRoaXMpOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIu
bGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRpb25MYWJlbChmYWxsYmFjaykpOwogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAg
ICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzW2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNl
Y29uZCk7Ci0gICAgICAgICAgICByZXR1cm4gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9j
b2RlOworICAgICAgICAgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gQXNzdW1lcyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNl
cyBmcFJlZ2lzdGVyMCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKQEAgLTE3NCw3ICsxNzMsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIGludCBtX2V4cGVjdGVkQXJnQ291bnQ7
CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwotICAgICAgICBSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+IG1fcG9vbDsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1f
ZmFpbHVyZXM7CiAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI+ID4g
bV9jYWxsczsKICAgICB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDI2ICs2Mywy
NiBAQCBzdGF0aWMgdm9pZCBjaGFyVG9TdHJpbmcoU3BlY2lhbGl6ZWRUaHVuCiAgICAgaml0LmFw
cGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFs
RGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29s
KTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJp
bmdDaGFyTG9hZChqaXQpOwogICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0
ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFi
bGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9y
KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGpp
dCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBn
bG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGNoYXJUb1N0cmluZyhq
aXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1
cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIHJldHVybiBqaXQuZmlu
YWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkp
OwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwg
cG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAg
Ly8gbG9hZCBjaGFyIGNvZGUKICAgICBqaXQubG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwpAQCAtOTAsMTEgKzkwLDExIEBAIE1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVua0cKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpn
bG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAot
TWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNx
cnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGlu
Z1BvaW50U3FydCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRl
U2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkp
OwogCiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpm
cFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCk7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBkZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cp
OwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoZmxvb3IpOwogZGVmaW5lVW5hcnlEb3VibGVP
cFdyYXBwZXIoY2VpbCk7CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9v
bCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVtcDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFw
cGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVu
dCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJl
dHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxp
bmsoJmppdCk7CkBAIC0xOTcsMTEgKzE5NywxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxv
b3JUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVy
Q29kZVB0ciBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVj
dXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQg
aml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEpOwogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWpp
dC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAg
IGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9u
SW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
KTsKQEAgLTIyMCwxMSArMjIwLDExIEBAIHN0YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJv
Q29uc3RhbnQKIHN0YXRpYyBjb25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMg
Y29uc3QgZG91YmxlIG5lZ2F0aXZlSGFsZkNvbnN0YW50ID0gLTAuNTsKICAgICAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1Jv
dW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xv
YmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbklu
dEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwpAQCAtMjM5LDM3ICsyMzksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
IHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEs
IGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9w
V3JhcHBlcihleHApKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBw
b29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAg
IFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1
cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRp
dmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxs
RG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVPcFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVy
bkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZp
bmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgp
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAg
IGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIobG9nKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBq
aXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRh
KTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJu
IGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRh
LT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50
KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRvRG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGxv
ZykpOwogICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7
CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1
YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29s
KQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRh
LCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAg
ICBpZiAoIWppdC5zdXBwb3J0c0RvdWJsZUJpdG9wcygpKQotICAgICAgICByZXR1cm4gZ2xvYmFs
RGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0
dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1
bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQucnNoaWZ0MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMSk7CkBAIC0yODYsMTEgKzI4NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
YWJzVGh1bmtHZW5lcmF0b3IoCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwg
Z2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4
ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCgyLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgy
LCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJl
ZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIAogICAgIGppdC5sb2Fk
RG91YmxlKCZvbmVDb25zdGFudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAgICAg
aml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAg
KzMxLDIwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogICAg
IGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBjbGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNs
YXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsKKyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWY7CiAKLSAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciAoKlRodW5rR2VuZXJhdG9y
KShKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBv
b2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIg
ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wq
KTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxE
YXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2VpbFRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9B
c3NlbWJsZXJDb2RlUHRyIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFi
bGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
LCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtH
ZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVQdHIgcG93VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBv
b2wqKTsKKyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9y
KShKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRo
dW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
aGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihK
U0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiA5NDgzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEV4
ZWN1dGFibGVCYXNlIEJhc2U7CiAKICNpZiBFTkFCTEUoSklUKQotICAgICAgICBzdGF0aWMgTmF0
aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3Nl
bWJsZXJDb2RlUHRyIGNhbGxUaHVuaywgTmF0aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBjb25zdHJ1Y3RUaHVuaywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3Ip
CisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVjdXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlv
biBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVG
dW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAgICAgewogICAgICAgICAgICAgTmF0aXZlRXhlY3V0
YWJsZSogZXhlY3V0YWJsZTsKICAgICAgICAgICAgIGlmICghY2FsbFRodW5rKSB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFk
aW5nLmNwcAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEz
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5o
IgogCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIK
ICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSAi
ZHRvYS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx3dGYvZHRvYS9jYWNoZWQtcG93ZXJzLmg+CkBAIC01NCw2ICs1Niw3
IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVUaHJlYWRpbmdPbmNlKCkKICAgICBXcml0ZUJhcnJp
ZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwogI2VuZGlmCiAgICAgSlNHbG9iYWxEYXRhOjpzdG9y
ZVZQdHJzKCk7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigp
OwogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVfVEhSRUFEUykKICAgICBSZWdpc3RlckZpbGU6Omlu
aXRpYWxpemVUaHJlYWRpbmcoKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4Niw3ICsxODYsNiBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRh
VHlwCiAgICAgLCBlbXB0eUxpc3QobmV3IE1hcmtlZEFyZ3VtZW50QnVmZmVyKQogI2lmIEVOQUJM
RShBU1NFTUJMRVIpCiAgICAgLCBleGVjdXRhYmxlQWxsb2NhdG9yKCp0aGlzKQotICAgICwgcmVn
ZXhBbGxvY2F0b3IoKnRoaXMpCiAjZW5kaWYKICAgICAsIGxleGVyKG5ldyBMZXhlcih0aGlzKSkK
ICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQpAQCAtNDQwLDYgKzQzOSw5IEBAIHZvaWQgSlNHbG9i
YWxEYXRhOjpzdG9wU2FtcGxpbmcoKQogdm9pZCBKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRh
KEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBpbnRlcnByZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhl
Yyk7CisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1w
UHJvZmlsZSgpOworI2VuZGlmCiB9CiAKIHZvaWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBpbGVBbGxK
U0Z1bmN0aW9ucygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBF
eGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFibGVBbGxvY2F0b3I7Ci0gICAgICAgIEV4ZWN1dGFi
bGVBbGxvY2F0b3IgcmVnZXhBbGxvY2F0b3I7CiAjZW5kaWYKIAogI2lmICFFTkFCTEUoSklUKQpA
QCAtMjE2LDcgKzIxNSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkKICAgICAgICAgT3duUHRyPEpJVFRodW5rcz4g
aml0U3R1YnM7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBnZXRDVElTdHViKFRodW5r
R2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldENU
SVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJhdG9yKQogICAgICAgICB7CiAgICAgICAgICAgICBy
ZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhpcywgZ2VuZXJhdG9yKTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDgz
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDkgQEAgU0VUKFdURl9IRUFERVJTCiAgICAgTWFsbG9jWm9uZVN1
cHBvcnQuaAogICAgIE1hdGhFeHRyYXMuaAogICAgIE1lc3NhZ2VRdWV1ZS5oCisgICAgTWV0YUFs
bG9jYXRvci5jcHAKKyAgICBNZXRhQWxsb2NhdG9yLmgKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
LmgKICAgICBOb25Db3B5aW5nU29ydC5oCiAgICAgVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5o
CiAgICAgTm9uY29weWFibGUuaApAQCAtNjksNiArNzIsNyBAQCBTRVQoV1RGX0hFQURFUlMKICAg
ICBQb3NzaWJseU51bGwuaAogICAgIFJhbmRvbU51bWJlci5oCiAgICAgUmFuZG9tTnVtYmVyU2Vl
ZC5oCisgICAgUmVkQmxhY2tUcmVlLmgKICAgICBSZWZDb3VudGVkLmgKICAgICBSZWZDb3VudGVk
TGVha0NvdW50ZXIuaAogICAgIFJlZlB0ci5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxl
IENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIk1ldGFBbGxvY2F0b3IuaCIKKwor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitNZXRhQWxs
b2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRv
ciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKKyAgICA6IG1fYWxsb2NhdG9yKGFs
bG9jYXRvcikKKyAgICAsIG1fc3RhcnQoc3RhcnQpCisgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJ
bkJ5dGVzKQoreworICAgIEFTU0VSVChhbGxvY2F0b3IpOworICAgIEFTU0VSVChzdGFydCk7Cisg
ICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKK30KKworTWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFB
bGxvY2F0b3JIYW5kbGUoKQoreworICAgIGlmICghbV9hbGxvY2F0b3IpCisgICAgICAgIHJldHVy
bjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOworICAg
IGlmIChtX3NpemVJbkJ5dGVzKSB7CisgICAgICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdl
T2NjdXBhbmN5KG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMpOworICAgICAgICBtX2FsbG9jYXRvci0+
YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMpOwor
ICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IG5ld1Np
emVJbkJ5dGVzKQoreworICAgIEFTU0VSVChuZXdTaXplSW5CeXRlcyA8PSBtX3NpemVJbkJ5dGVz
KTsKKyAgICAKKyAgICBpZiAoIW1fYWxsb2NhdG9yKSB7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMg
PSBuZXdTaXplSW5CeXRlczsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTcGlu
TG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOworCisgICAgbmV3U2l6ZUlu
Qnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91bmRVcChuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAg
QVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1fc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmIChu
ZXdTaXplSW5CeXRlcyA9PSBtX3NpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgdWludHB0cl90IGZyZWVTdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N0
YXJ0KSArIG5ld1NpemVJbkJ5dGVzOworICAgIHNpemVfdCBmcmVlU2l6ZSA9IG1fc2l6ZUluQnl0
ZXMgLSBuZXdTaXplSW5CeXRlczsKKyAgICB1aW50cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCAr
IGZyZWVTaXplOworICAgIAorICAgIHVpbnRwdHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9
IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpICYgfihtX2FsbG9jYXRv
ci0+bV9wYWdlU2l6ZSAtIDEpOworICAgIGlmIChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA8IGZy
ZWVFbmQpCisgICAgICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29tcGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAo
Zmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBmcmVlU3RhcnQpKTsKKyAgICAKKyAgICBtX2FsbG9j
YXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KGZyZWVTdGFydCksIGZyZWVTaXplKTsKKyAgICAKKyAgICBtX3NpemVJbkJ5dGVzID0gbmV3
U2l6ZUluQnl0ZXM7Cit9CisKK01ldGFBbGxvY2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFs
bG9jYXRpb25HcmFudWxlKQorICAgIDogbV9hbGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3Jh
bnVsZSkKKyAgICAsIG1fcGFnZVNpemUocGFnZVNpemUoKSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0
ZWQoMCkKKyAgICAsIG1fYnl0ZXNSZXNlcnZlZCgwKQorICAgICwgbV9ieXRlc0NvbW1pdHRlZCgw
KQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1fbWFsbG9jQmFsYW5jZSgwKQorI2VuZGlmCisjaWYg
RU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgLCBtX251bUFsbG9jYXRpb25zKDAp
CisgICAgLCBtX251bUZyZWVzKDApCisjZW5kaWYKK3sKKyAgICBtX2xvY2suSW5pdCgpOworICAg
IAorICAgIGZvciAobV9sb2dQYWdlU2l6ZSA9IDA7IG1fbG9nUGFnZVNpemUgPCAzMjsgKyttX2xv
Z1BhZ2VTaXplKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9n
UGFnZVNpemUgPT0gbV9wYWdlU2l6ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAK
KyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ1BhZ2VTaXplID09IG1f
cGFnZVNpemUpOworICAgIAorICAgIGZvciAobV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9IDA7IG1f
bG9nQWxsb2NhdGlvbkdyYW51bGUgPCAzMjsgKyttX2xvZ0FsbG9jYXRpb25HcmFudWxlKSB7Cisg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51
bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25H
cmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51bGUpOworfQorCitQYXNzUmVmUHRyPE1ldGFBbGxv
Y2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykK
K3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisKKyAgICBpZiAoIXNpemVJ
bkJ5dGVzKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBzaXplSW5CeXRlcyA9IHJvdW5k
VXAoc2l6ZUluQnl0ZXMpOworICAgIAorICAgIHZvaWQqIHN0YXJ0ID0gZmluZEFuZFJlbW92ZUZy
ZWVTcGFjZShzaXplSW5CeXRlcyk7CisgICAgaWYgKCFzdGFydCkgeworICAgICAgICBzaXplX3Qg
cmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyA9IChzaXplSW5CeXRlcyArIG1fcGFnZVNpemUgLSAxKSA+
PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICBzaXplX3QgbnVtYmVyT2ZQYWdlcyA9IHJlcXVlc3Rl
ZE51bWJlck9mUGFnZXM7CisgICAgICAgIAorICAgICAgICBzdGFydCA9IGFsbG9jYXRlTmV3U3Bh
Y2UobnVtYmVyT2ZQYWdlcyk7CisgICAgICAgIGlmICghc3RhcnQpCisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChudW1iZXJPZlBhZ2VzID49IHJlcXVlc3Rl
ZE51bWJlck9mUGFnZXMpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHJvdW5kZWRVcFNpemUg
PSBudW1iZXJPZlBhZ2VzIDw8IG1fbG9nUGFnZVNpemU7CisgICAgICAgIAorICAgICAgICBBU1NF
UlQocm91bmRlZFVwU2l6ZSA+PSBzaXplSW5CeXRlcyk7CisgICAgICAgIAorICAgICAgICBtX2J5
dGVzUmVzZXJ2ZWQgKz0gcm91bmRlZFVwU2l6ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb3Vu
ZGVkVXBTaXplID4gc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgICAgIHZvaWQqIGZyZWVTcGFjZVN0
YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIHNpemVfdCBmcmVlU3BhY2VTaXpl
ID0gcm91bmRlZFVwU2l6ZSAtIHNpemVJbkJ5dGVzOworICAgICAgICAgICAgYWRkRnJlZVNwYWNl
KGZyZWVTcGFjZVN0YXJ0LCBmcmVlU3BhY2VTaXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp
bmNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0LCBzaXplSW5CeXRlcyk7CisgICAgbV9ieXRlc0Fs
bG9jYXRlZCArPSBzaXplSW5CeXRlczsKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklM
RSkKKyAgICBtX251bUFsbG9jYXRpb25zKys7CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhpcywgc3RhcnQsIHNpemVJbkJ5dGVzKSk7Cit9CisK
K01ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3MgTWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3Rp
Y3MoKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBTdGF0aXN0
aWNzIHJlc3VsdDsKKyAgICByZXN1bHQuYnl0ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVk
OworICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVkID0gbV9ieXRlc1Jlc2VydmVkOworICAgIHJlc3Vs
dC5ieXRlc0NvbW1pdHRlZCA9IG1fYnl0ZXNDb21taXR0ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCogTWV0YUFsbG9jYXRvcjo6ZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qg
c2l6ZUluQnl0ZXMpCit7CisgICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6
ZU1hcC5maW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoc2l6ZUluQnl0ZXMpOworICAgIAorICAg
IGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgQVNTRVJUKG5vZGUtPm1f
a2V5ID49IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3Zl
KG5vZGUpOworICAgIAorICAgIHZvaWQqIHJlc3VsdDsKKyAgICAKKyAgICBpZiAobm9kZS0+bV9r
ZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAgICAgLy8gRWFzeSBjYXNlOiBwZXJmZWN0IGZpdCwg
c28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50aXJlbHkuCisgICAgICAgIHJlc3VsdCA9IG5vZGUt
Pm1fdmFsdWU7CisgICAgICAgIAorICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5y
ZW1vdmUobm9kZS0+bV92YWx1ZSk7CisgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5y
ZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KG5vZGUtPm1fdmFsdWUpICsgbm9kZS0+bV9rZXkpKTsKKyAgICAgICAgZnJlZUZyZWVTcGFjZU5v
ZGUobm9kZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gVHJ5IHRvIGJlIGEgZ29vZCBjaXRp
emVuIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmV0dXJuZWQgY2h1bmsgb2YgbWVtb3J5CisgICAgICAg
IC8vIHN0cmFkZGxlcyBhcyBmZXcgcGFnZXMgYXMgcG9zc2libGUsIGJ1dCBvbmx5IGluc29mYXIg
YXMgZG9pbmcgc28gd2lsbAorICAgICAgICAvLyBub3QgaW5jcmVhc2UgZnJhZ21lbnRhdGlvbi4g
VGhlIGludHVpdGlvbiBpcyB0aGF0IG1pbmltaXppbmcKKyAgICAgICAgLy8gZnJhZ21lbnRhdGlv
biBpcyBhIHN0cmljdGx5IGhpZ2hlciBwcmlvcml0eSB0aGFuIG1pbmltaXppbmcgdGhlIG51bWJl
cgorICAgICAgICAvLyBvZiBjb21taXR0ZWQgcGFnZXMsIHNpbmNlIGluIHRoZSBsb25nIHJ1biwg
c21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5zCisgICAgICAgIC8vIGZld2VyIGNvbW1pdHRlZCBw
YWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4gZ2VuZXJhbC4KKyAgICAgICAgCisgICAgICAgIHVp
bnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV92
YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5IC0g
MSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlRm9y
TGVmdEFsbG9jYXRpb24gPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fdmFs
dWUpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRy
X3QgZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Pihub2RlLT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5IC0gc2l6ZUluQnl0ZXMpID4+IG1fbG9n
UGFnZVNpemU7CisgICAgICAgIAorICAgICAgICBpZiAobGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlv
biAtIGZpcnN0UGFnZSArIDEgPD0gbGFzdFBhZ2UgLSBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRp
b24gKyAxKSB7CisgICAgICAgICAgICAvLyBBbGxvY2F0ZSBpbiB0aGUgbGVmdCBzaWRlIG9mIHRo
ZSByZXR1cm5lZCBjaHVuaywgYW5kIHNsaWRlIHRoZSBub2RlIHRvIHRoZSByaWdodC4KKyAgICAg
ICAgICAgIHJlc3VsdCA9IG5vZGUtPm1fdmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShub2RlLT5tX3ZhbHVlKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbm9kZS0+bV9rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAg
ICAgICBub2RlLT5tX3ZhbHVlID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fdmFsdWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAg
ICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuYWRkKG5vZGUtPm1fdmFsdWUsIG5vZGUp
OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIHJpZ2h0
IHNpemUgb2YgdGhlIHJldHVybmVkIGNodW5rLCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIGxl
ZnQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5vZGUt
Pm1fa2V5IC0gc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVT
cGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJw
cmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5KSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG5vZGUtPm1fa2V5IC09IHNpemVJbkJ5dGVzOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAg
ICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChyZXN1bHQsIG5vZGUpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWV0YUFs
bG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXpl
X3Qgc2l6ZUluQnl0ZXMpCit7CisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisg
ICAgbV9udW1GcmVlcysrOworI2VuZGlmCisgICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBzaXplSW5C
eXRlczsKKyAgICBhZGRGcmVlU3BhY2Uoc3RhcnQsIHNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBN
ZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBtX2J5
dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0ZXM7CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXpl
SW5CeXRlcyk7Cit9CisKK3NpemVfdCBNZXRhQWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUo
KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7
CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0g
bV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5zdWNjZXNzb3Io
KSkKKyAgICAgICAgcmVzdWx0ICs9IG5vZGUtPm1fa2V5OworICAgIHJldHVybiByZXN1bHQ7Cisj
ZWxzZQorICAgIENSQVNIKCk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBNZXRh
QWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykK
K3sKKyAgICB2b2lkKiBlbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIEhhc2hNYXA8
dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgbGVmdE5laWdoYm9yID0gbV9mcmVlU3Bh
Y2VFbmRBZGRyZXNzTWFwLmZpbmQoc3RhcnQpOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFj
ZU5vZGUqPjo6aXRlcmF0b3IgcmlnaHROZWlnaGJvciA9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNz
TWFwLmZpbmQoZW5kKTsKKyAgICAKKyAgICBpZiAobGVmdE5laWdoYm9yICE9IG1fZnJlZVNwYWNl
RW5kQWRkcmVzc01hcC5lbmQoKSkgeworICAgICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3ZSBj
YW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVmdC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFu
ZAorICAgICAgICAvLyByZW1vdmUgaXRzIGVuZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCisg
ICAgICAgIAorICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX3ZhbHVlKSArIGxlZnRO
ZWlnaGJvci0+c2Vjb25kLT5tX2tleSkgPT0gbGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAg
IAorICAgICAgICBGcmVlU3BhY2VOb2RlKiBsZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25k
OworICAgICAgICAKKyAgICAgICAgdm9pZCogbGVmdFN0YXJ0ID0gbGVmdE5vZGUtPm1fdmFsdWU7
CisgICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9IGxlZnROb2RlLT5tX2tleTsKKyAgICAgICAgdm9p
ZCogbGVmdEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNpemUpOworICAgICAgICAKKyAgICAgICAgQVNTRVJU
KGxlZnRFbmQgPT0gc3RhcnQpOworICAgICAgICAKKyAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFw
LnJlbW92ZShsZWZ0Tm9kZSk7CisgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1v
dmUobGVmdEVuZCk7CisgICAgICAgIAorICAgICAgICAvLyBOb3cgY2hlY2sgaWYgdGhlcmUgaXMg
YWxzbyBzb21ldGhpbmcgdG8gY29hbGVzY2Ugd2l0aCBvbiB0aGUgcmlnaHQuCisgICAgICAgIGlm
IChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmVuZCgpKSB7Cisg
ICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0aGluZyBpbiB0aGUgbWlkZGxlIG9mIGZyZWUgYmxv
Y2tzLiBDb2FsZXNjZSBib3RoIGxlZnQgYW5kCisgICAgICAgICAgICAvLyByaWdodCwgd2hpbHN0
IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJvciBmcm9tIHRoZSBtYXBzLgorICAgICAgICAgICAg
CisgICAgICAgICAgICBBU1NFUlQocmlnaHROZWlnaGJvci0+c2Vjb25kLT5tX3ZhbHVlID09IHJp
Z2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNl
Tm9kZSogcmlnaHROb2RlID0gcmlnaHROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9p
ZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hib3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90
IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9rZXk7CisgICAgICAgICAgICB2b2lkKiByaWdodEVu
ZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihy
aWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VS
VChyaWdodFN0YXJ0ID09IGVuZCk7CisgICAgICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6
ZSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAg
ICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmlnaHRFbmQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmcmVlRnJlZVNwYWNlTm9kZShyaWdodE5vZGUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBsZWZ0Tm9kZS0+bV9rZXkgKz0gc2l6ZUluQnl0ZXMgKyBy
aWdodFNpemU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5p
bnNlcnQobGVmdE5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFk
ZChyaWdodEVuZCwgbGVmdE5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVm
dE5vZGUtPm1fa2V5ICs9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxlZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNw
YWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBsZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBDYW5ub3QgY29hbGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlm
IHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0
TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAg
ICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9kZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAg
ICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQgPSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAg
ICAgICAgIHNpemVfdCByaWdodFNpemUgPSByaWdodE5vZGUtPm1fa2V5OworICAgICAgICAgICAg
dm9pZCogcmlnaHRFbmQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyByaWdodFNpemUpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChyaWdodEVuZCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmln
aHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShy
aWdodFN0YXJ0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmlnaHROb2RlLT5tX2tleSAr
PSBzaXplSW5CeXRlczsKKyAgICAgICAgICAgIHJpZ2h0Tm9kZS0+bV92YWx1ZSA9IHN0YXJ0Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KHJpZ2h0
Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQs
IHJpZ2h0Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRv
IGNvYWxlc2NlIHdpdGgsIHNvIGNyZWF0ZSBhIG5ldyBmcmVlIHNwYWNlIG5vZGUgYW5kIGFkZCBp
dC4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IGFsbG9j
RnJlZVNwYWNlTm9kZSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBub2RlLT5tX2tleSA9
IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgbm9kZS0+bV92YWx1ZSA9IHN0YXJ0OworICAgICAg
ICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAg
ICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJlc3NNYXAuYWRkKHN0YXJ0LCBub2RlKTsKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBub2RlKTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjppbmNyZW1lbnRQYWdlT2NjdXBh
bmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB1aW50cHRyX3Qg
Zmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpID4+IG1fbG9n
UGFnZVNpemU7CisgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90PihhZGRyZXNzKSArIHNpemVJbkJ5dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAg
ICAKKyAgICBmb3IgKHVpbnRwdHJfdCBwYWdlID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdl
OyArK3BhZ2UpIHsKKyAgICAgICAgSGFzaE1hcDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9y
IGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZmluZChwYWdlKTsKKyAgICAgICAgaWYgKGl0ZXIg
PT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgpKSB7CisgICAgICAgICAgICBtX3BhZ2VPY2N1cGFu
Y3lNYXAuYWRkKHBhZ2UsIDEpOworICAgICAgICAgICAgbV9ieXRlc0NvbW1pdHRlZCArPSBtX3Bh
Z2VTaXplOworICAgICAgICAgICAgbm90aWZ5TmVlZFBhZ2UocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
aXRlci0+c2Vjb25kKys7CisgICAgfQorfQorCit2b2lkIE1ldGFBbGxvY2F0b3I6OmRlY3JlbWVu
dFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVzcywgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAg
IHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVz
cykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3MpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1Bh
Z2VTaXplOworICAgIAorICAgIGZvciAodWludHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2Ug
PD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAgICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90
Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9jY3VwYW5jeU1hcC5maW5kKHBhZ2UpOworICAgICAg
ICBBU1NFUlQoaXRlciAhPSBtX3BhZ2VPY2N1cGFuY3lNYXAuZW5kKCkpOworICAgICAgICBpZiAo
IS0tKGl0ZXItPnNlY29uZCkpIHsKKyAgICAgICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5yZW1v
dmUoaXRlcik7CisgICAgICAgICAgICBtX2J5dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7Cisg
ICAgICAgICAgICBub3RpZnlQYWdlSXNGcmVlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2Ug
PDwgbV9sb2dQYWdlU2l6ZSkpOworICAgICAgICB9CisgICAgfQorfQorCitzaXplX3QgTWV0YUFs
bG9jYXRvcjo6cm91bmRVcChzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgaWYgKHN0ZDo6bnVt
ZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkgLSBtX2FsbG9jYXRpb25HcmFudWxlIDw9IHNpemVJ
bkJ5dGVzKQorICAgICAgICBDUkFTSCgpOworICAgIHJldHVybiAoc2l6ZUluQnl0ZXMgKyBtX2Fs
bG9jYXRpb25HcmFudWxlIC0gMSkgJiB+KG1fYWxsb2NhdGlvbkdyYW51bGUgLSAxKTsKK30KKwor
TWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlTm9kZSogTWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3Bh
Y2VOb2RlKCkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9tYWxsb2NCYWxhbmNlKys7CisjZW5k
aWYKKyAgICByZXR1cm4gbmV3IChmYXN0TWFsbG9jKHNpemVvZihGcmVlU3BhY2VOb2RlKSkpIEZy
ZWVTcGFjZU5vZGUoMCwgMCk7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFj
ZU5vZGUoRnJlZVNwYWNlTm9kZSogbm9kZSkKK3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9tYWxs
b2NCYWxhbmNlLS07CisjZW5kaWYKKyAgICBmYXN0RnJlZShub2RlKTsKK30KKworI2lmIEVOQUJM
RShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQordm9pZCBNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmls
ZSgpCit7CisgICAgcHJpbnRmKCJudW0gYWxsb2NhdGlvbnMgPSAldSwgbnVtIGZyZWVzID0gJXVc
biIsIG1fbnVtQWxsb2NhdGlvbnMsIG1fbnVtRnJlZXMpOworfQorI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9j
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9j
YXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxs
b2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9N
ZXRhQWxsb2NhdG9yX2gKKyNkZWZpbmUgV1RGX01ldGFBbGxvY2F0b3JfaAorCisjaW5jbHVkZSAi
QXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJNZXRhQWxsb2Nh
dG9ySGFuZGxlLmgiCisjaW5jbHVkZSAiTm9uY29weWFibGUuaCIKKyNpbmNsdWRlICJQYWdlQmxv
Y2suaCIKKyNpbmNsdWRlICJSZWRCbGFja1RyZWUuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgi
CisjaW5jbHVkZSAiUmVmUHRyLmgiCisjaW5jbHVkZSAiVENTcGluTG9jay5oIgorCituYW1lc3Bh
Y2UgV1RGIHsKKworI2RlZmluZSBFTkFCTEVfTUVUQV9BTExPQ0FUT1JfUFJPRklMRSAwCisKK2Ns
YXNzIE1ldGFBbGxvY2F0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1ldGFBbGxvY2F0
b3IpOworcHVibGljOgorICAgIAorICAgIE1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25H
cmFudWxlKTsKKyAgICAKKyAgICB2aXJ0dWFsIH5NZXRhQWxsb2NhdG9yKCk7CisgICAgCisgICAg
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0
ZXMpOworICAgIAorICAgIC8vIE5vbi1hdG9taWMgbWV0aG9kcyBmb3IgZ2V0dGluZyBhbGxvY2F0
b3Igc3RhdGlzdGljcy4KKyAgICBzaXplX3QgYnl0ZXNBbGxvY2F0ZWQoKSB7IHJldHVybiBtX2J5
dGVzQWxsb2NhdGVkOyB9CisgICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQoKSB7IHJldHVybiBtX2J5
dGVzUmVzZXJ2ZWQ7IH0KKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKSB7IHJldHVybiBtX2J5
dGVzQ29tbWl0dGVkOyB9CisgICAgCisgICAgLy8gQXRvbWljIG1ldGhvZCBmb3IgZ2V0dGluZyBh
bGxvY2F0b3Igc3RhdGlzdGljcy4KKyAgICBzdHJ1Y3QgU3RhdGlzdGljcyB7CisgICAgICAgIHNp
emVfdCBieXRlc0FsbG9jYXRlZDsKKyAgICAgICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQ7CisgICAg
ICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZDsKKyAgICB9OworICAgIFN0YXRpc3RpY3MgY3VycmVu
dFN0YXRpc3RpY3MoKTsKKworICAgIC8vIEFkZCBtb3JlIGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9j
YXRvci4gQ2FsbCB0aGlzIGRpcmVjdGx5IGZyb20KKyAgICAvLyB0aGUgY29uc3RydWN0b3IgaWYg
eW91IHdpc2ggdG8gb3BlcmF0ZSB0aGUgYWxsb2NhdG9yIHdpdGhpbiBhCisgICAgLy8gZml4ZWQg
cG9vbC4KKyAgICB2b2lkIGFkZEZyZXNoRnJlZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6
ZUluQnl0ZXMpOworCisgICAgLy8gVGhpcyBpcyBtZWFudCBvbmx5IGZvciBpbXBsZW1lbnRpbmcg
dGVzdHMuIE5ldmVyIGNhbGwgdGhpcyBpbiByZWxlYXNlCisgICAgLy8gYnVpbGRzLgorICAgIHNp
emVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FU
T1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQcm9maWxlKCk7CisjZWxzZQorICAgIHZvaWQgZHVt
cFByb2ZpbGUoKSB7IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgCisgICAgLy8gQWxsb2Nh
dGUgbmV3IHZpcnR1YWwgc3BhY2UsIGJ1dCBkb24ndCBjb21taXQuIFRoaXMgbWF5IHJldHVybiBt
b3JlCisgICAgLy8gcGFnZXMgdGhhbiB3ZSBhc2tlZCwgaW4gd2hpY2ggY2FzZSBudW1QYWdlcyBp
cyBjaGFuZ2VkLgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51
bVBhZ2VzKSA9IDA7CisgICAgCisgICAgLy8gQ29tbWl0IGEgcGFnZS4KKyAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkgPSAwOworICAgIAorICAgIC8vIFVuY29tbWl0
IGEgcGFnZS4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKSA9
IDA7CisgICAgCisgICAgLy8gTk9URTogbm9uZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyBhcmUgY2Fs
bGVkIGR1cmluZyBhbGxvY2F0b3IKKyAgICAvLyBkZXN0cnVjdGlvbiwgaW4gcGFydCBiZWNhdXNl
IGEgTWV0YUFsbG9jYXRvciBjYW5ub3QgZGllIHNvIGxvbmcKKyAgICAvLyBhcyB0aGVyZSBhcmUg
SGFuZGxlcyB0aGF0IHJlZmVyIHRvIGl0LgorCitwcml2YXRlOgorICAgIAorICAgIGZyaWVuZCBj
bGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlOworICAgIAorICAgIHR5cGVkZWYgUmVkQmxhY2tUcmVl
PHNpemVfdCwgdm9pZCo+IFRyZWU7CisgICAgdHlwZWRlZiBUcmVlOjpOb2RlIEZyZWVTcGFjZU5v
ZGU7CisgICAgCisgICAgLy8gUmVtb3ZlIGZyZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2NhdG9yLiBU
aGlzIGlzIGVmZmVjdGl2ZWx5CisgICAgLy8gdGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24sIGV4Y2Vw
dCB0aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhlCisgICAgLy8gcmV0dXJuZWQgc3BhY2UgYXMgYmVp
bmcgaW4tdXNlLgorICAgIHZvaWQqIGZpbmRBbmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZV90IHNpemVJ
bkJ5dGVzKTsKKworICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gbWVtb3J5IGZyb20gYW4gYWxs
b2NhdGlvbiBpcyBmcmVlZC4KKyAgICB2b2lkIGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRs
ZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBUaGlzIGlz
IHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRpb24gb2YgYWRkaW5nIGZyZWUgc3BhY2U7IGl0Cisg
ICAgLy8gaXMgY2FsbGVkIGZyb20gYm90aCBhZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUg
YW5kIGZyb20KKyAgICAvLyBhZGRGcmVzaEZyZWVTcGFjZS4KKyAgICB2b2lkIGFkZEZyZWVTcGFj
ZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKTsKKyAgICAKKyAgICAvLyBNYW5hZ2Vt
ZW50IG9mIHVzZWQgc3BhY2UuCisgICAgCisgICAgdm9pZCBpbmNyZW1lbnRQYWdlT2NjdXBhbmN5
KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgdm9pZCBkZWNyZW1lbnRQ
YWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisg
ICAgLy8gVXRpbGl0aWVzLgorICAgIAorICAgIHNpemVfdCByb3VuZFVwKHNpemVfdCBzaXplSW5C
eXRlcyk7CisgICAgCisgICAgRnJlZVNwYWNlTm9kZSogYWxsb2NGcmVlU3BhY2VOb2RlKCk7Cisg
ICAgdm9pZCBmcmVlRnJlZVNwYWNlTm9kZShGcmVlU3BhY2VOb2RlKik7CisgICAgCisgICAgc2l6
ZV90IG1fYWxsb2NhdGlvbkdyYW51bGU7CisgICAgdW5zaWduZWQgbV9sb2dBbGxvY2F0aW9uR3Jh
bnVsZTsKKyAgICBzaXplX3QgbV9wYWdlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2xvZ1BhZ2VTaXpl
OworICAgIAorICAgIFRyZWUgbV9mcmVlU3BhY2VTaXplTWFwOworICAgIEhhc2hNYXA8dm9pZCos
IEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcDsKKyAgICBIYXNoTWFw
PHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4gbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwOworICAgIEhh
c2hNYXA8dWludHB0cl90LCBzaXplX3Q+IG1fcGFnZU9jY3VwYW5jeU1hcDsKKyAgICAKKyAgICBz
aXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKKyAgICBzaXplX3QgbV9ieXRlc1Jlc2VydmVkOworICAg
IHNpemVfdCBtX2J5dGVzQ29tbWl0dGVkOworICAgIAorICAgIFNwaW5Mb2NrIG1fbG9jazsKKwor
I2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3QgbV9tYWxsb2NCYWxhbmNlOworI2VuZGlmCisKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICB1bnNpZ25lZCBtX251bUFsbG9j
YXRpb25zOworICAgIHVuc2lnbmVkIG1fbnVtRnJlZXM7CisjZW5kaWYKK307CisKK2lubGluZSBN
ZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRvcigpCit7CisgICAgZm9yIChGcmVlU3BhY2VOb2Rl
KiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7IG5vZGU7KSB7CisgICAgICAgIEZy
ZWVTcGFjZU5vZGUqIG5leHQgPSBub2RlLT5zdWNjZXNzb3IoKTsKKyAgICAgICAgbV9mcmVlU3Bh
Y2VTaXplTWFwLnJlbW92ZShub2RlKTsKKyAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7
CisgICAgICAgIG5vZGUgPSBuZXh0OworICAgIH0KKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJU
KCFtX21hbGxvY0JhbGFuY2UpOworI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gV1RGX01ldGFBbGxvY2F0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKyNk
ZWZpbmUgV1RGX01ldGFBbGxvY2F0b3JIYW5kbGVfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3I7CisKK2NsYXNzIE1l
dGFBbGxvY2F0b3JIYW5kbGU6IHB1YmxpYyBSZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+
IHsKK3ByaXZhdGU6CisgICAgTWV0YUFsbG9jYXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgICAgICA6IG1fYWxsb2Nh
dG9yKDApCisgICAgICAgICwgbV9zdGFydChzdGFydCkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVz
KHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0KTsKKyAgICB9CisgICAg
CitwdWJsaWM6CisgICAgfk1ldGFBbGxvY2F0b3JIYW5kbGUoKTsKKyAgICAKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFuZGxlPiBjcmVhdGVTZWxmTWFuYWdlZEhhbmRsZSh2
b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFuZGxlKHN0YXJ0LCBzaXplSW5CeXRlcykpOworICAg
IH0KKyAgICAKKyAgICB2b2lkKiBzdGFydCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFy
dDsKKyAgICB9CisgICAgCisgICAgdm9pZCogZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiBy
ZWludGVycHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFy
dCkgKyBtX3NpemVJbkJ5dGVzKTsKKyAgICB9CisgICAgICAgIAorICAgIHNpemVfdCBzaXplSW5C
eXRlcygpCisgICAgeworICAgICAgICByZXR1cm4gbV9zaXplSW5CeXRlczsKKyAgICB9CisgICAg
ICAgIAorICAgIHZvaWQgc2hyaW5rKHNpemVfdCBuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAg
Ym9vbCBpc01hbmFnZWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7Cisg
ICAgfQorICAgICAgICAKKyAgICBNZXRhQWxsb2NhdG9yKiBhbGxvY2F0b3IoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOwor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3I7Cisg
ICAgCisgICAgTWV0YUFsbG9jYXRvciogbV9hbGxvY2F0b3I7CisgICAgdm9pZCogbV9zdGFydDsK
KyAgICBzaXplX3QgbV9zaXplSW5CeXRlczsKK307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxhY2tUcmVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgor
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBSZWRCbGFja1RyZWVfaAorI2RlZmluZSBSZWRCbGFj
a1RyZWVfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBhIHJl
ZC1ibGFjayB0cmVlIHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorLy8gLSBUaGUgYWxs
b2NhdGlvbiBvZiBub2RlcyBpbiB0aGUgdHJlZSBpcyBlbnRpcmVseSB1cCB0byB0aGUgdXNlci4K
Ky8vIC0gSWYgeW91IGFyZSBpbiBwb3NzZXNzaW9uIG9mIGEgcG9pbnRlciB0byBhIG5vZGUsIHlv
dSBjYW4gZGVsZXRlCisvLyAgIGl0IGZyb20gdGhlIHRyZWUuIFRoZSB0cmVlIHdpbGwgc3Vic2Vx
dWVudGx5IG5vIGxvbmdlciBoYXZlIGEKKy8vICAgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZS4KKy8v
IC0gVGhlIGtleSB0eXBlIG11c3QgaW1wbGVtZW50IG9wZXJhdG9yPCBhbmQgPT0uCisKK3RlbXBs
YXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVuYW1lIFZhbHVlVHlwZT4KK2NsYXNzIFJlZEJsYWNr
VHJlZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUmVkQmxhY2tUcmVlKTsKK3ByaXZhdGU6
CisgICAgZW51bSBDb2xvciB7CisgICAgICAgIFJlZCA9IDEsCisgICAgICAgIEJsYWNrCisgICAg
fTsKKyAgICAKK3B1YmxpYzoKKyAgICBjbGFzcyBOb2RlIHsKKyAgICAgICAgZnJpZW5kIGNsYXNz
IFJlZEJsYWNrVHJlZTsKKyAgICAgICAgCisgICAgcHVibGljOgorICAgICAgICBOb2RlKEtleVR5
cGUga2V5LCBWYWx1ZVR5cGUgdmFsdWUpCisgICAgICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBjb25zdCBOb2RlKiBzdWNjZXNzb3IoKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICBjb25zdCBOb2RlKiB4ID0gdGhpczsKKyAgICAgICAgICAgIGlmICh4LT5yaWdodCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cmVlTWluaW11bSh4LT5yaWdodCgpKTsKKyAgICAgICAg
ICAgIGNvbnN0IE5vZGUqIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIHdoaWxlICh5ICYm
IHggPT0geS0+cmlnaHQoKSkgeworICAgICAgICAgICAgICAgIHggPSB5OworICAgICAgICAgICAg
ICAgIHkgPSB5LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdCBOb2RlKiBwcmVkZWNlc3Nvcigp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IE5vZGUqIHggPSB0aGlzOworICAg
ICAgICAgICAgaWYgKHgtPmxlZnQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJlZU1heGlt
dW0oeC0+bGVmdCgpKTsKKyAgICAgICAgICAgIGNvbnN0IE5vZGUqIHkgPSB4LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgIHdoaWxlICh5ICYmIHggPT0geS0+bGVmdCgpKSB7CisgICAgICAgICAgICAg
ICAgeCA9IHk7CisgICAgICAgICAgICAgICAgeSA9IHktPnBhcmVudCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIHk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5v
ZGUqIHN1Y2Nlc3NvcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0
PE5vZGUqPihjb25zdF9jYXN0PGNvbnN0IE5vZGUqPih0aGlzKS0+c3VjY2Vzc29yKCkpOworICAg
ICAgICB9CisgICAgCisgICAgICAgIE5vZGUqIHByZWRlY2Vzc29yKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8Tm9kZSo+KGNvbnN0X2Nhc3Q8Y29uc3QgTm9kZSo+
KHRoaXMpLT5wcmVkZWNlc3NvcigpKTsKKyAgICAgICAgfQorICAgIAorICAgICAgICBLZXlUeXBl
IG1fa2V5OworICAgICAgICBWYWx1ZVR5cGUgbV92YWx1ZTsKKworICAgIHByaXZhdGU6CisgICAg
ICAgIHZvaWQgcmVzZXQoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2xlZnQgPSAwOworICAg
ICAgICAgICAgbV9yaWdodCA9IDA7CisgICAgICAgICAgICBtX3BhcmVudEFuZFJlZCA9IDE7IC8v
IGluaXRpYWxpemUgdG8gcmVkCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6
IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sgdGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBzaW5n
bGUKKyAgICAgICAgLy8gd29yZC4gQnV0IGRvaW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEgYnVn
IGluIHRoZSBjb21waWxlci4KKyAgICAgICAgTm9kZSogcGFyZW50KCkgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Tm9kZSo+KG1fcGFyZW50QW5k
UmVkICYgfnN0YXRpY19jYXN0PHVpbnRwdHJfdD4oMSkpOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2b2lkIHNldFBhcmVudChOb2RlKiBuZXdQYXJlbnQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fcGFyZW50QW5kUmVkID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld1Bh
cmVudCkgfCAobV9wYXJlbnRBbmRSZWQgJiAxKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTm9kZSogbGVmdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xl
ZnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgc2V0TGVmdChOb2RlKiBub2Rl
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2xlZnQgPSBub2RlOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBOb2RlKiByaWdodCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3JpZ2h0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldFJp
Z2h0KE5vZGUqIG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcmlnaHQgPSBub2RlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDb2xvciBjb2xvcigpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVudEFuZFJlZCAmIDEpCisgICAgICAgICAgICAgICAg
cmV0dXJuIFJlZDsKKyAgICAgICAgICAgIHJldHVybiBCbGFjazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdm9pZCBzZXRDb2xvcihDb2xvciB2YWx1ZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHZhbHVlID09IFJlZCkKKyAgICAgICAgICAgICAgICBtX3BhcmVudEFuZFJlZCB8
PSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fcGFyZW50QW5kUmVkICY9
IH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBOb2RlKiBtX2xlZnQ7CisgICAgICAgIE5vZGUqIG1fcmlnaHQ7CisgICAgICAgIHVpbnRwdHJf
dCBtX3BhcmVudEFuZFJlZDsKKyAgICB9OworICAgIAorICAgIFJlZEJsYWNrVHJlZSgpCisgICAg
ICAgIDogbV9yb290KDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGluc2VydChOb2Rl
KiB4KQorICAgIHsKKyAgICAgICAgeC0+cmVzZXQoKTsKKyAgICAgICAgdHJlZUluc2VydCh4KTsK
KyAgICAgICAgeC0+c2V0Q29sb3IoUmVkKTsKKworICAgICAgICAvLyBUaGUgbm9kZSBmcm9tIHdo
aWNoIHRvIHN0YXJ0IHByb3BhZ2F0aW5nIHVwZGF0ZXMgdXB3YXJkcy4KKyAgICAgICAgTm9kZSog
dXBkYXRlU3RhcnQgPSB4LT5wYXJlbnQoKTsKKworICAgICAgICB3aGlsZSAoeCAhPSBtX3Jvb3Qg
JiYgeC0+cGFyZW50KCktPmNvbG9yKCkgPT0gUmVkKSB7CisgICAgICAgICAgICBpZiAoeC0+cGFy
ZW50KCkgPT0geC0+cGFyZW50KCktPnBhcmVudCgpLT5sZWZ0KCkpIHsKKyAgICAgICAgICAgICAg
ICBOb2RlKiB5ID0geC0+cGFyZW50KCktPnBhcmVudCgpLT5yaWdodCgpOworICAgICAgICAgICAg
ICAgIGlmICh5ICYmIHktPmNvbG9yKCkgPT0gUmVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IENhc2UgMQorICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0Q29sb3IoQmxhY2sp
OworICAgICAgICAgICAgICAgICAgICB5LT5zZXRDb2xvcihCbGFjayk7CisgICAgICAgICAgICAg
ICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQoKS0+c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAg
ICAgICAgICAgeCA9IHgtPnBhcmVudCgpLT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAg
dXBkYXRlU3RhcnQgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoeCA9PSB4LT5wYXJlbnQoKS0+cmlnaHQoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAyCisgICAgICAgICAgICAgICAgICAgICAgICB4ID0g
eC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHgpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMworICAgICAg
ICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAg
ICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldENvbG9yKFJlZCk7CisgICAgICAgICAg
ICAgICAgICAgIE5vZGUqIG5ld1N1YlRyZWVSb290ID0gcmlnaHRSb3RhdGUoeC0+cGFyZW50KCkt
PnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhcnQgPSBuZXdTdWJUcmVl
Um9vdC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBTYW1lIGFzICJ0aGVuIiBjbGF1c2Ugd2l0aCAicmlnaHQiIGFu
ZCAibGVmdCIgZXhjaGFuZ2VkLgorICAgICAgICAgICAgICAgIE5vZGUqIHkgPSB4LT5wYXJlbnQo
KS0+cGFyZW50KCktPmxlZnQoKTsKKyAgICAgICAgICAgICAgICBpZiAoeSAmJiB5LT5jb2xvcigp
ID09IFJlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAgICAgICAg
ICAgICAgeC0+cGFyZW50KCktPnNldENvbG9yKEJsYWNrKTsKKyAgICAgICAgICAgICAgICAgICAg
eS0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFy
ZW50KCktPnNldENvbG9yKFJlZCk7CisgICAgICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQo
KS0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXJ0ID0geC0+cGFyZW50
KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHgg
PT0geC0+cGFyZW50KCktPmxlZnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
ZSAyCisgICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAvLyBDYXNlIDMKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50
KCktPnNldENvbG9yKEJsYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnBh
cmVudCgpLT5zZXRDb2xvcihSZWQpOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBuZXdTdWJU
cmVlUm9vdCA9IGxlZnRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdXBkYXRlU3RhcnQgPSBuZXdTdWJUcmVlUm9vdC0+cGFyZW50KCk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9yb290LT5z
ZXRDb2xvcihCbGFjayk7CisgICAgfQorCisgICAgTm9kZSogcmVtb3ZlKE5vZGUqIHopCisgICAg
eworICAgICAgICBBU1NFUlQoeik7CisgICAgICAgIEFTU0VSVCh6LT5wYXJlbnQoKSB8fCB6ID09
IG1fcm9vdCk7CisgICAgICAgIAorICAgICAgICAvLyBZIGlzIHRoZSBub2RlIHRvIGJlIHVubGlu
a2VkIGZyb20gdGhlIHRyZWUuCisgICAgICAgIE5vZGUqIHk7CisgICAgICAgIGlmICghei0+bGVm
dCgpIHx8ICF6LT5yaWdodCgpKQorICAgICAgICAgICAgeSA9IHo7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHkgPSB6LT5zdWNjZXNzb3IoKTsKKworICAgICAgICAvLyBZIGlzIGd1YXJhbnRl
ZWQgdG8gYmUgbm9uLW51bGwgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgTm9kZSogeDsKKyAgICAg
ICAgaWYgKHktPmxlZnQoKSkKKyAgICAgICAgICAgIHggPSB5LT5sZWZ0KCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHggPSB5LT5yaWdodCgpOworCisgICAgICAgIC8vIFggaXMgdGhlIGNo
aWxkIG9mIHkgd2hpY2ggbWlnaHQgcG90ZW50aWFsbHkgcmVwbGFjZSB5IGluCisgICAgICAgIC8v
IHRoZSB0cmVlLiBYIG1pZ2h0IGJlIG51bGwgYXQgdGhpcyBwb2ludC4KKyAgICAgICAgTm9kZSog
eFBhcmVudDsKKyAgICAgICAgaWYgKHgpIHsKKyAgICAgICAgICAgIHgtPnNldFBhcmVudCh5LT5w
YXJlbnQoKSk7CisgICAgICAgICAgICB4UGFyZW50ID0geC0+cGFyZW50KCk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgeFBhcmVudCA9IHktPnBhcmVudCgpOworICAgICAgICBpZiAoIXkt
PnBhcmVudCgpKQorICAgICAgICAgICAgbV9yb290ID0geDsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQoKS0+bGVmdCgpKQorICAgICAgICAgICAgICAgIHkt
PnBhcmVudCgpLT5zZXRMZWZ0KHgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHktPnBhcmVudCgpLT5zZXRSaWdodCh4KTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGlmICh5ICE9IHopIHsKKyAgICAgICAgICAgIGlmICh5LT5jb2xvcigpID09IEJsYWNrKQor
ICAgICAgICAgICAgICAgIHJlbW92ZUZpeHVwKHgsIHhQYXJlbnQpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICB5LT5zZXRQYXJlbnQoei0+cGFyZW50KCkpOworICAgICAgICAgICAgeS0+c2V0
Q29sb3Ioei0+Y29sb3IoKSk7CisgICAgICAgICAgICB5LT5zZXRMZWZ0KHotPmxlZnQoKSk7Cisg
ICAgICAgICAgICB5LT5zZXRSaWdodCh6LT5yaWdodCgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHotPmxlZnQoKSkKKyAgICAgICAgICAgICAgICB6LT5sZWZ0KCktPnNldFBhcmVu
dCh5KTsKKyAgICAgICAgICAgIGlmICh6LT5yaWdodCgpKQorICAgICAgICAgICAgICAgIHotPnJp
Z2h0KCktPnNldFBhcmVudCh5KTsKKyAgICAgICAgICAgIGlmICh6LT5wYXJlbnQoKSkgeworICAg
ICAgICAgICAgICAgIGlmICh6LT5wYXJlbnQoKS0+bGVmdCgpID09IHopCisgICAgICAgICAgICAg
ICAgICAgIHotPnBhcmVudCgpLT5zZXRMZWZ0KHkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgei0+cGFyZW50KCktPnNldFJpZ2h0KHkpOworICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9yb290ID09IHopOworICAgICAgICAg
ICAgICAgIG1fcm9vdCA9IHk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoeS0+
Y29sb3IoKSA9PSBCbGFjaykKKyAgICAgICAgICAgIHJlbW92ZUZpeHVwKHgsIHhQYXJlbnQpOwor
CisgICAgICAgIHJldHVybiB6OworICAgIH0KKyAgICAKKyAgICBOb2RlKiByZW1vdmUoY29uc3Qg
S2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgTm9kZSogcmVzdWx0ID0gZmluZEV4YWN0KGtl
eSk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZEV4YWN0
KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoTm9kZSogY3Vy
cmVudCA9IG1fcm9vdDsgY3VycmVudDspIHsKKyAgICAgICAgICAgIGlmIChjdXJyZW50LT5tX2tl
eSA9PSBrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CisgICAgICAgICAgICBp
ZiAoa2V5IDwgY3VycmVudC0+bV9rZXkpCisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJl
bnQtPmxlZnQoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0g
Y3VycmVudC0+cmlnaHQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cisg
ICAgCisgICAgTm9kZSogZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUm
IGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIE5vZGUqIGJlc3QgPSAwOworICAgICAgICBmb3Ig
KE5vZGUqIGN1cnJlbnQgPSBtX3Jvb3Q7IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICBpZiAoY3Vy
cmVudC0+bV9rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAg
ICAgICAgICAgaWYgKGN1cnJlbnQtPm1fa2V5IDwga2V5KQorICAgICAgICAgICAgICAgIGN1cnJl
bnQgPSBjdXJyZW50LT5yaWdodCgpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgYmVzdCA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmxl
ZnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVzdDsKKyAg
ICB9CisgICAgCisgICAgTm9kZSogZmluZEdyZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0IEtl
eVR5cGUmIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIE5vZGUqIGJlc3QgPSAwOworICAgICAg
ICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtX3Jvb3Q7IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICBp
ZiAoY3VycmVudC0+bV9rZXkgPT0ga2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50
OworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm1fa2V5ID4ga2V5KQorICAgICAgICAgICAgICAg
IGN1cnJlbnQgPSBjdXJyZW50LT5sZWZ0KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBiZXN0ID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVu
dC0+cmlnaHQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVz
dDsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmlyc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHRyZWVN
aW5pbXVtKG1fcm9vdCk7CisgICAgfQorICAgIAorICAgIE5vZGUqIGxhc3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
cmV0dXJuIHRyZWVNYXhpbXVtKG1fcm9vdCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMg
YW4gTyhuKSBvcGVyYXRpb24uCisgICAgc2l6ZV90IHNpemUoKQorICAgIHsKKyAgICAgICAgc2l6
ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IGZpcnN0KCk7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5zdWNjZXNzb3IoKSkKKyAgICAgICAgICAgIHJlc3Vs
dCsrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlz
IGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJvb2wgaXNFbXB0eSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gIW1fcm9vdDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIC8vIEZpbmRzIHRoZSBt
aW5pbXVtIGVsZW1lbnQgaW4gdGhlIHN1Yi10cmVlIHJvb3RlZCBhdCB0aGUgZ2l2ZW4KKyAgICAv
LyBub2RlLgorICAgIHN0YXRpYyBOb2RlKiB0cmVlTWluaW11bShOb2RlKiB4KQorICAgIHsKKyAg
ICAgICAgd2hpbGUgKHgtPmxlZnQoKSkKKyAgICAgICAgICAgIHggPSB4LT5sZWZ0KCk7CisgICAg
ICAgIHJldHVybiB4OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTm9kZSogdHJlZU1heGltdW0o
Tm9kZSogeCkKKyAgICB7CisgICAgICAgIHdoaWxlICh4LT5yaWdodCgpKQorICAgICAgICAgICAg
eCA9IHgtPnJpZ2h0KCk7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIHN0YXRpYyBj
b25zdCBOb2RlKiB0cmVlTWluaW11bShjb25zdCBOb2RlKiB4KQorICAgIHsKKyAgICAgICAgd2hp
bGUgKHgtPmxlZnQoKSkKKyAgICAgICAgICAgIHggPSB4LT5sZWZ0KCk7CisgICAgICAgIHJldHVy
biB4OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3QgTm9kZSogdHJlZU1heGltdW0oY29u
c3QgTm9kZSogeCkKKyAgICB7CisgICAgICAgIHdoaWxlICh4LT5yaWdodCgpKQorICAgICAgICAg
ICAgeCA9IHgtPnJpZ2h0KCk7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKworICAgIHZvaWQg
dHJlZUluc2VydChOb2RlKiB6KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCF6LT5sZWZ0KCkpOwor
ICAgICAgICBBU1NFUlQoIXotPnJpZ2h0KCkpOworICAgICAgICBBU1NFUlQoIXotPnBhcmVudCgp
KTsKKyAgICAgICAgQVNTRVJUKHotPmNvbG9yKCkgPT0gUmVkKTsKKyAgICAgICAgCisgICAgICAg
IE5vZGUqIHkgPSAwOworICAgICAgICBOb2RlKiB4ID0gbV9yb290OworICAgICAgICB3aGlsZSAo
eCkgeworICAgICAgICAgICAgeSA9IHg7CisgICAgICAgICAgICBpZiAoei0+bV9rZXkgPCB4LT5t
X2tleSkKKyAgICAgICAgICAgICAgICB4ID0geC0+bGVmdCgpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHggPSB4LT5yaWdodCgpOworICAgICAgICB9CisgICAgICAgIHotPnNl
dFBhcmVudCh5KTsKKyAgICAgICAgaWYgKCF5KQorICAgICAgICAgICAgbV9yb290ID0gejsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoei0+bV9rZXkgPCB5LT5tX2tleSkKKyAgICAg
ICAgICAgICAgICB5LT5zZXRMZWZ0KHopOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHktPnNldFJpZ2h0KHopOworICAgICAgICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgLy8gUmVkLUJsYWNrIHRyZWUgb3BlcmF0aW9ucworICAgIC8vCisKKyAgICAvLyBM
ZWZ0LXJvdGF0ZXMgdGhlIHN1YnRyZWUgcm9vdGVkIGF0IHguCisgICAgLy8gUmV0dXJucyB0aGUg
bmV3IHJvb3Qgb2YgdGhlIHN1YnRyZWUgKHgncyByaWdodCBjaGlsZCkuCisgICAgTm9kZSogbGVm
dFJvdGF0ZShOb2RlKiB4KQorICAgIHsKKyAgICAgICAgLy8gU2V0IHkuCisgICAgICAgIE5vZGUq
IHkgPSB4LT5yaWdodCgpOworCisgICAgICAgIC8vIFR1cm4geSdzIGxlZnQgc3VidHJlZSBpbnRv
IHgncyByaWdodCBzdWJ0cmVlLgorICAgICAgICB4LT5zZXRSaWdodCh5LT5sZWZ0KCkpOworICAg
ICAgICBpZiAoeS0+bGVmdCgpKQorICAgICAgICAgICAgeS0+bGVmdCgpLT5zZXRQYXJlbnQoeCk7
CisKKyAgICAgICAgLy8gTGluayB4J3MgcGFyZW50IHRvIHkuCisgICAgICAgIHktPnNldFBhcmVu
dCh4LT5wYXJlbnQoKSk7CisgICAgICAgIGlmICgheC0+cGFyZW50KCkpCisgICAgICAgICAgICBt
X3Jvb3QgPSB5OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVu
dCgpLT5sZWZ0KCkpCisgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldExlZnQoeSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldFJpZ2h0KHkp
OworICAgICAgICB9CisKKyAgICAgICAgLy8gUHV0IHggb24geSdzIGxlZnQuCisgICAgICAgIHkt
PnNldExlZnQoeCk7CisgICAgICAgIHgtPnNldFBhcmVudCh5KTsKKworICAgICAgICByZXR1cm4g
eTsKKyAgICB9CisKKyAgICAvLyBSaWdodC1yb3RhdGVzIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB5
LgorICAgIC8vIFJldHVybnMgdGhlIG5ldyByb290IG9mIHRoZSBzdWJ0cmVlICh5J3MgbGVmdCBj
aGlsZCkuCisgICAgTm9kZSogcmlnaHRSb3RhdGUoTm9kZSogeSkKKyAgICB7CisgICAgICAgIC8v
IFNldCB4LgorICAgICAgICBOb2RlKiB4ID0geS0+bGVmdCgpOworCisgICAgICAgIC8vIFR1cm4g
eCdzIHJpZ2h0IHN1YnRyZWUgaW50byB5J3MgbGVmdCBzdWJ0cmVlLgorICAgICAgICB5LT5zZXRM
ZWZ0KHgtPnJpZ2h0KCkpOworICAgICAgICBpZiAoeC0+cmlnaHQoKSkKKyAgICAgICAgICAgIHgt
PnJpZ2h0KCktPnNldFBhcmVudCh5KTsKKworICAgICAgICAvLyBMaW5rIHkncyBwYXJlbnQgdG8g
eC4KKyAgICAgICAgeC0+c2V0UGFyZW50KHktPnBhcmVudCgpKTsKKyAgICAgICAgaWYgKCF5LT5w
YXJlbnQoKSkKKyAgICAgICAgICAgIG1fcm9vdCA9IHg7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgaWYgKHkgPT0geS0+cGFyZW50KCktPmxlZnQoKSkKKyAgICAgICAgICAgICAgICB5LT5w
YXJlbnQoKS0+c2V0TGVmdCh4KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5
LT5wYXJlbnQoKS0+c2V0UmlnaHQoeCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBQdXQgeSBv
biB4J3MgcmlnaHQuCisgICAgICAgIHgtPnNldFJpZ2h0KHkpOworICAgICAgICB5LT5zZXRQYXJl
bnQoeCk7CisKKyAgICAgICAgcmV0dXJuIHg7CisgICAgfQorCisgICAgLy8gUmVzdG9yZXMgdGhl
IHJlZC1ibGFjayBwcm9wZXJ0eSB0byB0aGUgdHJlZSBhZnRlciBzcGxpY2luZyBvdXQKKyAgICAv
LyBhIG5vZGUuIE5vdGUgdGhhdCB4IG1heSBiZSBudWxsLCB3aGljaCBpcyB3aHkgeFBhcmVudCBt
dXN0IGJlCisgICAgLy8gc3VwcGxpZWQuCisgICAgdm9pZCByZW1vdmVGaXh1cChOb2RlKiB4LCBO
b2RlKiB4UGFyZW50KQorICAgIHsKKyAgICAgICAgd2hpbGUgKHggIT0gbV9yb290ICYmICgheCB8
fCB4LT5jb2xvcigpID09IEJsYWNrKSkgeworICAgICAgICAgICAgaWYgKHggPT0geFBhcmVudC0+
bGVmdCgpKSB7CisgICAgICAgICAgICAgICAgLy8gTm90ZTogdGhlIHRleHQgcG9pbnRzIG91dCB0
aGF0IHcgY2FuIG5vdCBiZSBudWxsLgorICAgICAgICAgICAgICAgIC8vIFRoZSByZWFzb24gaXMg
bm90IG9idmlvdXMgZnJvbSBzaW1wbHkgbG9va2luZyBhdAorICAgICAgICAgICAgICAgIC8vIHRo
ZSBjb2RlOyBpdCBjb21lcyBhYm91dCBmcm9tIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZQorICAgICAg
ICAgICAgICAgIC8vIHJlZC1ibGFjayB0cmVlLgorICAgICAgICAgICAgICAgIE5vZGUqIHcgPSB4
UGFyZW50LT5yaWdodCgpOworICAgICAgICAgICAgICAgIEFTU0VSVCh3KTsgLy8geCdzIHNpYmxp
bmcgc2hvdWxkIG5vdCBiZSBudWxsLgorICAgICAgICAgICAgICAgIGlmICh3LT5jb2xvcigpID09
IFJlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDEKKyAgICAgICAgICAgICAgICAg
ICAgdy0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICB4UGFyZW50LT5zZXRD
b2xvcihSZWQpOworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHhQYXJlbnQpOworICAg
ICAgICAgICAgICAgICAgICB3ID0geFBhcmVudC0+cmlnaHQoKTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgaWYgKCghdy0+bGVmdCgpIHx8IHctPmxlZnQoKS0+Y29sb3IoKSA9
PSBCbGFjaykKKyAgICAgICAgICAgICAgICAgICAgJiYgKCF3LT5yaWdodCgpIHx8IHctPnJpZ2h0
KCktPmNvbG9yKCkgPT0gQmxhY2spKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgor
ICAgICAgICAgICAgICAgICAgICB3LT5zZXRDb2xvcihSZWQpOworICAgICAgICAgICAgICAgICAg
ICB4ID0geFBhcmVudDsKKyAgICAgICAgICAgICAgICAgICAgeFBhcmVudCA9IHgtPnBhcmVudCgp
OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+
cmlnaHQoKSB8fCB3LT5yaWdodCgpLT5jb2xvcigpID09IEJsYWNrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBDYXNlIDMKKyAgICAgICAgICAgICAgICAgICAgICAgIHctPmxlZnQoKS0+
c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdy0+c2V0Q29sb3IoUmVk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgdyA9IHhQYXJlbnQtPnJpZ2h0KCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSA0CisgICAgICAgICAgICAgICAgICAgIHctPnNl
dENvbG9yKHhQYXJlbnQtPmNvbG9yKCkpOworICAgICAgICAgICAgICAgICAgICB4UGFyZW50LT5z
ZXRDb2xvcihCbGFjayk7CisgICAgICAgICAgICAgICAgICAgIGlmICh3LT5yaWdodCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdy0+cmlnaHQoKS0+c2V0Q29sb3IoQmxhY2spOworICAgICAg
ICAgICAgICAgICAgICBsZWZ0Um90YXRlKHhQYXJlbnQpOworICAgICAgICAgICAgICAgICAgICB4
ID0gbV9yb290OworICAgICAgICAgICAgICAgICAgICB4UGFyZW50ID0geC0+cGFyZW50KCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBTYW1lIGFzICJ0aGVuIiBjbGF1c2Ugd2l0aCAicmlnaHQiIGFuZCAibGVmdCIKKyAgICAgICAg
ICAgICAgICAvLyBleGNoYW5nZWQuCisKKyAgICAgICAgICAgICAgICAvLyBOb3RlOiB0aGUgdGV4
dCBwb2ludHMgb3V0IHRoYXQgdyBjYW4gbm90IGJlIG51bGwuCisgICAgICAgICAgICAgICAgLy8g
VGhlIHJlYXNvbiBpcyBub3Qgb2J2aW91cyBmcm9tIHNpbXBseSBsb29raW5nIGF0CisgICAgICAg
ICAgICAgICAgLy8gdGhlIGNvZGU7IGl0IGNvbWVzIGFib3V0IGZyb20gdGhlIHByb3BlcnRpZXMg
b2YgdGhlCisgICAgICAgICAgICAgICAgLy8gcmVkLWJsYWNrIHRyZWUuCisgICAgICAgICAgICAg
ICAgTm9kZSogdyA9IHhQYXJlbnQtPmxlZnQoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodyk7
IC8vIHgncyBzaWJsaW5nIHNob3VsZCBub3QgYmUgbnVsbC4KKyAgICAgICAgICAgICAgICBpZiAo
dy0+Y29sb3IoKSA9PSBSZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAxCisgICAg
ICAgICAgICAgICAgICAgIHctPnNldENvbG9yKEJsYWNrKTsKKyAgICAgICAgICAgICAgICAgICAg
eFBhcmVudC0+c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUo
eFBhcmVudCk7CisgICAgICAgICAgICAgICAgICAgIHcgPSB4UGFyZW50LT5sZWZ0KCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgoIXctPnJpZ2h0KCkgfHwgdy0+cmln
aHQoKS0+Y29sb3IoKSA9PSBCbGFjaykKKyAgICAgICAgICAgICAgICAgICAgJiYgKCF3LT5sZWZ0
KCkgfHwgdy0+bGVmdCgpLT5jb2xvcigpID09IEJsYWNrKSkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBDYXNlIDIKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0Q29sb3IoUmVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgeCA9IHhQYXJlbnQ7CisgICAgICAgICAgICAgICAgICAgIHhQYXJlbnQg
PSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIXctPmxlZnQoKSB8fCB3LT5sZWZ0KCktPmNvbG9yKCkgPT0gQmxhY2spIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMworICAgICAgICAgICAgICAgICAgICAgICAg
dy0+cmlnaHQoKS0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdy0+
c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRSb3RhdGUodyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB3ID0geFBhcmVudC0+bGVmdCgpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgNAorICAgICAgICAgICAgICAg
ICAgICB3LT5zZXRDb2xvcih4UGFyZW50LT5jb2xvcigpKTsKKyAgICAgICAgICAgICAgICAgICAg
eFBhcmVudC0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICBpZiAody0+bGVm
dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdy0+bGVmdCgpLT5zZXRDb2xvcihCbGFjayk7
CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0Um90YXRlKHhQYXJlbnQpOworICAgICAgICAgICAg
ICAgICAgICB4ID0gbV9yb290OworICAgICAgICAgICAgICAgICAgICB4UGFyZW50ID0geC0+cGFy
ZW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGlmICh4KQorICAgICAgICAgICAgeC0+c2V0Q29sb3IoQmxhY2spOworICAgIH0KKworICAg
IE5vZGUqIG1fcm9vdDsKK307CisKK30KKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d3RmL3d0Zi5wcmkJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAgICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5U
aHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFsbG9jYXRvci5jcHAgXAogICAgIHd0Zi9OdWxsUHRy
LmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291cmNlLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJl
YWRRdC5jcHAgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJl
dmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyArMjQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgYmFj
a3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGluayAmIGZpbmFsaXplIHRoZSBjb2RlLgotICAgICAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmdsb2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJl
Z2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRh
LCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJhY2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5r
QnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgp
KTsKICAgICAgICAgaml0T2JqZWN0LnNldEZhbGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lhcnJKSVQuaAkocmV2aXNpb24gOTQ4MzEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9ZYXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1
LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAgICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5w
dXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29k
ZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAg
ICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKICAgICB9
CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJTkcpCi0gICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0
dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CisgICAgdm9pZCAqZ2V0QWRk
cigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYK
IAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRv
IGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRy
b2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxs
b2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFs
bG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGlu
ZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsg
bmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0
aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0
byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBG
b3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oOiBBZGRlZC4KKwogMjAx
MS0wOS0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0
aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBKU0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2Nh
dG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFB
bGxvY2F0b3JIYW5kbGUuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0ODMxKQorKysgU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzw8
PDw8PDwgLm1pbmUKKzIwMTEtMDktMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRv
IGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRy
b2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxs
b2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFs
bG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGlu
ZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsg
bmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0
aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0
byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IGxheW91dCB0ZXN0cyBi
ZWNhdXNlIGJlaGF2aW9yIGlzIG5vdCBjaGFuZ2VkLiAgTmV3IEFQSSB1bml0CisgICAgICAgIHRl
c3RzOgorICAgICAgICBUZXN0cy9XVEYvUmVkQmxhY2tUcmVlLmNwcAorICAgICAgICBUZXN0cy9X
VEYvTWV0YUFsbG9jYXRvci5jcHAKKworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorCis9PT09PT09CiAyMDExLTA5LTA4ICBKYW1l
cyBXZWF0aGVyYWxsICA8d2V6QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZWxlYXNlIHRoZSBy
ZWZlcmVuY2UgdG8gdGhlIEhUTUxQbHVnSW5FbGVtZW50J3Mgc2NyaXB0IG9iamVjdCwgd2hlbiB0
aGUgZWxlbWVudCBpcyByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50LiAgVGhpcyBicmVha3MgYSBj
eWNsaWNhbCByZWZlcmVuY2UgdGhhdCB3b3VsZCBvdGhlcndpc2UgY2F1c2UgdGhlIGVsZW1lbnQg
dG8gYmUgcmV0YWluZWQgdW50aWwgdGhlIGRvY3VtZW50IGlzIHRvcm4gZG93bi4KQEAgLTUwNjQs
NiArNTA5MCw3IEBACiAgICAgICAgIEJlY2F1c2UgYSBmaWxlIHVwbG9hZCBjb250cm9sIHVzZXMg
aW5oZXJpdGVkIGJhY2tncm91bmQgY29sb3IsIHRoZQogICAgICAgICBmb3JlZ3JvdW5kIGNvbG9y
IGFsc28gc2hvdWxkIGJlIGluaGVyaXRlZC4KIAorPj4+Pj4+PiAucjk0ODMxCiAyMDExLTA5LTAx
ICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGdvb2dsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUg
YSBXb3JrZXIgY29uc3RydWN0b3Igb2YgVjggdXNpbmcgdGhlIElETCAnQ29uc3RydWN0b3InIGV4
dGVuZGVkIGF0dHJpYnV0ZQpJbmRleDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMv
d3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9G
b3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvTWV0YUFsbG9jYXRvckhhbmRsZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFB
bGxvY2F0b3JIYW5kbGUuaD4KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0ODMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMDktMDEgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMg
aXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0
YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxs
b2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0
aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRo
ZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkK
KyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tU
cmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4
ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUu
CisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2Nh
dG9yLmNwcDogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6ZmluZEV4YWN0KToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlBhaXI6OnJlbW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjpmaW5k
TGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6
YXNzZXJ0Rm91bmRBbmRSZW1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNz
ZXJ0RXF1YWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0U2FtZVZhbHVl
c0ZvcktleSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjp0ZXN0RHJpdmVyKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisKIDIwMTEtMDktMDggIEJyaWFuIFdlaW5z
dGVpbiAgPGJ3ZWluc3RlaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDI6IEFzc2VydGlv
biB3aGVuIGNhbGxpbmcgZGlkUGVyZm9ybSpSZWRpcmVjdCBvbiBudWxsIHNvdXJjZS9kZXN0aW5h
dGlvbiBVUkwgc3RyaW5nCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQ4
MzEpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDggQEAKIAlvYmplY3RzID0gewog
CiAvKiBCZWdpbiBQQlhCdWlsZEZpbGUgc2VjdGlvbiAqLworCQkwRkM2QzRDQzE0MTAyN0UwMDA1
QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUu
Y3BwICovOyB9OworCQkwRkM2QzRDRjE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRD
RTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IH07CiAJCTFBMDJDODRG
MTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAq
LzsgfTsKIAkJMUEwMkM4NzAxMjVENENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0
QTVFMDBFM0Y0QkQgLyogZmluZC5odG1sICovOyB9OwogCQkxQTVGRUZERDEyNzBFMkEzMDAwRTI5
MjEgLyogRXZhbHVhdGVKYXZhU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFBNUZFRkRDMTI3MEUyQTMwMDBFMjkyMSAvKiBFdmFsdWF0ZUph
dmFTY3JpcHQuY3BwICovOyB9OwpAQCAtMTMwLDYgKzEzMiw4IEBACiAvKiBFbmQgUEJYQ29weUZp
bGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2Vj
dGlvbiAqLworCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlZEJsYWNrVHJlZS5jcHA7IHBh
dGggPSBXVEYvUmVkQmxhY2tUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTWV0YUFsbG9jYXRvci5jcHA7IHBhdGggPSBXVEYv
TWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRC
MTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGgg
PSBmaW5kLmh0bWw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRFMTI1RDRB
ODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEZpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTVGRUZEQzEyNzBF
MkEzMDAwRTI5MjEgLyogRXZhbHVhdGVKYXZhU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEV2YWx1YXRlSmF2YVNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0zNjcsNiArMzcxLDggQEAKIAkJQkM5MDk2NDYxMjU1NjE4OTAwMDgz
NzU2IC8qIFdURiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZDNkM0Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJ
CTBGQzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJCUE3
QTk2NkRBMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3Bw
ICovLAogCQkJCUMwMTM2M0M3MTNDMzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3Bw
ICovLAogCQkJCUJDOTA5NjRCMTI1NTYxQkYwMDA4Mzc1NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi8s
CkBAIC01NzcsNiArNTgzLDggQEAKIAkJCQlDMDg1ODdGQzEzRkVDMzlCMDAxRUY0RTUgLyogSW5z
dGFuY2VNZXRob2RTd2l6emxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwODU4ODAwMTNGRUMz
QTYwMDFFRjRFNSAvKiBJbnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMzdEQzY3OEQxNDBEN0M1MDAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291
cmNlcyAqLywKKwkJCQkwRkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGQzZDNENGMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxs
b2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAv
KiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5
QkE5MTcxNDEwMzQxMjAwMUEwMUJEIC8qIERldmljZVNjYWxlRmFjdG9yT25CYWNrLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJMzc5OUFEM0ExNDEyMEE0MzAwNUVCMEM2IC8qIFN0cmluZ0J5RXZhbHVh
dGluZ0phdmFTY3JpcHRGcm9tU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L01ldGFBbGxvY2F0b3IuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WZWN0b3IuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFz
cyBNZXRhQWxsb2NhdG9yVGVzdDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAg
IGVudW0gU2FuaXR5Q2hlY2tNb2RlIHsgUnVuU2FuaXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVj
ayB9OworICAgIAorICAgIGVudW0gSGVhcEdyb3d0aE1vZGUgeyBEb250R3Jvd0hlYXAsIEZvclRl
c3REZW1hbmRBbGxvY0NvYWxlc2NlLCBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2UgfTsK
KyAgICAKKyAgICBIZWFwR3Jvd3RoTW9kZSBjdXJyZW50SGVhcEdyb3d0aE1vZGU7CisgICAgc2l6
ZV90IGFsbG93QWxsb2NhdGVQYWdlczsKKyAgICBzaXplX3QgcmVxdWVzdGVkTnVtUGFnZXM7CisK
KyAgICBjbGFzcyBTaW1wbGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKE1ldGFBbGxvY2F0b3JUZXN0
KiBwYXJlbnQpCisgICAgICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpCisgICAgICAgICAgICAs
IG1fcGFyZW50KHBhcmVudCkKKyAgICAgICAgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3Bh
Y2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSwgZGVmYXVs
dFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZpcnR1YWwgflNpbXBsZVRlc3RBbGxvY2F0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRSghbV9wYXJlbnQtPmFsbG9jYXRvckRlc3Ryb3llZCk7CisgICAgICAgICAgICBt
X3BhcmVudC0+YWxsb2NhdG9yRGVzdHJveWVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jv
d3RoTW9kZSkgeworICAgICAgICAgICAgY2FzZSBEb250R3Jvd0hlYXA6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZvclRlc3RE
ZW1hbmRBbGxvY0NvYWxlc2NlOgorICAgICAgICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NE
b250Q29hbGVzY2U6IHsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxs
b3dBbGxvY2F0ZVBhZ2VzKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+
YWxsb3dBbGxvY2F0ZVBhZ2VzID49IG51bVBhZ2VzKTsKKyAgICAgICAgICAgICAgICBtX3BhcmVu
dC0+cmVxdWVzdGVkTnVtUGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgICAgICAgICBudW1QYWdl
cyA9IG1fcGFyZW50LT5hbGxvd0FsbG9jYXRlUGFnZXM7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0OworICAgICAgICAgICAgICAgIGlmIChtX3BhcmVu
dC0+Y3VycmVudEhlYXBHcm93dGhNb2RlID09IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKQor
ICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICB2b2lkKiByZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2Ug
KyBkZWZhdWx0UGFnZXNJbkhlYXAgKyBvZmZzZXQpICogcGFnZVNpemUoKSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgbV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyA9IDA7
CisgICAgICAgICAgICAgICAgbV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRH
cm93SGVhcDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBj
b3VudGVyID0gMDsgY291bnRlciA8IG51bVBhZ2VzICsgb2Zmc2V0OyArK2NvdW50ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9wYXJlbnQtPnBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYnl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRl
ciA8IHBhZ2VTaXplKCk7ICsrYnl0ZUNvdW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X3BhcmVudC0+bWVtb3J5TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+YWRkaXRpb25hbFBhZ2Vz
SW5IZWFwICs9IG51bVBhZ2VzOworICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhl
IHBhZ2Ugc2hvdWxkIGJlIGJvdGggZnJlZSBhbmQgdW5tYXBwZWQuCisgICAgICAgICAgICBFWFBF
Q1RfVFJVRSghbV9wYXJlbnQtPnBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cGFnZSkgLyBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKCFtX3BhcmVudC0+Ynl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGFkZHJlc3MpKSk7CisgICAgICAgICAgICBtX3BhcmVudC0+cGFnZVN0YXRlKHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gdHJ1ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUo
dm9pZCogcGFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJl
IGZyZWUgb2Ygb2JqZWN0cyBhdCB0aGlzIHBvaW50LCBidXQgaXQgc2hvdWxkIHN0aWxsCisgICAg
ICAgICAgICAvLyBiZSBtYXBwZWQuCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+
cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkp
KTsKKyAgICAgICAgICAgIGZvciAodWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4ocGFnZSk7IGFkZHJlc3MgPCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4o
cGFnZSkgKyBwYWdlU2l6ZSgpOyArK2FkZHJlc3MpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RS
VUUoIW1fcGFyZW50LT5ieXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcykp
KTsKKyAgICAgICAgICAgIG1fcGFyZW50LT5wYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KHBhZ2UpIC8gcGFnZVNpemUoKSkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBNZXRhQWxsb2NhdG9yVGVzdCogbV9wYXJlbnQ7CisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBiYXNlUGFnZSA9IDE7CisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGRlZmF1bHRQYWdlc0luSGVhcCA9IDEwMDsKKyAgICAKKyAgICB1bnNp
Z25lZCBhZGRpdGlvbmFsUGFnZXNJbkhlYXA7CisgICAgCisgICAgVmVjdG9yPGJvb2wsIDA+KiBt
ZW1vcnlNYXA7CisgICAgVmVjdG9yPGJvb2wsIDA+KiBwYWdlTWFwOworICAgIGJvb2wgYWxsb2Nh
dG9yRGVzdHJveWVkOworICAgIAorICAgIFNpbXBsZVRlc3RBbGxvY2F0b3IqIGFsbG9jYXRvcjsK
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgbWVtb3J5TWFw
ID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAgICAgICBwYWdlTWFwID0gbmV3IFZlY3Rvcjxi
b29sLCAwPigpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdlID0gYmFzZVBh
Z2U7IHBhZ2UgPCBiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcDsgKytwYWdlKSB7CisgICAg
ICAgICAgICBwYWdlTWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBieXRlSW5QYWdlID0gMDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkK
KyAgICAgICAgICAgICAgICBtZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBhbGxvY2F0b3JEZXN0cm95ZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGN1
cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAgICAgYWxsb3dBbGxvY2F0
ZVBhZ2VzID0gMDsKKyAgICAgICAgYWRkaXRpb25hbFBhZ2VzSW5IZWFwID0gMDsKKyAgICAgICAg
cmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yID0gbmV3
IFNpbXBsZVRlc3RBbGxvY2F0b3IodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9p
ZCBUZWFyRG93bigpCisgICAgeworICAgICAgICBFWFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0
aE1vZGUgPT0gRG9udEdyb3dIZWFwKTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQ
YWdlcywgc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSk7CisgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0
ZWROdW1QYWdlcywgc3RhdGljX2Nhc3Q8c2l6ZV90PigwKSk7CisgICAgICAgIAorICAgICAgICAv
LyBtZW1vcnkgc2hvdWxkIGJlIGZyZWUuCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJh
c2VQYWdlOyBwYWdlIDwgYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgewor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXBhZ2VTdGF0ZShwYWdlKSk7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGJ5dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKyti
eXRlSW5QYWdlKQorICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFieXRlU3RhdGUocGFnZSAq
IHBhZ2VTaXplKCkgKyBieXRlSW5QYWdlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIE5PVEU6IHRoaXMgYXV0b21hdGljYWxseSB0ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3IgZGlk
IG5vdCBsZWFrCisgICAgICAgIC8vIG1lbW9yeSwgc28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBhcmUg
cnVubmluZyB3aXRoICFkZWZpbmVkKE5ERUJVRykuCisgICAgICAgIC8vIFNlZSBNZXRhQWxsb2Nh
dG9yOjptX21hbGxvY0JhbGFuY2UuCisgICAgICAgIGRlbGV0ZSBhbGxvY2F0b3I7CisgICAgICAg
IAorICAgICAgICBFWFBFQ1RfVFJVRShhbGxvY2F0b3JEZXN0cm95ZWQpOworICAgICAgICAKKyAg
ICAgICAgZGVsZXRlIG1lbW9yeU1hcDsKKyAgICAgICAgZGVsZXRlIHBhZ2VNYXA7CisgICAgfQor
ICAgIAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRl
cywgU2FuaXR5Q2hlY2tNb2RlIHNhbml0eUNoZWNrTW9kZSA9IFJ1blNhbml0eUNoZWNrKQorICAg
IHsKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxv
Y2F0ZShzaXplSW5CeXRlcykubGVha1JlZigpOworICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUp
OworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7
CisgICAgICAgIAorICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRl
ID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJl
bnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUp
IHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFieXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKKyAg
ICAgICAgICAgIGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkgPSB0cnVlOworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUocGFnZVN0YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoc2FuaXR5Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNr
KQorICAgICAgICAgICAgc2FuaXR5Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBo
YW5kbGU7CisgICAgfQorICAgIAorICAgIHZvaWQgZnJlZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBo
YW5kbGUsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykK
KyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBu
b3RpZnlGcmVlKGhhbmRsZS0+c3RhcnQoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsKKyAgICAg
ICAgaGFuZGxlLT5kZXJlZigpOworICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9k
ZSA9PSBSdW5TYW5pdHlDaGVjaykKKyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbm90aWZ5RnJlZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVz
KQorICAgIHsKKyAgICAgICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihzdGFydCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRl
ICsgc2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3Rh
cnRCeXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkpOworICAgICAgICAgICAgYnl0
ZVN0YXRlKGN1cnJlbnRCeXRlKSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgc2FuaXR5Q2hlY2soKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEVYUEVD
VF9FUShhbGxvY2F0b3ItPmJ5dGVzUmVzZXJ2ZWQoKSAtIGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0
ZWQoKSwgYWxsb2NhdG9yLT5kZWJ1Z0ZyZWVTcGFjZVNpemUoKSk7CisjZW5kaWYKKyAgICAgICAg
RVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXNSZXNlcnZlZCgpLCAoZGVmYXVsdFBhZ2VzSW5IZWFw
ICsgYWRkaXRpb25hbFBhZ2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1Rf
RVEoYWxsb2NhdG9yLT5ieXRlc0FsbG9jYXRlZCgpLCBieXRlc0FsbG9jYXRlZCgpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKSwgYnl0ZXNDb21taXR0ZWQo
KSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29uZmlybShNZXRhQWxsb2NhdG9ySGFuZGxlKiBo
YW5kbGUpCisgICAgeworICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAgIGNvbmZpcm0oc3RhcnRC
eXRlLCBzdGFydEJ5dGUgKyBoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRydWUpOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhh
bmRsZSkKKyAgICB7CisgICAgICAgIGNvbmZpcm0ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGhhbmRsZS0+ZW5kKCkpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNp
emUoKSwgZmFsc2UpOworICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICB2b2lkIGNvbmZpcm0o
dWludHB0cl90IHN0YXJ0Qnl0ZSwgdWludHB0cl90IGVuZEJ5dGUsIGJvb2wgdmFsdWUpCisgICAg
eworICAgICAgICBmb3IgKHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVu
dEJ5dGUgPCBlbmRCeXRlOyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
Ynl0ZVN0YXRlKGN1cnJlbnRCeXRlKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlKQor
ICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VT
aXplKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICB1
aW50cHRyX3QgZmlyc3RGcmVlUGFnZSA9IChzdGFydEJ5dGUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBw
YWdlU2l6ZSgpOworICAgICAgICAgICAgdWludHB0cl90IGxhc3RGcmVlUGFnZSA9IChlbmRCeXRl
IC0gcGFnZVNpemUoKSkgLyBwYWdlU2l6ZSgpOworICAgICAgICAgICAgZm9yICh1aW50cHRyX3Qg
Y3VycmVudFBhZ2UgPSBmaXJzdEZyZWVQYWdlOyBjdXJyZW50UGFnZSA8PSBsYXN0RnJlZVBhZ2U7
ICsrY3VycmVudFBhZ2UpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXBhZ2VTdGF0ZShj
dXJyZW50UGFnZSkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBieXRlc0Fs
bG9jYXRlZCgpCisgICAgeworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbWVtb3J5TWFwLT5zaXplKCk7ICsraW5kZXgp
IHsKKyAgICAgICAgICAgIGlmIChtZW1vcnlNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAg
ICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBzaXplX3QgYnl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJl
c3VsdCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VN
YXAtPnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAgICAgaWYgKHBhZ2VNYXAtPmF0KGluZGV4
KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cmVzdWx0ICogcGFnZVNpemUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCYgYnl0ZVN0YXRlKHZv
aWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1cm4gYnl0ZVN0YXRlKHJlaW50ZXJwcmV0
X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSk7CisgICAgfQorICAgIAorICAgIGJvb2wmIGJ5dGVT
dGF0ZSh1aW50cHRyX3QgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBieXRlSW5k
ZXggPSBhZGRyZXNzIC0gYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpOworICAgICAgICByZXR1cm4gbWVt
b3J5TWFwLT5hdChieXRlSW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sJiBwYWdlU3RhdGUo
dWludHB0cl90IHBhZ2UpCisgICAgeworICAgICAgICB1aW50cHRyX3QgcGFnZUluZGV4ID0gcGFn
ZSAtIGJhc2VQYWdlOworICAgICAgICByZXR1cm4gcGFnZU1hcC0+YXQocGFnZUluZGV4KTsKKyAg
ICB9CisKKyAgICAvLyBUZXN0IGhlbHBlcnMKKworICAgIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVf
dCBzaXplKQorICAgIHsKKyAgICAgICAgLy8gVGVzdHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6
IGFsbG9jYXRlIG9uZSB0aGluZyBhbmQgZnJlZSBpdC4gQWxzbworICAgICAgICAvLyB2ZXJpZmll
cyB0aGF0IHRoZSBzdGF0ZSBvZiBwYWdlcyBpcyBjb3JyZWN0LgorICAgICAgICAKKyAgICAgICAg
TWV0YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIEVY
UEVDVF9FUShoYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdl
ICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygp
LCBzaXplKTsKKyAgICAgICAgRVhQRUNUX1RSVUUocGFnZVN0YXRlKGJhc2VQYWdlKSk7CisgICAg
ICAgIAorICAgICAgICBjb25maXJtKGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJt
YXJrKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgdGVzdFJlcGVhdEFsbG9jRnJlZShzaXplX3QgZmlyc3RTaXplLCAuLi4pCisg
ICAgeworICAgICAgICAvLyBUZXN0cyByaWdodC1jb2FsZXNjaW5nIGJ5IHJlcGVhdGVkbHkgYWxs
b2NhdGluZyBhbmQgZnJlZWluZy4gVGhlIGlkZWEKKyAgICAgICAgLy8gaXMgdGhhdCBpZiB5b3Ug
YWxsb2NhdGUgc29tZXRoaW5nIGFuZCB0aGVuIGZyZWUgaXQsIHRoZW4gdGhlIGhlYXAgc2hvdWxk
CisgICAgICAgIC8vIGxvb2sgaWRlbnRpY2FsIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgYWxs
b2NhdGlvbiBkdWUgdG8gYSByaWdodC1jb2FsZXNjZQorICAgICAgICAvLyBvZiB0aGUgZnJlZWQg
Y2h1bmsgYW5kIHRoZSBhbHJlYWR5LWZyZWUgbWVtb3J5LCBhbmQgc28gc3Vic2VxdWVudAorICAg
ICAgICAvLyBhbGxvY2F0aW9ucyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBv
bmUuCisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxv
Y2F0ZShmaXJzdFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAg
ICAgIGNvbmZpcm0oaGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxl
KTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHZh
X2xpc3QgYXJnTGlzdDsKKyAgICAgICAgdmFfc3RhcnQoYXJnTGlzdCwgZmlyc3RTaXplKTsKKyAg
ICAgICAgd2hpbGUgKHNpemVfdCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBpbnQpKSB7
CisgICAgICAgICAgICBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNl
UGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmly
bShoYW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICB9CisgICAgICAg
IHZhX2VuZChhcmdMaXN0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0U2ltcGxlRnVsbENv
YWxlc2NlKHNpemVfdCBmaXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplLCBzaXplX3QgdGhpcmRT
aXplKQorICAgIHsKKyAgICAgICAgLy8gQWxsb2NhdGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0
U2l6ZSwgdGhlbiBzb21ldGhpbmcgb2Ygc2l6ZSBzZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAg
ICAvLyBmcmVlcyB0aGUgZmlyc3QgYWxsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5k
IHRoZW4gYXR0ZW1wdHMgdG8gYWxsb2NhdGUgdGhlCisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRp
bmcgdGhhdCBpdCBhbGxvY2F0ZWQgYXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAg
ICAgICAgCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFs
bG9jYXRpb24sIHdoaWNoIHdpbGwgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8g
VGh1cyB0aGUgY29ycmVjdCB3YXkgb2YgcnVubmluZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRo
YXQgc2Vjb25kU2l6ZSBpcworICAgICAgICAvLyBwaWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0
IG5ldmVyIHN0cmFkZGxlcyBhIHBhZ2UuCisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIEVYUEVD
VF9FUShmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c2l6ZUlu
Qnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oZmlyc3RIYW5k
bGUpOworICAgICAgICBjb25maXJtSGlnaFdhdGVybWFyayhmaXJzdEhhbmRsZSk7CisKKyAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6
ZSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSArIGZpcnN0U2l6ZSkpOworICAgICAg
ICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAg
ICAgICAgCisgICAgICAgIGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtKHNl
Y29uZEhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7
CisgICAgICAgIAorICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAg
IGNvbmZpcm0oc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vj
b25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAg
ICAgCisgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBk
ZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAg
ICAgTWV0YUFsbG9jYXRvckhhbmRsZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUp
OworICAgICAgICBFWFBFQ1RfRVEodGhpcmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEodGhp
cmRIYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRoaXJkU2l6ZSk7CisgICAgICAgIAorICAgICAgICBj
b25maXJtKHRoaXJkSGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsodGhpcmRI
YW5kbGUpOworICAgICAgICAKKyAgICAgICAgZnJlZSh0aGlyZEhhbmRsZSk7CisgICAgfQorICAg
IAorICAgIGVudW0gVGVzdEZJRk9BbGxvY01vZGUgeyBGaWxsQXRFbmQsIEVhZ2VyRmlsbCB9Owor
ICAgIHZvaWQgdGVzdEZJRk9BbGxvYyhUZXN0RklGT0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAg
eworICAgICAgICAvLyBUaGlzIHdpbGwgdGVzdCB0aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVz
Y2UgKGZyZWVpbmcgdGhlIGxlZnQtbW9zdAorICAgICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hl
biB0aGUgY2h1bmsgdG8gdGhlIHJpZ2h0IG9mIGl0IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAg
IC8vIGZ1bGx5IGV4ZXJjaXNlIGxlZnQtY29hbGVzY2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiBJ
biBFYWdlckZpbGwKKyAgICAgICAgLy8gbW9kZSwgdGhpcyBhbHNvIHRlc3RzIHBlcmZlY3QtZml0
IGFsbG9jYXRpb24gYW5kIG5vLWNvYWxlc2NpbmcgZnJlZS4KKyAgICAgICAgCisgICAgICAgIHNp
emVfdCB0b3RhbFNpemUgPSAwOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0
b3JIYW5kbGUqLCAwPiBoYW5kbGVzOworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBhcmdMaXN0
OworICAgICAgICB2YV9zdGFydChhcmdMaXN0LCBtb2RlKTsKKyAgICAgICAgd2hpbGUgKHNpemVf
dCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBpbnQpKSB7CisgICAgICAgICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihi
YXNlUGFnZSAqIHBhZ2VTaXplKCkgKyB0b3RhbFNpemUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1h
cmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoaGFu
ZGxlKTsKKyAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBzaXplSW5CeXRlczsKKyAgICAgICAgfQor
ICAgICAgICB2YV9lbmQoYXJnTGlzdCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gMDsgaW5kZXggPCBoYW5kbGVzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAg
IGNvbmZpcm0oaGFuZGxlcy5hdChpbmRleCkpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNp
emVTb0ZhciA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhh
bmRsZXMuc2l6ZSgpOyArK2luZGV4KSB7CisgICAgICAgICAgICBzaXplU29GYXIgKz0gaGFuZGxl
cy5hdChpbmRleCktPnNpemVJbkJ5dGVzKCk7CisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQo
aW5kZXgpKTsKKyAgICAgICAgICAgIGlmIChtb2RlID09IEVhZ2VyRmlsbCkgeworICAgICAgICAg
ICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVTb0Zhcik7
CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgRVhQ
RUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2l6ZVNvRmFyKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpICsgdG90YWxTaXplLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAo
aW5kZXggPCBoYW5kbGVzLnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1I
aWdoV2F0ZXJtYXJrKGhhbmRsZXMubGFzdCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAq
IHBhZ2VTaXplKCkgKyBzaXplU29GYXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKHNpemVTb0ZhciA9PSB0b3RhbFNpemUpOworICAg
ICAgICAKKyAgICAgICAgY29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChiYXNlUGFnZSAr
IGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIAorICAg
ICAgICBpZiAobW9kZSA9PSBGaWxsQXRFbmQpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUqIGZpbmFsSGFuZGxlID0gYWxsb2NhdGUodG90YWxTaXplKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUShmaW5hbEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFz
ZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoZmluYWxIYW5kbGUt
PnNpemVJbkJ5dGVzKCksIHRvdGFsU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNv
bmZpcm0oZmluYWxIYW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmlu
YWxIYW5kbGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RGaWxsSGVhcChzaXplX3Qgc2l6
ZUluQnl0ZXMsIHNpemVfdCBudW1BbGxvY2F0aW9ucykKKyAgICB7CisgICAgICAgIFZlY3RvcjxN
ZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIGZvciAo
c2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAg
ICAgICAgIGhhbmRsZXMuYXBwZW5kKGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5
Q2hlY2spKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAg
ICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOworICAg
ICAgICAKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRp
b25zOyArK2luZGV4KQorICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1
blNhbml0eUNoZWNrKTsKKyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgdGVzdFJpZ2h0QWxsb2NhdGlvbihzaXplX3QgZmlyc3RMZWZ0U2l6ZSwg
c2l6ZV90IGZpcnN0UmlnaHRTaXplLCBzaXplX3Qgc2Vjb25kTGVmdFNpemUsIHNpemVfdCBzZWNv
bmRSaWdodFNpemUpCisgICAgeworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdExl
ZnQgPSBhbGxvY2F0ZShmaXJzdExlZnRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0TGVm
dC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdFJpZ2h0ID0g
YWxsb2NhdGUoZmlyc3RSaWdodFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RSaWdodC0+
ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0lu
SGVhcCkgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFu
ZGxlKiBzZWNvbmRMZWZ0ID0gYWxsb2NhdGUoc2Vjb25kTGVmdFNpemUpOworICAgICAgICBFWFBF
Q1RfRVEoc2Vjb25kTGVmdC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpICsgZmlyc3RMZWZ0LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRSaWdodCA9IGFsbG9jYXRlKHNlY29u
ZFJpZ2h0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRSaWdodC0+ZW5kKCksIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdl
U2l6ZSgpIC0gZmlyc3RSaWdodC0+c2l6ZUluQnl0ZXMoKSkpOworICAgICAgICAKKyAgICAgICAg
ZnJlZShmaXJzdExlZnQpOworICAgICAgICBmcmVlKGZpcnN0UmlnaHQpOworICAgICAgICBmcmVl
KHNlY29uZExlZnQpOworICAgICAgICBmcmVlKHNlY29uZFJpZ2h0KTsKKyAgICAgICAgCisgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5I
ZWFwICogcGFnZVNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAor
ICAgICAgICBmcmVlKGZpbmFsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0QmVzdEZpdChz
aXplX3QgZmlyc3RTaXplLCBzaXplX3Qgc3RlcCwgdW5zaWduZWQgbnVtU2xvdHMsIFNhbml0eUNo
ZWNrTW9kZSBzYW5pdHlDaGVja01vZGUpCisgICAgeworICAgICAgICBWZWN0b3I8TWV0YUFsbG9j
YXRvckhhbmRsZSosIDA+IGhhbmRsZXNUb0ZyZWU7CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2Nh
dG9ySGFuZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgVmVjdG9yPHZvaWQqLCAwPiBsb2NhdGlv
bnM7CisgICAgICAgIAorICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNh
bml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICBpZiAoIWhhbmRsZXMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgd2hpbGUgKHRvRnJlZS0+c3RhcnQoKSAhPSBoYW5kbGVzLmxhc3QoKS0+
ZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlc1RvRnJlZS5hcHBlbmQodG9GcmVl
KTsKKyAgICAgICAgICAgICAgICAgICAgdG9GcmVlID0gYWxsb2NhdGUoc2l6ZSwgc2FuaXR5Q2hl
Y2tNb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZyYWdnZXIgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hlY2tN
b2RlKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShmcmFnZ2VyLT5zdGFydCgpLCB0b0ZyZWUtPmVu
ZCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZCh0b0ZyZWUt
PnN0YXJ0KCkpOworCisgICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOwor
ICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoZnJhZ2dlcik7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHNpemUgKz0gc3RlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJU
KGxvY2F0aW9ucy5zaXplKCkgPT0gbnVtU2xvdHMpOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgaGFuZGxlc1RvRnJlZS5zaXplKCk7ICsraW5kZXgp
CisgICAgICAgICAgICBmcmVlKGhhbmRsZXNUb0ZyZWUuYXQoaW5kZXgpLCBzYW5pdHlDaGVja01v
ZGUpOworICAgICAgICAKKyAgICAgICAgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAg
ICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGJlc3RGaXQgPSBhbGxvY2F0ZShzaXplIC0gMzIsIHNh
bml0eUNoZWNrTW9kZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJl
c3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KQorICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgYmVzdEZpdC0+ZW5kKCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRl
cnByZXRfY2FzdDx1aW50cHRyX3Q+KGxvY2F0aW9ucy5hdChpbmRleCkpICsgc2l6ZSkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzbWFsbCA9IGFsbG9j
YXRlKDMyLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgaWYgKGJlc3RGaXQtPnN0YXJ0
KCkgPT0gbG9jYXRpb25zLmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoc21h
bGwtPnN0YXJ0KCksIGJlc3RGaXQtPmVuZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBFWFBFQ1RfRVEoc21hbGwtPmVuZCgpLCBiZXN0Rml0LT5zdGFydCgpKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZnJlZShiZXN0Rml0LCBzYW5pdHlDaGVja01vZGUpOworICAg
ICAgICAgICAgZnJlZShzbWFsbCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgc2l6ZSArPSBzdGVwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBudW1TbG90czsgKytpbmRleCkKKyAgICAgICAg
ICAgIGZyZWUoaGFuZGxlcy5hdChpbmRleCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdl
c0luSGVhcCAqIHBhZ2VTaXplKCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIEVYUEVDVF9F
UShmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdl
U2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZpbmFsLCBzYW5pdHlDaGVja01vZGUp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHRlc3RTaHJpbmsoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6
ZV90IHNlY29uZFNpemUpCisgICAgeworICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhh
dCB3aWxsIGJlIHNocnVuaworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBh
bGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQg
bWFrZSBzdXJlIHRoYXQgb3VyIHN0YXRlIHJlZmxlY3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAg
IG5vdGlmeUZyZWUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGhhbmRsZS0+c3RhcnQoKSkgKyBzZWNvbmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25k
U2l6ZSk7CisgICAgICAgIAorICAgICAgICBoYW5kbGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAg
ICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAg
ICAgIAorICAgICAgICBzYW5pdHlDaGVjaygpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0
IHRoYXQgdGhlIGhlYXAgaXMgbm90IGVtcHR5LgorICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2Nh
dG9yLT5hbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAg
IAorICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoZWFwLgorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiByZW1haW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJ
bkhlYXAgKiBwYWdlU2l6ZSgpIC0gc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShyZW1h
aW5kZXItPnN0YXJ0KCksIGhhbmRsZS0+ZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZnJlZShy
ZW1haW5kZXIpOworICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICAvLyBB
c3NlcnQgdGhhdCB0aGUgaGVhcCBpcyBlbXB0eSBhbmQgZmluaXNoIHVwLgorICAgICAgICBNZXRh
QWxsb2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBh
Z2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAg
ZnJlZShmaW5hbCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVzdERlbWFuZEFsbG9jQ29hbGVz
Y2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkK
KyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0
UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7
CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNv
bmRTaXplKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZh
dWx0UGFnZXNJbkhlYXAgKyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAg
ICAgICBjdXJyZW50SGVhcEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZTsK
KyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgIAorICAgICAg
ICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXpl
KTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9UUlVFKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9
PSBEb250R3Jvd0hlYXApOworICAgICAgICBFWFBFQ1RfRVEoYWxsb3dBbGxvY2F0ZVBhZ2VzLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KDApKTsKKyAgICAgICAgRVhQRUNUX0VRKHJlcXVlc3RlZE51bVBh
Z2VzLCAoc2Vjb25kU2l6ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCkpOworICAgICAg
ICBFWFBFQ1RfRVEoc2Vjb25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAg
ICAKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgZnJl
ZShmaXJzdEhhbmRsZSk7CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisg
ICAgICAgIGZyZWUoYWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBh
Z2VTaXplKCkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0RGVtYW5kQWxsb2NEb250Q29h
bGVzY2Uoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6
ZSkKKyAgICB7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZmlyc3RTaXplKSk7CisgICAgICAgIGZy
ZWUoYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICBF
WFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVt
UGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogZmlyc3RIYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAg
ICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAg
ICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsg
bnVtUGFnZXMpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBH
cm93dGhNb2RlID0gRm9yVGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlOworICAgICAgICBhbGxv
d0FsbG9jYXRlUGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIHNlY29uZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICAK
KyAgICAgICAgRVhQRUNUX1RSVUUoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVh
cCk7CisgICAgICAgIEVYUEVDVF9FUShhbGxvd0FsbG9jYXRlUGFnZXMsIHN0YXRpY19jYXN0PHNp
emVfdD4oMCkpOworICAgICAgICBFWFBFQ1RfRVEocmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRT
aXplICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShz
ZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSAr
IGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAg
ICAgcmVxdWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUo
IWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBh
Z2VTaXplKCkpKTsKKworICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShz
ZWNvbmRIYW5kbGUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+
YWxsb2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsK
KyAgICAgICAgCisgICAgICAgIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAg
ICAgICAgc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVD
VF9FUShmaXJzdEhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBh
Z2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVh
cCArIDEpICogcGFnZVNpemUoKSkpOworICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAg
ICAgZnJlZShzZWNvbmRIYW5kbGUpOworICAgIH0KK307CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgRW1wdHkpCit7CisgICAgLy8gVGVzdHMgdGhhdCBjcmVhdGluZyBhbmQgZGVzdHJveWlu
ZyBhbiBhbGxvY2F0b3Igd29ya3MuCit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQWxs
b2NaZXJvKSAgICAKK3sKKyAgICAvLyBUZXN0cyB0aGF0IGFsbG9jYXRpbmcgYSB6ZXJvLWxlbmd0
aCBibG9jayByZXR1cm5zIDAgYW5kCisgICAgLy8gZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nIGlu
IG1lbW9yeS4KKyAgICAKKyAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworICAg
IAorICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2Vz
SW5IZWFwICogcGFnZVNpemUoKSk7CisgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLCByZWlu
dGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICBmcmVlKGZp
bmFsKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBPbmVBbGxvYzMyKQoreworICAg
IHRlc3RPbmVBbGxvYygzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgT25lQWxs
b2M2NCkKK3sKKyAgICB0ZXN0T25lQWxsb2MoNjQpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIE9uZUFsbG9jVHdvUGFnZXMpCit7CisgICAgdGVzdE9uZUFsbG9jKHBhZ2VTaXplKCkg
KiAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlR3
aWNlKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCAwKTsKK30KKworVEVTVF9G
KE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42NCkKK3sKKyAgICB0ZXN0
UmVwZWF0QWxsb2NGcmVlKDMyLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVz
dCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVuMzIpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2
NCwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJl
ZTMyVHdpY2VUaGVuNjQpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDY0LCAw
KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42
NFR3aWNlKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCA2NCwgMCk7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVuMzJUaGVuNjQp
Cit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9G
KE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRocmljZSkKK3sKKyAgICB0ZXN0
UmVwZWF0QWxsb2NGcmVlKDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVGhlbjY0VGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRB
bGxvY0ZyZWUoMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
UmVwZWF0QWxsb2NGcmVlNjRUaGVuMzJUd2ljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVl
KDY0LCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFs
bG9jRnJlZVR3b1BhZ2VzVGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGlj
X2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0UmVw
ZWF0QWxsb2NGcmVlKDMyLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgKiAyKSwgMCk7Cit9
CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlUGFnZVRoZW5Ud29Q
YWdlcykKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNp
emUoKSksIHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSAqIDIpLCAwKTsKK30KKworVEVTVF9G
KE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWVUd29QYWdlc1RoZW5QYWdlKQorewor
ICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiks
IHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSksIDApOworfQorCitURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1czMyVGhlbjEyOCkKK3sKKyAgICB0ZXN0
U2ltcGxlRnVsbENvYWxlc2NlKDMyLCAzMiwgMTI4KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBTaW1wbGVGdWxsQ29hbGVzY2UzMlBsdXM2NFRoZW4xMjgpCit7CisgICAgdGVzdFNp
bXBsZUZ1bGxDb2FsZXNjZSgzMiwgNjQsIDEyOCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlNjRQbHVzMzJUaGVuMTI4KQoreworICAgIHRlc3RTaW1w
bGVGdWxsQ29hbGVzY2UoNjQsIDMyLCAxMjgpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRl
c3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1c1BhZ2VMZXNzMzJUaGVuUGFnZSkKK3sKKyAgICB0
ZXN0U2ltcGxlRnVsbENvYWxlc2NlKDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1c1Bh
Z2VMZXNzMzJUaGVuVHdvUGFnZXMpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwg
cGFnZVNpemUoKSAtIDMyLCBwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2Nh
dG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlUGFnZVBsdXMzMlRoZW5Ud29QYWdlcykKK3sKKyAg
ICB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpICogMik7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlUGFnZVBs
dXNQYWdlVGhlblR3b1BhZ2VzKQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNp
emUoKSwgcGFnZVNpemUoKSwgcGFnZVNpemUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFsbG9j
YXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMyVHdpY2UpCit7CisgICAgdGVzdEZJRk9BbGxv
YyhGaWxsQXRFbmQsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwg
RklGT0FsbG9jRmlsbEF0RW5kMzJUaHJpY2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRF
bmQsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9B
bGxvY0ZpbGxBdEVuZDMyRm91clRpbWVzKQoreworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5k
LCAzMiwgMzIsIDMyLCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklG
T0FsbG9jRmlsbEF0RW5kUGFnZUxlc3MzMlRoZW4zMlRoZW5QYWdlTGVzczY0VGhlbjY0KQorewor
ICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkg
LSAzMiksIDMyLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgLSA2NCksIDY0LCAwKTsKK30K
KworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZpbGwzMlR3aWNlKQor
eworICAgIHRlc3RGSUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDApOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0VhZ2VyRmlsbDMyVGhyaWNlKQoreworICAgIHRl
c3RGSUZPQWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFB
bGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZpbGwzMkZvdXJUaW1lcykKK3sKKyAgICB0ZXN0
RklGT0FsbG9jKEVhZ2VyRmlsbCwgMzIsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0VhZ2VyRmlsbFBhZ2VMZXNzMzJUaGVuMzJUaGVuUGFn
ZUxlc3M2NFRoZW42NCkKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgc3RhdGljX2Nh
c3Q8aW50PihwYWdlU2l6ZSgpIC0gMzIpLCAzMiwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgp
IC0gNjQpLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXAz
MikKK3sKKyAgICB0ZXN0RmlsbEhlYXAoMzIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXpl
KCkgLyAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXBQYWdlKQor
eworICAgIHRlc3RGaWxsSGVhcChwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXApOworfQor
CitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZpbGxIZWFwVHdvUGFnZXMpCit7CisgICAgdGVz
dEZpbGxIZWFwKHBhZ2VTaXplKCkgKiAyLCBkZWZhdWx0UGFnZXNJbkhlYXAgLyAyKTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSaWdodEFsbG9jYXRpb24zMlRoZW5QYWdlVGhlbjMy
VGhlblBhZ2UpCit7CisgICAgdGVzdFJpZ2h0QWxsb2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIs
IHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJpZ2h0QWxsb2Nh
dGlvblF1YXJ0ZXJQYWdlVGhlblBhZ2VUaGVuUXVhcnRlclBhZ2VUaGVuUGFnZSkKK3sKKyAgICB0
ZXN0UmlnaHRBbGxvY2F0aW9uKHBhZ2VTaXplKCkgLyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgp
IC8gNCwgcGFnZVNpemUoKSk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZp
dDY0UGx1czY0VGhyaWNlKQoreworICAgIHRlc3RCZXN0Rml0KDY0LCA2NCwgMywgUnVuU2FuaXR5
Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NFRl
blRpbWVzKQoreworICAgIHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVj
ayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1czY0SHVuZHJl
ZFRpbWVzKQoreworICAgIHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hl
Y2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM2NFRocmlj
ZSkKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKwor
VEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzNjRUZW5UaW1lcykKK3sKKyAg
ICB0ZXN0QmVzdEZpdCg5NiwgNjQsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM2NEh1bmRyZWRUaW1lcykKK3sKKyAg
ICB0ZXN0QmVzdEZpdCg5NiwgNjQsIDEwMCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVT
VF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzOTZUaHJpY2UpCit7CisgICAgdGVz
dEJlc3RGaXQoOTYsIDk2LCAzLCBSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgQmVzdEZpdDk2UGx1czk2VGVuVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQo
OTYsIDk2LCAxMCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBCZXN0Rml0OTZQbHVzOTZFaWdodHlUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5
NiwgOTYsIDgwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIFNocmluazY0VG8zMikKK3sKKyAgICB0ZXN0U2hyaW5rKDY0LCAzMik7Cit9CisKK1RF
U1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rUGFnZVRvMzIpCit7CisgICAgdGVzdFNocmlu
ayhwYWdlU2l6ZSgpLCAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5r
UGFnZVRvUGFnZUxlc3MzMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCksIHBhZ2VTaXpl
KCkgLSAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNU
bzMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIDMyKTsKK30KKworVEVTVF9G
KE1ldGFBbGxvY2F0b3JUZXN0LCBTaHJpbmtUd29QYWdlc1RvUGFnZVBsdXMzMikKK3sKKyAgICB0
ZXN0U2hyaW5rKHBhZ2VTaXplKCkgKiAyLCBwYWdlU2l6ZSgpICsgMzIpOworfQorCitURVNUX0Yo
TWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3b1BhZ2VzVG9QYWdlKQoreworICAgIHRlc3RTaHJp
bmsocGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIFNocmlua1R3b1BhZ2VzVG9QYWdlTGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFn
ZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgLSAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9y
VGVzdCwgU2hyaW5rVHdvUGFnZXNUb1R3b1BhZ2VzTGVzczMyKQoreworICAgIHRlc3RTaHJpbmso
cGFnZVNpemUoKSAqIDIsIHBhZ2VTaXplKCkgKiAyIC0gMzIpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIERlbWFuZEFsbG9jQ29hbGVzY2VQYWdlVGhlbkRvdWJsZUhlYXApCit7Cisg
ICAgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFw
LCBkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBEZW1hbmRBbGxvY0NvYWxlc2NlUGFnZVRoZW5UcmlwbGVIZWFwKQoreworICAg
IHRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCAq
IDIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIERlbWFuZEFsbG9jRG9udENvYWxlc2NlUGFnZVRoZW5Eb3VibGVIZWFwKQor
eworICAgIHRlc3REZW1hbmRBbGxvY0RvbnRDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFn
ZXNJbkhlYXAsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9SZWRCbGFja1RyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMw
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCitu
YW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2NsYXNzIFJlZEJsYWNrVHJlZVRlc3Q6IHB1Ymxp
YyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBtX2NvdW50ZXI7CisgICAg
CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIG1fY291bnRlciA9IDA7
CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBzdHJ1Y3QgUGFpciB7CisgICAgICAgIGNoYXIga2V5OworICAgICAgICB1bnNp
Z25lZCB2YWx1ZTsKKyAgICAgICAgCisgICAgICAgIFBhaXIoKSB7IH0KKyAgICAgICAgCisgICAg
ICAgIFBhaXIoY2hhciBrZXksIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5
KQorICAgICAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBrZXkgPT0gb3RoZXIua2V5OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQYWlyJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGtleSA8IG90aGVyLmtleTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgCisgICAgdHlwZWRlZiBWZWN0b3I8UGFpciwgMTY+IFBhaXJWZWN0
b3I7CisgICAgCisgICAgUGFpclZlY3RvciBmaW5kRXhhY3QoUGFpclZlY3RvciYgYXNWZWN0b3Is
IGNoYXIga2V5KQorICAgIHsKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA9PSBrZXkp
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChhc1ZlY3Rvci5hdChpbmRleCkpOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBzdGQ6OnNvcnQocmVzdWx0LmJlZ2luKCksIHJlc3Vs
dC5lbmQoKSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB2b2lkIHJlbW92ZShQYWlyVmVjdG9yJiBhc1ZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgYXNWZWN0b3IuYXQoaW5kZXgpID0gYXNWZWN0b3IubGFzdCgpOworICAgICAg
ICBhc1ZlY3Rvci5yZW1vdmVMYXN0KCk7CisgICAgfQorICAgIAorICAgIFBhaXJWZWN0b3IgZmlu
ZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkK
KyAgICB7CisgICAgICAgIGNoYXIgYmVzdEtleSA9IDA7IC8vIGFzc2lnbm1lbnQgdG8gbWFrZSBn
Y2MgaGFwcHkKKyAgICAgICAgYm9vbCBmb3VuZEtleSA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRl
eCkgeworICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPj0ga2V5KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPCBiZXN0S2V5IHx8ICFm
b3VuZEtleSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZEtleSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgICAgIGJlc3RLZXkgPSBhc1ZlY3Rvci5hdChpbmRleCkua2V5OworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGFp
clZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kS2V5KQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmaW5kRXhhY3Qo
YXNWZWN0b3IsIGJlc3RLZXkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydEZvdW5kQW5k
UmVtb3ZlKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisg
ICAgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgc2l6ZV90
IGZvdW5kSW5kZXggPSAwOyAvLyBtYWtlIGNvbXBpbGVycyBoYXBweQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgp
OyArK2luZGV4KSB7CisgICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkg
PT0ga2V5CisgICAgICAgICAgICAgICAgICAgICYmIGFzVmVjdG9yLmF0KGluZGV4KS52YWx1ZSA9
PSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghZm91bmQpOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShmb3Vu
ZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJlbW92ZShhc1ZlY3RvciwgZm91bmRJbmRl
eCk7CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IHBhc3NlcyBhIGNvcHkg
b2YgdGhlIHZlY3Rvci4KKyAgICB2b2lkIGFzc2VydEVxdWFsKFJlZEJsYWNrVHJlZTxjaGFyLCB1
bnNpZ25lZD4mIGFzVHJlZSwgUGFpclZlY3RvciBhc1ZlY3RvcikKKyAgICB7CisgICAgICAgIGZv
ciAoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogY3VycmVudCA9IGFzVHJlZS5m
aXJzdCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c3VjY2Vzc29yKCkpCisgICAgICAg
ICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3RvciwgY3VycmVudC0+bV9rZXksIGN1cnJl
bnQtPm1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydFNhbWVWYWx1ZXNGb3JL
ZXkoUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBSZWRCbGFja1RyZWU8Y2hh
ciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlLCBQYWlyVmVjdG9yIGZvdW5kVmFsdWVzLCBjaGFyIGtl
eSkKKyAgICB7CisgICAgICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEobm9k
ZS0+bV9rZXksIGtleSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxj
aGFyLCB1bnNpZ25lZD46Ok5vZGUqIHByZXZOb2RlID0gbm9kZTsKKyAgICAgICAgICAgIGRvIHsK
KyAgICAgICAgICAgICAgICBub2RlID0gcHJldk5vZGU7CisgICAgICAgICAgICAgICAgcHJldk5v
ZGUgPSBwcmV2Tm9kZS0+cHJlZGVjZXNzb3IoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHByZXZO
b2RlICYmIHByZXZOb2RlLT5tX2tleSA9PSBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBFWFBFQ1RfRVEobm9kZS0+bV9rZXksIGtleSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSgh
cHJldk5vZGUgfHwgcHJldk5vZGUtPm1fa2V5IDwga2V5KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZG8geworICAgICAgICAgICAgICAgIGFzc2VydEZvdW5kQW5kUmVtb3ZlKGZvdW5kVmFs
dWVzLCBub2RlLT5tX2tleSwgbm9kZS0+bV92YWx1ZSk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbm9kZSA9IG5vZGUtPnN1Y2Nlc3NvcigpOworICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKCFub2RlIHx8IG5vZGUtPm1fa2V5ID49IGtleSk7CisgICAgICAgICAgICB9IHdo
aWxlIChub2RlICYmIG5vZGUtPm1fa2V5ID09IGtleSk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEVYUEVDVF9UUlVFKGZvdW5kVmFsdWVzLmlzRW1wdHkoKSk7CisgICAgfQorICAgIAor
ICAgIC8vIFRoZSBjb250cm9sIHN0cmluZyBpcyBhIG51bGwtdGVybWluYXRlZCBsaXN0IG9mIGNv
bW1hbmRzLiBFYWNoCisgICAgLy8gY29tbWFuZCBpcyB0d28gY2hhcmFjdGVycywgd2l0aCB0aGUg
Zmlyc3QgaWRlbnRpZnlpbmcgdGhlIG9wZXJhdGlvbgorICAgIC8vIGFuZCB0aGUgc2Vjb25kIGdp
dmluZyBhIGtleS4gVGhlIGNvbW1hbmRzIGFyZToKKyAgICAvLyAgK3ggIEFkZCB4CisgICAgLy8g
ICp4ICBGaW5kIGFsbCBlbGVtZW50cyBlcXVhbCB0byB4CisgICAgLy8gIEB4ICBGaW5kIGFsbCBl
bGVtZW50cyB0aGF0IGhhdmUgdGhlIHNtYWxsZXN0IGtleSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBv
ciBlcXVhbCB0byB4CisgICAgLy8gICF4ICBSZW1vdmUgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgK
KyAgICB2b2lkIHRlc3REcml2ZXIoY29uc3QgY2hhciogY29udHJvbFN0cmluZykKKyAgICB7Cisg
ICAgICAgIFBhaXJWZWN0b3IgYXNWZWN0b3I7CisgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1
bnNpZ25lZD4gYXNUcmVlOworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBjaGFyKiBjdXJy
ZW50ID0gY29udHJvbFN0cmluZzsgKmN1cnJlbnQ7IGN1cnJlbnQgKz0gMikgeworICAgICAgICAg
ICAgY2hhciBjb21tYW5kID0gY3VycmVudFswXTsKKyAgICAgICAgICAgIGNoYXIga2V5ID0gY3Vy
cmVudFsxXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKyttX2NvdW50ZXI7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChjb21tYW5kKTsKKyAgICAgICAgICAgIEFTU0VS
VChrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAg
ICAgICAgICAgIGNhc2UgJysnOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIs
IHVuc2lnbmVkPjo6Tm9kZSogbm9kZSA9IG5ldyBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+
OjpOb2RlKGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGFzVHJlZS5pbnNlcnQobm9kZSk7
CisgICAgICAgICAgICAgICAgYXNWZWN0b3IuYXBwZW5kKFBhaXIoa2V5LCB2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSAnKic6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwg
dW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRFeGFjdChrZXkpOworICAgICAgICAg
ICAgICAgIGlmIChub2RlKQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+bV9r
ZXksIGtleSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUs
IG5vZGUsIGZpbmRFeGFjdChhc1ZlY3Rvciwga2V5KSwga2V5KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSAnQCc6IHsKKyAgICAgICAg
ICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVl
LmZpbmRMZWFzdEdyZWF0ZXJUaGFuT3JFcXVhbChrZXkpOworICAgICAgICAgICAgICAgIGlmIChu
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5vZGUtPm1fa2V5ID49IGtl
eSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVlLCBu
b2RlLCBmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwoYXNWZWN0b3IsIGtleSksIG5vZGUtPm1f
a2V5KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNU
X1RSVUUoZmluZExlYXN0R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9yLCBrZXkpLmlzRW1wdHko
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlICchJzogeworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5v
ZGUqIG5vZGUgPSBhc1RyZWUucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChu
b2RlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+bV9rZXksIGtl
eSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3Rv
ciwgbm9kZS0+bV9rZXksIG5vZGUtPm1fdmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoZmluZEV4YWN0KGFzVmVj
dG9yLCBrZXkpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVD
VF9FUShhc1RyZWUuc2l6ZSgpLCBhc1ZlY3Rvci5zaXplKCkpOworICAgICAgICAgICAgYXNzZXJ0
RXF1YWwoYXNUcmVlLCBhc1ZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9Cit9OworCitURVNUX0Yo
UmVkQmxhY2tUcmVlVGVzdCwgRW1wdHkpCit7CisgICAgdGVzdERyaXZlcigiIik7Cit9CisKK1RF
U1RfRihSZWRCbGFja1RyZWVUZXN0LCBFbXB0eUdldEZpbmRSZW1vdmUpCit7CisgICAgdGVzdERy
aXZlcigiKnhAeSF6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBTaW5nbGVBZGQp
Cit7CisgICAgdGVzdERyaXZlcigiK2EiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3Qs
IFNpbmdsZUFkZEdldEZpbmRSZW1vdmVOb3RGb3VuZCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSp4
QHkheiIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgU2luZ2xlQWRkR2V0RmluZFJl
bW92ZSkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSphQGEhYSIpOworfQorCitURVNUX0YoUmVkQmxh
Y2tUcmVlVGVzdCwgVHdvQWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiIik7Cit9CisKK1RF
U1RfRihSZWRCbGFja1RyZWVUZXN0LCBUaHJlZUFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2Er
YitjIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBGb3VyQWRkcykKK3sKKyAgICB0
ZXN0RHJpdmVyKCIrYStiK2MrZCIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgTG90
c09mUmVwZWF0QWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIExvdHNP
ZlJlcGVhdEFuZFVuaXF1ZUFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytk
K2ErYitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3Qr
dSt2K3greSt6Iik7Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBMb3RzT2ZSZXBlYXRB
bmRVbmlxdWVBZGRzQW5kR2V0c0FuZFJlbW92ZXMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24rbytw
K3ErcitzK3QrdSt2K3greSt6KmEqYipjKmQqZSpmKmcqaCppKmoqaypsKm0qbipvKnAqcSpyKnMq
dCp1KnYqdyp4KnkqeiFhIWIhYyFkIWUhZiFnIWghaSFqIWshbCFtIW4hbyFwIXEhciFzIXQhdSF2
IXcheCF5IXoiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFNpbXBsZUJlc3RGaXRT
ZWFyY2gpCit7CisgICAgdGVzdERyaXZlcigiK2QrZCttK3dAZEBtQHdAYUBnQHEiKTsKK30KKwor
VEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIEJpZ2dlckJlc3RGaXRTZWFyY2gpCit7CisgICAgdGVz
dERyaXZlcigiK2QrZCtkK2QrZCtkK2QrZCtkK2QrZitmK2YrZitmK2YrZitoK2graStqK2srbCtt
K28rcCtxK3IrekBhQGJAY0BkQGVAZkBnQGhAaUBqQGtAbEBtQG5Ab0BwQHFAckBzQHRAdUB2QHdA
eEB5QHoiKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106843</attachid>
            <date>2011-09-08 23:13:58 -0700</date>
            <delta_ts>2011-09-10 22:37:21 -0700</delta_ts>
            <desc>the patch - fix style</desc>
            <filename>metaalloc_patch_28.diff</filename>
            <type>text/plain</type>
            <size>227402</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MzUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAxIEBA
CisyMDExLTA5LTA4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
VGhlIGV4ZWN1dGFibGUgYWxsb2NhdG9yIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBmcmVlIGluZGl2
aWR1YWwKKyAgICAgICAgY2h1bmtzIG9mIGV4ZWN1dGFibGUgbWVtb3J5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM2MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgSW50cm9kdWNlZCBhIGJl
c3QtZml0LCBiYWxhbmNlZC10cmVlIGJhc2VkIGFsbG9jYXRvci4gVGhlIGFsbG9jYXRvcgorICAg
ICAgICByZXF1aXJlZCBhIGJhbGFuY2VkIHRyZWUgdGhhdCBkb2VzIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgYW5kIHRoYXQKKyAgICAgICAgcGVybWl0cyB0aGUgcmVtb3ZhbCBvZiBpbmRpdmlkdWFsIG5v
ZGVzIGRpcmVjdGx5IChhcyBvcHBvc2VkIHRvIGJ5CisgICAgICAgIGtleSk7IG5laXRoZXIgQVZM
VHJlZSBub3IgV2ViQ29yZSdzIFBPRFJlZEJsYWNrVHJlZSBzdXBwb3J0ZWQgdGhpcy4KKyAgICAg
ICAgQ2hhbmdlZCBhbGwgcmVmZXJlbmNlcyB0byBleGVjdXRhYmxlIGNvZGUgdG8gdXNlIGEgcmVm
ZXJlbmNlIGNvdW50ZWQKKyAgICAgICAgaGFuZGxlLgorCisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5leHA6CisgICAgICAgICogSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpMaW5rQnVmZmVyKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6ZmluYWxpemVD
b2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6bGlua0NvZGUpOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmOjpNYWNyb0Fzc2VtYmxlckNvZGVSZWYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZik6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6ZXhlY3V0YWJsZU1lbW9yeSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y29kZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQ29kZVJlZjo6c2l6ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQ29kZVJl
Zjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAg
ICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6Olg4Nkluc3RydWN0aW9uRm9ybWF0dGVyOjpleGVjdXRhYmxlQ29weSk6Cisg
ICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb24uaDoKKyAgICAgICAgKiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAg
ICAqIGRmZy9ERkdKSVRDb21waWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGls
ZXI6OmNvbXBpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpjb21waWxlRnVu
Y3Rpb24pOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNoLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlD
YWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgor
ICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChK
U0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAgICAgICAgKiBqaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHA6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmluaXRpYWxpemVB
bGxvY2F0b3IpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpFeGVjdXRhYmxl
QWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUp
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQp
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAg
ICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yRml4ZWRWTVBvb2wuY3BwOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpp
bml0aWFsaXplQWxsb2NhdG9yKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6
RXhlY3V0YWJsZUFsbG9jYXRvcik6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9y
eVByZXNzdXJlKToKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUp
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQp
OgorICAgICAgICAoSlNDOjpFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSk6CisgICAg
ICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgor
ICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTWFjaGlu
ZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ1RJTmF0aXZlQ2FsbCk6
CisgICAgICAgICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6b3BlcmF0
b3IgISk6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmFkZHJlc3NGb3JDYWxsKToKKyAgICAgICAg
KEpTQzo6SklUQ29kZTo6b2Zmc2V0T2YpOgorICAgICAgICAoSlNDOjpKSVRDb2RlOjpleGVjdXRl
KToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6c3RhcnQpOgorICAgICAgICAoSlNDOjpKSVRDb2Rl
OjpzaXplKToKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6Z2V0RXhlY3V0YWJsZU1lbW9yeSk6Cisg
ICAgICAgIChKU0M6OkpJVENvZGU6Okhvc3RGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpJVENv
ZGU6OkpJVENvZGUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklU
T3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0
ZUNvbXBpbGVQdXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNv
bXBpbGVQYXRjaEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29t
cGlsZUdldEJ5SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRC
eUlkU2VsZkxpc3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFBy
b3RvTGlzdCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5M
aXN0KToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6Cisg
ICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpK
SVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQ
dXRCeUlkVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRj
aEdldEFycmF5TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5
SWRQcm90byk6CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2VsZkxp
c3QpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdCk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KToKKyAg
ICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbik6CisgICAgICAgICog
aml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUVGh1bmtzOjpKSVRUaHVua3MpOgor
ICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgIChKU0M6OmdldFBv
bHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFNsb3QpOgorICAgICAgICAoSlNDOjpKSVRUaHVu
a3M6OmN0aVN0dWIpOgorICAgICAgICAoSlNDOjpKSVRUaHVua3M6Omhvc3RGdW5jdGlvblN0dWIp
OgorICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAqIGppdC9TcGVjaWFsaXplZFRo
dW5rSklULmg6CisgICAgICAgIChKU0M6OlNwZWNpYWxpemVkVGh1bmtKSVQ6OlNwZWNpYWxpemVk
VGh1bmtKSVQpOgorICAgICAgICAoSlNDOjpTcGVjaWFsaXplZFRodW5rSklUOjpmaW5hbGl6ZSk6
CisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmNoYXJD
b2RlQXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmNoYXJBdFRodW5rR2VuZXJhdG9y
KToKKyAgICAgICAgKEpTQzo6ZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAo
SlNDOjpzcXJ0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpmbG9vclRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6Y2VpbFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6
cm91bmRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmV4cFRodW5rR2VuZXJhdG9yKToK
KyAgICAgICAgKEpTQzo6bG9nVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjphYnNUaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OnBvd1RodW5rR2VuZXJhdG9yKToKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6
CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZ09uY2UpOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAgICAoSlNDOjpKU0ds
b2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5oOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmdldENUSVN0dWIpOgorICAgICAgICAq
IHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiB3dGYvTWV0YUFsbG9jYXRvci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9ySGFu
ZGxlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JI
YW5kbGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxlOjpzaHJpbmspOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpNZXRhQWxsb2NhdG9yKToKKyAgICAgICAgKFdURjo6
TWV0YUFsbG9jYXRvcjo6YWxsb2NhdGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpj
dXJyZW50U3RhdGlzdGljcyk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmZpbmRBbmRS
ZW1vdmVGcmVlU3BhY2UpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3Bh
Y2VGcm9tUmVsZWFzZWRIYW5kbGUpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjphZGRG
cmVzaEZyZWVTcGFjZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmRlYnVnRnJlZVNw
YWNlU2l6ZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmFkZEZyZWVTcGFjZSk6Cisg
ICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmluY3JlbWVudFBhZ2VPY2N1cGFuY3kpOgorICAg
ICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KToKKyAgICAg
ICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6cm91bmRVcCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxv
Y2F0b3I6OmFsbG9jRnJlZVNwYWNlTm9kZSk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6
OmZyZWVGcmVlU3BhY2VOb2RlKToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6ZHVtcFBy
b2ZpbGUpOgorICAgICAgICAqIHd0Zi9NZXRhQWxsb2NhdG9yLmg6IEFkZGVkLgorICAgICAgICAo
V1RGOjpNZXRhQWxsb2NhdG9yOjpieXRlc0FsbG9jYXRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFB
bGxvY2F0b3I6OmJ5dGVzUmVzZXJ2ZWQpOgorICAgICAgICAoV1RGOjpNZXRhQWxsb2NhdG9yOjpi
eXRlc0NvbW1pdHRlZCk6CisgICAgICAgIChXVEY6Ok1ldGFBbGxvY2F0b3I6OmR1bXBQcm9maWxl
KToKKyAgICAgICAgKFdURjo6TWV0YUFsbG9jYXRvcjo6fk1ldGFBbGxvY2F0b3IpOgorICAgICAg
ICAqIHd0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6IEFkZGVkLgorICAgICAgICAqIHd0Zi9SZWRC
bGFja1RyZWUuaDogQWRkZWQuCisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6Tm9k
ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6c3VjY2Vzc29yKToKKyAgICAg
ICAgKFdURjo6UmVkQmxhY2tUcmVlOjpOb2RlOjpwcmVkZWNlc3Nvcik6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6Tm9kZTo6cmVzZXQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6
Ok5vZGU6OnBhcmVudCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6c2V0UGFy
ZW50KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpOb2RlOjpsZWZ0KToKKyAgICAgICAg
KFdURjo6UmVkQmxhY2tUcmVlOjpOb2RlOjpzZXRMZWZ0KToKKyAgICAgICAgKFdURjo6UmVkQmxh
Y2tUcmVlOjpOb2RlOjpyaWdodCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6Tm9kZTo6
c2V0UmlnaHQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Ok5vZGU6OmNvbG9yKToKKyAg
ICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjpOb2RlOjpzZXRDb2xvcik6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6UmVkQmxhY2tUcmVlKToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVl
OjppbnNlcnQpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZSk6CisgICAgICAg
IChXVEY6OlJlZEJsYWNrVHJlZTo6ZmluZEV4YWN0KToKKyAgICAgICAgKFdURjo6UmVkQmxhY2tU
cmVlOjpmaW5kTGVhc3RHcmVhdGVyVGhhbk9yRXF1YWwpOgorICAgICAgICAoV1RGOjpSZWRCbGFj
a1RyZWU6OmZpbmRHcmVhdGVzdExlc3NUaGFuT3JFcXVhbCk6CisgICAgICAgIChXVEY6OlJlZEJs
YWNrVHJlZTo6Zmlyc3QpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6Omxhc3QpOgorICAg
ICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnNpemUpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1Ry
ZWU6OmlzRW1wdHkpOgorICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnRyZWVNaW5pbXVtKToK
KyAgICAgICAgKFdURjo6UmVkQmxhY2tUcmVlOjp0cmVlTWF4aW11bSk6CisgICAgICAgIChXVEY6
OlJlZEJsYWNrVHJlZTo6dHJlZUluc2VydCk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6
bGVmdFJvdGF0ZSk6CisgICAgICAgIChXVEY6OlJlZEJsYWNrVHJlZTo6cmlnaHRSb3RhdGUpOgor
ICAgICAgICAoV1RGOjpSZWRCbGFja1RyZWU6OnJlbW92ZUZpeHVwKToKKyAgICAgICAgKiB3dGYv
d3RmLnByaToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJy
OjpZYXJyR2VuZXJhdG9yOjpjb21waWxlKToKKyAgICAgICAgKiB5YXJyL1lhcnJKSVQuaDoKKyAg
ICAgICAgKEpTQzo6WWFycjo6WWFyckNvZGVCbG9jazo6ZXhlY3V0ZSk6CisgICAgICAgIChKU0M6
OllhcnI6OllhcnJDb2RlQmxvY2s6OmdldEFkZHIpOgorCiAyMDExLTA5LTA4ICBNYXJrIEhhaG5l
bmJlcmcgIDxtaGFobmVuYmVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyOTQ4
MTEpOiBBc3NlcnRpb24gZmFpbHVyZSBpbiAyIHdvcmtlciB0ZXN0cwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDk0ODMxKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29weSkKQEAg
LTUyOSw2ICs1MjksOSBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd3RmL01hdGhFeHRyYXMuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9NRDUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ENS5oIFwKKwlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvd3RmL01ldGFBbGxvY2F0b3IuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9N
ZXRhQWxsb2NhdG9ySGFuZGxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWVzc2Fn
ZVF1ZXVlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTm9uQ29weWluZ1NvcnQuaCBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9Ob25jb3B5YWJsZS5oIFwKQEAgLTU2MSw2ICs1
NjQsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JhbmRvbU51bWJlci5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFu
ZG9tTnVtYmVyLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmFuZG9tTnVtYmVyU2Vl
ZC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJsYWNrVHJlZS5oIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZkNvdW50ZWQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRD
b3JlL3d0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvd3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC00MDIsNiArNDAy
LDExIEBAIF9fWk4zV1RGMTJjcmVhdGVUaHJlYWRFUEZQdlMwX0VTMF9QS2MKIF9fWk4zV1RGMTJk
ZXRhY2hUaHJlYWRFagogX19aTjNXVEYxMmlzTWFpblRocmVhZEV2CiBfX1pOM1dURjEycmFuZG9t
TnVtYmVyRXYKK19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdhZGRGcmVzaEZyZWVTcGFjZUVQdm0K
K19fWk4zV1RGMTNNZXRhQWxsb2NhdG9yMTdmcmVlRnJlZVNwYWNlTm9kZUVQTlNfMTJSZWRCbGFj
a1RyZWVJbVB2RTROb2RlRQorX19aTjNXVEYxM01ldGFBbGxvY2F0b3IxOGRlYnVnRnJlZVNwYWNl
U2l6ZUV2CitfX1pOM1dURjEzTWV0YUFsbG9jYXRvcjhhbGxvY2F0ZUVtCitfX1pOM1dURjEzTWV0
YUFsbG9jYXRvckMyRW0KIF9fWk4zV1RGMTNTdHJpbmdCdWlsZGVyMTFyZWlmeVN0cmluZ0V2CiBf
X1pOM1dURjEzU3RyaW5nQnVpbGRlcjExc2hyaW5rVG9GaXRFdgogX19aTjNXVEYxM1N0cmluZ0J1
aWxkZXIxNXJlc2VydmVDYXBhY2l0eUVqCkBAIC00MzYsNiArNDQxLDggQEAgX19aTjNXVEYxOGNh
bGN1bGF0ZVVUQ09mZnNldEV2CiBfX1pOM1dURjE4Y2hhcmFjdGVyc1RvRG91YmxlRVBLdG1QYlMy
XwogX19aTjNXVEYxOGRhdGVUb0RheXNGcm9tMTk3MEVpaWkKIF9fWk4zV1RGMThtb250aEZyb21E
YXlJblllYXJFaWIKK19fWk4zV1RGMTlNZXRhQWxsb2NhdG9ySGFuZGxlNnNocmlua0VtCitfX1pO
M1dURjE5TWV0YUFsbG9jYXRvckhhbmRsZUQxRXYKIF9fWk4zV1RGMTlpbml0aWFsaXplVGhyZWFk
aW5nRXYKIF9fWk4zV1RGMjBlcXVhbElnbm9yaW5nTnVsbGl0eUVQTlNfMTBTdHJpbmdJbXBsRVMx
XwogX19aTjNXVEYyMGZhc3RNYWxsb2NTdGF0aXN0aWNzRXYKQEAgLTUxNiw2ICs1MjMsNyBAQCBf
X1pOM1dURjhJbnRlcm5hbDIxZmFzdE1hbGxvY01hdGNoRmFpbGVkCiBfX1pOM1dURjhmYXN0RnJl
ZUVQdgogX19aTjNXVEY4bXNUb1llYXJFZAogX19aTjNXVEY4bnVsbEF0b21FCitfX1pOM1dURjhw
YWdlU2l6ZUV2CiBfX1pOM1dURjhzdGFyQXRvbUUKIF9fWk4zV1RGOHRleHRBdG9tRQogX19aTjNX
VEY5Qnl0ZUFycmF5NmNyZWF0ZUVtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmNwcm9qL1dURi9XVEYudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovV1RGL1dURi52Y3Byb2oJKHJldmlzaW9u
IDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9X
VEYvV1RGLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtODM3LDYgKzgzNywxOCBAQAogCQkJPgog
CQk8L0ZpbGU+CiAJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2Nh
dG9yLmNwcCIKKwkJCT4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwu
Llx3dGZcTWV0YUFsbG9jYXRvci5oIgorCQkJPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHd0ZlxNZXRhQWxsb2NhdG9ySGFuZGxlLmgiCisJCQk+CisJCTwvRmls
ZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXE1ENS5jcHAiCiAJCQk+CiAJ
CTwvRmlsZT4KQEAgLTk3Nyw2ICs5ODksMTAgQEAKIAkJCT4KIAkJPC9GaWxlPgogCQk8RmlsZQor
CQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx3dGZcUmVkQmxhY2tUcmVlLmgiCisJCQk+CisJCTwvRmls
ZT4KKwkJPEZpbGUKIAkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cd3RmXFJlZkNvdW50ZWQuaCIKIAkJ
CT4KIAkJPC9GaWxlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDEwIEBACiAJCTBC
RjI4QTI5MTFBMzNEQzMwMDYzOEY4NCAvKiBTaXplTGltaXRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBCRjI4QTI4MTFBMzNEQzMwMDYzOEY4NCAv
KiBTaXplTGltaXRzLmNwcCAqLzsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8qIFdl
YWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFy
dmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY3NzAwOTIxNDAyRkYzQzAwNzhFQjM5IC8qIFNhbXBsaW5nQ291bnRlci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjc3MDA5MTE0MDJGRjI4
MDA3OEVCMzkgLyogU2FtcGxpbmdDb3VudGVyLmNwcCAqLzsgfTsKKwkJMEY5NjNCMjcxM0Y3NTNC
QjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNrVHJl
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBG
OTYzQjJDMTNGODUzRUMwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJCMTNGODUzQzcwMDAyRDlC
MiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLzsgc2V0dGluZ3MgPSB7Q09NUElMRVJfRkxBR1MgPSAi
LWZuby1zdHJpY3QtYWxpYXNpbmciOyB9OyB9OworCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIg
LyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjk2M0IyRjEz
RkM2NkJCMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8q
IE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0Iz
NjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDODE1MEExNDA0M0JGNTAwQ0ZBNjAzIC8q
IFdyaXRlQmFycmllclN1cHBvcnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzgxNTA5MTQwNDNCRDIwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBw
b3J0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDODE1MDgxNDA0M0JD
QTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwICovOyB9OwpAQCAtNTU4LDcgKzU2
Miw3IEBACiAJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTRBMzk2QTYwQ0QyOTMz
MTAwQjVCNEZGIC8qIFN5bWJvbFRhYmxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NkMwRTE2RjVDRDAwQjM0NDYwIC8qIFRDUGFja2Vk
Q2FjaGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDVE
QTQ3OTY1MENGQkNGNTYwMDkzMjhBMCAvKiBUQ1BhY2tlZENhY2hlLmggKi87IH07CiAJCUJDMThD
NDZEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1BhZ2VNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZFMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1Bh
Z2VNYXAuaCAqLzsgfTsKLQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRDU3BpbkxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NDFCRDZG
MDhFODBBMTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2NrLmggKi87IH07CisJCUJDMThDNDZFMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBUQ1NwaW5Mb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ2RjA4RTgwQTE3MDAyQ0JFRTcgLyogVENTcGluTG9jay5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMThD
NDZGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTQxQkQ3MTA4RTgwQTE3MDAyQ0JFRTcgLyog
VENTeXN0ZW1BbGxvYy5oICovOyB9OwogCQlCQzE4QzQ3MDBFMTZGNUNEMDBCMzQ0NjAgLyogVGhy
ZWFkaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MUVFNzkyMjBENkM5NUNEMDBGRUEzQkEgLyogVGhyZWFkaW5nLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMxOEM0NzEwRTE2RjVDRDAwQjM0NDYw
IC8qIFRocmVhZFNwZWNpZmljLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMUI3QzhCRDBEQTNBMzM2MDA3NEIwREMgLyogVGhyZWFkU3BlY2lmaWMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzc4LDYg
Kzc4MiwxMCBAQAogCQkwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhh
cnZlc3Rlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNzcwMDhFMTQwMkZE
RDYwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNzcwMDkxMTQwMkZGMjgwMDc4RUIzOSAvKiBTYW1wbGluZ0NvdW50ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxpbmdDb3VudGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJs
YWNrVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWRCbGFja1RyZWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0
YUFsbG9jYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjk2M0IyQjEzRjg1
M0M3MDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0YUFsbG9jYXRvckhhbmRsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyog
VmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhbHVlUHJv
ZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM4MTUwODE0MDQzQkNBMDBD
RkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZDODE1MDkxNDA0M0JEMjAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBv
cnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV3JpdGVCYXJyaWVyU3VwcG9y
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2Myw2ICsxNzcxLDEwIEBACiAJ
CTY1MTYyRUYxMDhFNkEyMUMwMDc1NTZDRCAvKiB3dGYgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRh
QWxsb2NhdG9ySGFuZGxlLmggKi8sCisJCQkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1l
dGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRh
QWxsb2NhdG9yLmggKi8sCisJCQkJMEY5NjNCMjYxM0Y3NTM5OTAwMDJEOUIyIC8qIFJlZEJsYWNr
VHJlZS5oICovLAogCQkJCUMyRUU1OTlEMTNGQzk3MkEwMDlDRUFGRSAvKiBEZWNpbWFsTnVtYmVy
LmNwcCAqLywKIAkJCQlDMkVFNTk5RTEzRkM5NzJBMDA5Q0VBRkUgLyogRGVjaW1hbE51bWJlci5o
ICovLAogCQkJCUMyMkM1MjQ4MTNGQUY2RUYwMEI3REMwRCAvKiBkdG9hICovLApAQCAtMjM4Myw2
ICsyMzk1LDEwIEBACiAJCQkJODZEM0IyQzQxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDUwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNjBFMTZGNUNEMDBCMzQ0NjAg
LyogQXJyYXlDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkMxOEM0NkUwRTE2RjVD
RDAwQjM0NDYwIC8qIFRDU3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGOTYzQjJGMTNG
QzY2QkIwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRvci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEY5NjNCMjcxM0Y3NTNCQjAwMDJEOUIyIC8qIFJlZEJsYWNrVHJlZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDODE1MTUxNDA1MTE5QjAwQ0ZBNjAzIC8qIFZUYWJsZVNwZWN0cnVt
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxp
bmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM4MTUwQTE0MDQzQkY1MDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjg2LDcgKzI3MDIs
NiBAQAogCQkJCUE3ODRBMjY0MTFEMTY2MjIwMDU3NzZBQyAvKiBTeW50YXhDaGVja2VyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2QzBFMTZGNUNEMDBCMzQ0NjAgLyogVENQYWNrZWRDYWNo
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NkQwRTE2RjVDRDAwQjM0NDYwIC8qIFRDUGFn
ZU1hcC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQkMxOEM0NkUwRTE2RjVDRDAwQjM0NDYwIC8qIFRD
U3BpbkxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDZGMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBUQ1N5c3RlbUFsbG9jLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzFFREVBNjExNjlFMEQzMDA1
RTQyNjIgLyogVGVybWluYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjNCRDMxRUQxMjY3MzU3
NzAwNjU0NjdGIC8qIFRleHRQb3NpdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDQ5LDYgKzMw
NjQsNyBAQAogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1h
c2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCisJCQkJMEY5NjNCMkMxM0Y4NTNFQzAwMDJE
OUIyIC8qIE1ldGFBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQzQzgyNTE0MTE1RDQwMDBGRDgxQ0IgLyogREZHUHJvcGFnYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3Vy
Y2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJC
dWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fz
c2VtYmxlckJ1ZmZlci5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDcgQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlICJKU0dsb2JhbERhdGEu
aCIKICNpbmNsdWRlICJzdGRpbnQuaCIKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxq
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgpAQCAtMTI4LDE5ICsxMjksMjEgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gQXNzZW1ibGVyTGFiZWwobV9pbmRleCk7CiAgICAg
ICAgIH0KIAotICAgICAgICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgICAgIFBhc3NSZWZQdHI8RXhl
Y3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhlY3V0YWJsZUNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1faW5kZXgpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICAgICAgICAgIHZvaWQqIHJlc3VsdCA9IGFsbG9jYXRvci0+YWxs
b2MoZ2xvYmFsRGF0YSwgbV9pbmRleCk7CisgICAgICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gcmVzdWx0ID0gZ2xvYmFsRGF0YS5leGVjdXRhYmxlQWxsb2NhdG9yLmFsbG9j
YXRlKGdsb2JhbERhdGEsIG1faW5kZXgpOwogCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRv
cjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgbV9pbmRleCk7CisgICAgICAgICAgICBFeGVjdXRhYmxl
QWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LT5zdGFydCgpLCByZXN1bHQtPnNpemVJbkJ5
dGVzKCkpOwogCi0gICAgICAgICAgICByZXR1cm4gbWVtY3B5KHJlc3VsdCwgbV9idWZmZXIsIG1f
aW5kZXgpOworICAgICAgICAgICAgbWVtY3B5KHJlc3VsdC0+c3RhcnQoKSwgbV9idWZmZXIsIG1f
aW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2Uo
KTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgcmV3aW5kVG9MYWJlbChBc3NlbWJsZXJMYWJl
bCBsYWJlbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02OSwyMiArNjksOCBAQCBjbGFzcyBM
aW5rQnVmZmVyIHsKICNlbmRpZgogCiBwdWJsaWM6Ci0gICAgTGlua0J1ZmZlcihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyKiBtYXNtLCBQYXNzUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiBleGVjdXRhYmxlUG9vbCkKLSAgICAgICAgOiBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1
dGFibGVQb29sKQotICAgICAgICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fY29kZSgwKQotICAg
ICAgICAsIG1fYXNzZW1ibGVyKG1hc20pCi0gICAgICAgICwgbV9nbG9iYWxEYXRhKCZnbG9iYWxE
YXRhKQotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLCBtX2NvbXBsZXRlZChmYWxzZSkKLSNlbmRp
ZgotICAgIHsKLSAgICAgICAgbGlua0NvZGUoKTsKLSAgICB9Ci0KLSAgICBMaW5rQnVmZmVyKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20sIEV4ZWN1dGFibGVB
bGxvY2F0b3ImIGFsbG9jYXRvcikKLSAgICAgICAgOiBtX2V4ZWN1dGFibGVQb29sKGFsbG9jYXRv
ci5wb29sRm9yU2l6ZShnbG9iYWxEYXRhLCBtYXNtLT5tX2Fzc2VtYmxlci5jb2RlU2l6ZSgpKSkK
LSAgICAgICAgLCBtX3NpemUoMCkKKyAgICBMaW5rQnVmZmVyKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgTWFjcm9Bc3NlbWJsZXIqIG1hc20pCisgICAgICAgIDogbV9zaXplKDApCiAgICAgICAg
ICwgbV9jb2RlKDApCiAgICAgICAgICwgbV9hc3NlbWJsZXIobWFzbSkKICAgICAgICAgLCBtX2ds
b2JhbERhdGEoJmdsb2JhbERhdGEpCkBAIC0xODUsMTQgKzE3MSw3IEBAIHB1YmxpYzoKICAgICB7
CiAgICAgICAgIHBlcmZvcm1GaW5hbGl6YXRpb24oKTsKIAotICAgICAgICByZXR1cm4gQ29kZVJl
ZihtX2NvZGUsIG1fZXhlY3V0YWJsZVBvb2wsIG1fc2l6ZSk7Ci0gICAgfQotCi0gICAgQ29kZUxv
Y2F0aW9uTGFiZWwgZmluYWxpemVDb2RlQWRkZW5kdW0oKQotICAgIHsKLSAgICAgICAgcGVyZm9y
bUZpbmFsaXphdGlvbigpOwotCi0gICAgICAgIHJldHVybiBDb2RlTG9jYXRpb25MYWJlbChjb2Rl
KCkpOworICAgICAgICByZXR1cm4gQ29kZVJlZihtX2V4ZWN1dGFibGVNZW1vcnkpOwogICAgIH0K
IAogICAgIENvZGVQdHIgdHJhbXBvbGluZUF0KExhYmVsIGxhYmVsKQpAQCAtMjMyLDE0ICsyMTEs
MTkgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVCghbV9jb2RlKTsKICNpZiAhRU5B
QkxFKEJSQU5DSF9DT01QQUNUSU9OKQotICAgICAgICBtX2NvZGUgPSBtX2Fzc2VtYmxlci0+bV9h
c3NlbWJsZXIuZXhlY3V0YWJsZUNvcHkoKm1fZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5n
ZXQoKSk7CisgICAgICAgIG1fZXhlY3V0YWJsZU1lbW9yeSA9IG1fYXNzZW1ibGVyLT5tX2Fzc2Vt
Ymxlci5leGVjdXRhYmxlQ29weSgqbV9nbG9iYWxEYXRhKTsKKyAgICAgICAgaWYgKCFtX2V4ZWN1
dGFibGVNZW1vcnkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fY29kZSA9IG1fZXhl
Y3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKICAgICAgICAgbV9zaXplID0gbV9hc3NlbWJsZXItPm1f
YXNzZW1ibGVyLmNvZGVTaXplKCk7CiAgICAgICAgIEFTU0VSVChtX2NvZGUpOwogI2Vsc2UKICAg
ICAgICAgc2l6ZV90IGluaXRpYWxTaXplID0gbV9hc3NlbWJsZXItPm1fYXNzZW1ibGVyLmNvZGVT
aXplKCk7Ci0gICAgICAgIG1fY29kZSA9ICh1aW50OF90KiltX2V4ZWN1dGFibGVQb29sLT5hbGxv
YygqbV9nbG9iYWxEYXRhLCBpbml0aWFsU2l6ZSk7Ci0gICAgICAgIGlmICghbV9jb2RlKQorICAg
ICAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0
b3IuYWxsb2NhdGUoKm1fZ2xvYmFsRGF0YSwgaW5pdGlhbFNpemUpOworICAgICAgICBpZiAoIW1f
ZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jb2RlID0g
KHVpbnQ4X3QqKW1fZXhlY3V0YWJsZU1lbW9yeS0+c3RhcnQoKTsKKyAgICAgICAgQVNTRVJUKG1f
Y29kZSk7CiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Om1ha2VXcml0YWJsZShtX2NvZGUs
IGluaXRpYWxTaXplKTsKICAgICAgICAgdWludDhfdCogaW5EYXRhID0gKHVpbnQ4X3QqKW1fYXNz
ZW1ibGVyLT51bmxpbmtlZENvZGUoKTsKICAgICAgICAgdWludDhfdCogb3V0RGF0YSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KG1fY29kZSk7CkBAIC0yOTcsNyArMjgxLDcgQEAgcHJpdmF0
ZToKIAogICAgICAgICBqdW1wc1RvTGluay5jbGVhcigpOwogICAgICAgICBtX3NpemUgPSB3cml0
ZVB0ciArIGluaXRpYWxTaXplIC0gcmVhZFB0cjsKLSAgICAgICAgbV9leGVjdXRhYmxlUG9vbC0+
dHJ5U2hyaW5rKG1fY29kZSwgaW5pdGlhbFNpemUsIG1fc2l6ZSk7CisgICAgICAgIG1fZXhlY3V0
YWJsZU1lbW9yeS0+c2hyaW5rKG1fc2l6ZSk7CiAKICNpZiBEVU1QX0xJTktfU1RBVElTVElDUwog
ICAgICAgICBkdW1wTGlua1N0YXRpc3RpY3MobV9jb2RlLCBpbml0aWFsU2l6ZSwgbV9zaXplKTsK
QEAgLTM2Niw3ICszNTAsNyBAQCBwcml2YXRlOgogICAgIH0KICNlbmRpZgogICAgIAotICAgIFJl
ZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9leGVjdXRhYmxlUG9vbDsKKyAgICBSZWZQdHI8RXhlY3V0
YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVtb3J5OwogICAgIHNpemVfdCBtX3NpemU7
CiAgICAgdm9pZCogbV9jb2RlOwogICAgIE1hY3JvQXNzZW1ibGVyKiBtX2Fzc2VtYmxlcjsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlckNvZGVSZWYuaAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTksMjIgKzE5OSw1OSBAQCBwcml2YXRlOgogLy8gcG9pbnRlciB0byB0aGUgY29kZSwgYW5kIGEg
cmVmIHBvaW50ZXIgdG8gdGhlIHBvb2wgZnJvbSB3aXRoaW4gd2hpY2ggaXQKIC8vIHdhcyBhbGxv
Y2F0ZWQuCiBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgeworcHJpdmF0ZToKKyAgICAvLyBU
aGlzIGlzIHByaXZhdGUgYmVjYXVzZSBpdCdzIGRhbmdlcm91cyBlbm91Z2ggdGhhdCB3ZSB3YW50
IHVzZXMgb2YgaXQKKyAgICAvLyB0byBiZSBlYXN5IHRvIGZpbmQgLSBoZW5jZSB0aGUgc3RhdGlj
IGNyZWF0ZSBtZXRob2QgYmVsb3cuCisgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
KE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQorICAgICAgICA6IG1fY29kZVB0cihjb2Rl
UHRyKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY29kZVB0cik7CisgICAgfQorCiBwdWJsaWM6
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkKLSAgICAgICAgOiBtX3NpemUoMCkKICAgICB7
CiAgICAgfQogCi0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKHZvaWQqIGNvZGUsIFBhc3NSZWZQ
dHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAg
OiBtX2NvZGUoY29kZSkKLSAgICAgICAgLCBtX2V4ZWN1dGFibGVQb29sKGV4ZWN1dGFibGVQb29s
KQotICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihQYXNz
UmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnkpCisgICAgICAg
IDogbV9jb2RlUHRyKGV4ZWN1dGFibGVNZW1vcnktPnN0YXJ0KCkpCisgICAgICAgICwgbV9leGVj
dXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVNZW1vcnkpCisgICAgeworICAgICAgICBBU1NFUlQobV9l
eGVjdXRhYmxlTWVtb3J5LT5pc01hbmFnZWQoKSk7CisgICAgICAgIEFTU0VSVChtX2V4ZWN1dGFi
bGVNZW1vcnktPnN0YXJ0KCkpOworICAgICAgICBBU1NFUlQobV9jb2RlUHRyKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gVXNlIHRoaXMgb25seSB3aGVuIHlvdSBrbm93IHRoYXQgdGhlIGNvZGVQdHIg
cmVmZXJzIHRvIGNvZGUgdGhhdCBpcworICAgIC8vIGFscmVhZHkgYmVpbmcga2VwdCBhbGl2ZSB0
aHJvdWdoIHNvbWUgb3RoZXIgbWVhbnMuIFR5cGljYWxseSB0aGlzIG1lYW5zCisgICAgLy8gdGhh
dCBjb2RlUHRyIGlzIGltbW9ydGFsLgorICAgIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZihjb2RlUHRyKTsKKyAg
ICB9CisgICAgCisgICAgRXhlY3V0YWJsZU1lbW9yeUhhbmRsZSogZXhlY3V0YWJsZU1lbW9yeSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5LmdldCgpOwor
ICAgIH0KKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9jb2RlUHRyOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0CiAgICAgeworICAgICAgICBpZiAoIW1fZXhlY3V0YWJsZU1lbW9yeSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbV9leGVjdXRhYmxlTWVtb3J5LT5zaXpl
SW5CeXRlcygpOwogICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFtX2NvZGVQdHI7IH0KIAotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGU7Ci0g
ICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29sOwotICAgIHNpemVfdCBt
X3NpemU7Citwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBtX2NvZGVQdHI7Cisg
ICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IG1fZXhlY3V0YWJsZU1lbW9yeTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1
OTUsOSArMTU5NSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGIubV9vZmZzZXQgLSBhLm1f
b2Zmc2V0OwogICAgIH0KICAgICAKLSAgICB2b2lkKiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgUGFzc1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiAgICAgewotICAgICAgICByZXR1cm4gbV9mb3JtYXR0ZXIuZXhlY3V0YWJsZUNv
cHkoZ2xvYmFsRGF0YSwgYWxsb2NhdG9yKTsKKyAgICAgICAgcmV0dXJuIG1fZm9ybWF0dGVyLmV4
ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAgIH0KIAogICAgIHZvaWQgcmV3aW5kVG9MYWJl
bChBc3NlbWJsZXJMYWJlbCByZXdpbmRUbykgeyBtX2Zvcm1hdHRlci5yZXdpbmRUb0xhYmVsKHJl
d2luZFRvKTsgfQpAQCAtMTkzOSw5ICsxOTM5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBp
c0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3QgeyByZXR1cm4gbV9idWZmZXIuaXNBbGlnbmVk
KGFsaWdubWVudCk7IH0KICAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVm
ZmVyLmRhdGEoKTsgfQogCi0gICAgICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICAgICAgUGFzc1Jl
ZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlQ29weShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5leGVj
dXRhYmxlQ29weShnbG9iYWxEYXRhLCBhbGxvY2F0b3IpOworICAgICAgICAgICAgcmV0dXJuIG1f
YnVmZmVyLmV4ZWN1dGFibGVDb3B5KGdsb2JhbERhdGEpOwogICAgICAgICB9CiAKICAgICAgICAg
dm9pZCByZXdpbmRUb0xhYmVsKEFzc2VtYmxlckxhYmVsIHJld2luZFRvKSB7IG1fYnVmZmVyLnJl
d2luZFRvTGFiZWwocmV3aW5kVG8pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDcgKzMyNCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIEpJVENvZGUmIGdldEpJVENv
ZGUoKSB7IHJldHVybiBtX2ppdENvZGU7IH0KICAgICAgICAgSklUQ29kZTo6SklUVHlwZSBnZXRK
SVRUeXBlKCkgeyByZXR1cm4gbV9qaXRDb2RlLmppdFR5cGUoKTsgfQotICAgICAgICBFeGVjdXRh
YmxlUG9vbCogZXhlY3V0YWJsZVBvb2woKSB7IHJldHVybiBnZXRKSVRDb2RlKCkuZ2V0RXhlY3V0
YWJsZVBvb2woKTsgfQorICAgICAgICBFeGVjdXRhYmxlTWVtb3J5SGFuZGxlKiBleGVjdXRhYmxl
TWVtb3J5KCkgeyByZXR1cm4gZ2V0SklUQ29kZSgpLmdldEV4ZWN1dGFibGVNZW1vcnkoKTsgfQog
ICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiBjb21waWxlT3B0aW1pemVkKEV4ZWNTdGF0ZSosIFNj
b3BlQ2hhaW5Ob2RlKikgPSAwOwogICAgICAgICB2aXJ0dWFsIENvZGVCbG9jayogcmVwbGFjZW1l
bnQoKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5Db21waWxlV2l0aERGRygpID0gMDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShy
ZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIFN0cnVjdHVyZUNoYWluOwogCiAjaWYgRU5BQkxFKEpJVCkKLSAgICB0eXBlZGVm
IENvZGVMb2NhdGlvbkxhYmVsIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdFN0dWJSb3V0
aW5lVHlwZTsKKyAgICB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBQb2x5bW9ycGhpY0Fj
Y2Vzc1N0cnVjdHVyZUxpc3RTdHViUm91dGluZVR5cGU7CiAKICAgICAvLyBTdHJ1Y3R1cmUgdXNl
ZCBieSBvcF9nZXRfYnlfaWRfc2VsZl9saXN0IGFuZCBvcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCBp
bnN0cnVjdGlvbiB0byBob2xkIGRhdGEgb2ZmIHRoZSBtYWluIG9wY29kZSBzdHJlYW0uCiAgICAg
c3RydWN0IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uaAkocmV2aXNp
b24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1
YkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgfSBwdXRCeUlkUmVwbGFjZTsKICAgICAgICAgfSB1OwogCi0gICAgICAg
IENvZGVMb2NhdGlvbkxhYmVsIHN0dWJSb3V0aW5lOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc3R1YlJvdXRpbmU7CiAgICAgICAgIENvZGVMb2NhdGlvbkNhbGwgY2FsbFJldHVybkxv
Y2F0aW9uOwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBob3RQYXRoQmVnaW47CiAgICAgfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShy
ZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGls
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTksNyArOTU5LDcgQEAgdm9pZCBKSVRDb21waWxl
cjo6Y29tcGlsZShKSVRDb2RlJiBlbnRyeQogICAgIC8vIEdlbmVyYXRlIHRoZSBib2R5IG9mIHRo
ZSBwcm9ncmFtLgogICAgIGNvbXBpbGVCb2R5KCk7CiAgICAgLy8gTGluawotICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFi
bGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzKTsKICAgICBsaW5rKGxpbmtCdWZmZXIpOwogICAgIGVudHJ5ID0gSklUQ29kZShsaW5rQnVm
ZmVyLmZpbmFsaXplQ29kZSgpLCBKSVRDb2RlOjpERkdKSVQpOwogfQpAQCAtMTAxNyw3ICsxMDE3
LDcgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUZ1bmN0aW9uKEpJVENvZAogCiAKICAgICAv
LyA9PT0gTGluayA9PT0KLSAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsKKyAgICBMaW5rQnVmZmVy
IGxpbmtCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAgICAgbGluayhsaW5rQnVmZmVyKTsK
ICAgICAKICAgICAvLyBGSVhNRTogc3dpdGNoIHRoZSByZWdpc3RlciBmaWxlIGNoZWNrICYgYXJp
dHkgY2hlY2sgb3ZlciB0byBERkdPcGVydGFpb24gc3R5bGUgY2FsbHMsIG5vdCBKSVQgc3R1YnMu
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9u
IDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTMsNyArOTMsNyBAQCBzdGF0aWMgdm9pZCBsaW5rUmVzdG9yZVNjcmF0
Y2goTGlua0J1ZmZlCiAgICAgbGlua1Jlc3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgc3VjY2VzcywgZmFpbCwgZmFpbHVyZUNhc2VzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBz
dHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNh
bGxUb1Nsb3dDYXNlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vz
c1N0dWIoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8sIFN0cnVj
dHVyZUNoYWluKiBjaGFpbiwgc2l6ZV90IGNvdW50LCBzaXplX3Qgb2Zmc2V0LCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgQ29kZUxvY2F0aW9uTGFiZWwgc3VjY2Vzc0xhYmVsLCBDb2RlTG9jYXRpb25M
YWJlbCBzbG93Q2FzZUxhYmVsLCBDb2RlTG9jYXRpb25MYWJlbCYgc3R1YlJvdXRpbmUpCitzdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKEV4ZWNTdGF0ZSogZXhlYywgU3Ry
dWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4sIHNpemVfdCBj
b3VudCwgc2l6ZV90IG9mZnNldCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIENvZGVMb2NhdGlvbkxh
YmVsIHN1Y2Nlc3NMYWJlbCwgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nhc2VMYWJlbCwgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmJiBzdHViUm91dGluZSkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2Jh
bERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwogCkBAIC0xMzMsMTEgKzEzMywxMSBAQCBzdGF0
aWMgdm9pZCBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViCiAgICAgCiAgICAgZW1pdFJlc3Rv
cmVTY3JhdGNoKHN0dWJKaXQsIG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBzY3JhdGNoR1BSLCBzdWNj
ZXNzLCBmYWlsLCBmYWlsdXJlQ2FzZXMpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZzdHViSml0LCBleGVjLT5jb2RlQmxvY2soKS0+ZXhlY3V0YWJsZVBv
b2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQp
OwogICAgIAogICAgIGxpbmtSZXN0b3JlU2NyYXRjaChwYXRjaEJ1ZmZlciwgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcywgc3VjY2Vzc0xhYmVsLCBzbG93
Q2FzZUxhYmVsKTsKICAgICAKLSAgICBzdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXpl
Q29kZUFkZGVuZHVtKCk7CisgICAgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKIH0KIAogc3RhdGljIGJvb2wgdHJ5Q2FjaGVHZXRCeUlEKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBiYXNlVmFsdWUsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgY29uc3Qg
UHJvcGVydHlTbG90JiBzbG90LCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCkBAIC0xNzYs
MTUgKzE3NiwxNCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgICAgIAogICAgICAgICBlbWl0UmVzdG9yZVNjcmF0Y2goc3R1YkppdCwgbmVlZFRvUmVzdG9y
ZVNjcmF0Y2gsIHNjcmF0Y2hHUFIsIHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAg
ICAgIAotICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1Ykpp
dCwgY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRj
aEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAKICAgICAgICAgbGlua1Jl
c3RvcmVTY3JhdGNoKHBhdGNoQnVmZmVyLCBuZWVkVG9SZXN0b3JlU2NyYXRjaCwgc3R1YkluZm8s
IHN1Y2Nlc3MsIGZhaWwsIGZhaWx1cmVDYXNlcyk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0o
KTsKLSAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgICAgICBz
dHViSW5mby5zdHViUm91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAg
ICAKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAg
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIGVudHJ5TGFiZWwpOwor
ICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
anVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRp
b25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlk
KTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjMxLDcgKzIzMCw3IEBAIHN0
YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3RhdGUqIGUKICAgICBnZW5lcmF0ZVByb3Rv
Q2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBwcm90b3R5cGVDaGFpbiwgY291bnQsIG9m
ZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1
YlJvdXRpbmUpOwogICAgIAogICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxv
Y2spOwotICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlv
bi5qdW1wQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIHN0dWJJbmZv
LnN0dWJSb3V0aW5lKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2sp
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24sIG9wZXJhdGlv
bkdldEJ5SWRQcm90b0J1aWxkTGlzdCk7CiAgICAgCiAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRD
aGFpbigqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3RydWN0dXJl
LCBwcm90b3R5cGVDaGFpbik7CkBAIC0zMjQsNyArMzIzLDcgQEAgc3RhdGljIGJvb2wgdHJ5QnVp
bGRHZXRCeUlETGlzdChFeGVjU3RhdAogICAgIAogICAgIGlmIChzdHViSW5mby5hY2Nlc3NUeXBl
ID09IGFjY2Vzc19nZXRfYnlfaWRfc2VsZikgewogICAgICAgICBBU1NFUlQoIXN0dWJJbmZvLnN0
dWJSb3V0aW5lKTsKLSAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4
ZWN1dGFibGUoKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1
YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSksIHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9i
amVjdFN0cnVjdHVyZS5nZXQoKSk7CisgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9
IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QoKmdsb2JhbERhdGEsIGNvZGVCbG9j
ay0+b3duZXJFeGVjdXRhYmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0
dWJJbmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKSwgc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNl
T2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgc3R1YkluZm8uaW5pdEdldEJ5SWRTZWxm
TGlzdChwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QsIDEpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGZMaXN0LnN0
cnVjdHVyZUxpc3Q7CkBAIC0zNTAsMjEgKzM0OSwyMSBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdl
dEJ5SURMaXN0KEV4ZWNTdGF0CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAgICAgICAgIAotICAgICAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmc3R1YkppdCwgY29kZUJsb2NrLT5leGVjdXRhYmxl
UG9vbCgpKTsKKyAgICAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0
dWJKaXQpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVn
aW4gPSBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJv
dXRpbmU7CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gQ29kZUxv
Y2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleCAtIDFd
LnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgICAgIEFTU0VSVCghIWxhc3RQcm90b0JlZ2luKTsK
ICAgICAgICAgCiAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsod3JvbmdTdHJ1Y3QsIGxhc3RQcm90
b0JlZ2luKTsKICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsK
ICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1
ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKICAgICAgICAgCi0g
ICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNldCgqZ2xv
YmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0
dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0u
c2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGlu
ZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExv
Y2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5m
by5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNo
QnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgICAgIAog
ICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEp
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00MDgsNyArNDA3LDcgQEAgc3RhdGljIGJv
b2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgIGlmIChzdHViSW5mby5hY2Nlc3NU
eXBlID09IGFjY2Vzc19nZXRfYnlfaWRfY2hhaW4pIHsKICAgICAgICAgQVNTRVJUKCEhc3R1Yklu
Zm8uc3R1YlJvdXRpbmUpOwogICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBuZXcg
UG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpLCBzdHViSW5mby5zdHViUm91dGluZSwgc3R1YkluZm8udS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8udS5nZXRCeUlkQ2hhaW4u
Y2hhaW4uZ2V0KCkpOwotICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSA9IENvZGVMb2NhdGlv
bkxhYmVsKCk7CisgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLmluaXRHZXRCeUlkUHJvdG9MaXN0KHBvbHltb3Jw
aGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUgPSBhY2Nlc3NfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpOwpAQCAtNDE5LDE4
ICs0MTgsMTggQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAg
IGlmIChsaXN0SW5kZXggPCBQT0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUpIHsKICAgICAgICAg
c3R1YkluZm8udS5nZXRCeUlkUHJvdG9MaXN0Lmxpc3RTaXplKys7CiAgICAgICAgIAotICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJl
TGlzdC0+bGlzdFtsaXN0SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwb2x5bW9ycGhpY1N0
cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsKICAg
ICAgICAgQVNTRVJUKCEhbGFzdFByb3RvQmVnaW4pOwogCi0gICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIGVudHJ5TGFiZWw7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViUm91dGlu
ZTsKICAgICAgICAgCi0gICAgICAgIGdlbmVyYXRlUHJvdG9DaGFpbkFjY2Vzc1N0dWIoZXhlYywg
c3R1YkluZm8sIHByb3RvdHlwZUNoYWluLCBjb3VudCwgb2Zmc2V0LCBzdHJ1Y3R1cmUsIHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRv
RG9uZSksIGxhc3RQcm90b0JlZ2luLCBlbnRyeUxhYmVsKTsKKyAgICAgICAgZ2VuZXJhdGVQcm90
b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCBv
ZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZz
ZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9Eb25lKSwgbGFzdFByb3RvQmVnaW4sIHN0dWJSb3V0aW5l
KTsKICAgICAgICAgCi0gICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0
SW5kZXhdLnNldCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50
cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5s
aXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlKTsKICAgICAgICAgCiAgICAgICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBB
dE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgp
KSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1Rf
Q0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01NDgsMTggKzU0
NywxNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0YXRlKiBlCiAgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gc3R1YkppdC5qdW1wKCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERh
dGEsICZzdHViSml0LCBjb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgICAgICAgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJnN0dWJKaXQpOwogICAgICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
bGFiZWxBdE9mZnNldChzdHViSW5mby5kZWx0YUNhbGxUb0RvbmUpKTsKICAgICAgICAgICAgIGlm
IChuZWVkVG9SZXN0b3JlU2NyYXRjaCkKICAgICAgICAgICAgICAgICBwYXRjaEJ1ZmZlci5saW5r
KGZhaWx1cmUsIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJ
bmZvLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlcywgc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8uZGVsdGFDYWxsVG9TbG93Q2FzZSkpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAgICAgICAgICAgIHN0dWJJbmZvLnN0
dWJSb3V0aW5lID0gZW50cnlMYWJlbDsKKyAgICAgICAgICAgIHN0dWJJbmZvLnN0dWJSb3V0aW5l
ID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgZW50cnlMYWJlbCk7CisgICAgICAg
ICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVt
cEF0T2Zmc2V0KHN0dWJJbmZvLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25M
YWJlbChzdHViSW5mby5zdHViUm91dGluZS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVQdXRC
eUlkRnVuY3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBz
dHViSW5mby5pbml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5jcHAJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNDIgKzI3LDExMSBA
QAogCiAjaW5jbHVkZSAiRXhlY3V0YWJsZUFsbG9jYXRvci5oIgogCisjaWYgRU5BQkxFKEVYRUNV
VEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKKyNpbmNsdWRlIDx3dGYvTWV0YUFsbG9jYXRvci5oPgor
I2luY2x1ZGUgPHd0Zi9QYWdlUmVzZXJ2YXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVk1UYWdzLmg+
CisjZW5kaWYKKwogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKK3VzaW5nIG5hbWVzcGFjZSBXVEY7
CisKIG5hbWVzcGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RF
TUFORCkKIAotRXhlY3V0YWJsZVBvb2w6OkFsbG9jYXRpb24gRXhlY3V0YWJsZVBvb2w6OnN5c3Rl
bUFsbG9jKHNpemVfdCBzaXplKQorY2xhc3MgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVi
bGljIE1ldGFBbGxvY2F0b3IgeworcHVibGljOgorICAgIERlbWFuZEV4ZWN1dGFibGVBbGxvY2F0
b3IoKQorICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBhbGxvY2F0
aW9ucyB0byAzMiBieXRlcworICAgIHsKKyAgICAgICAgLy8gRG9uJ3QgcHJlYWxsb2NhdGUgYW55
IG1lbW9yeSBoZXJlLgorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5EZW1hbmRFeGVjdXRhYmxl
QWxsb2NhdG9yKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXNl
cnZhdGlvbnMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXNlcnZhdGlvbnMuYXQoaSkuZGVh
bGxvY2F0ZSgpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2Nh
dGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG5ld051
bVBhZ2VzID0gKCgobnVtUGFnZXMgKiBwYWdlU2l6ZSgpICsgSklUX0FMTE9DQVRPUl9MQVJHRV9B
TExPQ19TSVpFIC0gMSkgLyBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUgKiBKSVRfQUxM
T0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpICsgcGFnZVNpemUoKSAtIDEpIC8gcGFnZVNpemUoKTsK
KyAgICAgICAgCisgICAgICAgIEFTU0VSVChuZXdOdW1QYWdlcyA+PSBudW1QYWdlcyk7CisgICAg
ICAgIAorICAgICAgICBudW1QYWdlcyA9IG5ld051bVBhZ2VzOworICAgICAgICAKKyAgICAgICAg
UGFnZVJlc2VydmF0aW9uIHJlc2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlKG51
bVBhZ2VzICogcGFnZVNpemUoKSwgT1NBbGxvY2F0b3I6OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRB
QkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOworICAgICAgICBpZiAoIXJlc2VydmF0aW9uKQorICAg
ICAgICAgICAgQ1JBU0goKTsKKyAgICAgICAgCisgICAgICAgIHJlc2VydmF0aW9ucy5hcHBlbmQo
cmVzZXJ2YXRpb24pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHJlc2VydmF0aW9uLmJhc2Uo
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG5vdGlmeU5lZWRQYWdlKHZvaWQqIHBh
Z2UpCisgICAgeworICAgICAgICBPU0FsbG9jYXRvcjo6Y29tbWl0KHBhZ2UsIHBhZ2VTaXplKCks
IEVYRUNVVEFCTEVfUE9PTF9XUklUQUJMRSwgdHJ1ZSk7CisgICAgfQorICAgIAorICAgIHZpcnR1
YWwgdm9pZCBub3RpZnlQYWdlSXNGcmVlKHZvaWQqIHBhZ2UpCisgICAgeworICAgICAgICBPU0Fs
bG9jYXRvcjo6ZGVjb21taXQocGFnZSwgcGFnZVNpemUoKSk7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFZlY3RvcjxQYWdlUmVzZXJ2YXRpb24sIDE2PiByZXNlcnZhdGlvbnM7Cit9OworCitzdGF0
aWMgRGVtYW5kRXhlY3V0YWJsZUFsbG9jYXRvciogYWxsb2NhdG9yOworCit2b2lkIEV4ZWN1dGFi
bGVBbGxvY2F0b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQogewotICAgIFBhZ2VBbGxvY2F0aW9u
IGFsbG9jYXRpb24gPSBQYWdlQWxsb2NhdGlvbjo6YWxsb2NhdGUoc2l6ZSwgT1NBbGxvY2F0b3I6
OkpTSklUQ29kZVBhZ2VzLCBFWEVDVVRBQkxFX1BPT0xfV1JJVEFCTEUsIHRydWUpOwotICAgIGlm
ICghYWxsb2NhdGlvbikKLSAgICAgICAgQ1JBU0goKTsKLSAgICByZXR1cm4gYWxsb2NhdGlvbjsK
KyAgICBBU1NFUlQoIWFsbG9jYXRvcik7CisgICAgYWxsb2NhdG9yID0gbmV3IERlbWFuZEV4ZWN1
dGFibGVBbGxvY2F0b3IoKTsKIH0KIAotdm9pZCBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFz
ZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxsb2NhdGlvbikKK0V4ZWN1dGFibGVBbGxv
Y2F0b3I6OkV4ZWN1dGFibGVBbGxvY2F0b3IoSlNHbG9iYWxEYXRhJikKIHsKLSAgICBhbGxvY2F0
aW9uLmRlYWxsb2NhdGUoKTsKKyAgICBBU1NFUlQoYWxsb2NhdG9yKTsKIH0KIAogYm9vbCBFeGVj
dXRhYmxlQWxsb2NhdG9yOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
LSAgICAKKwogYm9vbCBFeGVjdXRhYmxlQWxsb2NhdG9yOjp1bmRlck1lbW9yeVByZXNzdXJlKCkK
IHsKICAgICByZXR1cm4gZmFsc2U7CiB9Ci0gICAgCisKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1l
bW9yeUhhbmRsZT4gRXhlY3V0YWJsZUFsbG9jYXRvcjo6YWxsb2NhdGUoSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFJlZlB0cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxl
PiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgQ1JBU0goKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30K
Kwogc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCiB7Ci0g
ICAgcmV0dXJuIDA7Ci19IAorICAgIHJldHVybiBhbGxvY2F0b3ItPmJ5dGVzQ29tbWl0dGVkKCk7
Cit9CiAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKK3ZvaWQgRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6ZHVtcFByb2ZpbGUoKQoreworICAgIGFsbG9jYXRvci0+ZHVtcFByb2ZpbGUo
KTsKK30KICNlbmRpZgogCisjZW5kaWYgLy8gRU5BQkxFKEVYRUNVVEFCTEVfQUxMT0NBVE9SX0RF
TUFORCkKKwogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogCiAjaWYgT1MoV0lO
RE9XUykgfHwgT1MoU1lNQklBTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhl
Y3V0YWJsZUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8c3RkZGVmLmg+IC8vIGZvciBwdHJkaWZmX3QKICNpbmNs
dWRlIDxsaW1pdHM+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYv
TWV0YUFsbG9jYXRvckhhbmRsZS5oPgogI2luY2x1ZGUgPHd0Zi9QYWdlQWxsb2NhdGlvbi5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
QEAgLTEwMiwxMjAgKzEwMywyNyBAQCBpbmxpbmUgc2l6ZV90IHJvdW5kVXBBbGxvY2F0aW9uU2l6
ZShzaXplCiAKIG5hbWVzcGFjZSBKU0MgewogCi1jbGFzcyBFeGVjdXRhYmxlUG9vbCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEV4ZWN1dGFibGVQb29sPiB7Ci1wdWJsaWM6Ci0jaWYgRU5BQkxFKEVYRUNV
VEFCTEVfQUxMT0NBVE9SX0RFTUFORCkKLSAgICB0eXBlZGVmIFBhZ2VBbGxvY2F0aW9uIEFsbG9j
YXRpb247Ci0jZWxzZQotICAgIGNsYXNzIEFsbG9jYXRpb24gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgQWxsb2NhdGlvbih2b2lkKiBiYXNlLCBzaXplX3Qgc2l6ZSkKLSAgICAgICAgICAgIDogbV9i
YXNlKGJhc2UpCi0gICAgICAgICAgICAsIG1fc2l6ZShzaXplKQotICAgICAgICB7Ci0gICAgICAg
IH0KLSAgICAgICAgdm9pZCogYmFzZSgpIHsgcmV0dXJuIG1fYmFzZTsgfQotICAgICAgICBzaXpl
X3Qgc2l6ZSgpIHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgICAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFtX2Jhc2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQqIG1f
YmFzZTsKLSAgICAgICAgc2l6ZV90IG1fc2l6ZTsKLSAgICB9OwotI2VuZGlmCi0gICAgdHlwZWRl
ZiBWZWN0b3I8QWxsb2NhdGlvbiwgMj4gQWxsb2NhdGlvbkxpc3Q7Ci0KLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFeGVjdXRhYmxlUG9vbD4gY3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
c2l6ZV90IG4pCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4ZWN1dGFibGVQ
b29sKGdsb2JhbERhdGEsIG4pKTsKLSAgICB9Ci0KLSAgICB2b2lkKiBhbGxvYyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZnJlZVB0
ciA8PSBtX2VuZCk7Ci0KLSAgICAgICAgLy8gUm91bmQgJ24nIHVwIHRvIGEgbXVsdGlwbGUgb2Yg
d29yZCBzaXplOyBpZiBhbGwgYWxsb2NhdGlvbnMgYXJlIG9mCi0gICAgICAgIC8vIHdvcmQgc2l6
ZWQgcXVhbnRpdGllcywgdGhlbiBhbGwgc3Vic2VxdWVudCBhbGxvY2F0aW9ucyB3aWxsIGJlIGFs
aWduZWQuCi0gICAgICAgIG4gPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgc2l6ZW9mKHZvaWQq
KSk7Ci0KLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obikgPCAobV9lbmQgLSBt
X2ZyZWVQdHIpKSB7Ci0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBtX2ZyZWVQdHI7Ci0gICAg
ICAgICAgICBtX2ZyZWVQdHIgKz0gbjsKLSAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBJbnN1ZmZpY2llbnQgc3BhY2UgdG8gYWxsb2NhdGUgaW4gdGhl
IGV4aXN0aW5nIHBvb2wKLSAgICAgICAgLy8gc28gd2UgbmVlZCBhbGxvY2F0ZSBpbnRvIGEgbmV3
IHBvb2wKLSAgICAgICAgcmV0dXJuIHBvb2xBbGxvY2F0ZShnbG9iYWxEYXRhLCBuKTsKLSAgICB9
Ci0gICAgCi0gICAgdm9pZCB0cnlTaHJpbmsodm9pZCogYWxsb2NhdGlvbiwgc2l6ZV90IG9sZFNp
emUsIHNpemVfdCBuZXdTaXplKQotICAgIHsKLSAgICAgICAgaWYgKHN0YXRpY19jYXN0PGNoYXIq
PihhbGxvY2F0aW9uKSArIG9sZFNpemUgIT0gbV9mcmVlUHRyKQotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oYWxsb2NhdGlvbikgKyBy
b3VuZFVwQWxsb2NhdGlvblNpemUobmV3U2l6ZSwgc2l6ZW9mKHZvaWQqKSk7Ci0gICAgfQotCi0g
ICAgfkV4ZWN1dGFibGVQb29sKCkKLSAgICB7Ci0gICAgICAgIEFsbG9jYXRpb25MaXN0OjppdGVy
YXRvciBlbmQgPSBtX3Bvb2xzLmVuZCgpOwotICAgICAgICBmb3IgKEFsbG9jYXRpb25MaXN0Ojpp
dGVyYXRvciBwdHIgPSBtX3Bvb2xzLmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAg
ICAgICAgRXhlY3V0YWJsZVBvb2w6OnN5c3RlbVJlbGVhc2UoKnB0cik7Ci0gICAgfQotCi0gICAg
c2l6ZV90IGF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIChtX3Bvb2xzLnNpemUoKSA+IDEpID8g
MCA6IG1fZW5kIC0gbV9mcmVlUHRyOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RhdGljIEFsbG9jYXRp
b24gc3lzdGVtQWxsb2Moc2l6ZV90IG4pOwotICAgIHN0YXRpYyB2b2lkIHN5c3RlbVJlbGVhc2Uo
QWxsb2NhdGlvbiYgYWxsb2MpOwotCi0gICAgRXhlY3V0YWJsZVBvb2woSlNHbG9iYWxEYXRhJiwg
c2l6ZV90IG4pOwotCi0gICAgdm9pZCogcG9vbEFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVf
dCBuKTsKLQotICAgIGNoYXIqIG1fZnJlZVB0cjsKLSAgICBjaGFyKiBtX2VuZDsKLSAgICBBbGxv
Y2F0aW9uTGlzdCBtX3Bvb2xzOwotfTsKK3R5cGVkZWYgV1RGOjpNZXRhQWxsb2NhdG9ySGFuZGxl
IEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU7CiAKIGNsYXNzIEV4ZWN1dGFibGVBbGxvY2F0b3Igewog
ICAgIGVudW0gUHJvdGVjdGlvblNldHRpbmcgeyBXcml0YWJsZSwgRXhlY3V0YWJsZSB9OwogCiBw
dWJsaWM6Ci0gICAgRXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Ci0gICAgewotICAgICAgICBpZiAoaXNWYWxpZCgpKQotICAgICAgICAgICAgbV9zbWFsbEFsbG9j
YXRpb25Qb29sID0gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBKSVRfQUxMT0NB
VE9SX0xBUkdFX0FMTE9DX1NJWkUpOwotI2lmICFFTkFCTEUoSU5URVJQUkVURVIpCi0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIENSQVNIKCk7Ci0jZW5kaWYKLSAgICB9CisgICAgRXhlY3V0YWJs
ZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCBpbml0aWFs
aXplQWxsb2NhdG9yKCk7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25zdDsKIAogICAgIHN0YXRp
YyBib29sIHVuZGVyTWVtb3J5UHJlc3N1cmUoKTsKKyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExP
Q0FUT1JfUFJPRklMRSkKKyAgICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpOworI2Vsc2UKKyAg
ICBzdGF0aWMgdm9pZCBkdW1wUHJvZmlsZSgpIHsgfQorI2VuZGlmCiAKLSAgICBQYXNzUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiBwb29sRm9yU2l6ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNp
emVfdCBuKQotICAgIHsKLSAgICAgICAgLy8gVHJ5IHRvIGZpdCBpbiB0aGUgZXhpc3Rpbmcgc21h
bGwgYWxsb2NhdG9yCi0gICAgICAgIEFTU0VSVChtX3NtYWxsQWxsb2NhdGlvblBvb2wpOwotICAg
ICAgICBpZiAobiA8IG1fc21hbGxBbGxvY2F0aW9uUG9vbC0+YXZhaWxhYmxlKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbV9zbWFsbEFsbG9jYXRpb25Qb29sOwotCi0gICAgICAgIC8vIElmIHRoZSBy
ZXF1ZXN0IGlzIGxhcmdlLCB3ZSBqdXN0IHByb3ZpZGUgYSB1bnNoYXJlZCBhbGxvY2F0b3IKLSAg
ICAgICAgaWYgKG4gPiBKSVRfQUxMT0NBVE9SX0xBUkdFX0FMTE9DX1NJWkUpCi0gICAgICAgICAg
ICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OmNyZWF0ZShnbG9iYWxEYXRhLCBuKTsKLQotICAgICAg
ICAvLyBDcmVhdGUgYSBuZXcgYWxsb2NhdG9yCi0gICAgICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9v
bD4gcG9vbCA9IEV4ZWN1dGFibGVQb29sOjpjcmVhdGUoZ2xvYmFsRGF0YSwgSklUX0FMTE9DQVRP
Ul9MQVJHRV9BTExPQ19TSVpFKTsKLQotICAgICAgICAvLyBJZiB0aGUgbmV3IGFsbG9jYXRvciB3
aWxsIHJlc3VsdCBpbiBtb3JlIGZyZWUgc3BhY2UgdGhhbiBpbgotICAgICAgICAvLyB0aGUgY3Vy
cmVudCBzbWFsbCBhbGxvY2F0b3IsIHRoZW4gd2Ugd2lsbCB1c2UgaXQgaW5zdGVhZAotICAgICAg
ICBpZiAoKHBvb2wtPmF2YWlsYWJsZSgpIC0gbikgPiBtX3NtYWxsQWxsb2NhdGlvblBvb2wtPmF2
YWlsYWJsZSgpKQotICAgICAgICAgICAgbV9zbWFsbEFsbG9jYXRpb25Qb29sID0gcG9vbDsKLSAg
ICAgICAgcmV0dXJuIHBvb2wucmVsZWFzZSgpOwotICAgIH0KKyAgICBQYXNzUmVmUHRyPEV4ZWN1
dGFibGVNZW1vcnlIYW5kbGU+IGFsbG9jYXRlKEpTR2xvYmFsRGF0YSYsIHNpemVfdCBzaXplSW5C
eXRlcyk7CiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICBzdGF0aWMg
dm9pZCBtYWtlV3JpdGFibGUodm9pZCogc3RhcnQsIHNpemVfdCBzaXplKQpAQCAtMzQ4LDUwICsy
NTYsOSBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAg
IHN0YXRpYyB2b2lkIHJlcHJvdGVjdFJlZ2lvbih2b2lkKiwgc2l6ZV90LCBQcm90ZWN0aW9uU2V0
dGluZyk7CiAjZW5kaWYKLQotICAgIFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4gbV9zbWFsbEFsbG9j
YXRpb25Qb29sOwogfTsKIAotaW5saW5lIEV4ZWN1dGFibGVQb29sOjpFeGVjdXRhYmxlUG9vbChK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBuKQotewotICAgIHNpemVfdCBhbGxvY1Np
emUgPSByb3VuZFVwQWxsb2NhdGlvblNpemUobiwgcGFnZVNpemUoKSk7Ci0gICAgQWxsb2NhdGlv
biBtZW0gPSBzeXN0ZW1BbGxvYyhhbGxvY1NpemUpOwotICAgIGlmICghbWVtLmJhc2UoKSkgewot
ICAgICAgICByZWxlYXNlRXhlY3V0YWJsZU1lbW9yeShnbG9iYWxEYXRhKTsKLSAgICAgICAgbWVt
ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICB9Ci0gICAgbV9wb29scy5hcHBlbmQobWVt
KTsKLSAgICBtX2ZyZWVQdHIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWVtLmJhc2UoKSk7Ci0gICAg
aWYgKCFtX2ZyZWVQdHIpCi0gICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxvY2F0ZQot
ICAgIG1fZW5kID0gbV9mcmVlUHRyICsgYWxsb2NTaXplOwotICAgIGRlcHJlY2F0ZWRUdXJuT2Zm
VmVyaWZpZXIoKTsKLX0KLQotaW5saW5lIHZvaWQqIEV4ZWN1dGFibGVQb29sOjpwb29sQWxsb2Nh
dGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBzaXplX3QgbikKLXsKLSAgICBzaXplX3QgYWxs
b2NTaXplID0gcm91bmRVcEFsbG9jYXRpb25TaXplKG4sIHBhZ2VTaXplKCkpOwotICAgIAotICAg
IEFsbG9jYXRpb24gcmVzdWx0ID0gc3lzdGVtQWxsb2MoYWxsb2NTaXplKTsKLSAgICBpZiAoIXJl
c3VsdC5iYXNlKCkpIHsKLSAgICAgICAgcmVsZWFzZUV4ZWN1dGFibGVNZW1vcnkoZ2xvYmFsRGF0
YSk7Ci0gICAgICAgIHJlc3VsdCA9IHN5c3RlbUFsbG9jKGFsbG9jU2l6ZSk7Ci0gICAgICAgIGlm
ICghcmVzdWx0LmJhc2UoKSkKLSAgICAgICAgICAgIENSQVNIKCk7IC8vIEZhaWxlZCB0byBhbGxv
Y2F0ZQotICAgIH0KLSAgICAKLSAgICBBU1NFUlQobV9lbmQgPj0gbV9mcmVlUHRyKTsKLSAgICBp
ZiAoKGFsbG9jU2l6ZSAtIG4pID4gc3RhdGljX2Nhc3Q8c2l6ZV90PihtX2VuZCAtIG1fZnJlZVB0
cikpIHsKLSAgICAgICAgLy8gUmVwbGFjZSBhbGxvY2F0aW9uIHBvb2wKLSAgICAgICAgbV9mcmVl
UHRyID0gc3RhdGljX2Nhc3Q8Y2hhcio+KHJlc3VsdC5iYXNlKCkpICsgbjsKLSAgICAgICAgbV9l
bmQgPSBzdGF0aWNfY2FzdDxjaGFyKj4ocmVzdWx0LmJhc2UoKSkgKyBhbGxvY1NpemU7Ci0gICAg
fQotCi0gICAgbV9wb29scy5hcHBlbmQocmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0LmJhc2Uo
KTsKLX0KLQotfQorfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKSAm
JiBFTkFCTEUoQVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4
ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCShyZXZp
c2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTAgKzMxLDkgQEAKIAog
I2luY2x1ZGUgPGVycm5vLmg+CiAKLSNpbmNsdWRlICJUQ1NwaW5Mb2NrLmgiCiAjaW5jbHVkZSA8
c3lzL21tYW4uaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDx3dGYvQVZMVHJlZS5o
PgorI2luY2x1ZGUgPHd0Zi9NZXRhQWxsb2NhdG9yLmg+CiAjaW5jbHVkZSA8d3RmL1BhZ2VSZXNl
cnZhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9WTVRhZ3MuaD4KIApAQCAtNDYsNDgxICs0NSwxMDAg
QEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi0jZGVmaW5l
IFR3b1BvdyhuKSAoMXVsbCA8PCBuKQotCi1jbGFzcyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mg
ewotcHVibGljOgotICAgIEFsbG9jYXRpb25UYWJsZVNpemVDbGFzcyhzaXplX3Qgc2l6ZSwgc2l6
ZV90IGJsb2NrU2l6ZSwgdW5zaWduZWQgbG9nMkJsb2NrU2l6ZSkKLSAgICAgICAgOiBtX2Jsb2Nr
U2l6ZShibG9ja1NpemUpCi0gICAgewotICAgICAgICBBU1NFUlQoYmxvY2tTaXplID09IFR3b1Bv
dyhsb2cyQmxvY2tTaXplKSk7Ci0KLSAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2Yg
YmxvY2tzIG5lZWRlZCB0byBob2xkIHNpemUuCi0gICAgICAgIHNpemVfdCBibG9ja01hc2sgPSBi
bG9ja1NpemUgLSAxOwotICAgICAgICBtX2Jsb2NrQ291bnQgPSAoc2l6ZSArIGJsb2NrTWFzaykg
Pj4gbG9nMkJsb2NrU2l6ZTsKLQotICAgICAgICAvLyBBbGlnbiB0byB0aGUgc21hbGxlc3QgcG93
ZXIgb2YgdHdvID49IG1fYmxvY2tDb3VudC4KLSAgICAgICAgbV9ibG9ja0FsaWdubWVudCA9IDE7
Ci0gICAgICAgIHdoaWxlIChtX2Jsb2NrQWxpZ25tZW50IDwgbV9ibG9ja0NvdW50KQotICAgICAg
ICAgICAgbV9ibG9ja0FsaWdubWVudCArPSBtX2Jsb2NrQWxpZ25tZW50OwotICAgIH0KLQotICAg
IHNpemVfdCBibG9ja1NpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrU2l6ZTsgfQotICAgIHNp
emVfdCBibG9ja0NvdW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0NvdW50OyB9Ci0gICAgc2l6
ZV90IGJsb2NrQWxpZ25tZW50KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0FsaWdubWVudDsgfQot
Ci0gICAgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYmxvY2tTaXplICog
bV9ibG9ja0NvdW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBzaXplX3QgbV9ibG9ja1NpemU7
Ci0gICAgc2l6ZV90IG1fYmxvY2tDb3VudDsKLSAgICBzaXplX3QgbV9ibG9ja0FsaWdubWVudDsK
LX07Ci0KLXRlbXBsYXRlPHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRh
YmxlTGVhZiB7Ci0gICAgdHlwZWRlZiB1aW50NjRfdCBCaXRGaWVsZDsKLQotcHVibGljOgotICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb2cyU3VicmVnaW9uU2l6ZSA9IDEyOyAvLyAyXjEyID09
IHBhZ2VzaXplCi0gICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvZzJSZWdpb25TaXplID0gbG9n
MlN1YnJlZ2lvblNpemUgKyBsb2cyRW50cmllczsKLQotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qg
c3VicmVnaW9uU2l6ZSA9IFR3b1Bvdyhsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCByZWdpb25TaXplID0gVHdvUG93KGxvZzJSZWdpb25TaXplKTsKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZW50cmllcyA9IFR3b1Bvdyhsb2cyRW50cmllcyk7Ci0gICAgQ09N
UElMRV9BU1NFUlQoZW50cmllcyA8PSAoc2l6ZW9mKEJpdEZpZWxkKSAqIDgpLCBBbGxvY2F0aW9u
VGFibGVMZWFmX2VudHJpZXNfZml0X2luX0JpdEZpZWxkKTsKLQotICAgIEFsbG9jYXRpb25UYWJs
ZUxlYWYoKQotICAgICAgICA6IG1fYWxsb2NhdGVkKDApCi0gICAgewotICAgIH0KLQotICAgIH5B
bGxvY2F0aW9uVGFibGVMZWFmKCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwot
ICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNp
emVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPT0g
c3VicmVnaW9uU2l6ZSk7Ci0gICAgICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAgICAgIHNp
emVfdCBhbGlnbm1lbnQgPSBzaXplQ2xhc3MuYmxvY2tBbGlnbm1lbnQoKTsKLSAgICAgICAgc2l6
ZV90IGNvdW50ID0gc2l6ZUNsYXNzLmJsb2NrQ291bnQoKTsKLSAgICAgICAgLy8gVXNlIHRoaXMg
bWFzayB0byBjaGVjayBmb3Igc3BhbnMgb2YgZnJlZSBibG9ja3MuCi0gICAgICAgIEJpdEZpZWxk
IG1hc2sgPSAoKDF1bGwgPDwgY291bnQpIC0gMSkgPDwgKGFsaWdubWVudCAtIGNvdW50KTsKLQot
ICAgICAgICAvLyBTdGVwIGluIHVuaXRzIG9mIGFsaWdubWVudCBzaXplLgotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZW50cmllczsgaSArPSBhbGlnbm1lbnQpIHsKLSAgICAgICAg
ICAgIGlmICghKG1fYWxsb2NhdGVkICYgbWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2FsbG9j
YXRlZCB8PSBtYXNrOwotICAgICAgICAgICAgICAgIHJldHVybiAoaSArIChhbGlnbm1lbnQgLSBj
b3VudCkpIDw8IGxvZzJTdWJyZWdpb25TaXplOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
bWFzayA8PD0gYWxpZ25tZW50OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBub3RGb3VuZDsK
LSAgICB9Ci0KLSAgICB2b2lkIGZyZWUoc2l6ZV90IGxvY2F0aW9uLCBBbGxvY2F0aW9uVGFibGVT
aXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAgICAgIEFTU0VSVChzaXplQ2xhc3MuYmxv
Y2tTaXplKCkgPT0gc3VicmVnaW9uU2l6ZSk7Ci0KLSAgICAgICAgc2l6ZV90IGVudHJ5ID0gbG9j
YXRpb24gPj4gbG9nMlN1YnJlZ2lvblNpemU7Ci0gICAgICAgIHNpemVfdCBjb3VudCA9IHNpemVD
bGFzcy5ibG9ja0NvdW50KCk7Ci0gICAgICAgIEJpdEZpZWxkIG1hc2sgPSAoKDF1bGwgPDwgY291
bnQpIC0gMSkgPDwgZW50cnk7Ci0KLSAgICAgICAgQVNTRVJUKChtX2FsbG9jYXRlZCAmIG1hc2sp
ID09IG1hc2spOwotICAgICAgICBtX2FsbG9jYXRlZCAmPSB+bWFzazsKLSAgICB9Ci0KLSAgICBi
b29sIGlzRW1wdHkoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICFtX2FsbG9jYXRlZDsKLSAgICB9
Ci0KLSAgICBib29sIGlzRnVsbCgpCi0gICAgewotICAgICAgICByZXR1cm4gIX5tX2FsbG9jYXRl
ZDsKLSAgICB9Ci0KLSAgICBzdGF0aWMgc2l6ZV90IHNpemUoKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlZ2lvblNpemU7Ci0gICAgfQotCi0gICAgc3RhdGljIEFsbG9jYXRpb25UYWJsZVNpemVD
bGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1cm4gQWxs
b2NhdGlvblRhYmxlU2l6ZUNsYXNzKHNpemUsIHN1YnJlZ2lvblNpemUsIGxvZzJTdWJyZWdpb25T
aXplKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0gICAgdm9pZCBkdW1wKHNpemVfdCBwYXJl
bnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAwKQotICAgIHsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGluZGVudDsgKytpKQotICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIgICAgIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiJTA4eDogWyUwMTZsbHhdXG4i
LCAoaW50KXBhcmVudE9mZnNldCwgbV9hbGxvY2F0ZWQpOwotICAgIH0KLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIEJpdEZpZWxkIG1fYWxsb2NhdGVkOwotfTsKLQotCi10ZW1wbGF0ZTxjbGFzcyBO
ZXh0TGV2ZWw+Ci1jbGFzcyBMYXp5QWxsb2NhdGlvblRhYmxlIHsKLXB1YmxpYzoKLSAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBOZXh0TGV2ZWw6OmxvZzJSZWdpb25T
aXplOwotICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBlbnRyaWVzID0gTmV4dExldmVsOjplbnRy
aWVzOwotCi0gICAgTGF6eUFsbG9jYXRpb25UYWJsZSgpCi0gICAgICAgIDogbV9wdHIoMCkKLSAg
ICB7Ci0gICAgfQotCi0gICAgfkxhenlBbGxvY2F0aW9uVGFibGUoKQotICAgIHsKLSAgICAgICAg
QVNTRVJUKGlzRW1wdHkoKSk7Ci0gICAgfQotCi0gICAgc2l6ZV90IGFsbG9jYXRlKEFsbG9jYXRp
b25UYWJsZVNpemVDbGFzcyYgc2l6ZUNsYXNzKQotICAgIHsKLSAgICAgICAgaWYgKCFtX3B0cikK
LSAgICAgICAgICAgIG1fcHRyID0gbmV3IE5leHRMZXZlbCgpOwotICAgICAgICByZXR1cm4gbV9w
dHItPmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVfdCBs
b2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewotICAg
ICAgICBBU1NFUlQobV9wdHIpOwotICAgICAgICBtX3B0ci0+ZnJlZShsb2NhdGlvbiwgc2l6ZUNs
YXNzKTsKLSAgICAgICAgaWYgKG1fcHRyLT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGRlbGV0
ZSBtX3B0cjsKLSAgICAgICAgICAgIG1fcHRyID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGJvb2wgaXNFbXB0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gIW1fcHRyOwotICAgIH0KLQot
ICAgIGJvb2wgaXNGdWxsKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3B0ciAmJiBtX3B0ci0+
aXNGdWxsKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBOZXh0TGV2ZWw6OnNpemUoKTsKLSAgICB9Ci0KLSNpZm5kZWYgTkRFQlVHCi0g
ICAgdm9pZCBkdW1wKHNpemVfdCBwYXJlbnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBpbmRlbnQgPSAw
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fcHRyKTsKLSAgICAgICAgbV9wdHItPmR1bXAocGFy
ZW50T2Zmc2V0LCBpbmRlbnQpOwotICAgIH0KLSNlbmRpZgotCi0gICAgc3RhdGljIEFsbG9jYXRp
b25UYWJsZVNpemVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAg
ICByZXR1cm4gTmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi1wcml2YXRl
OgotICAgIE5leHRMZXZlbCogbV9wdHI7Ci19OwotCi10ZW1wbGF0ZTxjbGFzcyBOZXh0TGV2ZWws
IHVuc2lnbmVkIGxvZzJFbnRyaWVzPgotY2xhc3MgQWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5IHsK
LSAgICB0eXBlZGVmIHVpbnQ2NF90IEJpdEZpZWxkOwotCi1wdWJsaWM6Ci0gICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIGxvZzJTdWJyZWdpb25TaXplID0gTmV4dExldmVsOjpsb2cyUmVnaW9uU2l6
ZTsKLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9nMlJlZ2lvblNpemUgPSBsb2cyU3VicmVn
aW9uU2l6ZSArIGxvZzJFbnRyaWVzOwotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBzdWJyZWdp
b25TaXplID0gVHdvUG93KGxvZzJTdWJyZWdpb25TaXplKTsKLSAgICBzdGF0aWMgY29uc3Qgc2l6
ZV90IHJlZ2lvblNpemUgPSBUd29Qb3cobG9nMlJlZ2lvblNpemUpOwotICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBlbnRyaWVzID0gVHdvUG93KGxvZzJFbnRyaWVzKTsKLSAgICBDT01QSUxFX0FT
U0VSVChlbnRyaWVzIDw9IChzaXplb2YoQml0RmllbGQpICogOCksIEFsbG9jYXRpb25UYWJsZURp
cmVjdG9yeV9lbnRyaWVzX2ZpdF9pbl9CaXRGaWVsZCk7Ci0KLSAgICBBbGxvY2F0aW9uVGFibGVE
aXJlY3RvcnkoKQotICAgICAgICA6IG1fZnVsbCgwKQotICAgICAgICAsIG1faGFzU3ViYWxsb2Nh
dGlvbigwKQotICAgIHsKLSAgICB9Ci0KLSAgICB+QWxsb2NhdGlvblRhYmxlRGlyZWN0b3J5KCkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChpc0VtcHR5KCkpOwotICAgIH0KLQotICAgIHNpemVfdCBh
bGxvY2F0ZShBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MmIHNpemVDbGFzcykKLSAgICB7Ci0gICAg
ICAgIEFTU0VSVChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPD0gc3VicmVnaW9uU2l6ZSk7Ci0gICAg
ICAgIEFTU0VSVCghaXNGdWxsKCkpOwotCi0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXpl
KCkgPCBzdWJyZWdpb25TaXplKSB7Ci0gICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxOwotICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGVudHJpZXM7ICsraSwgYml0ICs9IGJp
dCkgewotICAgICAgICAgICAgICAgIGlmIChtX2Z1bGwgJiBiaXQpCi0gICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHNpemVfdCBsb2NhdGlvbiA9IG1fc3ViYWxs
b2NhdGlvbnNbaV0uYWxsb2NhdGUoc2l6ZUNsYXNzKTsKLSAgICAgICAgICAgICAgICBpZiAobG9j
YXRpb24gIT0gbm90Rm91bmQpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBkaWRu
J3QgYWxyZWFkeSBoYXZlIGEgc3VicmVnaW9uLCBpdCBkb2VzIG5vdyEKLSAgICAgICAgICAgICAg
ICAgICAgbV9oYXNTdWJhbGxvY2F0aW9uIHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgLy8g
TWlycm9yIHRoZSBzdWJhbGxvY2F0aW9uJ3MgZnVsbCBiaXQuCi0gICAgICAgICAgICAgICAgICAg
IGlmIChtX3N1YmFsbG9jYXRpb25zW2ldLmlzRnVsbCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9mdWxsIHw9IGJpdDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpICogc3VicmVn
aW9uU2l6ZSkgfCBsb2NhdGlvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBBIGJs
b2NrIGlzIGFsbG9jYXRlZCBpZiBlaXRoZXIgaXQgaXMgZnVsbHkgYWxsb2NhdGVkIG9yIGNvbnRh
aW5zIHN1YmFsbG9jYXRpb25zLgotICAgICAgICBCaXRGaWVsZCBhbGxvY2F0ZWQgPSBtX2Z1bGwg
fCBtX2hhc1N1YmFsbG9jYXRpb247Ci0KLSAgICAgICAgc2l6ZV90IGFsaWdubWVudCA9IHNpemVD
bGFzcy5ibG9ja0FsaWdubWVudCgpOwotICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3Mu
YmxvY2tDb3VudCgpOwotICAgICAgICAvLyBVc2UgdGhpcyBtYXNrIHRvIGNoZWNrIGZvciBzcGFu
cyBvZiBmcmVlIGJsb2Nrcy4KLSAgICAgICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3Vu
dCkgLSAxKSA8PCAoYWxpZ25tZW50IC0gY291bnQpOwotCi0gICAgICAgIC8vIFN0ZXAgaW4gdW5p
dHMgb2YgYWxpZ25tZW50IHNpemUuCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBl
bnRyaWVzOyBpICs9IGFsaWdubWVudCkgewotICAgICAgICAgICAgaWYgKCEoYWxsb2NhdGVkICYg
bWFzaykpIHsKLSAgICAgICAgICAgICAgICBtX2Z1bGwgfD0gbWFzazsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gKGkgKyAoYWxpZ25tZW50IC0gY291bnQpKSA8PCBsb2cyU3VicmVnaW9uU2l6ZTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2sgPDw9IGFsaWdubWVudDsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbm90Rm91bmQ7Ci0gICAgfQotCi0gICAgdm9pZCBmcmVlKHNpemVf
dCBsb2NhdGlvbiwgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzJiBzaXplQ2xhc3MpCi0gICAgewot
ICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLmJsb2NrU2l6ZSgpIDw9IHN1YnJlZ2lvblNpemUpOwot
Ci0gICAgICAgIHNpemVfdCBlbnRyeSA9IGxvY2F0aW9uID4+IGxvZzJTdWJyZWdpb25TaXplOwot
Ci0gICAgICAgIGlmIChzaXplQ2xhc3MuYmxvY2tTaXplKCkgPCBzdWJyZWdpb25TaXplKSB7Ci0g
ICAgICAgICAgICBCaXRGaWVsZCBiaXQgPSAxdWxsIDw8IGVudHJ5OwotICAgICAgICAgICAgbV9z
dWJhbGxvY2F0aW9uc1tlbnRyeV0uZnJlZShsb2NhdGlvbiAmIChzdWJyZWdpb25TaXplIC0gMSks
IHNpemVDbGFzcyk7Ci0gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgc3ViYWxsb2NhdGlvbiBp
cyBub3cgZW1wdHkuCi0gICAgICAgICAgICBpZiAobV9zdWJhbGxvY2F0aW9uc1tlbnRyeV0uaXNF
bXB0eSgpKQotICAgICAgICAgICAgICAgIG1faGFzU3ViYWxsb2NhdGlvbiAmPSB+Yml0OwotICAg
ICAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjaywgaXQgY2xlYXJseSBpc24ndCBmdWxsIGFueSBt
b3JlIQotICAgICAgICAgICAgbV9mdWxsICY9IH5iaXQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBzaXplX3QgY291bnQgPSBzaXplQ2xhc3MuYmxvY2tDb3VudCgpOwotICAgICAgICAg
ICAgQml0RmllbGQgbWFzayA9ICgoMXVsbCA8PCBjb3VudCkgLSAxKSA8PCBlbnRyeTsKLSAgICAg
ICAgICAgIEFTU0VSVCgobV9mdWxsICYgbWFzaykgPT0gbWFzayk7Ci0gICAgICAgICAgICBBU1NF
UlQoIShtX2hhc1N1YmFsbG9jYXRpb24gJiBtYXNrKSk7Ci0gICAgICAgICAgICBtX2Z1bGwgJj0g
fm1hc2s7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGlzRW1wdHkoKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuICEobV9mdWxsIHwgbV9oYXNTdWJhbGxvY2F0aW9uKTsKLSAgICB9Ci0KLSAg
ICBib29sIGlzRnVsbCgpCi0gICAgeyAgIAotICAgICAgICByZXR1cm4gIX5tX2Z1bGw7Ci0gICAg
fQotCi0gICAgc3RhdGljIHNpemVfdCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiByZWdp
b25TaXplOwotICAgIH0KLQotICAgIHN0YXRpYyBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3MgY2xh
c3NGb3JTaXplKHNpemVfdCBzaXplKQotICAgIHsKLSAgICAgICAgaWYgKHNpemUgPCBzdWJyZWdp
b25TaXplKSB7Ci0gICAgICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNz
ID0gTmV4dExldmVsOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoc2l6ZUNs
YXNzLnNpemUoKSA8IE5leHRMZXZlbDo6c2l6ZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBz
aXplQ2xhc3M7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIEFsbG9jYXRpb25UYWJsZVNpemVD
bGFzcyhzaXplLCBzdWJyZWdpb25TaXplLCBsb2cyU3VicmVnaW9uU2l6ZSk7Ci0gICAgfQotCi0j
aWZuZGVmIE5ERUJVRwotICAgIHZvaWQgZHVtcChzaXplX3QgcGFyZW50T2Zmc2V0ID0gMCwgdW5z
aWduZWQgaW5kZW50ID0gMCkKLSAgICB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBpbmRlbnQ7ICsraSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAgICIpOwotICAg
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiUwOHg6IFsiLCAoaW50KXBhcmVudE9mZnNldCk7Ci0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbnRyaWVzOyArK2kpIHsKLSAgICAgICAgICAg
IEJpdEZpZWxkIGJpdCA9IDF1bGwgPDwgaTsKLSAgICAgICAgICAgIGNoYXIgYyA9IG1faGFzU3Vi
YWxsb2NhdGlvbiAmIGJpdAotICAgICAgICAgICAgICAgID8gKG1fZnVsbCAmIGJpdCA/ICdOJyA6
ICduJykKLSAgICAgICAgICAgICAgICA6IChtX2Z1bGwgJiBiaXQgPyAnRicgOiAnLScpOwotICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlYyIsIGMpOwotICAgICAgICB9Ci0gICAgICAgIGZw
cmludGYoc3RkZXJyLCAiXVxuIik7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGVudHJpZXM7ICsraSkgewotICAgICAgICAgICAgQml0RmllbGQgYml0ID0gMXVsbCA8PCBpOwot
ICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IHBhcmVudE9mZnNldCB8IChzdWJyZWdpb25TaXpl
ICogaSk7Ci0gICAgICAgICAgICBpZiAobV9oYXNTdWJhbGxvY2F0aW9uICYgYml0KQotICAgICAg
ICAgICAgICAgIG1fc3ViYWxsb2NhdGlvbnNbaV0uZHVtcChvZmZzZXQsIGluZGVudCArIDEpOwot
ICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgTmV4dExldmVsIG1fc3Vi
YWxsb2NhdGlvbnNbZW50cmllc107Ci0gICAgLy8gU3VicmVnaW9ucyBleGlzdCBpbiBvbmUgb2Yg
Zm91ciBzdGF0ZXM6Ci0gICAgLy8gKDEpIGVtcHR5IChib3RoIGJpdHMgY2xlYXIpCi0gICAgLy8g
KDIpIGZ1bGx5IGFsbG9jYXRlZCBhcyBhIHNpbmdsZSBhbGxvY2F0aW9uIChtX2Z1bGwgc2V0KQot
ICAgIC8vICgzKSBwYXJ0aWFsbHkgYWxsb2NhdGVkIHRocm91Z2ggc3ViYWxsb2NhdGlvbnMgKG1f
aGFzU3ViYWxsb2NhdGlvbiBzZXQpCi0gICAgLy8gKDQpIGZ1bGx5IGFsbG9jYXRlZCB0aHJvdWdo
IHN1YmFsbG9jYXRpb25zIChib3RoIGJpdHMgc2V0KQotICAgIEJpdEZpZWxkIG1fZnVsbDsKLSAg
ICBCaXRGaWVsZCBtX2hhc1N1YmFsbG9jYXRpb247Ci19OwotCi0KLXR5cGVkZWYgQWxsb2NhdGlv
blRhYmxlTGVhZjw2PiBQYWdlVGFibGVzMjU2S0I7Ci10eXBlZGVmIEFsbG9jYXRpb25UYWJsZURp
cmVjdG9yeTxQYWdlVGFibGVzMjU2S0IsIDY+IFBhZ2VUYWJsZXMxNk1COwotdHlwZWRlZiBBbGxv
Y2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4s
IDE+IFBhZ2VUYWJsZXMzMk1COwotdHlwZWRlZiBBbGxvY2F0aW9uVGFibGVEaXJlY3Rvcnk8TGF6
eUFsbG9jYXRpb25UYWJsZTxQYWdlVGFibGVzMTZNQj4sIDY+IFBhZ2VUYWJsZXMxR0I7Ci0KICNp
ZiBDUFUoQVJNKQotdHlwZWRlZiBQYWdlVGFibGVzMTZNQiBGaXhlZFZNUG9vbFBhZ2VUYWJsZXM7
CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxNiAqIDEwMjQgKiAxMDI0Owog
I2VsaWYgQ1BVKFg4Nl82NCkKLXR5cGVkZWYgUGFnZVRhYmxlczFHQiBGaXhlZFZNUG9vbFBhZ2VU
YWJsZXM7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAxMDI0ICogMTAyNCAq
IDEwMjQ7CiAjZWxzZQotdHlwZWRlZiBQYWdlVGFibGVzMzJNQiBGaXhlZFZNUG9vbFBhZ2VUYWJs
ZXM7CitzdGF0aWMgY29uc3Qgc2l6ZV90IGZpeGVkUG9vbFNpemUgPSAzMiAqIDEwMjQgKiAxMDI0
OwogI2VuZGlmCiAKLQotY2xhc3MgRml4ZWRWTVBvb2xBbGxvY2F0b3IKLXsKK2NsYXNzIEZpeGVk
Vk1Qb29sRXhlY3V0YWJsZUFsbG9jYXRvcjogcHVibGljIE1ldGFBbGxvY2F0b3IgewogcHVibGlj
OgotICAgIEZpeGVkVk1Qb29sQWxsb2NhdG9yKCkKKyAgICBGaXhlZFZNUG9vbEV4ZWN1dGFibGVB
bGxvY2F0b3IoKQorICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpIC8vIHJvdW5kIHVwIGFsbCBh
bGxvY2F0aW9ucyB0byAzMiBieXRlcwogICAgIHsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJsZXMy
NTZLQjo6c2l6ZSgpID09IDI1NiAqIDEwMjQpOwotICAgICAgICBBU1NFUlQoUGFnZVRhYmxlczE2
TUI6OnNpemUoKSA9PSAxNiAqIDEwMjQgKiAxMDI0KTsKLSAgICAgICAgQVNTRVJUKFBhZ2VUYWJs
ZXMzMk1COjpzaXplKCkgPT0gMzIgKiAxMDI0ICogMTAyNCk7Ci0gICAgICAgIEFTU0VSVChQYWdl
VGFibGVzMUdCOjpzaXplKCkgPT0gMTAyNCAqIDEwMjQgKiAxMDI0KTsKLQotICAgICAgICBtX3Jl
c2VydmF0aW9uID0gUGFnZVJlc2VydmF0aW9uOjpyZXNlcnZlV2l0aEd1YXJkUGFnZXMoRml4ZWRW
TVBvb2xQYWdlVGFibGVzOjpzaXplKCksIE9TQWxsb2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhF
Q1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsKKyAgICAgICAgbV9yZXNlcnZhdGlvbiA9IFBh
Z2VSZXNlcnZhdGlvbjo6cmVzZXJ2ZVdpdGhHdWFyZFBhZ2VzKGZpeGVkUG9vbFNpemUsIE9TQWxs
b2NhdG9yOjpKU0pJVENvZGVQYWdlcywgRVhFQ1VUQUJMRV9QT09MX1dSSVRBQkxFLCB0cnVlKTsK
ICNpZiAhRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBpZiAoIWlzVmFsaWQoKSkKKyAgICAg
ICAgaWYgKCFtX3Jlc2VydmF0aW9uKQogICAgICAgICAgICAgQ1JBU0goKTsKICNlbmRpZgorICAg
ICAgICBpZiAobV9yZXNlcnZhdGlvbikgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVzZXJ2YXRp
b24uc2l6ZSgpID09IGZpeGVkUG9vbFNpemUpOworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3Bh
Y2UobV9yZXNlcnZhdGlvbi5iYXNlKCksIG1fcmVzZXJ2YXRpb24uc2l6ZSgpKTsKKyAgICAgICAg
fQogICAgIH0KLSAKLSAgICBFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxvYyhzaXplX3Qg
cmVxdWVzdGVkU2l6ZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChyZXF1ZXN0ZWRTaXplKTsKLSAg
ICAgICAgQWxsb2NhdGlvblRhYmxlU2l6ZUNsYXNzIHNpemVDbGFzcyA9IGNsYXNzRm9yU2l6ZShy
ZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgc2l6ZV90IHNpemUgPSBzaXplQ2xhc3Muc2l6ZSgpOwot
ICAgICAgICBBU1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPj0gRml4ZWRWTVBvb2xQ
YWdlVGFibGVzOjpzaXplKCkpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFs
bG9jYXRpb24oMCwgMCk7Ci0gICAgICAgIGlmIChtX3BhZ2VzLmlzRnVsbCgpKQotICAgICAgICAg
ICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKDAsIDApOwotCi0gICAgICAgIHNp
emVfdCBvZmZzZXQgPSBtX3BhZ2VzLmFsbG9jYXRlKHNpemVDbGFzcyk7Ci0gICAgICAgIGlmIChv
ZmZzZXQgPT0gbm90Rm91bmQpCi0gICAgICAgICAgICByZXR1cm4gRXhlY3V0YWJsZVBvb2w6OkFs
bG9jYXRpb24oMCwgMCk7Ci0KLSAgICAgICAgdm9pZCogcG9pbnRlciA9IG9mZnNldFRvUG9pbnRl
cihvZmZzZXQpOwotICAgICAgICBtX3Jlc2VydmF0aW9uLmNvbW1pdChwb2ludGVyLCBzaXplKTsK
LSAgICAgICAgcmV0dXJuIEV4ZWN1dGFibGVQb29sOjpBbGxvY2F0aW9uKHBvaW50ZXIsIHNpemUp
OwotICAgIH0KLQotICAgIHZvaWQgZnJlZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBhbGxv
Y2F0aW9uKQorICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCogYWxsb2NhdGVOZXdT
cGFjZShzaXplX3QmKQogICAgIHsKLSAgICAgICAgdm9pZCogcG9pbnRlciA9IGFsbG9jYXRpb24u
YmFzZSgpOwotICAgICAgICBzaXplX3Qgc2l6ZSA9IGFsbG9jYXRpb24uc2l6ZSgpOwotICAgICAg
ICBBU1NFUlQoc2l6ZSk7Ci0KLSAgICAgICAgbV9yZXNlcnZhdGlvbi5kZWNvbW1pdChwb2ludGVy
LCBzaXplKTsKLQotICAgICAgICBBbGxvY2F0aW9uVGFibGVTaXplQ2xhc3Mgc2l6ZUNsYXNzID0g
Y2xhc3NGb3JTaXplKHNpemUpOwotICAgICAgICBBU1NFUlQoc2l6ZUNsYXNzLnNpemUoKSA9PSBz
aXplKTsKLSAgICAgICAgbV9wYWdlcy5mcmVlKHBvaW50ZXJUb09mZnNldChwb2ludGVyKSwgc2l6
ZUNsYXNzKTsKKyAgICAgICAgLy8gV2UncmUgb3BlcmF0aW5nIGluIGEgZml4ZWQgcG9vbCwgc28g
bmV3IGFsbG9jYXRpb24gaXMgYWx3YXlzIHByb2hpYml0ZWQuCisgICAgICAgIHJldHVybiAwOwog
ICAgIH0KLQotICAgIHNpemVfdCBhbGxvY2F0ZWQoKQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlOZWVkUGFnZSh2b2lkKiBwYWdlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcmVzZXJ2
YXRpb24uY29tbWl0dGVkKCk7CisgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBh
Z2VTaXplKCkpOwogICAgIH0KLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgCisgICAg
dmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKICAgICB7Ci0gICAgICAg
IHJldHVybiAhIW1fcmVzZXJ2YXRpb247CisgICAgICAgIG1fcmVzZXJ2YXRpb24uZGVjb21taXQo
cGFnZSwgcGFnZVNpemUoKSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIEFsbG9jYXRpb25UYWJs
ZVNpemVDbGFzcyBjbGFzc0ZvclNpemUoc2l6ZV90IHNpemUpCi0gICAgewotICAgICAgICByZXR1
cm4gRml4ZWRWTVBvb2xQYWdlVGFibGVzOjpjbGFzc0ZvclNpemUoc2l6ZSk7Ci0gICAgfQotCi0g
ICAgdm9pZCogb2Zmc2V0VG9Qb2ludGVyKHNpemVfdCBvZmZzZXQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4o
bV9yZXNlcnZhdGlvbi5iYXNlKCkpICsgb2Zmc2V0KTsKLSAgICB9Ci0KLSAgICBzaXplX3QgcG9p
bnRlclRvT2Zmc2V0KHZvaWQqIHBvaW50ZXIpCi0gICAgewotICAgICAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikgLSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihtX3Jlc2VydmF0aW9uLmJhc2UoKSk7Ci0gICAgfQotCiAgICAgUGFnZVJlc2VydmF0aW9uIG1f
cmVzZXJ2YXRpb247Ci0gICAgRml4ZWRWTVBvb2xQYWdlVGFibGVzIG1fcGFnZXM7CiB9OwogCitz
dGF0aWMgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CiAKLXN0YXRp
YyBTcGluTG9jayBzcGlubG9jayA9IFNQSU5MT0NLX0lOSVRJQUxJWkVSOwotc3RhdGljIEZpeGVk
Vk1Qb29sQWxsb2NhdG9yKiBhbGxvY2F0b3IgPSAwOwotCit2b2lkIEV4ZWN1dGFibGVBbGxvY2F0
b3I6OmluaXRpYWxpemVBbGxvY2F0b3IoKQoreworICAgIEFTU0VSVCghYWxsb2NhdG9yKTsKKyAg
ICBhbGxvY2F0b3IgPSBuZXcgRml4ZWRWTVBvb2xFeGVjdXRhYmxlQWxsb2NhdG9yKCk7Cit9CiAK
LXNpemVfdCBFeGVjdXRhYmxlQWxsb2NhdG9yOjpjb21taXR0ZWRCeXRlQ291bnQoKQorRXhlY3V0
YWJsZUFsbG9jYXRvcjo6RXhlY3V0YWJsZUFsbG9jYXRvcihKU0dsb2JhbERhdGEmKQogewotICAg
IFNwaW5Mb2NrSG9sZGVyIGxvY2tIb2xkZXIoJnNwaW5sb2NrKTsKLSAgICByZXR1cm4gYWxsb2Nh
dG9yID8gYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA6IDA7Ci19ICAgCisgICAgQVNTRVJUKGFsbG9j
YXRvcik7Cit9CiAKIGJvb2wgRXhlY3V0YWJsZUFsbG9jYXRvcjo6aXNWYWxpZCgpIGNvbnN0CiB7
Ci0gICAgU3BpbkxvY2tIb2xkZXIgbG9ja19ob2xkZXIoJnNwaW5sb2NrKTsKLSAgICBpZiAoIWFs
bG9jYXRvcikKLSAgICAgICAgYWxsb2NhdG9yID0gbmV3IEZpeGVkVk1Qb29sQWxsb2NhdG9yKCk7
Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+aXNWYWxpZCgpOworICAgIHJldHVybiAhIWFsbG9jYXRv
ci0+Ynl0ZXNSZXNlcnZlZCgpOwogfQogCiBib29sIEV4ZWN1dGFibGVBbGxvY2F0b3I6OnVuZGVy
TWVtb3J5UHJlc3N1cmUoKQogewotICAgIC8vIFRlY2huaWNhbGx5IHdlIHNob3VsZCB0YWtlIHRo
ZSBzcGluIGxvY2sgaGVyZSwgYnV0IHdlIGRvbid0IGNhcmUgaWYgd2UgZ2V0IHN0YWxlIGRhdGEu
Ci0gICAgLy8gVGhpcyBpcyBvbmx5IHJlYWxseSBhIGhldXJpc3RpYyBhbnl3YXkuCi0gICAgcmV0
dXJuIGFsbG9jYXRvciAmJiAoYWxsb2NhdG9yLT5hbGxvY2F0ZWQoKSA+IChGaXhlZFZNUG9vbFBh
Z2VUYWJsZXM6OnNpemUoKSAvIDIpKTsKKyAgICBNZXRhQWxsb2NhdG9yOjpTdGF0aXN0aWNzIHN0
YXRpc3RpY3MgPSBhbGxvY2F0b3ItPmN1cnJlbnRTdGF0aXN0aWNzKCk7CisgICAgcmV0dXJuIHN0
YXRpc3RpY3MuYnl0ZXNBbGxvY2F0ZWQgPiBzdGF0aXN0aWNzLmJ5dGVzUmVzZXJ2ZWQgLyAyOwog
fQogCi1FeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiBFeGVjdXRhYmxlUG9vbDo6c3lzdGVtQWxs
b2Moc2l6ZV90IHNpemUpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmFsbG9jYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90
IHNpemVJbkJ5dGVzKQogewotICAgIFNwaW5Mb2NrSG9sZGVyIGxvY2tfaG9sZGVyKCZzcGlubG9j
ayk7Ci0gICAgQVNTRVJUKGFsbG9jYXRvcik7Ci0gICAgcmV0dXJuIGFsbG9jYXRvci0+YWxsb2Mo
c2l6ZSk7CisgICAgUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IHJlc3VsdCA9IGFsbG9j
YXRvci0+YWxsb2NhdGUoc2l6ZUluQnl0ZXMpOworICAgIGlmICghcmVzdWx0KSB7CisgICAgICAg
IHJlbGVhc2VFeGVjdXRhYmxlTWVtb3J5KGdsb2JhbERhdGEpOworICAgICAgICByZXN1bHQgPSBh
bGxvY2F0b3ItPmFsbG9jYXRlKHNpemVJbkJ5dGVzKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsK
K30KKworc2l6ZV90IEV4ZWN1dGFibGVBbGxvY2F0b3I6OmNvbW1pdHRlZEJ5dGVDb3VudCgpCit7
CisgICAgcmV0dXJuIGFsbG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKTsKIH0KIAotdm9pZCBFeGVj
dXRhYmxlUG9vbDo6c3lzdGVtUmVsZWFzZShFeGVjdXRhYmxlUG9vbDo6QWxsb2NhdGlvbiYgYWxs
b2NhdGlvbikgCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCit2b2lkIEV4ZWN1
dGFibGVBbGxvY2F0b3I6OmR1bXBQcm9maWxlKCkKIHsKLSAgICBTcGluTG9ja0hvbGRlciBsb2Nr
X2hvbGRlcigmc3BpbmxvY2spOwotICAgIEFTU0VSVChhbGxvY2F0b3IpOwotICAgIGFsbG9jYXRv
ci0+ZnJlZShhbGxvY2F0aW9uKTsKKyAgICBhbGxvY2F0b3ItPmR1bXBQcm9maWxlKCk7CiB9Cisj
ZW5kaWYKIAogfQogCiAKLSNlbmRpZiAvLyBIQVZFKEFTU0VNQkxFUikKKyNlbmRpZiAvLyBFTkFC
TEUoRVhFQ1VUQUJMRV9BTExPQ0FUT1JfRklYRUQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcwLDcgKzU3MCw3IEBAIEpJVENvZGUgSklUOjpwcml2
YXRlQ29tcGlsZShDb2RlUHRyKiBmdW4KIAogICAgIEFTU0VSVChtX2ptcFRhYmxlLmlzRW1wdHko
KSk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1f
Z2xvYmFsRGF0YS0+ZXhlY3V0YWJsZUFsbG9jYXRvcik7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1
ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKIAogICAgIC8vIFRyYW5zbGF0ZSB2UEMgb2Zmc2V0
cyBpbnRvIGFkZHJlc3NlcyBpbiBKSVQgZ2VuZXJhdGVkIGNvZGUsIGZvciBzd2l0Y2ggdGFibGVz
LgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N3aXRjaGVzLnNpemUoKTsgKytpKSB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDIwICsyMjEs
MjAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBqaXQucHJpdmF0ZUNvbXBpbGVQdXRC
eUlkVHJhbnNpdGlvbihzdHViSW5mbywgb2xkU3RydWN0dXJlLCBuZXdTdHJ1Y3R1cmUsIGNhY2hl
ZE9mZnNldCwgY2hhaW4sIHJldHVybkFkZHJlc3MsIGRpcmVjdCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdGF0aWMgdm9pZCBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIFRy
YW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxFeGVjdXRhYmxlTWVtb3J5SGFuZGxlPiBjb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJhbXBvbGluZXMp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIGppdC5wcml2YXRlQ29t
cGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhleGVjdXRhYmxlUG9vbCwgZ2xvYmFsRGF0YSwgdHJh
bXBvbGluZXMpOworICAgICAgICAgICAgcmV0dXJuIGppdC5wcml2YXRlQ29tcGlsZUNUSU1hY2hp
bmVUcmFtcG9saW5lcyhnbG9iYWxEYXRhLCB0cmFtcG9saW5lcyk7CiAgICAgICAgIH0KIAotICAg
ICAgICBzdGF0aWMgQ29kZVB0ciBjb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQb29sLCBOYXRp
dmVGdW5jdGlvbiBmdW5jKQorICAgICAgICBzdGF0aWMgQ29kZVJlZiBjb21waWxlQ1RJTmF0aXZl
Q2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmMpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGlmICghZ2xvYmFsRGF0YS0+Y2FuVXNlSklUKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENvZGVQdHIoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQ29kZVJl
ZigpOwogICAgICAgICAgICAgSklUIGppdChnbG9iYWxEYXRhLCAwKTsKLSAgICAgICAgICAgIHJl
dHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKGV4ZWN1dGFibGVQb29sLCBnbG9i
YWxEYXRhLCBmdW5jKTsKKyAgICAgICAgICAgIHJldHVybiBqaXQucHJpdmF0ZUNvbXBpbGVDVElO
YXRpdmVDYWxsKGdsb2JhbERhdGEsIGZ1bmMpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IHZvaWQgcGF0Y2hHZXRCeUlkU2VsZihDb2RlQmxvY2sqIGNvZGVibG9jaywgU3RydWN0dXJlU3R1
YkluZm8qLCBTdHJ1Y3R1cmUqLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRy
IHJldHVybkFkZHJlc3MpOwpAQCAtMjc0LDkgKzI3NCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIHByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJbmZvKiwg
U3RydWN0dXJlKiwgU3RydWN0dXJlQ2hhaW4qLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZp
ZXImLCBjb25zdCBQcm9wZXJ0eVNsb3QmLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRy
ZXNzUHRyIHJldHVybkFkZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKTsKICAgICAgICAgdm9p
ZCBwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW9uKFN0cnVjdHVyZVN0dWJJbmZvKiwgU3Ry
dWN0dXJlKiwgU3RydWN0dXJlKiwgc2l6ZV90IGNhY2hlZE9mZnNldCwgU3RydWN0dXJlQ2hhaW4q
LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIGJvb2wgZGlyZWN0KTsKIAotICAgICAg
ICB2b2lkIHByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRh
YmxlUG9vbD4qIGV4ZWN1dGFibGVQb29sLCBKU0dsb2JhbERhdGEqIGRhdGEsIFRyYW1wb2xpbmVT
dHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKTsKKyAgICAgICAgUGFzc1JlZlB0cjxFeGVjdXRhYmxlTWVt
b3J5SGFuZGxlPiBwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERh
dGEqLCBUcmFtcG9saW5lU3RydWN0dXJlKik7CiAgICAgICAgIExhYmVsIHByaXZhdGVDb21waWxl
Q1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqLCBib29sIGlzQ29uc3RydWN0ID0gZmFsc2UpOwot
ICAgICAgICBDb2RlUHRyIHByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4
ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBkYXRhLCBOYXRpdmVG
dW5jdGlvbiBmdW5jKTsKKyAgICAgICAgQ29kZVJlZiBwcml2YXRlQ29tcGlsZUNUSU5hdGl2ZUNh
bGwoSlNHbG9iYWxEYXRhKiwgTmF0aXZlRnVuY3Rpb24pOwogICAgICAgICB2b2lkIHByaXZhdGVD
b21waWxlUGF0Y2hHZXRBcnJheUxlbmd0aChSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3Mp
OwogCiAgICAgICAgIHZvaWQgYWRkU2xvd0Nhc2UoSnVtcCk7CkBAIC0xMDUwLDcgKzEwNTAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogI2VuZGlmCiAgICAgICAgIFdlYWtSYW5kb20gbV9y
YW5kb21HZW5lcmF0b3I7Ci0gICAgICAgIHN0YXRpYyBDb2RlUHRyIHN0cmluZ0dldEJ5VmFsU3R1
YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29s
KTsKKyAgICAgICAgc3RhdGljIENvZGVSZWYgc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKEpT
R2xvYmFsRGF0YSopOwogICAgICAgICAKICNpZiBFTkFCTEUoVElFUkVEX0NPTVBJTEFUSU9OKQog
ICAgICAgICBib29sIG1fY2FuQmVPcHRpbWl6ZWQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtODMsMTIgKzgzLDEyIEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgYm9vbCBvcGVyYXRvciAhKCkgY29uc3QKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICFtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
KyAgICAgICAgICAgIHJldHVybiAhbV9yZWY7CiAgICAgICAgIH0KIAogICAgICAgICBDb2RlUHRy
IGFkZHJlc3NGb3JDYWxsKCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1f
Y29kZTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCBpbiBieXRlcyBvZiAncG9p
bnRlckludG9Db2RlJyBpbnRvCkBAIC05Niw3ICs5Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAvLyBibG9jayBvZiBjb2RlLiAgSXQgaXMgQVNTRVJUZWQgdGhhdCBubyBjb2RlYmxvY2sg
PjRnYiBpbiBzaXplLgogICAgICAgICB1bnNpZ25lZCBvZmZzZXRPZih2b2lkKiBwb2ludGVySW50
b0NvZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGludHB0cl90IHJlc3VsdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXJJbnRvQ29kZSkgLSByZWludGVycHJldF9jYXN0PGlu
dHB0cl90PihtX3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICBp
bnRwdHJfdCByZXN1bHQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90Pihwb2ludGVySW50b0Nv
ZGUpIC0gcmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4obV9yZWYuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogICAgICAgICAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludHB0cl90PihzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KSkgPT0gcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmVzdWx0KTsKICAgICAgICAgfQpAQCAtMTA0LDI0ICsx
MDQsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIC8vIEV4ZWN1dGUgdGhlIGNvZGUhCiAg
ICAgICAgIGlubGluZSBKU1ZhbHVlIGV4ZWN1dGUoUmVnaXN0ZXJGaWxlKiByZWdpc3RlckZpbGUs
IENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1w
b2xpbmUobV9yZWYubV9jb2RlLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwgY2Fs
bEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2JhbERh
dGEpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRy
YW1wb2xpbmUobV9yZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCksIHJlZ2lzdGVyRmlsZSwg
Y2FsbEZyYW1lLCAwLCBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCksIGdsb2Jh
bERhdGEpKTsKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxEYXRhLT5leGNlcHRpb24gPyBqc051
bGwoKSA6IHJlc3VsdDsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQqIHN0YXJ0KCkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIG1fcmVmLm1fY29kZS5kYXRhTG9jYXRpb24oKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX3JlZi5jb2RlKCkuZGF0YUxvY2F0aW9uKCk7CiAgICAgICAgIH0K
IAogICAgICAgICBzaXplX3Qgc2l6ZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCht
X3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Ci0gICAgICAgICAgICByZXR1cm4gbV9y
ZWYubV9zaXplOworICAgICAgICAgICAgQVNTRVJUKG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiBtX3JlZi5zaXplKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBFeGVjdXRhYmxlUG9vbCogZ2V0RXhlY3V0YWJsZVBvb2woKQorICAgICAgICBFeGVj
dXRhYmxlTWVtb3J5SGFuZGxlKiBnZXRFeGVjdXRhYmxlTWVtb3J5KCkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fcmVmLm1fZXhlY3V0YWJsZVBvb2wuZ2V0KCk7CisgICAgICAgICAg
ICByZXR1cm4gbV9yZWYuZXhlY3V0YWJsZU1lbW9yeSgpOwogICAgICAgICB9CiAgICAgICAgIAog
ICAgICAgICBKSVRUeXBlIGppdFR5cGUoKQpAQCAtMTMxLDkgKzEzMSw5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIC8vIEhvc3QgZnVuY3Rpb25zIGFyZSBhIGJpdCBzcGVjaWFsOyB0aGV5
IGhhdmUgYSBtX2NvZGUgcG9pbnRlciBidXQgdGhleQogICAgICAgICAvLyBkbyBub3QgaW5kaXZp
ZHVsbHkgcmVmIHRoZSBleGVjdXRhYmxlIHBvb2wgY29udGFpbmluZyB0aGUgdHJhbXBvbGluZS4K
LSAgICAgICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVQdHIgY29kZSkKKyAgICAg
ICAgc3RhdGljIEpJVENvZGUgSG9zdEZ1bmN0aW9uKENvZGVSZWYgY29kZSkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIEpJVENvZGUoY29kZS5kYXRhTG9jYXRpb24oKSwgMCwgMCwgSG9z
dENhbGxUaHVuayk7CisgICAgICAgICAgICByZXR1cm4gSklUQ29kZShjb2RlLCBIb3N0Q2FsbFRo
dW5rKTsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgY2xlYXIoKQpAQCAtMTQzLDggKzE0Myw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICBwcml2YXRlOgotICAgICAgICBK
SVRDb2RlKHZvaWQqIGNvZGUsIFBhc3NSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IGV4ZWN1dGFibGVQ
b29sLCBzaXplX3Qgc2l6ZSwgSklUVHlwZSBqaXRUeXBlKQotICAgICAgICAgICAgOiBtX3JlZihj
b2RlLCBleGVjdXRhYmxlUG9vbCwgc2l6ZSkKKyAgICAgICAgSklUQ29kZShQYXNzUmVmUHRyPEV4
ZWN1dGFibGVNZW1vcnlIYW5kbGU+IGV4ZWN1dGFibGVNZW1vcnksIEpJVFR5cGUgaml0VHlwZSkK
KyAgICAgICAgICAgIDogbV9yZWYoZXhlY3V0YWJsZU1lbW9yeSkKICAgICAgICAgICAgICwgbV9q
aXRUeXBlKGppdFR5cGUpCiAgICAgICAgIHsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAkocmV2aXNpb24gOTQ4MzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
KiBleGVjdXRhYmxlUG9vbCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBUcmFtcG9saW5lU3Ry
dWN0dXJlICp0cmFtcG9saW5lcykKK1Bhc3NSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4g
SklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgKnRyYW1wb2xpbmVzKQogewogI2lmIEVOQUJM
RShKSVRfVVNFX1NPRlRfTU9EVUxPKQogICAgIExhYmVsIHNvZnRNb2RCZWdpbiA9IGFsaWduKCk7
CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRy
YW1wbwogICAgIENhbGwgc3RyaW5nX2ZhaWx1cmVDYXNlczNDYWxsID0gbWFrZVRhaWxSZWN1cnNp
dmVDYWxsKHN0cmluZ19mYWlsdXJlQ2FzZXMzKTsKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBj
b25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwgbGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9p
bnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIo
Km1fZ2xvYmFsRGF0YSwgdGhpcywgbV9nbG9iYWxEYXRhLT5leGVjdXRhYmxlQWxsb2NhdG9yKTsK
KyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAg
cGF0Y2hCdWZmZXIubGluayhzdHJpbmdfZmFpbHVyZUNhc2VzMUNhbGwsIEZ1bmN0aW9uUHRyKGN0
aV9vcF9nZXRfYnlfaWRfc3RyaW5nX2ZhaWwpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKHN0cmlu
Z19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9zdHJpbmdf
ZmFpbCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG8KICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxDb21waWxlQ2NvbnN0cnVjdCwg
RnVuY3Rpb25QdHIoY3RpX29wX2NvbnN0cnVjdF9qaXRDb21waWxlKSk7CiAKICAgICBDb2RlUmVm
IGZpbmFsQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwotICAgICpleGVjdXRhYmxl
UG9vbCA9IGZpbmFsQ29kZS5tX2V4ZWN1dGFibGVQb29sOworICAgIFJlZlB0cjxFeGVjdXRhYmxl
TWVtb3J5SGFuZGxlPiBleGVjdXRhYmxlTWVtb3J5ID0gZmluYWxDb2RlLmV4ZWN1dGFibGVNZW1v
cnkoKTsKIAogICAgIHRyYW1wb2xpbmVzLT5jdGlWaXJ0dWFsQ2FsbCA9IHBhdGNoQnVmZmVyLnRy
YW1wb2xpbmVBdCh2aXJ0dWFsQ2FsbEJlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVh
bENvbnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdCh2aXJ0dWFsQ29uc3RydWN0QmVn
aW4pOwpAQCAtMTc1LDYgKzE3NSw4IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hp
bmVUcmFtcG8KICNpZiBFTkFCTEUoSklUX1VTRV9TT0ZUX01PRFVMTykKICAgICB0cmFtcG9saW5l
cy0+Y3RpU29mdE1vZHVsbyA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChzb2Z0TW9kQmVnaW4p
OwogI2VuZGlmCisgICAgCisgICAgcmV0dXJuIGV4ZWN1dGFibGVNZW1vcnkucmVsZWFzZSgpOwog
fQogCiBKSVQ6OkxhYmVsIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgYm9vbCBpc0NvbnN0cnVjdCkKQEAgLTMxMiwxMCArMzE0LDkgQEAg
SklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQwogICAgIHJldHVybiBuYXRp
dmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0
aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBleGVjdXRhYmxlUG9vbCwgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbiBmdW5jKQorSklUOjpDb2RlUmVmIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVDVElOYXRpdmVDYWxsKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
TmF0aXZlRnVuY3Rpb24gZnVuYykKIHsKICAgICBDYWxsIG5hdGl2ZUNhbGw7Ci0gICAgTGFiZWwg
bmF0aXZlQ2FsbFRodW5rID0gYWxpZ24oKTsKIAogICAgIGVtaXRQdXRJbW1lZGlhdGVUb0NhbGxG
cmFtZUhlYWRlcigwLCBSZWdpc3RlckZpbGU6OkNvZGVCbG9jayk7CiAKQEAgLTQ0NywxMiArNDQ4
LDEwIEBAIEpJVDo6Q29kZVB0ciBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXYKICAgICByZXQo
KTsKIAogICAgIC8vIEFsbCB0cmFtcG9saW5lcyBjb25zdHJ1Y3RlZCEgY29weSB0aGUgY29kZSwg
bGluayB1cCBjYWxscywgYW5kIHNldCB0aGUgcG9pbnRlcnMgb24gdGhlIE1hY2hpbmUgb2JqZWN0
LgotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgZXhlY3V0
YWJsZVBvb2wpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKG5hdGl2ZUNhbGwsIEZ1bmN0aW9uUHRyKGZ1bmMp
KTsKLSAgICBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLQotICAgIHJldHVybiBwYXRjaEJ1
ZmZlci50cmFtcG9saW5lQXQobmF0aXZlQ2FsbFRodW5rKTsKKyAgICByZXR1cm4gcGF0Y2hCdWZm
ZXIuZmluYWxpemVDb2RlKCk7CiB9CiAKIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICNpZiBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJs
ZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVHJhbXBvbGluZVN0cnVjdHVyZSAqdHJh
bXBvbGluZXMpCitQYXNzUmVmUHRyPEV4ZWN1dGFibGVNZW1vcnlIYW5kbGU+IEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBU
cmFtcG9saW5lU3RydWN0dXJlICp0cmFtcG9saW5lcykKIHsKICAgICAvLyAoMikgVGhlIHNlY29u
ZCBmdW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3Igc3RyaW5nIGxlbmd0
aAogICAgIExhYmVsIHN0cmluZ0xlbmd0aEJlZ2luID0gYWxpZ24oKTsKQEAgLTE1Myw3ICsxNTMs
NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvCiAgICAgQ2FsbCBz
dHJpbmdfZmFpbHVyZUNhc2VzM0NhbGwgPSBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoc3RyaW5nX2Zh
aWx1cmVDYXNlczMpOwogCiAgICAgLy8gQWxsIHRyYW1wb2xpbmVzIGNvbnN0cnVjdGVkISBjb3B5
IHRoZSBjb2RlLCBsaW5rIHVwIGNhbGxzLCBhbmQgc2V0IHRoZSBwb2ludGVycyBvbiB0aGUgTWFj
aGluZSBvYmplY3QuCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0
aGlzLCBtX2dsb2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IpOworICAgIExpbmtCdWZmZXIg
cGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN0cmluZ19mYWlsdXJlQ2FzZXMxQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczJD
YWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CkBAIC0xNjQs
NyArMTY0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wbwogICAg
IHBhdGNoQnVmZmVyLmxpbmsoY2FsbENvbXBpbGVDb25zdHJ1Y3QsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9jb25zdHJ1Y3Rfaml0Q29tcGlsZSkpOwogCiAgICAgQ29kZVJlZiBmaW5hbENvZGUgPSBwYXRj
aEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKLSAgICAqZXhlY3V0YWJsZVBvb2wgPSBmaW5hbENvZGUu
bV9leGVjdXRhYmxlUG9vbDsKKyAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gZXhl
Y3V0YWJsZU1lbW9yeSA9IGZpbmFsQ29kZS5leGVjdXRhYmxlTWVtb3J5KCk7CiAKICAgICB0cmFt
cG9saW5lcy0+Y3RpVmlydHVhbENhbGxMaW5rID0gcGF0Y2hCdWZmZXIudHJhbXBvbGluZUF0KHZp
cnR1YWxDYWxsTGlua0JlZ2luKTsKICAgICB0cmFtcG9saW5lcy0+Y3RpVmlydHVhbENvbnN0cnVj
dExpbmsgPSBwYXRjaEJ1ZmZlci50cmFtcG9saW5lQXQodmlydHVhbENvbnN0cnVjdExpbmtCZWdp
bik7CkBAIC0xNzMsNiArMTczLDggQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wbwogICAgIHRyYW1wb2xpbmVzLT5jdGlOYXRpdmVDYWxsID0gcGF0Y2hCdWZmZXIudHJh
bXBvbGluZUF0KG5hdGl2ZUNhbGxUaHVuayk7CiAgICAgdHJhbXBvbGluZXMtPmN0aU5hdGl2ZUNv
bnN0cnVjdCA9IHBhdGNoQnVmZmVyLnRyYW1wb2xpbmVBdChuYXRpdmVDb25zdHJ1Y3RUaHVuayk7
CiAgICAgdHJhbXBvbGluZXMtPmN0aVN0cmluZ0xlbmd0aFRyYW1wb2xpbmUgPSBwYXRjaEJ1ZmZl
ci50cmFtcG9saW5lQXQoc3RyaW5nTGVuZ3RoQmVnaW4pOworICAgIAorICAgIHJldHVybiBleGVj
dXRhYmxlTWVtb3J5LnJlbGVhc2UoKTsKIH0KIAogSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGJvb2wgaXNDb25zdHJ1
Y3QpCkBAIC0yOTEsOSArMjkzLDkgQEAgSklUOjpMYWJlbCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJ
TmF0aXZlQwogICAgIHJldHVybiBuYXRpdmVDYWxsVGh1bms7CiB9CiAKLUpJVDo6Q29kZVB0ciBK
SVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChQYXNzUmVmUHRyPEV4ZWN1dGFibGVQb29s
PiwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBOYXRpdmVGdW5jdGlvbikKK0pJVDo6Q29kZVJl
ZiBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTmF0aXZlQ2FsbChKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIE5hdGl2ZUZ1bmN0aW9uKQogewotICAgIHJldHVybiBnbG9iYWxEYXRhLT5qaXRTdHVicy0+
Y3RpTmF0aXZlQ2FsbCgpOworICAgIHJldHVybiBDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENv
ZGVSZWYoZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAKIHZvaWQg
SklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbWV0aG9kX2NoZWNrKEluc3RyCiAgICAgbV9ieXRlY29k
ZU9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2dldF9ieV9pZCk7CiB9CiAKLUpJVDo6Q29kZVB0
ciBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorSklUOjpDb2RlUmVmIEpJVDo6c3RyaW5nR2V0QnlW
YWxTdHViR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKICAgICBKU0ludGVy
ZmFjZUpJVCBqaXQ7CiAgICAgSnVtcExpc3QgZmFpbHVyZXM7CkBAIC0xOTMsOCArMTkzLDggQEAg
SklUOjpDb2RlUHRyIEpJVDo6c3RyaW5nR2V0QnlWYWxTdHViR2VuZQogICAgIGppdC5tb3ZlKFRy
dXN0ZWRJbW0zMigwKSwgcmVnVDApOwogICAgIGppdC5yZXQoKTsKICAgICAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBwb29sKTsKLSAgICByZXR1cm4gcGF0
Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZm
ZXIoKmdsb2JhbERhdGEsICZqaXQpOworICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNv
ZGUoKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQpAQCAtMjMyLDcgKzIzMiw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9nZXRfYnlfdmFsKEluc3RydWMKICAgICBKdW1wIG5vbkNlbGwgPSBqdW1wKCk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOyAvLyBiYXNlIGFycmF5IGNoZWNrCiAgICAgSnVtcCBub3RTdHJpbmcg
PSBicmFuY2hQdHIoTm90RXF1YWwsIEFkZHJlc3MocmVnVDApLCBUcnVzdGVkSW1tUHRyKG1fZ2xv
YmFsRGF0YS0+anNTdHJpbmdWUHRyKSk7Ci0gICAgZW1pdE5ha2VkQ2FsbChtX2dsb2JhbERhdGEt
PmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9yKSk7CisgICAgZW1pdE5ha2Vk
Q2FsbChtX2dsb2JhbERhdGEtPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxTdHViR2VuZXJhdG9y
KS5jb2RlKCkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7
CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTQxLDcgKzU0MSw3
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2FsbCA9
IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAgICAgCi0gICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigq
bV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhlY3V0YWJsZVBvb2woKSk7CisgICAg
TGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzKTsKICAgICAKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYWxsLCBGdW5jdGlvblB0cihkaXJlY3QgPyBjdGlfb3Bf
cHV0X2J5X2lkX2RpcmVjdF9mYWlsIDogY3RpX29wX3B1dF9ieV9pZF9mYWlsKSk7CiAgICAgCkBA
IC01NTAsMTAgKzU1MCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0
aW8KICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRy
KGN0aV9vcF9wdXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAg
IENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVB
ZGRlbmR1bSgpOwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAg
c3R1YkluZm8tPnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAg
UmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVm
ZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsK
KyAgICByZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNz
LCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAK
IHZvaWQgSklUOjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVk
T2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MDYsNyArNjA1LDcg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIG1vdmUoVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSwgcmVnVDEpOwogICAgIEp1bXAgc3VjY2VzcyA9
IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KICAgICBDb2RlTG9jYXRpb25MYWJlbCBzbG93Q2FzZUJl
Z2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9m
ZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwpAQCAtNjE3LDEzICs2MTYsMTIgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIHN0dWJJbmZvLT5zdHVi
Um91dGluZSA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgIAogICAgIC8vIEZpbmFs
bHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1
bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1
YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNo
VG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2Nr
KTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwo
c3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2UgLSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9i
eV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihy
ZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX2FycmF5X2ZhaWwpKTsK
QEAgLTY2Niw3ICs2NjQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8o
U3RyCiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAotICAgIExpbmtCdWZm
ZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFi
bGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhp
cyk7CiAgICAgCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBm
YWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgogICAg
IENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CkBA
IC02ODQsMTMgKzY4MiwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG8o
U3RyCiAgICAgfQogCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRo
YXQgaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGVudHJ5
TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwotICAgIHN0dWJJbmZv
LT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0
aGUganVtcCB0byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGlu
c3RlYWQuCiAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNl
KTsKICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby0+
c3R1YlJvdXRpbmUuY29kZSgpKSk7CiAgICAgCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRj
aCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVy
aWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJl
c3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9nZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzIzLDcg
KzcyMCw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKIAogICAg
IEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVy
KCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChu
ZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRv
ciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikg
ewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtNzMxLDcgKzcyOCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgfQogICAgIH0gICAgCiAg
ICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBsaW5rIHRoZSBmYWlsdXJlIGNhc2Vz
IGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0aW5lLgotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJl
bnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lOworICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90
b0JlZ2luID0gQ29kZUxvY2F0aW9uTGFiZWwocG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1
cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAgICAgaWYgKCFsYXN0UHJvdG9C
ZWdpbikKICAgICAgICAgbGFzdFByb3RvQmVnaW4gPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCk7CiAgICAg
CkBAIC03NDAsMTQgKzczNywxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OworICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsK
IAotICAgIHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgqbV9n
bG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWwsIHN0
cnVjdHVyZSk7CisgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0u
c2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJv
dXRpbmUsIHN0cnVjdHVyZSk7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0
byBzbG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAg
ICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2lu
Lmp1bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBS
ZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkp
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdChTdHJ1Y3R1
cmVTdHViSW5mbyogc3R1YkluZm8sIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogcHJv
dG90eXBlU3RydWN0dXJlcywgaW50IGN1cnJlbnRJbmRleCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFN0cnVjdHVyZSogcHJvdG90eXBlU3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwg
Y29uc3QgUHJvcGVydHlTbG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKQEAgLTc4Nyw3ICs3ODQsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVH
ZXRCeUlkUHJvdG9MaXN0CiAgICAgCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogICAgIAot
ICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcywgbV9jb2RlQmxv
Y2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcyk7CiAgICAgaWYgKG5lZWRzU3R1YkxpbmspIHsKICAgICAgICAgZm9yIChW
ZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2NhbGxzLmJlZ2luKCk7IGl0ZXIg
IT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICBpZiAoaXRlci0+dG8pCkBA
IC03OTUsMjEgKzc5MiwyMSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkUHJvdG9M
aXN0CiAgICAgICAgIH0KICAgICB9CiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0
byBsaW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSBy
b3V0aW5lLgotICAgIENvZGVMb2NhdGlvbkxhYmVsIGxhc3RQcm90b0JlZ2luID0gcHJvdG90eXBl
U3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2Rl
TG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHByb3RvdHlw
ZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmUuY29kZSgpKTsK
ICAgICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczEsIGxhc3RQcm90b0JlZ2luKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZhaWx1cmVDYXNlczIsIGxhc3RQcm90b0JlZ2luKTsKICAgICAK
ICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0Y2ggY29kZSwgYXQg
YSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9yIHVzLgogICAgIHBh
dGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zm
c2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogICAgIAotICAgIENvZGVMb2NhdGlv
bkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgpOwor
ICAgIENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKIAot
ICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1l
LT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJl
bCwgc3RydWN0dXJlLCBwcm90b3R5cGVTdHJ1Y3R1cmUpOworICAgIHByb3RvdHlwZVN0cnVjdHVy
ZXMtPmxpc3RbY3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29k
ZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUsIHN0cnVjdHVyZSwgcHJvdG90
eXBlU3RydWN0dXJlKTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1wIHRvIHNs
b3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4KICAgICBD
b2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4uanVt
cEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAgIFJlcGF0
Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUoKSkpOwog
fQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW5MaXN0KFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KiBwcm90b3R5
cGVTdHJ1Y3R1cmVzLCBpbnQgY3VycmVudEluZGV4LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgU3Ry
dWN0dXJlQ2hhaW4qIGNoYWluLCBzaXplX3QgY291bnQsIGNvbnN0IElkZW50aWZpZXImIGlkZW50
LCBjb25zdCBQcm9wZXJ0eVNsb3QmIHNsb3QsIHNpemVfdCBjYWNoZWRPZmZzZXQsIENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtODU0LDcgKzg1MSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGls
ZUdldEJ5SWRDaGFpbkxpc3QKIAogICAgIEp1bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2Nr
LT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2Jh
bERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVj
dG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9
IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewogICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAt
ODYyLDIyICs4NTksMjIgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlz
dAogICAgICAgICB9CiAgICAgfQogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8g
bGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91
dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHByb3RvdHlwZVN0
cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJvdXRpbmU7CisgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRpb25MYWJlbChwcm90b3R5cGVT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJSb3V0aW5lLmNvZGUoKSk7CiAg
ICAgCiAgICAgcGF0Y2hCdWZmZXIubGluayhidWNrZXRzT2ZGYWlsLCBsYXN0UHJvdG9CZWdpbik7
CiAgICAgCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKICAgICAKLSAgICBDb2Rl
TG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5k
dW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
KCk7CiAgICAgCiAgICAgLy8gVHJhY2sgdGhlIHN0dWIgd2UgaGF2ZSBjcmVhdGVkIHNvIHRoYXQg
aXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyLgotICAgIHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3Rb
Y3VycmVudEluZGV4XS5zZXQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIG1fY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKSwgZW50cnlMYWJlbCwgc3RydWN0dXJlLCBjaGFpbik7CisgICAgcHJv
dG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2Jh
bERhdGEoKSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3Ry
dWN0dXJlLCBjaGFpbik7CiAgICAgCiAgICAgLy8gRmluYWxseSBwYXRjaCB0aGUganVtcCB0byBz
bG93IGNhc2UgYmFjayBpbiB0aGUgaG90IHBhdGggdG8ganVtcCBoZXJlIGluc3RlYWQuCiAgICAg
Q29kZUxvY2F0aW9uSnVtcCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby0+aG90UGF0aEJlZ2luLmp1
bXBBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlKTsKICAgICBSZXBh
dGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIobV9jb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZmZXIu
cmVsaW5rKGp1bXBMb2NhdGlvbiwgZW50cnlMYWJlbCk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxp
bmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91dGluZS5jb2RlKCkpKTsK
IH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cnVjdHVyZVN0dWJJ
bmZvKiBzdHViSW5mbywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFN0cnVjdHVyZUNoYWluKiBjaGFp
biwgc2l6ZV90IGNvdW50LCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgY29uc3QgUHJvcGVydHlT
bG90JiBzbG90LCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFk
ZHJlc3MsIENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtOTIxLDcgKzkxOCw3IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICAgICAgY29tcGlsZUdldERpcmVj
dE9mZnNldChwcm90b09iamVjdCwgcmVnVDEsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1
bXAgc3VjY2VzcyA9IGp1bXAoKTsKICAgICAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogICAgIGlmIChuZWVk
c1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBp
dGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikgewog
ICAgICAgICAgICAgaWYgKGl0ZXItPnRvKQpAQCAtOTM1LDEzICs5MzIsMTMgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWluKFN0cgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3Vj
Y2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0
QnlJZFB1dFJlc3VsdCkpOwogICAgIAogICAgIC8vIFRyYWNrIHRoZSBzdHViIHdlIGhhdmUgY3Jl
YXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAgICBDb2RlTG9jYXRpb25M
YWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlQWRkZW5kdW0oKTsKLSAg
ICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAgIENvZGVSZWYgc3R1YlJv
dXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBzdHViSW5mby0+c3R1YlJv
dXRpbmUgPSBzdHViUm91dGluZTsKICAgICAKICAgICAvLyBGaW5hbGx5IHBhdGNoIHRoZSBqdW1w
IHRvIHNsb3cgY2FzZSBiYWNrIGluIHRoZSBob3QgcGF0aCB0byBqdW1wIGhlcmUgaW5zdGVhZC4K
ICAgICBDb2RlTG9jYXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLT5ob3RQYXRoQmVn
aW4uanVtcEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xvd0Nhc2UpOwogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihtX2NvZGVCbG9jayk7Ci0gICAgcmVwYXRjaEJ1
ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBlbnRyeUxhYmVsKTsKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluayhqdW1wTG9jYXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLmNvZGUo
KSkpOwogICAgIAogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcGF0Y2ggbW9yZSB0aGFuIG9uY2Ug
LSBpbiBmdXR1cmUgZ28gdG8gY3RpX29wX3B1dF9ieV9pZF9nZW5lcmljLgogICAgIHJlcGF0Y2hC
dWZmZXIucmVsaW5rQ2FsbGVyVG9GdW5jdGlvbihyZXR1cm5BZGRyZXNzLCBGdW5jdGlvblB0cihj
dGlfb3BfZ2V0X2J5X2lkX3Byb3RvX2xpc3QpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgSlND
IHsKICNpZiBVU0UoSlNWQUxVRTY0KQogCi1KSVQ6OkNvZGVQdHIgSklUOjpzdHJpbmdHZXRCeVZh
bFN0dWJHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCog
cG9vbCkKK0pJVDo6Q29kZVJlZiBKSVQ6OnN0cmluZ0dldEJ5VmFsU3R1YkdlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEpCiB7CiAgICAgSlNJbnRlcmZhY2VKSVQgaml0OwogICAgIEp1
bXBMaXN0IGZhaWx1cmVzOwpAQCAtNzcsOCArNzcsOCBAQCBKSVQ6OkNvZGVQdHIgSklUOjpzdHJp
bmdHZXRCeVZhbFN0dWJHZW5lCiAgICAgaml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZWdUMCk7
CiAgICAgaml0LnJldCgpOwogICAgIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2Jh
bERhdGEsICZqaXQsIHBvb2wpOwotICAgIHJldHVybiBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUo
KS5tX2NvZGU7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCk7
CisgICAgcmV0dXJuIHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogfQogCiB2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCkBAIC0x
MjIsNyArMTIyLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1Ywog
ICAgIEp1bXAgbm9uQ2VsbCA9IGp1bXAoKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGJh
c2UgYXJyYXkgY2hlY2sKICAgICBKdW1wIG5vdFN0cmluZyA9IGJyYW5jaFB0cihOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMCksIFRydXN0ZWRJbW1QdHIobV9nbG9iYWxEYXRhLT5qc1N0cmluZ1ZQdHIp
KTsKLSAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRC
eVZhbFN0dWJHZW5lcmF0b3IpKTsKKyAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVs
KG1fZ2xvYmFsRGF0YS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbFN0dWJHZW5lcmF0b3IpLmNv
ZGUoKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMCk7CiAg
ICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QsIHJlZ1QwKTsKICAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwpAQCAtNTU1LDcgKzU1
NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICByZXN0
b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCk7CiAgICAgQ2FsbCBmYWlsdXJlQ2Fs
bCA9IHRhaWxSZWN1cnNpdmVDYWxsKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpt
X2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBM
aW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgcGF0Y2hC
dWZmZXIubGluayhmYWlsdXJlQ2FsbCwgRnVuY3Rpb25QdHIoZGlyZWN0ID8gY3RpX29wX3B1dF9i
eV9pZF9kaXJlY3RfZmFpbCA6IGN0aV9vcF9wdXRfYnlfaWRfZmFpbCkpOwogCkBAIC01NjQsMTAg
KzU2NCw5IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZVB1dEJ5SWRUcmFuc2l0aW8KICAgICAg
ICAgcGF0Y2hCdWZmZXIubGluayhtX2NhbGxzWzBdLmZyb20sIEZ1bmN0aW9uUHRyKGN0aV9vcF9w
dXRfYnlfaWRfdHJhbnNpdGlvbl9yZWFsbG9jKSk7CiAgICAgfQogICAgIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OwotICAgIHN0dWJJbmZvLT5zdHViUm91dGluZSA9IGVudHJ5TGFiZWw7CisgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCk7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
a0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBlbnRyeUxhYmVsKTsKKyAgICByZXBh
dGNoQnVmZmVyLnJlbGlua0NhbGxlclRvVHJhbXBvbGluZShyZXR1cm5BZGRyZXNzLCBDb2RlTG9j
YXRpb25MYWJlbChzdHViSW5mby0+c3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklU
OjpwYXRjaEdldEJ5SWRTZWxmKENvZGVCbG9jayogY29kZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBzaXplX3QgY2FjaGVkT2Zmc2V0LCBS
ZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MpCkBAIC02MTUsNyArNjE0LDcgQEAgdm9pZCBK
SVQ6OnByaXZhdGVDb21waWxlUGF0Y2hHZXRBcnJheUxlbgogICAgIGVtaXRGYXN0QXJpdGhJbnRU
b0ltbU5vQ2hlY2socmVnVDIsIHJlZ1QwKTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAK
LSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJs
b2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2ds
b2JhbERhdGEsIHRoaXMpOwogCiAgICAgLy8gVXNlIHRoZSBwYXRjaCBpbmZvcm1hdGlvbiB0byBs
aW5rIHRoZSBmYWlsdXJlIGNhc2VzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNsb3cgY2FzZSByb3V0
aW5lLgogICAgIENvZGVMb2NhdGlvbkxhYmVsIHNsb3dDYXNlQmVnaW4gPSBzdHViSW5mby0+Y2Fs
bFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoLXBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNl
Q2FsbCk7CkBAIC02MjYsMTMgKzYyNSwxMiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVQYXRj
aEdldEFycmF5TGVuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90
UGF0aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAK
ICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJl
IGRlbGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNo
QnVmZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5l
ID0gZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5m
aW5hbGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBj
YXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVM
b2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRP
ZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGlu
ayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1
bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUo
KSkpOwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGlu
IGZ1dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9v
cF9nZXRfYnlfaWRfYXJyYXlfZmFpbCkpOwpAQCAtNjczLDcgKzY3MSw3IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICB9IGVsc2UKICAgICAgICAgY29tcGls
ZUdldERpcmVjdE9mZnNldChwcm90b09iamVjdCwgcmVnVDAsIGNhY2hlZE9mZnNldCk7CiAgICAg
SnVtcCBzdWNjZXNzID0ganVtcCgpOwotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xv
YmFsRGF0YSwgdGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtC
dWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICAvLyBVc2UgdGhl
IHBhdGNoIGluZm9ybWF0aW9uIHRvIGxpbmsgdGhlIGZhaWx1cmUgY2FzZXMgYmFjayB0byB0aGUg
b3JpZ2luYWwgc2xvdyBjYXNlIHJvdXRpbmUuCiAgICAgQ29kZUxvY2F0aW9uTGFiZWwgc2xvd0Nh
c2VCZWdpbiA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgtcGF0
Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKQEAgLTY5MCwxMyArNjg4LDEyIEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90byhTdHIKICAgICAgICAgfQogICAgIH0KICAg
ICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhhdCBpdCB3aWxsIGJlIGRl
bGV0ZWQgbGF0ZXIuCi0gICAgQ29kZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVm
ZmVyLmZpbmFsaXplQ29kZUFkZGVuZHVtKCk7Ci0gICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0g
ZW50cnlMYWJlbDsKKyAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5h
bGl6ZUNvZGUoKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNl
IGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2Nh
dGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZz
ZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhq
dW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBM
b2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8tPnN0dWJSb3V0aW5lLmNvZGUoKSkp
OwogCiAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBwYXRjaCBtb3JlIHRoYW4gb25jZSAtIGluIGZ1
dHVyZSBnbyB0byBjdGlfb3BfcHV0X2J5X2lkX2dlbmVyaWMuCiAgICAgcmVwYXRjaEJ1ZmZlci5y
ZWxpbmtDYWxsZXJUb0Z1bmN0aW9uKHJldHVybkFkZHJlc3MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfaWRfcHJvdG9fbGlzdCkpOwpAQCAtNzI2LDcgKzcyMyw3IEBAIHZvaWQgSklUOjpwcml2
YXRlQ29tcGlsZUdldEJ5SWRTZWxmTGlzdCgKICAgICAgICAgY29tcGlsZUdldERpcmVjdE9mZnNl
dChyZWdUMCwgcmVnVDAsIHN0cnVjdHVyZSwgY2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nl
c3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEs
IHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRhYmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBh
dGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMpOwogCiAgICAgaWYgKG5lZWRzU3R1Ykxpbmsp
IHsKICAgICAgICAgZm9yIChWZWN0b3I8Q2FsbFJlY29yZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Nh
bGxzLmJlZ2luKCk7IGl0ZXIgIT0gbV9jYWxscy5lbmQoKTsgKytpdGVyKSB7CkBAIC03MzYsNyAr
NzMzLDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZFNlbGZMaXN0KAogICAgIH0K
IAogICAgIC8vIFVzZSB0aGUgcGF0Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBj
YXNlcyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9j
YXRpb25MYWJlbCBsYXN0UHJvdG9CZWdpbiA9IHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlzdFtj
dXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZTsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0
UHJvdG9CZWdpbiA9IENvZGVMb2NhdGlvbkxhYmVsKHBvbHltb3JwaGljU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXggLSAxXS5zdHViUm91dGluZS5jb2RlKCkpOwogICAgIGlmICghbGFzdFBy
b3RvQmVnaW4pCiAgICAgICAgIGxhc3RQcm90b0JlZ2luID0gc3R1YkluZm8tPmNhbGxSZXR1cm5M
b2NhdGlvbi5sYWJlbEF0T2Zmc2V0KC1wYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwpOwog
CkBAIC03NDUsMTQgKzc0MiwxNCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVHZXRCeUlkU2Vs
Zkxpc3QoCiAgICAgLy8gT24gc3VjY2VzcyByZXR1cm4gYmFjayB0byB0aGUgaG90IHBhdGNoIGNv
ZGUsIGF0IGEgcG9pbnQgaXQgd2lsbCBwZXJmb3JtIHRoZSBzdG9yZSB0byBkZXN0IGZvciB1cy4K
ICAgICBwYXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFi
ZWxBdE9mZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAotICAgIENvZGVMb2Nh
dGlvbkxhYmVsIGVudHJ5TGFiZWwgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGVBZGRlbmR1bSgp
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzdHViQ29kZSA9IHBhdGNoQnVmZmVyLmZpbmFs
aXplQ29kZSgpOwogCi0gICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRl
eF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgZW50
cnlMYWJlbCwgc3RydWN0dXJlKTsKKyAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZXMtPmxpc3RbY3Vy
cmVudEluZGV4XS5zZXQoKm1fZ2xvYmFsRGF0YSwgbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHViQ29kZSwgc3RydWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1
bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFk
LgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhC
ZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAg
ICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNo
QnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgp
KSk7CiB9CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRQcm90b0xpc3QoU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHBy
b3RvdHlwZVN0cnVjdHVyZXMsIGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJl
LCBTdHJ1Y3R1cmUqIHByb3RvdHlwZVN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQs
IGNvbnN0IFByb3BlcnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC03OTEsNyArNzg4LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxl
R2V0QnlJZFByb3RvTGlzdAogCiAgICAgSnVtcCBzdWNjZXNzID0ganVtcCgpOwogCi0gICAgTGlu
a0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRhLCB0aGlzLCBtX2NvZGVCbG9jay0+ZXhl
Y3V0YWJsZVBvb2woKSk7CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqbV9nbG9iYWxEYXRh
LCB0aGlzKTsKIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9y
PENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1f
Y2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODAxLDIwICs3OTgsMjAgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZFByb3RvTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJv
dXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRp
b25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJS
b3V0aW5lLmNvZGUoKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMxLCBsYXN0
UHJvdG9CZWdpbik7CiAgICAgcGF0Y2hCdWZmZXIubGluayhmYWlsdXJlQ2FzZXMyLCBsYXN0UHJv
dG9CZWdpbik7CiAKICAgICAvLyBPbiBzdWNjZXNzIHJldHVybiBiYWNrIHRvIHRoZSBob3QgcGF0
Y2ggY29kZSwgYXQgYSBwb2ludCBpdCB3aWxsIHBlcmZvcm0gdGhlIHN0b3JlIHRvIGRlc3QgZm9y
IHVzLgogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3VjY2Vzcywgc3R1YkluZm8tPmhvdFBhdGhCZWdp
bi5sYWJlbEF0T2Zmc2V0KHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCkpOwogCi0gICAgQ29k
ZUxvY2F0aW9uTGFiZWwgZW50cnlMYWJlbCA9IHBhdGNoQnVmZmVyLmZpbmFsaXplQ29kZUFkZGVu
ZHVtKCk7Ci0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlzdFtjdXJyZW50SW5kZXhdLnNldCgq
bV9nbG9iYWxEYXRhLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIGVudHJ5TGFiZWws
IHN0cnVjdHVyZSwgcHJvdG90eXBlU3RydWN0dXJlKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3R1YkNvZGUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBwcm90b3R5cGVT
dHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KCptX2dsb2JhbERhdGEsIG1fY29kZUJs
b2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YkNvZGUsIHN0cnVjdHVyZSwgcHJvdG90eXBlU3Ry
dWN0dXJlKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJh
Y2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlv
bkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQo
cGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciBy
ZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1w
TG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2Nh
dGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkNvZGUuY29kZSgpKSk7CiB9CiAKIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbkxpc3QoU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJ
bmZvLCBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QqIHByb3RvdHlwZVN0cnVjdHVyZXMs
IGludCBjdXJyZW50SW5kZXgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiog
Y2hhaW4sIHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3Bl
cnR5U2xvdCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CkBAIC04NTcsNyArODU0LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlR2V0QnlJZENoYWlu
TGlzdAogICAgICAgICBjb21waWxlR2V0RGlyZWN0T2Zmc2V0KHByb3RvT2JqZWN0LCByZWdUMCwg
Y2FjaGVkT2Zmc2V0KTsKICAgICBKdW1wIHN1Y2Nlc3MgPSBqdW1wKCk7CiAKLSAgICBMaW5rQnVm
ZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRoaXMsIG1fY29kZUJsb2NrLT5leGVjdXRh
YmxlUG9vbCgpKTsKKyAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCptX2dsb2JhbERhdGEsIHRo
aXMpOwogICAgIAogICAgIGlmIChuZWVkc1N0dWJMaW5rKSB7CiAgICAgICAgIGZvciAoVmVjdG9y
PENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1f
Y2FsbHMuZW5kKCk7ICsraXRlcikgewpAQCAtODY3LDIyICs4NjQsMjIgQEAgdm9pZCBKSVQ6OnBy
aXZhdGVDb21waWxlR2V0QnlJZENoYWluTGlzdAogICAgIH0KIAogICAgIC8vIFVzZSB0aGUgcGF0
Y2ggaW5mb3JtYXRpb24gdG8gbGluayB0aGUgZmFpbHVyZSBjYXNlcyBiYWNrIHRvIHRoZSBvcmln
aW5hbCBzbG93IGNhc2Ugcm91dGluZS4KLSAgICBDb2RlTG9jYXRpb25MYWJlbCBsYXN0UHJvdG9C
ZWdpbiA9IHByb3RvdHlwZVN0cnVjdHVyZXMtPmxpc3RbY3VycmVudEluZGV4IC0gMV0uc3R1YlJv
dXRpbmU7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbGFzdFByb3RvQmVnaW4gPSBDb2RlTG9jYXRp
b25MYWJlbChwcm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleCAtIDFdLnN0dWJS
b3V0aW5lLmNvZGUoKSk7CiAKICAgICBwYXRjaEJ1ZmZlci5saW5rKGJ1Y2tldHNPZkZhaWwsIGxh
c3RQcm90b0JlZ2luKTsKIAogICAgIC8vIE9uIHN1Y2Nlc3MgcmV0dXJuIGJhY2sgdG8gdGhlIGhv
dCBwYXRjaCBjb2RlLCBhdCBhIHBvaW50IGl0IHdpbGwgcGVyZm9ybSB0aGUgc3RvcmUgdG8gZGVz
dCBmb3IgdXMuCiAgICAgcGF0Y2hCdWZmZXIubGluayhzdWNjZXNzLCBzdHViSW5mby0+aG90UGF0
aEJlZ2luLmxhYmVsQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0KSk7CiAKLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKKyAgICBDb2RlUmVmIHN0dWJSb3V0aW5lID0gcGF0Y2hCdWZmZXIuZmluYWxp
emVDb2RlKCk7CiAKICAgICAvLyBUcmFjayB0aGUgc3R1YiB3ZSBoYXZlIGNyZWF0ZWQgc28gdGhh
dCBpdCB3aWxsIGJlIGRlbGV0ZWQgbGF0ZXIuCi0gICAgcHJvdG90eXBlU3RydWN0dXJlcy0+bGlz
dFtjdXJyZW50SW5kZXhdLnNldChjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgbV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLCBlbnRyeUxhYmVsLCBzdHJ1Y3R1cmUsIGNoYWluKTsKKyAgICBw
cm90b3R5cGVTdHJ1Y3R1cmVzLT5saXN0W2N1cnJlbnRJbmRleF0uc2V0KGNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLCBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBz
dHJ1Y3R1cmUsIGNoYWluKTsKIAogICAgIC8vIEZpbmFsbHkgcGF0Y2ggdGhlIGp1bXAgdG8gc2xv
dyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVyZSBpbnN0ZWFkLgogICAgIENv
ZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8tPmhvdFBhdGhCZWdpbi5qdW1w
QXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSk7CiAgICAgUmVwYXRj
aEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAgICByZXBhdGNoQnVmZmVyLnJl
bGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUuY29kZSgpKSk7CiB9
CiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBTdHJ1Y3R1cmVDaGFpbiogY2hhaW4s
IHNpemVfdCBjb3VudCwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQsIGNvbnN0IFByb3BlcnR5U2xv
dCYgc2xvdCwgc2l6ZV90IGNhY2hlZE9mZnNldCwgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRy
ZXNzLCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTkyNSw3ICs5MjIsNyBAQCB2b2lkIEpJVDo6
cHJpdmF0ZUNvbXBpbGVHZXRCeUlkQ2hhaW4oU3RyCiAgICAgICAgIGNvbXBpbGVHZXREaXJlY3RP
ZmZzZXQocHJvdG9PYmplY3QsIHJlZ1QwLCBjYWNoZWRPZmZzZXQpOwogICAgIEp1bXAgc3VjY2Vz
cyA9IGp1bXAoKTsKIAotICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwg
dGhpcywgbV9jb2RlQmxvY2stPmV4ZWN1dGFibGVQb29sKCkpOworICAgIExpbmtCdWZmZXIgcGF0
Y2hCdWZmZXIoKm1fZ2xvYmFsRGF0YSwgdGhpcyk7CiAKICAgICBpZiAobmVlZHNTdHViTGluaykg
ewogICAgICAgICBmb3IgKFZlY3RvcjxDYWxsUmVjb3JkPjo6aXRlcmF0b3IgaXRlciA9IG1fY2Fs
bHMuYmVnaW4oKTsgaXRlciAhPSBtX2NhbGxzLmVuZCgpOyArK2l0ZXIpIHsKQEAgLTk0MSwxMyAr
OTM4LDEzIEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUdldEJ5SWRDaGFpbihTdHIKICAgICBw
YXRjaEJ1ZmZlci5saW5rKHN1Y2Nlc3MsIHN0dWJJbmZvLT5ob3RQYXRoQmVnaW4ubGFiZWxBdE9m
ZnNldChwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpKTsKIAogICAgIC8vIFRyYWNrIHRoZSBz
dHViIHdlIGhhdmUgY3JlYXRlZCBzbyB0aGF0IGl0IHdpbGwgYmUgZGVsZXRlZCBsYXRlci4KLSAg
ICBDb2RlTG9jYXRpb25MYWJlbCBlbnRyeUxhYmVsID0gcGF0Y2hCdWZmZXIuZmluYWxpemVDb2Rl
QWRkZW5kdW0oKTsKLSAgICBzdHViSW5mby0+c3R1YlJvdXRpbmUgPSBlbnRyeUxhYmVsOworICAg
IENvZGVSZWYgc3R1YlJvdXRpbmUgPSBwYXRjaEJ1ZmZlci5maW5hbGl6ZUNvZGUoKTsKKyAgICBz
dHViSW5mby0+c3R1YlJvdXRpbmUgPSBzdHViUm91dGluZTsKIAogICAgIC8vIEZpbmFsbHkgcGF0
Y2ggdGhlIGp1bXAgdG8gc2xvdyBjYXNlIGJhY2sgaW4gdGhlIGhvdCBwYXRoIHRvIGp1bXAgaGVy
ZSBpbnN0ZWFkLgogICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0gc3R1YkluZm8t
PmhvdFBhdGhCZWdpbi5qdW1wQXRPZmZzZXQocGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93
Q2FzZSk7CiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKG1fY29kZUJsb2NrKTsKLSAg
ICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9jYXRpb24sIGVudHJ5TGFiZWwpOworICAgIHJl
cGF0Y2hCdWZmZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJv
dXRpbmUuY29kZSgpKSk7CiAKICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHBhdGNoIG1vcmUgdGhh
biBvbmNlIC0gaW4gZnV0dXJlIGdvIHRvIGN0aV9vcF9wdXRfYnlfaWRfZ2VuZXJpYy4KICAgICBy
ZXBhdGNoQnVmZmVyLnJlbGlua0NhbGxlclRvRnVuY3Rpb24ocmV0dXJuQWRkcmVzcywgRnVuY3Rp
b25QdHIoY3RpX29wX2dldF9ieV9pZF9wcm90b19saXN0KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzU3LDggKzc1Nyw4
IEBAIEpJVFRodW5rczo6SklUVGh1bmtzKEpTR2xvYmFsRGF0YSogZ2xvYmEKICAgICBpZiAoIWds
b2JhbERhdGEtPmV4ZWN1dGFibGVBbGxvY2F0b3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBKSVQ6OmNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1f
ZXhlY3V0YWJsZVBvb2wsICZtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUpOwotICAgIEFTU0VSVChtX2V4
ZWN1dGFibGVQb29sKTsKKyAgICBtX2V4ZWN1dGFibGVNZW1vcnkgPSBKSVQ6OmNvbXBpbGVDVElN
YWNoaW5lVHJhbXBvbGluZXMoZ2xvYmFsRGF0YSwgJm1fdHJhbXBvbGluZVN0cnVjdHVyZSk7Cisg
ICAgQVNTRVJUKCEhbV9leGVjdXRhYmxlTWVtb3J5KTsKICNpZiBDUFUoQVJNX1RIVU1CMikKICAg
ICAvLyBVbmZvcnR1bmF0ZSB0aGUgYXJtIGNvbXBpbGVyIGRvZXMgbm90IGxpa2UgdGhlIHVzZSBv
ZiBvZmZzZXRvZiBvbiBKSVRTdGFja0ZyYW1lIChzaW5jZSBpdCBjb250YWlucyBub24gUE9EIHR5
cGVzKSwKICAgICAvLyBhbmQgdGhlIE9CSkVDVF9PRkZTRVRPRiBtYWNybyBkb2VzIG5vdCBhcHBl
YXIgY29uc3RhbnRpc2ggZW5vdWdoIGZvciBpdCB0byBiZSBoYXBweSB3aXRoIGl0cyB1c2UgaW4g
Q09NUElMRV9BU1NFUlQKQEAgLTE2MDgsNyArMTYwOCw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgICAgICBpZiAoc3R1YkluZm8tPmFjY2Vzc1R5cGUg
PT0gYWNjZXNzX2dldF9ieV9pZF9zZWxmKSB7CiAgICAgICAgICAgICBBU1NFUlQoIXN0dWJJbmZv
LT5zdHViUm91dGluZSk7Ci0gICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBu
ZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0KGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgp
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBDb2RlTG9jYXRpb25MYWJlbCgpLCBzdHVi
SW5mby0+dS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKKyAgICAgICAg
ICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCA9IG5ldyBQb2x5bW9ycGhpY0FjY2Vzc1N0cnVj
dHVyZUxpc3QoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCksIE1hY3JvQXNzZW1ibGVyQ29kZVJlZigpLCBzdHViSW5mby0+dS5nZXRCeUlkU2VsZi5i
YXNlT2JqZWN0U3RydWN0dXJlLmdldCgpKTsKICAgICAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0
QnlJZFNlbGZMaXN0KHBvbHltb3JwaGljU3RydWN0dXJlTGlzdCwgMSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QgPSBzdHViSW5mby0+dS5n
ZXRCeUlkU2VsZkxpc3Quc3RydWN0dXJlTGlzdDsKQEAgLTE2MzQsMTIgKzE2MzQsMTIgQEAgc3Rh
dGljIFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdCogZwogICAgIHN3aXRjaCAoc3R1Yklu
Zm8tPmFjY2Vzc1R5cGUpIHsKICAgICBjYXNlIGFjY2Vzc19nZXRfYnlfaWRfcHJvdG86CiAgICAg
ICAgIHByb3RvdHlwZVN0cnVjdHVyZUxpc3QgPSBuZXcgUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1
cmVMaXN0KGdsb2JhbERhdGEsIG93bmVyLCBzdHViSW5mby0+c3R1YlJvdXRpbmUsIHN0dWJJbmZv
LT51LmdldEJ5SWRQcm90by5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpLCBzdHViSW5mby0+dS5n
ZXRCeUlkUHJvdG8ucHJvdG90eXBlU3RydWN0dXJlLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8t
PnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0
dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5p
bml0R2V0QnlJZFByb3RvTGlzdChwcm90b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX2NoYWluOgogICAgICAgICBwcm90b3R5
cGVTdHJ1Y3R1cmVMaXN0ID0gbmV3IFBvbHltb3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdChnbG9i
YWxEYXRhLCBvd25lciwgc3R1YkluZm8tPnN0dWJSb3V0aW5lLCBzdHViSW5mby0+dS5nZXRCeUlk
Q2hhaW4uYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKSwgc3R1YkluZm8tPnUuZ2V0QnlJZENoYWlu
LmNoYWluLmdldCgpKTsKLSAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gQ29kZUxvY2F0
aW9uTGFiZWwoKTsKKyAgICAgICAgc3R1YkluZm8tPnN0dWJSb3V0aW5lID0gTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmKCk7CiAgICAgICAgIHN0dWJJbmZvLT5pbml0R2V0QnlJZFByb3RvTGlzdChwcm90
b3R5cGVTdHJ1Y3R1cmVMaXN0LCAyKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBhY2Nlc3Nf
Z2V0X2J5X2lkX3Byb3RvX2xpc3Q6CkBAIC0zNTk4LDExICszNTk4LDExIEBAIERFRklORV9TVFVC
X0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCB0b18KICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkudG9PYmplY3QoY2FsbEZyYW1lKSk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBKSVRUaHVua3M6OmN0aVN0dWIoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBUaHVua0dlbmVyYXRvciBnZW5lcmF0b3IpCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgSklUVGh1bmtzOjpjdGlTdHViKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgVGh1bmtHZW5l
cmF0b3IgZ2VuZXJhdG9yKQogewotICAgIHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwg
Ym9vbD4gZW50cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJD
b2RlUHRyKCkpOworICAgIHN0ZDo6cGFpcjxDVElTdHViTWFwOjppdGVyYXRvciwgYm9vbD4gZW50
cnkgPSBtX2N0aVN0dWJNYXAuYWRkKGdlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmKCkp
OwogICAgIGlmIChlbnRyeS5zZWNvbmQpCi0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNvbmQgPSBn
ZW5lcmF0b3IoZ2xvYmFsRGF0YSwgbV9leGVjdXRhYmxlUG9vbC5nZXQoKSk7CisgICAgICAgIGVu
dHJ5LmZpcnN0LT5zZWNvbmQgPSBnZW5lcmF0b3IoZ2xvYmFsRGF0YSk7CiAgICAgcmV0dXJuIGVu
dHJ5LmZpcnN0LT5zZWNvbmQ7CiB9CiAKQEAgLTM2MTAsNyArMzYxMCw3IEBAIE5hdGl2ZUV4ZWN1
dGFibGUqIEpJVFRodW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0
aW9uU3R1Yk1hcDo6aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFw
LT5hZGQoZnVuY3Rpb24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50
cnkuZmlyc3QtPnNlY29uZCkKLSAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2Jh
bERhdGEsIE5hdGl2ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxl
Q1RJTmF0aXZlQ2FsbChnbG9iYWxEYXRhLCBtX2V4ZWN1dGFibGVQb29sLCBmdW5jdGlvbiksIGZ1
bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0
b3IpKTsKKyAgICAgICAgZW50cnkuZmlyc3QtPnNlY29uZC5zZXQoKmdsb2JhbERhdGEsIE5hdGl2
ZUV4ZWN1dGFibGU6OmNyZWF0ZSgqZ2xvYmFsRGF0YSwgSklUOjpjb21waWxlQ1RJTmF0aXZlQ2Fs
bChnbG9iYWxEYXRhLCBmdW5jdGlvbiksIGZ1bmN0aW9uLCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6
OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihjdGlOYXRpdmVDb25zdHJ1Y3QoKSksIGNhbGxIb3N0
RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKSk7CiAgICAgcmV0dXJuIGVudHJ5LmZpcnN0LT5zZWNvbmQu
Z2V0KCk7CiB9CiAKQEAgLTM2MTgsOCArMzYxOCw4IEBAIE5hdGl2ZUV4ZWN1dGFibGUqIEpJVFRo
dW5rczo6aG9zdEZ1bmN0aW8KIHsKICAgICBzdGQ6OnBhaXI8SG9zdEZ1bmN0aW9uU3R1Yk1hcDo6
aXRlcmF0b3IsIGJvb2w+IGVudHJ5ID0gbV9ob3N0RnVuY3Rpb25TdHViTWFwLT5hZGQoZnVuY3Rp
b24sIFdlYWs8TmF0aXZlRXhlY3V0YWJsZT4oKSk7CiAgICAgaWYgKCEqZW50cnkuZmlyc3QtPnNl
Y29uZCkgewotICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZSA9IGdsb2JhbERhdGEt
PmNhblVzZUpJVCgpID8gZ2VuZXJhdG9yKGdsb2JhbERhdGEsIG1fZXhlY3V0YWJsZVBvb2wuZ2V0
KCkpIDogTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKCk7Ci0gICAgICAgIGVudHJ5LmZpcnN0LT5zZWNv
bmQuc2V0KCpnbG9iYWxEYXRhLCBOYXRpdmVFeGVjdXRhYmxlOjpjcmVhdGUoKmdsb2JhbERhdGEs
IGNvZGUsIGZ1bmN0aW9uLCBjdGlOYXRpdmVDb25zdHJ1Y3QoKSwgY2FsbEhvc3RGdW5jdGlvbkFz
Q29uc3RydWN0b3IpKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBnbG9i
YWxEYXRhLT5jYW5Vc2VKSVQoKSA/IGdlbmVyYXRvcihnbG9iYWxEYXRhKSA6IE1hY3JvQXNzZW1i
bGVyQ29kZVJlZigpOworICAgICAgICBlbnRyeS5maXJzdC0+c2Vjb25kLnNldCgqZ2xvYmFsRGF0
YSwgTmF0aXZlRXhlY3V0YWJsZTo6Y3JlYXRlKCpnbG9iYWxEYXRhLCBjb2RlLCBmdW5jdGlvbiwg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmOjpjcmVhdGVTZWxmTWFuYWdlZENvZGVSZWYoY3RpTmF0aXZl
Q29uc3RydWN0KCkpLCBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3RvcikpOwogICAgIH0KICAg
ICByZXR1cm4gZW50cnkuZmlyc3QtPnNlY29uZC5nZXQoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFN0dWJzLmgJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRTdHVicy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOTQsNyArMjk0LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlOYXRpdmVD
b25zdHJ1Y3QoKSB7IHJldHVybiBtX3RyYW1wb2xpbmVTdHJ1Y3R1cmUuY3RpTmF0aXZlQ29uc3Ry
dWN0OyB9CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjdGlTb2Z0TW9kdWxvKCkgeyBy
ZXR1cm4gbV90cmFtcG9saW5lU3RydWN0dXJlLmN0aVNvZnRNb2R1bG87IH0KIAotICAgICAgICBN
YWNyb0Fzc2VtYmxlckNvZGVQdHIgY3RpU3R1YihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFRo
dW5rR2VuZXJhdG9yIGdlbmVyYXRvcik7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBj
dGlTdHViKEpTR2xvYmFsRGF0YSosIFRodW5rR2VuZXJhdG9yKTsKIAogICAgICAgICBOYXRpdmVF
eGVjdXRhYmxlKiBob3N0RnVuY3Rpb25TdHViKEpTR2xvYmFsRGF0YSosIE5hdGl2ZUZ1bmN0aW9u
KTsKICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogaG9zdEZ1bmN0aW9uU3R1YihKU0dsb2JhbERh
dGEqLCBOYXRpdmVGdW5jdGlvbiwgVGh1bmtHZW5lcmF0b3IpOwpAQCAtMzAyLDExICszMDIsMTEg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgY2xlYXJIb3N0RnVuY3Rpb25TdHVicygp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFRodW5rR2VuZXJhdG9y
LCBNYWNyb0Fzc2VtYmxlckNvZGVQdHI+IENUSVN0dWJNYXA7CisgICAgICAgIHR5cGVkZWYgSGFz
aE1hcDxUaHVua0dlbmVyYXRvciwgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmPiBDVElTdHViTWFwOwog
ICAgICAgICBDVElTdHViTWFwIG1fY3RpU3R1Yk1hcDsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PE5hdGl2ZUZ1bmN0aW9uLCBXZWFrPE5hdGl2ZUV4ZWN1dGFibGU+ID4gSG9zdEZ1bmN0aW9uU3R1
Yk1hcDsKICAgICAgICAgT3duUHRyPEhvc3RGdW5jdGlvblN0dWJNYXA+IG1faG9zdEZ1bmN0aW9u
U3R1Yk1hcDsKLSAgICAgICAgUmVmUHRyPEV4ZWN1dGFibGVQb29sPiBtX2V4ZWN1dGFibGVQb29s
OworICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZU1lbW9yeUhhbmRsZT4gbV9leGVjdXRhYmxlTWVt
b3J5OwogCiAgICAgICAgIFRyYW1wb2xpbmVTdHJ1Y3R1cmUgbV90cmFtcG9saW5lU3RydWN0dXJl
OwogICAgIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxpemVkVGh1
bmtKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1NwZWNpYWxp
emVkVGh1bmtKSVQuaAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1NwZWNpYWxpemVkVGh1bmtKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgU3BlY2lhbGl6ZWRUaHVua0pJVCA6IHB1Ymxp
YyBKU0ludGVyZmFjZUpJVCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgY29uc3QgaW50
IFRoaXNBcmd1bWVudCA9IC0xOwotICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGludCBleHBl
Y3RlZEFyZ0NvdW50LCBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBw
b29sKQorICAgICAgICBTcGVjaWFsaXplZFRodW5rSklUKGludCBleHBlY3RlZEFyZ0NvdW50LCBK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiAgICAgICAgICAgICA6IG1fZXhwZWN0ZWRBcmdDb3Vu
dChleHBlY3RlZEFyZ0NvdW50KQogICAgICAgICAgICAgLCBtX2dsb2JhbERhdGEoZ2xvYmFsRGF0
YSkKLSAgICAgICAgICAgICwgbV9wb29sKHBvb2wpCiAgICAgICAgIHsKICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgd2UgaGF2ZSB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cwogICAg
ICAgICAgICAgbV9mYWlsdXJlcy5hcHBlbmQoYnJhbmNoMzIoTm90RXF1YWwsIEFkZHJlc3MoY2Fs
bEZyYW1lUmVnaXN0ZXIsIFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCAqIChpbnQpc2l6ZW9m
KFJlZ2lzdGVyKSksIFRydXN0ZWRJbW0zMihleHBlY3RlZEFyZ0NvdW50ICsgMSkpKTsKQEAgLTEz
NCwxMyArMTMzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0KCk7CiAgICAg
ICAgIH0KICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmaW5hbGl6ZShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmYWxsYmFjaykK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGZpbmFsaXplKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGZhbGxiYWNrKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRoaXMsIG1fcG9vbC5n
ZXQoKSk7CisgICAgICAgICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKGdsb2JhbERhdGEsIHRo
aXMpOwogICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayhtX2ZhaWx1cmVzLCBDb2RlTG9jYXRp
b25MYWJlbChmYWxsYmFjaykpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1fY2FsbHMuc2l6ZSgpOyBpKyspCiAgICAgICAgICAgICAgICAgcGF0Y2hCdWZmZXIubGluayht
X2NhbGxzW2ldLmZpcnN0LCBtX2NhbGxzW2ldLnNlY29uZCk7Ci0gICAgICAgICAgICByZXR1cm4g
cGF0Y2hCdWZmZXIuZmluYWxpemVDb2RlKCkubV9jb2RlOworICAgICAgICAgICAgcmV0dXJuIHBh
dGNoQnVmZmVyLmZpbmFsaXplQ29kZSgpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQXNzdW1l
cyB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gdXNlcyBmcFJlZ2lzdGVyMCBhcyB0aGUgZmlyc3Qg
YXJndW1lbnQKQEAgLTE3NCw3ICsxNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAg
ICAgICAgIGludCBtX2V4cGVjdGVkQXJnQ291bnQ7CiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOwotICAgICAgICBSZWZQdHI8RXhlY3V0YWJsZVBvb2w+IG1fcG9vbDsKICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IG1fZmFpbHVyZXM7CiAgICAgICAgIFZlY3Rvcjxz
dGQ6OnBhaXI8Q2FsbCwgRnVuY3Rpb25QdHI+ID4gbV9jYWxsczsKICAgICB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAkocmV2aXNpb24g
OTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDI2ICs2MywyNiBAQCBzdGF0aWMgdm9pZCBjaGFyVG9TdHJp
bmcoU3BlY2lhbGl6ZWRUaHVuCiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGRzdCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhl
Y3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRodW5rSklU
IGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFyTG9hZChqaXQpOwogICAgIGppdC5y
ZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwo
KSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGNoYXJBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkK
IHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAg
ICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBzdHJpbmdDaGFy
TG9hZChqaXQpOwogICAgIGNoYXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDEpOwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwogICAgIHJldHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBF
eGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBmcm9tQ2hhckNvZGVU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6
ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVu
a0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgLy8gbG9hZCBjaGFyIGNvZGUKICAgICBqaXQu
bG9hZEludDMyQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGNo
YXJUb1N0cmluZyhqaXQsIGdsb2JhbERhdGEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwpA
QCAtOTAsMTEgKzkwLDExIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBmcm9tQ2hhckNvZGVUaHVu
a0cKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLT5qaXRT
dHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHNxcnRU
aHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBw
b29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFs
RGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7
CiAgICAgaWYgKCFqaXQuc3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERh
dGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogCiAgICAgaml0LmxvYWREb3VibGVBcmd1
bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7CiAgICAgaml0LnNxcnREb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CkBAIC0xNzgsMTIgKzE3OCwxMiBAQCBk
ZWZpbmVVbmFyeURvdWJsZU9wV3JhcHBlcihsb2cpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBw
ZXIoZmxvb3IpOwogZGVmaW5lVW5hcnlEb3VibGVPcFdyYXBwZXIoY2VpbCk7CiAKLU1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZmxvb3JUaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRU
aHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJ
VCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm9uSW50SnVt
cDsKICAgICBpZiAoIVVuYXJ5RG91YmxlT3BXcmFwcGVyKGZsb29yKSB8fCAhaml0LnN1cHBvcnRz
RmxvYXRpbmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0
aU5hdGl2ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3Jl
YXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KCkpOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QwKTsKICAgICBub25JbnRKdW1wLmxpbmsoJmppdCk7CkBAIC0xOTcsMTEgKzE5Nywx
MSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZmxvb3JUaHVua0dlbmVyYXRvCiAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjZWlsVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBjZWlsVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRh
KQogewotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEsIHBvb2wpOwor
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEsIGdsb2JhbERhdGEpOwogICAgIGlmICghVW5h
cnlEb3VibGVPcFdyYXBwZXIoY2VpbCkgfHwgIWppdC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkK
LSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKICAgICBNYWNyb0Fz
c2VtYmxlcjo6SnVtcCBub25JbnRKdW1wOwogICAgIGppdC5sb2FkSW50MzJBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgbm9uSW50SnVtcCk7CiAgICAgaml0LnJldHVybklu
dDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTIyMCwxMSArMjIwLDExIEBAIHN0
YXRpYyBjb25zdCBkb3VibGUgbmVnYXRpdmVaZXJvQ29uc3RhbnQKIHN0YXRpYyBjb25zdCBkb3Vi
bGUgb25lQ29uc3RhbnQgPSAxLjA7CiBzdGF0aWMgY29uc3QgZG91YmxlIG5lZ2F0aXZlSGFsZkNv
bnN0YW50ID0gLTAuNTsKICAgICAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciByb3VuZFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJsZVBvb2wqIHBvb2wpCitN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEpCiB7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwg
cG9vbCk7CisgICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSk7CiAgICAg
aWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihqc1JvdW5kKSB8fCAhaml0LnN1cHBvcnRzRmxvYXRp
bmdQb2ludCgpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2
ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2Vs
Zk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFy
Z3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBq
aXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwpAQCAtMjM5LDM3ICsy
MzksMzcgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIHJvdW5kVGh1bmtHZW5lcmF0bwogICAgIHJl
dHVybiBqaXQuZmluYWxpemUoKmdsb2JhbERhdGEsIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKCkpOwogfQogCi1NYWNyb0Fzc2VtYmxlckNvZGVQdHIgZXhwVGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeGVjdXRhYmxlUG9vbCogcG9vbCkKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBleHBUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEpCiB7CiAgICAgaWYgKCFVbmFyeURvdWJsZU9wV3JhcHBlcihleHApKQotICAgICAgICByZXR1
cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKLSAgICBTcGVjaWFsaXpl
ZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOworICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KDEs
IGdsb2JhbERhdGEpOwogICAgIGlmICghaml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKQotICAg
ICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1hbmFnZWRDb2RlUmVm
KGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAgIGppdC5sb2FkRG91
YmxlQXJndW1lbnQoMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwogICAgIGppdC5jYWxsRG91YmxlVG9Eb3VibGUoVW5hcnlEb3VibGVP
cFdyYXBwZXIoZXhwKSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklU
OjpmcFJlZ1QwKTsKICAgICByZXR1cm4gaml0LmZpbmFsaXplKCpnbG9iYWxEYXRhLCBnbG9iYWxE
YXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyIGxvZ1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgRXhlY3V0YWJs
ZVBvb2wqIHBvb2wpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbG9nVGh1bmtHZW5lcmF0b3IoSlNH
bG9iYWxEYXRhKiBnbG9iYWxEYXRhKQogewogICAgIGlmICghVW5hcnlEb3VibGVPcFdyYXBwZXIo
bG9nKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxs
KCk7Ci0gICAgU3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQoMSwgZ2xvYmFsRGF0YSwgcG9vbCk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29k
ZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgpKTsKKyAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0Zs
b2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlO
YXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNvZGVSZWY6OmNyZWF0
ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3RpTmF0aXZlQ2FsbCgp
KTsKICAgICBqaXQubG9hZERvdWJsZUFyZ3VtZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBqaXQuY2FsbERvdWJsZVRv
RG91YmxlKFVuYXJ5RG91YmxlT3BXcmFwcGVyKGxvZykpOwogICAgIGppdC5yZXR1cm5Eb3VibGUo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7CiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSgq
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNhbGwoKSk7CiB9CiAK
LU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBhYnNUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqIGds
b2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFi
c1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKIHsKLSAgICBTcGVjaWFs
aXplZFRodW5rSklUIGppdCgxLCBnbG9iYWxEYXRhLCBwb29sKTsKKyAgICBTcGVjaWFsaXplZFRo
dW5rSklUIGppdCgxLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWppdC5zdXBwb3J0c0RvdWJsZUJp
dG9wcygpKQotICAgICAgICByZXR1cm4gZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5hdGl2ZUNh
bGwoKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyQ29kZVJlZjo6Y3JlYXRlU2VsZk1h
bmFnZWRDb2RlUmVmKGdsb2JhbERhdGEtPmppdFN0dWJzLT5jdGlOYXRpdmVDYWxsKCkpOwogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vbkludEp1bXA7CiAgICAgaml0LmxvYWRJbnQzMkFyZ3Vt
ZW50KDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBub25JbnRKdW1wKTsKICAgICBqaXQu
cnNoaWZ0MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMzEpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CkBAIC0yODYsMTEgKzI4
NiwxMSBAQCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgYWJzVGh1bmtHZW5lcmF0b3IoCiAgICAgcmV0
dXJuIGppdC5maW5hbGl6ZSgqZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS0+aml0U3R1YnMtPmN0aU5h
dGl2ZUNhbGwoKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyQ29kZVB0ciBwb3dUaHVua0dlbmVyYXRv
cihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEV4ZWN1dGFibGVQb29sKiBwb29sKQorTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKIHsKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhLCBwb29sKTsK
KyAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCgyLCBnbG9iYWxEYXRhKTsKICAgICBpZiAoIWpp
dC5zdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKLSAgICAgICAgcmV0dXJuIGdsb2JhbERhdGEtPmpp
dFN0dWJzLT5jdGlOYXRpdmVDYWxsKCk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWY6OmNyZWF0ZVNlbGZNYW5hZ2VkQ29kZVJlZihnbG9iYWxEYXRhLT5qaXRTdHVicy0+Y3Rp
TmF0aXZlQ2FsbCgpKTsKIAogICAgIGppdC5sb2FkRG91YmxlKCZvbmVDb25zdGFudCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6ZnBSZWdUMSk7CiAgICAgaml0LmxvYWREb3VibGVBcmd1bWVudCgwLCBT
cGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgJKHJl
dmlzaW9uIDk0ODMxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRv
cnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDIwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgIGNsYXNzIEV4ZWN1dGFibGVQb29sOwogICAgIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICBj
bGFzcyBOYXRpdmVFeGVjdXRhYmxlOwotICAgIGNsYXNzIE1hY3JvQXNzZW1ibGVyQ29kZVB0cjsK
KyAgICBjbGFzcyBNYWNyb0Fzc2VtYmxlckNvZGVSZWY7CiAKLSAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciAoKlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxl
UG9vbCopOwotICAgIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjaGFyQ29kZUF0VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVQdHIgY2hhckF0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wq
KTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgZnJvbUNoYXJDb2RlVGh1bmtHZW5lcmF0b3Io
SlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIgYWJzVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY2VpbFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSos
IEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGV4cFRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSosIEV4ZWN1dGFibGVQb29sKik7Ci0gICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUHRyIGZsb29yVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBv
b2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgbG9nVGh1bmtHZW5lcmF0b3IoSlNHbG9i
YWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcm91
bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqLCBFeGVjdXRhYmxlUG9vbCopOwotICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVB0ciBzcXJ0VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiwgRXhl
Y3V0YWJsZVBvb2wqKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgcG93VGh1bmtHZW5lcmF0
b3IoSlNHbG9iYWxEYXRhKiwgRXhlY3V0YWJsZVBvb2wqKTsKKyAgICB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiAoKlRodW5rR2VuZXJhdG9yKShKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgY2hhckNvZGVBdFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSop
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjaGFyQXRUaHVua0dlbmVyYXRvcihKU0dsb2Jh
bERhdGEqKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgZnJvbUNoYXJDb2RlVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFic1RodW5r
R2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjZWls
VGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGV4cFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBmbG9vclRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworICAgIE1hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsb2dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgcm91bmRUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEq
KTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVj
dXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB0eXBlZGVmIEV4ZWN1dGFibGVCYXNlIEJhc2U7CiAKICNpZiBF
TkFCTEUoSklUKQotICAgICAgICBzdGF0aWMgTmF0aXZlRXhlY3V0YWJsZSogY3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyIGNhbGxUaHVuaywgTmF0
aXZlRnVuY3Rpb24gZnVuY3Rpb24sIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb25zdHJ1Y3RUaHVu
aywgTmF0aXZlRnVuY3Rpb24gY29uc3RydWN0b3IpCisgICAgICAgIHN0YXRpYyBOYXRpdmVFeGVj
dXRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY2FsbFRodW5rLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGNvbnN0cnVjdFRodW5rLCBOYXRpdmVGdW5jdGlvbiBjb25zdHJ1Y3RvcikKICAgICAg
ICAgewogICAgICAgICAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKICAgICAgICAg
ICAgIGlmICghY2FsbFRodW5rKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAkocmV2aXNpb24gOTQ4MzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogCisjaW5jbHVkZSAiRXhlY3V0YWJsZUFs
bG9jYXRvci5oIgogI2luY2x1ZGUgIkhlYXAuaCIKICNpbmNsdWRlICJJZGVudGlmaWVyLmgiCiAj
aW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSAiZHRvYS5oIgogI2luY2x1ZGUgPHd0Zi9EYXRl
TWF0aC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvZHRvYS9j
YWNoZWQtcG93ZXJzLmg+CkBAIC01NCw2ICs1Niw3IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVU
aHJlYWRpbmdPbmNlKCkKICAgICBXcml0ZUJhcnJpZXJDb3VudGVyczo6aW5pdGlhbGl6ZSgpOwog
I2VuZGlmCiAgICAgSlNHbG9iYWxEYXRhOjpzdG9yZVZQdHJzKCk7CisgICAgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6aW5pdGlhbGl6ZUFsbG9jYXRvcigpOwogI2lmIEVOQUJMRShKU0NfTVVMVElQTEVf
VEhSRUFEUykKICAgICBSZWdpc3RlckZpbGU6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICNlbmRp
ZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEu
Y3BwCShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4Niw3ICsxODYsNiBAQCBKU0dsb2Jh
bERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwCiAgICAgLCBlbXB0eUxpc3QobmV3IE1h
cmtlZEFyZ3VtZW50QnVmZmVyKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAgICAgLCBleGVjdXRh
YmxlQWxsb2NhdG9yKCp0aGlzKQotICAgICwgcmVnZXhBbGxvY2F0b3IoKnRoaXMpCiAjZW5kaWYK
ICAgICAsIGxleGVyKG5ldyBMZXhlcih0aGlzKSkKICAgICAsIHBhcnNlcihuZXcgUGFyc2VyKQpA
QCAtNDQwLDYgKzQzOSw5IEBAIHZvaWQgSlNHbG9iYWxEYXRhOjpzdG9wU2FtcGxpbmcoKQogdm9p
ZCBKU0dsb2JhbERhdGE6OmR1bXBTYW1wbGVEYXRhKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAgICBp
bnRlcnByZXRlci0+ZHVtcFNhbXBsZURhdGEoZXhlYyk7CisjaWYgRU5BQkxFKEFTU0VNQkxFUikK
KyAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpOworI2VuZGlmCiB9CiAKIHZv
aWQgSlNHbG9iYWxEYXRhOjpyZWNvbXBpbGVBbGxKU0Z1bmN0aW9ucygpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gOTQ4MzEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTkzLDcgKzE5Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICNp
ZiBFTkFCTEUoQVNTRU1CTEVSKQogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yIGV4ZWN1dGFi
bGVBbGxvY2F0b3I7Ci0gICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3IgcmVnZXhBbGxvY2F0b3I7
CiAjZW5kaWYKIAogI2lmICFFTkFCTEUoSklUKQpAQCAtMjE2LDcgKzIxNSw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJ
VCkKICAgICAgICAgT3duUHRyPEpJVFRodW5rcz4gaml0U3R1YnM7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVB0ciBnZXRDVElTdHViKFRodW5rR2VuZXJhdG9yIGdlbmVyYXRvcikKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdldENUSVN0dWIoVGh1bmtHZW5lcmF0b3IgZ2VuZXJh
dG9yKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gaml0U3R1YnMtPmN0aVN0dWIodGhp
cywgZ2VuZXJhdG9yKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0
Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3Rm
L0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiA5NDgzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDkgQEAgU0VU
KFdURl9IRUFERVJTCiAgICAgTWFsbG9jWm9uZVN1cHBvcnQuaAogICAgIE1hdGhFeHRyYXMuaAog
ICAgIE1lc3NhZ2VRdWV1ZS5oCisgICAgTWV0YUFsbG9jYXRvci5jcHAKKyAgICBNZXRhQWxsb2Nh
dG9yLmgKKyAgICBNZXRhQWxsb2NhdG9ySGFuZGxlLmgKICAgICBOb25Db3B5aW5nU29ydC5oCiAg
ICAgVGhyZWFkUmVzdHJpY3Rpb25WZXJpZmllci5oCiAgICAgTm9uY29weWFibGUuaApAQCAtNjks
NiArNzIsNyBAQCBTRVQoV1RGX0hFQURFUlMKICAgICBQb3NzaWJseU51bGwuaAogICAgIFJhbmRv
bU51bWJlci5oCiAgICAgUmFuZG9tTnVtYmVyU2VlZC5oCisgICAgUmVkQmxhY2tUcmVlLmgKICAg
ICBSZWZDb3VudGVkLmgKICAgICBSZWZDb3VudGVkTGVha0NvdW50ZXIuaAogICAgIFJlZlB0ci5o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3IuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIk1ldGFBbGxvY2F0b3IuaCIKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCitNZXRhQWxsb2NhdG9ySGFuZGxlOjpNZXRhQWxsb2NhdG9y
SGFuZGxlKE1ldGFBbGxvY2F0b3IqIGFsbG9jYXRvciwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXpl
SW5CeXRlcykKKyAgICA6IG1fYWxsb2NhdG9yKGFsbG9jYXRvcikKKyAgICAsIG1fc3RhcnQoc3Rh
cnQpCisgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChhbGxv
Y2F0b3IpOworICAgIEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKHNpemVJbkJ5dGVzKTsKK30K
KworTWV0YUFsbG9jYXRvckhhbmRsZTo6fk1ldGFBbGxvY2F0b3JIYW5kbGUoKQoreworICAgIGlm
ICghbV9hbGxvY2F0b3IpCisgICAgICAgIHJldHVybjsKKyAgICBTcGluTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fYWxsb2NhdG9yLT5tX2xvY2spOworICAgIGlmIChtX3NpemVJbkJ5dGVzKSB7CisgICAg
ICAgIG1fYWxsb2NhdG9yLT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KG1fc3RhcnQsIG1fc2l6ZUlu
Qnl0ZXMpOworICAgICAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVhc2VkSGFu
ZGxlKG1fc3RhcnQsIG1fc2l6ZUluQnl0ZXMpOworICAgIH0KK30KKwordm9pZCBNZXRhQWxsb2Nh
dG9ySGFuZGxlOjpzaHJpbmsoc2l6ZV90IG5ld1NpemVJbkJ5dGVzKQoreworICAgIEFTU0VSVChu
ZXdTaXplSW5CeXRlcyA8PSBtX3NpemVJbkJ5dGVzKTsKKyAgICAKKyAgICBpZiAoIW1fYWxsb2Nh
dG9yKSB7CisgICAgICAgIG1fc2l6ZUluQnl0ZXMgPSBuZXdTaXplSW5CeXRlczsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBTcGluTG9ja0hvbGRlciBsb2NrZXIoJm1fYWxsb2Nh
dG9yLT5tX2xvY2spOworCisgICAgbmV3U2l6ZUluQnl0ZXMgPSBtX2FsbG9jYXRvci0+cm91bmRV
cChuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAgQVNTRVJUKG5ld1NpemVJbkJ5dGVzIDw9IG1f
c2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmIChuZXdTaXplSW5CeXRlcyA9PSBtX3NpemVJbkJ5
dGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdWludHB0cl90IGZyZWVTdGFydCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3N0YXJ0KSArIG5ld1NpemVJbkJ5dGVzOworICAg
IHNpemVfdCBmcmVlU2l6ZSA9IG1fc2l6ZUluQnl0ZXMgLSBuZXdTaXplSW5CeXRlczsKKyAgICB1
aW50cHRyX3QgZnJlZUVuZCA9IGZyZWVTdGFydCArIGZyZWVTaXplOworICAgIAorICAgIHVpbnRw
dHJfdCBmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA9IChmcmVlU3RhcnQgKyBtX2FsbG9jYXRvci0+
bV9wYWdlU2l6ZSAtIDEpICYgfihtX2FsbG9jYXRvci0+bV9wYWdlU2l6ZSAtIDEpOworICAgIGlm
IChmaXJzdENvbXBsZXRlbHlGcmVlUGFnZSA8IGZyZWVFbmQpCisgICAgICAgIG1fYWxsb2NhdG9y
LT5kZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZpcnN0Q29t
cGxldGVseUZyZWVQYWdlKSwgZnJlZVNpemUgLSAoZmlyc3RDb21wbGV0ZWx5RnJlZVBhZ2UgLSBm
cmVlU3RhcnQpKTsKKyAgICAKKyAgICBtX2FsbG9jYXRvci0+YWRkRnJlZVNwYWNlRnJvbVJlbGVh
c2VkSGFuZGxlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGZyZWVTdGFydCksIGZyZWVTaXplKTsK
KyAgICAKKyAgICBtX3NpemVJbkJ5dGVzID0gbmV3U2l6ZUluQnl0ZXM7Cit9CisKK01ldGFBbGxv
Y2F0b3I6Ok1ldGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKQorICAgIDogbV9h
bGxvY2F0aW9uR3JhbnVsZShhbGxvY2F0aW9uR3JhbnVsZSkKKyAgICAsIG1fcGFnZVNpemUocGFn
ZVNpemUoKSkKKyAgICAsIG1fYnl0ZXNBbGxvY2F0ZWQoMCkKKyAgICAsIG1fYnl0ZXNSZXNlcnZl
ZCgwKQorICAgICwgbV9ieXRlc0NvbW1pdHRlZCgwKQorI2lmbmRlZiBOREVCVUcKKyAgICAsIG1f
bWFsbG9jQmFsYW5jZSgwKQorI2VuZGlmCisjaWYgRU5BQkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJ
TEUpCisgICAgLCBtX251bUFsbG9jYXRpb25zKDApCisgICAgLCBtX251bUZyZWVzKDApCisjZW5k
aWYKK3sKKyAgICBtX2xvY2suSW5pdCgpOworICAgIAorICAgIGZvciAobV9sb2dQYWdlU2l6ZSA9
IDA7IG1fbG9nUGFnZVNpemUgPCAzMjsgKyttX2xvZ1BhZ2VTaXplKSB7CisgICAgICAgIGlmIChz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IG1fbG9nUGFnZVNpemUgPT0gbV9wYWdlU2l6ZSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6
ZV90PigxKSA8PCBtX2xvZ1BhZ2VTaXplID09IG1fcGFnZVNpemUpOworICAgIAorICAgIGZvciAo
bV9sb2dBbGxvY2F0aW9uR3JhbnVsZSA9IDA7IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPCAzMjsg
KyttX2xvZ0FsbG9jYXRpb25HcmFudWxlKSB7CisgICAgICAgIGlmIChzdGF0aWNfY2FzdDxzaXpl
X3Q+KDEpIDw8IG1fbG9nQWxsb2NhdGlvbkdyYW51bGUgPT0gbV9hbGxvY2F0aW9uR3JhbnVsZSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8
c2l6ZV90PigxKSA8PCBtX2xvZ0FsbG9jYXRpb25HcmFudWxlID09IG1fYWxsb2NhdGlvbkdyYW51
bGUpOworfQorCitQYXNzUmVmUHRyPE1ldGFBbGxvY2F0b3JIYW5kbGU+IE1ldGFBbGxvY2F0b3I6
OmFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICBTcGluTG9ja0hvbGRlciBsb2Nr
ZXIoJm1fbG9jayk7CisKKyAgICBpZiAoIXNpemVJbkJ5dGVzKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICBzaXplSW5CeXRlcyA9IHJvdW5kVXAoc2l6ZUluQnl0ZXMpOworICAgIAorICAg
IHZvaWQqIHN0YXJ0ID0gZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplSW5CeXRlcyk7CisgICAg
aWYgKCFzdGFydCkgeworICAgICAgICBzaXplX3QgcmVxdWVzdGVkTnVtYmVyT2ZQYWdlcyA9IChz
aXplSW5CeXRlcyArIG1fcGFnZVNpemUgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgICAgICBz
aXplX3QgbnVtYmVyT2ZQYWdlcyA9IHJlcXVlc3RlZE51bWJlck9mUGFnZXM7CisgICAgICAgIAor
ICAgICAgICBzdGFydCA9IGFsbG9jYXRlTmV3U3BhY2UobnVtYmVyT2ZQYWdlcyk7CisgICAgICAg
IGlmICghc3RhcnQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChudW1iZXJPZlBhZ2VzID49IHJlcXVlc3RlZE51bWJlck9mUGFnZXMpOworICAgICAgICAK
KyAgICAgICAgc2l6ZV90IHJvdW5kZWRVcFNpemUgPSBudW1iZXJPZlBhZ2VzIDw8IG1fbG9nUGFn
ZVNpemU7CisgICAgICAgIAorICAgICAgICBBU1NFUlQocm91bmRlZFVwU2l6ZSA+PSBzaXplSW5C
eXRlcyk7CisgICAgICAgIAorICAgICAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gcm91bmRlZFVwU2l6
ZTsKKyAgICAgICAgCisgICAgICAgIGlmIChyb3VuZGVkVXBTaXplID4gc2l6ZUluQnl0ZXMpIHsK
KyAgICAgICAgICAgIHZvaWQqIGZyZWVTcGFjZVN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5dGVzKTsKKyAg
ICAgICAgICAgIHNpemVfdCBmcmVlU3BhY2VTaXplID0gcm91bmRlZFVwU2l6ZSAtIHNpemVJbkJ5
dGVzOworICAgICAgICAgICAgYWRkRnJlZVNwYWNlKGZyZWVTcGFjZVN0YXJ0LCBmcmVlU3BhY2VT
aXplKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHN0YXJ0
LCBzaXplSW5CeXRlcyk7CisgICAgbV9ieXRlc0FsbG9jYXRlZCArPSBzaXplSW5CeXRlczsKKyNp
ZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICBtX251bUFsbG9jYXRpb25zKys7
CisjZW5kaWYKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1ldGFBbGxvY2F0b3JIYW5kbGUodGhp
cywgc3RhcnQsIHNpemVJbkJ5dGVzKSk7Cit9CisKK01ldGFBbGxvY2F0b3I6OlN0YXRpc3RpY3Mg
TWV0YUFsbG9jYXRvcjo6Y3VycmVudFN0YXRpc3RpY3MoKQoreworICAgIFNwaW5Mb2NrSG9sZGVy
IGxvY2tlcigmbV9sb2NrKTsKKyAgICBTdGF0aXN0aWNzIHJlc3VsdDsKKyAgICByZXN1bHQuYnl0
ZXNBbGxvY2F0ZWQgPSBtX2J5dGVzQWxsb2NhdGVkOworICAgIHJlc3VsdC5ieXRlc1Jlc2VydmVk
ID0gbV9ieXRlc1Jlc2VydmVkOworICAgIHJlc3VsdC5ieXRlc0NvbW1pdHRlZCA9IG1fYnl0ZXND
b21taXR0ZWQ7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCogTWV0YUFsbG9jYXRvcjo6
ZmluZEFuZFJlbW92ZUZyZWVTcGFjZShzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisgICAgRnJlZVNw
YWNlTm9kZSogbm9kZSA9IG1fZnJlZVNwYWNlU2l6ZU1hcC5maW5kTGVhc3RHcmVhdGVyVGhhbk9y
RXF1YWwoc2l6ZUluQnl0ZXMpOworICAgIAorICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgQVNTRVJUKG5vZGUtPm1fa2V5ID49IHNpemVJbkJ5dGVzKTsKKyAgICAK
KyAgICBtX2ZyZWVTcGFjZVNpemVNYXAucmVtb3ZlKG5vZGUpOworICAgIAorICAgIHZvaWQqIHJl
c3VsdDsKKyAgICAKKyAgICBpZiAobm9kZS0+bV9rZXkgPT0gc2l6ZUluQnl0ZXMpIHsKKyAgICAg
ICAgLy8gRWFzeSBjYXNlOiBwZXJmZWN0IGZpdCwgc28ganVzdCByZW1vdmUgdGhlIG5vZGUgZW50
aXJlbHkuCisgICAgICAgIHJlc3VsdCA9IG5vZGUtPm1fdmFsdWU7CisgICAgICAgIAorICAgICAg
ICBtX2ZyZWVTcGFjZVN0YXJ0QWRkcmVzc01hcC5yZW1vdmUobm9kZS0+bV92YWx1ZSk7CisgICAg
ICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fdmFsdWUpICsgbm9kZS0+bV9r
ZXkpKTsKKyAgICAgICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgLy8gVHJ5IHRvIGJlIGEgZ29vZCBjaXRpemVuIGFuZCBlbnN1cmUgdGhhdCB0aGUgcmV0
dXJuZWQgY2h1bmsgb2YgbWVtb3J5CisgICAgICAgIC8vIHN0cmFkZGxlcyBhcyBmZXcgcGFnZXMg
YXMgcG9zc2libGUsIGJ1dCBvbmx5IGluc29mYXIgYXMgZG9pbmcgc28gd2lsbAorICAgICAgICAv
LyBub3QgaW5jcmVhc2UgZnJhZ21lbnRhdGlvbi4gVGhlIGludHVpdGlvbiBpcyB0aGF0IG1pbmlt
aXppbmcKKyAgICAgICAgLy8gZnJhZ21lbnRhdGlvbiBpcyBhIHN0cmljdGx5IGhpZ2hlciBwcmlv
cml0eSB0aGFuIG1pbmltaXppbmcgdGhlIG51bWJlcgorICAgICAgICAvLyBvZiBjb21taXR0ZWQg
cGFnZXMsIHNpbmNlIGluIHRoZSBsb25nIHJ1biwgc21hbGxlciBmcmFnbWVudGF0aW9uIG1lYW5z
CisgICAgICAgIC8vIGZld2VyIGNvbW1pdHRlZCBwYWdlcyBhbmQgZmV3ZXIgZmFpbHVyZXMgaW4g
Z2VuZXJhbC4KKyAgICAgICAgCisgICAgICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4obm9kZS0+bV92YWx1ZSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAg
ICAgICAgdWludHB0cl90IGxhc3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihu
b2RlLT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5IC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAK
KyAgICAgICAgdWludHB0cl90IGxhc3RQYWdlRm9yTGVmdEFsbG9jYXRpb24gPSAocmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fdmFsdWUpICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBt
X2xvZ1BhZ2VTaXplOworICAgICAgICB1aW50cHRyX3QgZmlyc3RQYWdlRm9yUmlnaHRBbGxvY2F0
aW9uID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5vZGUt
Pm1fa2V5IC0gc2l6ZUluQnl0ZXMpID4+IG1fbG9nUGFnZVNpemU7CisgICAgICAgIAorICAgICAg
ICBpZiAobGFzdFBhZ2VGb3JMZWZ0QWxsb2NhdGlvbiAtIGZpcnN0UGFnZSArIDEgPD0gbGFzdFBh
Z2UgLSBmaXJzdFBhZ2VGb3JSaWdodEFsbG9jYXRpb24gKyAxKSB7CisgICAgICAgICAgICAvLyBB
bGxvY2F0ZSBpbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSByZXR1cm5lZCBjaHVuaywgYW5kIHNsaWRl
IHRoZSBub2RlIHRvIHRoZSByaWdodC4KKyAgICAgICAgICAgIHJlc3VsdCA9IG5vZGUtPm1fdmFs
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFw
LnJlbW92ZShub2RlLT5tX3ZhbHVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9kZS0+
bV9rZXkgLT0gc2l6ZUluQnl0ZXM7CisgICAgICAgICAgICBub2RlLT5tX3ZhbHVlID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5vZGUtPm1fdmFs
dWUpICsgc2l6ZUluQnl0ZXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFj
ZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFkZHJl
c3NNYXAuYWRkKG5vZGUtPm1fdmFsdWUsIG5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgLy8gQWxsb2NhdGUgaW4gdGhlIHJpZ2h0IHNpemUgb2YgdGhlIHJldHVybmVkIGNodW5r
LCBhbmQgc2xpZGUgdGhlIG5vZGUgdG8gdGhlIGxlZnQ7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHJlc3VsdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dHB0cl90Pihub2RlLT5tX3ZhbHVlKSArIG5vZGUtPm1fa2V5IC0gc2l6ZUluQnl0ZXMpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZUVuZEFkZHJlc3NNYXAucmVtb3ZlKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihub2RlLT5t
X3ZhbHVlKSArIG5vZGUtPm1fa2V5KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vZGUt
Pm1fa2V5IC09IHNpemVJbkJ5dGVzOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VFbmRBZGRy
ZXNzTWFwLmFkZChyZXN1bHQsIG5vZGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgTWV0YUFsbG9jYXRvcjo6YWRkRnJlZVNwYWNlRnJvbVJl
bGVhc2VkSGFuZGxlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpCit7CisjaWYgRU5B
QkxFKE1FVEFfQUxMT0NBVE9SX1BST0ZJTEUpCisgICAgbV9udW1GcmVlcysrOworI2VuZGlmCisg
ICAgbV9ieXRlc0FsbG9jYXRlZCAtPSBzaXplSW5CeXRlczsKKyAgICBhZGRGcmVlU3BhY2Uoc3Rh
cnQsIHNpemVJbkJ5dGVzKTsKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVzaEZyZWVT
cGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIFNwaW5Mb2NrSG9s
ZGVyIGxvY2tlcigmbV9sb2NrKTsKKyAgICBtX2J5dGVzUmVzZXJ2ZWQgKz0gc2l6ZUluQnl0ZXM7
CisgICAgYWRkRnJlZVNwYWNlKHN0YXJ0LCBzaXplSW5CeXRlcyk7Cit9CisKK3NpemVfdCBNZXRh
QWxsb2NhdG9yOjpkZWJ1Z0ZyZWVTcGFjZVNpemUoKQoreworI2lmbmRlZiBOREVCVUcKKyAgICBT
cGluTG9ja0hvbGRlciBsb2NrZXIoJm1fbG9jayk7CisgICAgc2l6ZV90IHJlc3VsdCA9IDA7Cisg
ICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFwLmZpcnN0KCk7
IG5vZGU7IG5vZGUgPSBub2RlLT5zdWNjZXNzb3IoKSkKKyAgICAgICAgcmVzdWx0ICs9IG5vZGUt
Pm1fa2V5OworICAgIHJldHVybiByZXN1bHQ7CisjZWxzZQorICAgIENSQVNIKCk7CisgICAgcmV0
dXJuIDA7CisjZW5kaWYKK30KKwordm9pZCBNZXRhQWxsb2NhdG9yOjphZGRGcmVlU3BhY2Uodm9p
ZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRlcykKK3sKKyAgICB2b2lkKiBlbmQgPSByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oc3RhcnQpICsgc2l6
ZUluQnl0ZXMpOworICAgIAorICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRl
cmF0b3IgbGVmdE5laWdoYm9yID0gbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmZpbmQoc3RhcnQp
OworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPjo6aXRlcmF0b3IgcmlnaHROZWln
aGJvciA9IG1fZnJlZVNwYWNlU3RhcnRBZGRyZXNzTWFwLmZpbmQoZW5kKTsKKyAgICAKKyAgICBp
ZiAobGVmdE5laWdoYm9yICE9IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5lbmQoKSkgeworICAg
ICAgICAvLyBXZSBoYXZlIHNvbWV0aGluZyB3ZSBjYW4gY29hbGVzY2Ugd2l0aCBvbiB0aGUgbGVm
dC4gUmVtb3ZlIGl0IGZyb20gdGhlIHRyZWUsIGFuZAorICAgICAgICAvLyByZW1vdmUgaXRzIGVu
ZCBmcm9tIHRoZSBlbmQgYWRkcmVzcyBtYXAuCisgICAgICAgIAorICAgICAgICBBU1NFUlQocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGxlZnROZWln
aGJvci0+c2Vjb25kLT5tX3ZhbHVlKSArIGxlZnROZWlnaGJvci0+c2Vjb25kLT5tX2tleSkgPT0g
bGVmdE5laWdoYm9yLT5maXJzdCk7CisgICAgICAgIAorICAgICAgICBGcmVlU3BhY2VOb2RlKiBs
ZWZ0Tm9kZSA9IGxlZnROZWlnaGJvci0+c2Vjb25kOworICAgICAgICAKKyAgICAgICAgdm9pZCog
bGVmdFN0YXJ0ID0gbGVmdE5vZGUtPm1fdmFsdWU7CisgICAgICAgIHNpemVfdCBsZWZ0U2l6ZSA9
IGxlZnROb2RlLT5tX2tleTsKKyAgICAgICAgdm9pZCogbGVmdEVuZCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihsZWZ0U3RhcnQpICsgbGVmdFNp
emUpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxlZnRFbmQgPT0gc3RhcnQpOworICAgICAg
ICAKKyAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLnJlbW92ZShsZWZ0Tm9kZSk7CisgICAgICAg
IG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5yZW1vdmUobGVmdEVuZCk7CisgICAgICAgIAorICAg
ICAgICAvLyBOb3cgY2hlY2sgaWYgdGhlcmUgaXMgYWxzbyBzb21ldGhpbmcgdG8gY29hbGVzY2Ug
d2l0aCBvbiB0aGUgcmlnaHQuCisgICAgICAgIGlmIChyaWdodE5laWdoYm9yICE9IG1fZnJlZVNw
YWNlU3RhcnRBZGRyZXNzTWFwLmVuZCgpKSB7CisgICAgICAgICAgICAvLyBGcmVlaW5nIHNvbWV0
aGluZyBpbiB0aGUgbWlkZGxlIG9mIGZyZWUgYmxvY2tzLiBDb2FsZXNjZSBib3RoIGxlZnQgYW5k
CisgICAgICAgICAgICAvLyByaWdodCwgd2hpbHN0IHJlbW92aW5nIHRoZSByaWdodCBuZWlnaGJv
ciBmcm9tIHRoZSBtYXBzLgorICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRO
ZWlnaGJvci0+c2Vjb25kLT5tX3ZhbHVlID09IHJpZ2h0TmVpZ2hib3ItPmZpcnN0KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgRnJlZVNwYWNlTm9kZSogcmlnaHROb2RlID0gcmlnaHROZWln
aGJvci0+c2Vjb25kOworICAgICAgICAgICAgdm9pZCogcmlnaHRTdGFydCA9IHJpZ2h0TmVpZ2hi
b3ItPmZpcnN0OworICAgICAgICAgICAgc2l6ZV90IHJpZ2h0U2l6ZSA9IHJpZ2h0Tm9kZS0+bV9r
ZXk7CisgICAgICAgICAgICB2b2lkKiByaWdodEVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihyaWdodFN0YXJ0KSArIHJpZ2h0U2l6ZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIEFTU0VSVChyaWdodFN0YXJ0ID09IGVuZCk7CisgICAg
ICAgICAgICBBU1NFUlQocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGxlZnRTdGFydCkgKyBsZWZ0U2l6ZSArIHNpemVJbkJ5dGVzICsgcmlnaHRTaXpl
KSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU2l6
ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlU3RhcnRBZGRy
ZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5yZW1vdmUocmlnaHRFbmQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmcmVl
RnJlZVNwYWNlTm9kZShyaWdodE5vZGUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBsZWZ0
Tm9kZS0+bV9rZXkgKz0gc2l6ZUluQnl0ZXMgKyByaWdodFNpemU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG1fZnJlZVNwYWNlU2l6ZU1hcC5pbnNlcnQobGVmdE5vZGUpOworICAgICAgICAg
ICAgbV9mcmVlU3BhY2VFbmRBZGRyZXNzTWFwLmFkZChyaWdodEVuZCwgbGVmdE5vZGUpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGVmdE5vZGUtPm1fa2V5ICs9IHNpemVJbkJ5dGVz
OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KGxl
ZnROb2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRkcmVzc01hcC5hZGQoZW5kLCBs
ZWZ0Tm9kZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYW5ub3QgY29h
bGVzY2Ugd2l0aCBsZWZ0OyB0cnkgdG8gc2VlIGlmIHdlIGNhbiBjb2FsZXNjZSB3aXRoIHJpZ2h0
LgorICAgICAgICAKKyAgICAgICAgaWYgKHJpZ2h0TmVpZ2hib3IgIT0gbV9mcmVlU3BhY2VTdGFy
dEFkZHJlc3NNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIEZyZWVTcGFjZU5vZGUqIHJpZ2h0Tm9k
ZSA9IHJpZ2h0TmVpZ2hib3ItPnNlY29uZDsKKyAgICAgICAgICAgIHZvaWQqIHJpZ2h0U3RhcnQg
PSByaWdodE5laWdoYm9yLT5maXJzdDsKKyAgICAgICAgICAgIHNpemVfdCByaWdodFNpemUgPSBy
aWdodE5vZGUtPm1fa2V5OworICAgICAgICAgICAgdm9pZCogcmlnaHRFbmQgPSByZWludGVycHJl
dF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocmlnaHRTdGFydCkgKyBy
aWdodFNpemUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBBU1NFUlQocmlnaHRTdGFydCA9
PSBlbmQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChyaWdodEVuZCwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0KSArIHNpemVJbkJ5
dGVzICsgcmlnaHRTaXplKSA9PSByaWdodEVuZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fZnJlZVNwYWNlU2l6ZU1hcC5yZW1vdmUocmlnaHROb2RlKTsKKyAgICAgICAgICAgIG1fZnJl
ZVNwYWNlU3RhcnRBZGRyZXNzTWFwLnJlbW92ZShyaWdodFN0YXJ0KTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgcmlnaHROb2RlLT5tX2tleSArPSBzaXplSW5CeXRlczsKKyAgICAgICAgICAg
IHJpZ2h0Tm9kZS0+bV92YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X2ZyZWVTcGFjZVNpemVNYXAuaW5zZXJ0KHJpZ2h0Tm9kZSk7CisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVN0YXJ0QWRkcmVzc01hcC5hZGQoc3RhcnQsIHJpZ2h0Tm9kZSk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNvYWxlc2NlIHdpdGgsIHNvIGNyZWF0ZSBh
IG5ldyBmcmVlIHNwYWNlIG5vZGUgYW5kIGFkZCBpdC4KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgRnJlZVNwYWNlTm9kZSogbm9kZSA9IGFsbG9jRnJlZVNwYWNlTm9kZSgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBub2RlLT5tX2tleSA9IHNpemVJbkJ5dGVzOworICAgICAgICAgICAg
bm9kZS0+bV92YWx1ZSA9IHN0YXJ0OworICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ZyZWVT
cGFjZVNpemVNYXAuaW5zZXJ0KG5vZGUpOworICAgICAgICAgICAgbV9mcmVlU3BhY2VTdGFydEFk
ZHJlc3NNYXAuYWRkKHN0YXJ0LCBub2RlKTsKKyAgICAgICAgICAgIG1fZnJlZVNwYWNlRW5kQWRk
cmVzc01hcC5hZGQoZW5kLCBub2RlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBNZXRh
QWxsb2NhdG9yOjppbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBz
aXplSW5CeXRlcykKK3sKKyAgICB1aW50cHRyX3QgZmlyc3RQYWdlID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50cHRyX3Q+KGFkZHJlc3MpID4+IG1fbG9nUGFnZVNpemU7CisgICAgdWludHB0cl90IGxh
c3RQYWdlID0gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihhZGRyZXNzKSArIHNpemVJbkJ5
dGVzIC0gMSkgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICAKKyAgICBmb3IgKHVpbnRwdHJfdCBwYWdl
ID0gZmlyc3RQYWdlOyBwYWdlIDw9IGxhc3RQYWdlOyArK3BhZ2UpIHsKKyAgICAgICAgSGFzaE1h
cDx1aW50cHRyX3QsIHNpemVfdD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3BhZ2VPY2N1cGFuY3lNYXAu
ZmluZChwYWdlKTsKKyAgICAgICAgaWYgKGl0ZXIgPT0gbV9wYWdlT2NjdXBhbmN5TWFwLmVuZCgp
KSB7CisgICAgICAgICAgICBtX3BhZ2VPY2N1cGFuY3lNYXAuYWRkKHBhZ2UsIDEpOworICAgICAg
ICAgICAgbV9ieXRlc0NvbW1pdHRlZCArPSBtX3BhZ2VTaXplOworICAgICAgICAgICAgbm90aWZ5
TmVlZFBhZ2UocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGFnZSA8PCBtX2xvZ1BhZ2VTaXplKSk7
CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaXRlci0+c2Vjb25kKys7CisgICAgfQorfQor
Cit2b2lkIE1ldGFBbGxvY2F0b3I6OmRlY3JlbWVudFBhZ2VPY2N1cGFuY3kodm9pZCogYWRkcmVz
cywgc2l6ZV90IHNpemVJbkJ5dGVzKQoreworICAgIHVpbnRwdHJfdCBmaXJzdFBhZ2UgPSByZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4oYWRkcmVzcykgPj4gbV9sb2dQYWdlU2l6ZTsKKyAgICB1
aW50cHRyX3QgbGFzdFBhZ2UgPSAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGFkZHJlc3Mp
ICsgc2l6ZUluQnl0ZXMgLSAxKSA+PiBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgIGZvciAodWlu
dHB0cl90IHBhZ2UgPSBmaXJzdFBhZ2U7IHBhZ2UgPD0gbGFzdFBhZ2U7ICsrcGFnZSkgeworICAg
ICAgICBIYXNoTWFwPHVpbnRwdHJfdCwgc2l6ZV90Pjo6aXRlcmF0b3IgaXRlciA9IG1fcGFnZU9j
Y3VwYW5jeU1hcC5maW5kKHBhZ2UpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3BhZ2VPY2N1
cGFuY3lNYXAuZW5kKCkpOworICAgICAgICBpZiAoIS0tKGl0ZXItPnNlY29uZCkpIHsKKyAgICAg
ICAgICAgIG1fcGFnZU9jY3VwYW5jeU1hcC5yZW1vdmUoaXRlcik7CisgICAgICAgICAgICBtX2J5
dGVzQ29tbWl0dGVkIC09IG1fcGFnZVNpemU7CisgICAgICAgICAgICBub3RpZnlQYWdlSXNGcmVl
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhZ2UgPDwgbV9sb2dQYWdlU2l6ZSkpOworICAgICAg
ICB9CisgICAgfQorfQorCitzaXplX3QgTWV0YUFsbG9jYXRvcjo6cm91bmRVcChzaXplX3Qgc2l6
ZUluQnl0ZXMpCit7CisgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8c2l6ZV90Pjo6bWF4KCkg
LSBtX2FsbG9jYXRpb25HcmFudWxlIDw9IHNpemVJbkJ5dGVzKQorICAgICAgICBDUkFTSCgpOwor
ICAgIHJldHVybiAoc2l6ZUluQnl0ZXMgKyBtX2FsbG9jYXRpb25HcmFudWxlIC0gMSkgJiB+KG1f
YWxsb2NhdGlvbkdyYW51bGUgLSAxKTsKK30KKworTWV0YUFsbG9jYXRvcjo6RnJlZVNwYWNlTm9k
ZSogTWV0YUFsbG9jYXRvcjo6YWxsb2NGcmVlU3BhY2VOb2RlKCkKK3sKKyNpZm5kZWYgTkRFQlVH
CisgICAgbV9tYWxsb2NCYWxhbmNlKys7CisjZW5kaWYKKyAgICByZXR1cm4gbmV3IChmYXN0TWFs
bG9jKHNpemVvZihGcmVlU3BhY2VOb2RlKSkpIEZyZWVTcGFjZU5vZGUoMCwgMCk7Cit9CisKK3Zv
aWQgTWV0YUFsbG9jYXRvcjo6ZnJlZUZyZWVTcGFjZU5vZGUoRnJlZVNwYWNlTm9kZSogbm9kZSkK
K3sKKyNpZm5kZWYgTkRFQlVHCisgICAgbV9tYWxsb2NCYWxhbmNlLS07CisjZW5kaWYKKyAgICBm
YXN0RnJlZShub2RlKTsKK30KKworI2lmIEVOQUJMRShNRVRBX0FMTE9DQVRPUl9QUk9GSUxFKQor
dm9pZCBNZXRhQWxsb2NhdG9yOjpkdW1wUHJvZmlsZSgpCit7CisgICAgcHJpbnRmKCJudW0gYWxs
b2NhdGlvbnMgPSAldSwgbnVtIGZyZWVzID0gJXVcbiIsIG1fbnVtQWxsb2NhdGlvbnMsIG1fbnVt
RnJlZXMpOworfQorI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFsbG9jYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9NZXRhQWxsb2NhdG9yLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdURl9NZXRhQWxsb2NhdG9yX2gKKyNkZWZpbmUgV1RG
X01ldGFBbGxvY2F0b3JfaAorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIkhh
c2hNYXAuaCIKKyNpbmNsdWRlICJNZXRhQWxsb2NhdG9ySGFuZGxlLmgiCisjaW5jbHVkZSAiTm9u
Y29weWFibGUuaCIKKyNpbmNsdWRlICJQYWdlQmxvY2suaCIKKyNpbmNsdWRlICJSZWRCbGFja1Ry
ZWUuaCIKKyNpbmNsdWRlICJSZWZDb3VudGVkLmgiCisjaW5jbHVkZSAiUmVmUHRyLmgiCisjaW5j
bHVkZSAiVENTcGluTG9jay5oIgorCituYW1lc3BhY2UgV1RGIHsKKworI2RlZmluZSBFTkFCTEVf
TUVUQV9BTExPQ0FUT1JfUFJPRklMRSAwCisKK2NsYXNzIE1ldGFBbGxvY2F0b3IgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKE1ldGFBbGxvY2F0b3IpOworcHVibGljOgorICAgIAorICAgIE1l
dGFBbGxvY2F0b3Ioc2l6ZV90IGFsbG9jYXRpb25HcmFudWxlKTsKKyAgICAKKyAgICB2aXJ0dWFs
IH5NZXRhQWxsb2NhdG9yKCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFu
ZGxlPiBhbGxvY2F0ZShzaXplX3Qgc2l6ZUluQnl0ZXMpOworICAgIAorICAgIC8vIE5vbi1hdG9t
aWMgbWV0aG9kcyBmb3IgZ2V0dGluZyBhbGxvY2F0b3Igc3RhdGlzdGljcy4KKyAgICBzaXplX3Qg
Ynl0ZXNBbGxvY2F0ZWQoKSB7IHJldHVybiBtX2J5dGVzQWxsb2NhdGVkOyB9CisgICAgc2l6ZV90
IGJ5dGVzUmVzZXJ2ZWQoKSB7IHJldHVybiBtX2J5dGVzUmVzZXJ2ZWQ7IH0KKyAgICBzaXplX3Qg
Ynl0ZXNDb21taXR0ZWQoKSB7IHJldHVybiBtX2J5dGVzQ29tbWl0dGVkOyB9CisgICAgCisgICAg
Ly8gQXRvbWljIG1ldGhvZCBmb3IgZ2V0dGluZyBhbGxvY2F0b3Igc3RhdGlzdGljcy4KKyAgICBz
dHJ1Y3QgU3RhdGlzdGljcyB7CisgICAgICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZDsKKyAgICAg
ICAgc2l6ZV90IGJ5dGVzUmVzZXJ2ZWQ7CisgICAgICAgIHNpemVfdCBieXRlc0NvbW1pdHRlZDsK
KyAgICB9OworICAgIFN0YXRpc3RpY3MgY3VycmVudFN0YXRpc3RpY3MoKTsKKworICAgIC8vIEFk
ZCBtb3JlIGZyZWUgc3BhY2UgdG8gdGhlIGFsbG9jYXRvci4gQ2FsbCB0aGlzIGRpcmVjdGx5IGZy
b20KKyAgICAvLyB0aGUgY29uc3RydWN0b3IgaWYgeW91IHdpc2ggdG8gb3BlcmF0ZSB0aGUgYWxs
b2NhdG9yIHdpdGhpbiBhCisgICAgLy8gZml4ZWQgcG9vbC4KKyAgICB2b2lkIGFkZEZyZXNoRnJl
ZVNwYWNlKHZvaWQqIHN0YXJ0LCBzaXplX3Qgc2l6ZUluQnl0ZXMpOworCisgICAgLy8gVGhpcyBp
cyBtZWFudCBvbmx5IGZvciBpbXBsZW1lbnRpbmcgdGVzdHMuIE5ldmVyIGNhbGwgdGhpcyBpbiBy
ZWxlYXNlCisgICAgLy8gYnVpbGRzLgorICAgIHNpemVfdCBkZWJ1Z0ZyZWVTcGFjZVNpemUoKTsK
KyAgICAKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJPRklMRSkKKyAgICB2b2lkIGR1bXBQ
cm9maWxlKCk7CisjZWxzZQorICAgIHZvaWQgZHVtcFByb2ZpbGUoKSB7IH0KKyNlbmRpZgorCitw
cm90ZWN0ZWQ6CisgICAgCisgICAgLy8gQWxsb2NhdGUgbmV3IHZpcnR1YWwgc3BhY2UsIGJ1dCBk
b24ndCBjb21taXQuIFRoaXMgbWF5IHJldHVybiBtb3JlCisgICAgLy8gcGFnZXMgdGhhbiB3ZSBh
c2tlZCwgaW4gd2hpY2ggY2FzZSBudW1QYWdlcyBpcyBjaGFuZ2VkLgorICAgIHZpcnR1YWwgdm9p
ZCogYWxsb2NhdGVOZXdTcGFjZShzaXplX3QmIG51bVBhZ2VzKSA9IDA7CisgICAgCisgICAgLy8g
Q29tbWl0IGEgcGFnZS4KKyAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uodm9pZCogcGFn
ZSkgPSAwOworICAgIAorICAgIC8vIFVuY29tbWl0IGEgcGFnZS4KKyAgICB2aXJ0dWFsIHZvaWQg
bm90aWZ5UGFnZUlzRnJlZSh2b2lkKiBwYWdlKSA9IDA7CisgICAgCisgICAgLy8gTk9URTogbm9u
ZSBvZiB0aGUgYWJvdmUgbWV0aG9kcyBhcmUgY2FsbGVkIGR1cmluZyBhbGxvY2F0b3IKKyAgICAv
LyBkZXN0cnVjdGlvbiwgaW4gcGFydCBiZWNhdXNlIGEgTWV0YUFsbG9jYXRvciBjYW5ub3QgZGll
IHNvIGxvbmcKKyAgICAvLyBhcyB0aGVyZSBhcmUgSGFuZGxlcyB0aGF0IHJlZmVyIHRvIGl0Lgor
Citwcml2YXRlOgorICAgIAorICAgIGZyaWVuZCBjbGFzcyBNZXRhQWxsb2NhdG9ySGFuZGxlOwor
ICAgIAorICAgIHR5cGVkZWYgUmVkQmxhY2tUcmVlPHNpemVfdCwgdm9pZCo+IFRyZWU7CisgICAg
dHlwZWRlZiBUcmVlOjpOb2RlIEZyZWVTcGFjZU5vZGU7CisgICAgCisgICAgLy8gUmVtb3ZlIGZy
ZWUgc3BhY2UgZnJvbSB0aGUgYWxsb2NhdG9yLiBUaGlzIGlzIGVmZmVjdGl2ZWx5CisgICAgLy8g
dGhlIGFsbG9jYXRlKCkgZnVuY3Rpb24sIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IG1hcmsgdGhl
CisgICAgLy8gcmV0dXJuZWQgc3BhY2UgYXMgYmVpbmcgaW4tdXNlLgorICAgIHZvaWQqIGZpbmRB
bmRSZW1vdmVGcmVlU3BhY2Uoc2l6ZV90IHNpemVJbkJ5dGVzKTsKKworICAgIC8vIFRoaXMgaXMg
Y2FsbGVkIHdoZW4gbWVtb3J5IGZyb20gYW4gYWxsb2NhdGlvbiBpcyBmcmVlZC4KKyAgICB2b2lk
IGFkZEZyZWVTcGFjZUZyb21SZWxlYXNlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKTsKKyAgICAKKyAgICAvLyBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwgaW1wbGVtZW50YXRp
b24gb2YgYWRkaW5nIGZyZWUgc3BhY2U7IGl0CisgICAgLy8gaXMgY2FsbGVkIGZyb20gYm90aCBh
ZGRGcmVlU3BhY2VGcm9tUmVsZWFzZWRIYW5kbGUgYW5kIGZyb20KKyAgICAvLyBhZGRGcmVzaEZy
ZWVTcGFjZS4KKyAgICB2b2lkIGFkZEZyZWVTcGFjZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJ
bkJ5dGVzKTsKKyAgICAKKyAgICAvLyBNYW5hZ2VtZW50IG9mIHVzZWQgc3BhY2UuCisgICAgCisg
ICAgdm9pZCBpbmNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3MsIHNpemVfdCBzaXpl
SW5CeXRlcyk7CisgICAgdm9pZCBkZWNyZW1lbnRQYWdlT2NjdXBhbmN5KHZvaWQqIGFkZHJlc3Ms
IHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgLy8gVXRpbGl0aWVzLgorICAgIAorICAg
IHNpemVfdCByb3VuZFVwKHNpemVfdCBzaXplSW5CeXRlcyk7CisgICAgCisgICAgRnJlZVNwYWNl
Tm9kZSogYWxsb2NGcmVlU3BhY2VOb2RlKCk7CisgICAgdm9pZCBmcmVlRnJlZVNwYWNlTm9kZShG
cmVlU3BhY2VOb2RlKik7CisgICAgCisgICAgc2l6ZV90IG1fYWxsb2NhdGlvbkdyYW51bGU7Cisg
ICAgdW5zaWduZWQgbV9sb2dBbGxvY2F0aW9uR3JhbnVsZTsKKyAgICBzaXplX3QgbV9wYWdlU2l6
ZTsKKyAgICB1bnNpZ25lZCBtX2xvZ1BhZ2VTaXplOworICAgIAorICAgIFRyZWUgbV9mcmVlU3Bh
Y2VTaXplTWFwOworICAgIEhhc2hNYXA8dm9pZCosIEZyZWVTcGFjZU5vZGUqPiBtX2ZyZWVTcGFj
ZVN0YXJ0QWRkcmVzc01hcDsKKyAgICBIYXNoTWFwPHZvaWQqLCBGcmVlU3BhY2VOb2RlKj4gbV9m
cmVlU3BhY2VFbmRBZGRyZXNzTWFwOworICAgIEhhc2hNYXA8dWludHB0cl90LCBzaXplX3Q+IG1f
cGFnZU9jY3VwYW5jeU1hcDsKKyAgICAKKyAgICBzaXplX3QgbV9ieXRlc0FsbG9jYXRlZDsKKyAg
ICBzaXplX3QgbV9ieXRlc1Jlc2VydmVkOworICAgIHNpemVfdCBtX2J5dGVzQ29tbWl0dGVkOwor
ICAgIAorICAgIFNwaW5Mb2NrIG1fbG9jazsKKworI2lmbmRlZiBOREVCVUcKKyAgICBzaXplX3Qg
bV9tYWxsb2NCYWxhbmNlOworI2VuZGlmCisKKyNpZiBFTkFCTEUoTUVUQV9BTExPQ0FUT1JfUFJP
RklMRSkKKyAgICB1bnNpZ25lZCBtX251bUFsbG9jYXRpb25zOworICAgIHVuc2lnbmVkIG1fbnVt
RnJlZXM7CisjZW5kaWYKK307CisKK2lubGluZSBNZXRhQWxsb2NhdG9yOjp+TWV0YUFsbG9jYXRv
cigpCit7CisgICAgZm9yIChGcmVlU3BhY2VOb2RlKiBub2RlID0gbV9mcmVlU3BhY2VTaXplTWFw
LmZpcnN0KCk7IG5vZGU7KSB7CisgICAgICAgIEZyZWVTcGFjZU5vZGUqIG5leHQgPSBub2RlLT5z
dWNjZXNzb3IoKTsKKyAgICAgICAgbV9mcmVlU3BhY2VTaXplTWFwLnJlbW92ZShub2RlKTsKKyAg
ICAgICAgZnJlZUZyZWVTcGFjZU5vZGUobm9kZSk7CisgICAgICAgIG5vZGUgPSBuZXh0OworICAg
IH0KKyNpZm5kZWYgTkRFQlVHCisgICAgQVNTRVJUKCFtX21hbGxvY0JhbGFuY2UpOworI2VuZGlm
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gV1RGX01ldGFBbGxvY2F0b3Jf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL01ldGFBbGxvY2F0b3JI
YW5kbGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdURl9NZXRhQWxsb2NhdG9ySGFuZGxlX2gKKyNkZWZpbmUgV1RGX01ldGFBbGxvY2F0b3JIYW5k
bGVfaAorCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIE1ldGFBbGxvY2F0b3I7CisKK2NsYXNzIE1ldGFBbGxvY2F0b3JIYW5kbGU6IHB1YmxpYyBS
ZWZDb3VudGVkPE1ldGFBbGxvY2F0b3JIYW5kbGU+IHsKK3ByaXZhdGU6CisgICAgTWV0YUFsbG9j
YXRvckhhbmRsZShNZXRhQWxsb2NhdG9yKiwgdm9pZCogc3RhcnQsIHNpemVfdCBzaXplSW5CeXRl
cyk7CisgICAgCisgICAgTWV0YUFsbG9jYXRvckhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNp
emVJbkJ5dGVzKQorICAgICAgICA6IG1fYWxsb2NhdG9yKDApCisgICAgICAgICwgbV9zdGFydChz
dGFydCkKKyAgICAgICAgLCBtX3NpemVJbkJ5dGVzKHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHN0YXJ0KTsKKyAgICB9CisgICAgCitwdWJsaWM6CisgICAgfk1ldGFBbGxvY2F0
b3JIYW5kbGUoKTsKKyAgICAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXRhQWxsb2NhdG9ySGFu
ZGxlPiBjcmVhdGVTZWxmTWFuYWdlZEhhbmRsZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5
dGVzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNZXRhQWxsb2NhdG9ySGFu
ZGxlKHN0YXJ0LCBzaXplSW5CeXRlcykpOworICAgIH0KKyAgICAKKyAgICB2b2lkKiBzdGFydCgp
CisgICAgeworICAgICAgICByZXR1cm4gbV9zdGFydDsKKyAgICB9CisgICAgCisgICAgdm9pZCog
ZW5kKCkKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPihyZWlu
dGVycHJldF9jYXN0PHVpbnRwdHJfdD4obV9zdGFydCkgKyBtX3NpemVJbkJ5dGVzKTsKKyAgICB9
CisgICAgICAgIAorICAgIHNpemVfdCBzaXplSW5CeXRlcygpCisgICAgeworICAgICAgICByZXR1
cm4gbV9zaXplSW5CeXRlczsKKyAgICB9CisgICAgICAgIAorICAgIHZvaWQgc2hyaW5rKHNpemVf
dCBuZXdTaXplSW5CeXRlcyk7CisgICAgCisgICAgYm9vbCBpc01hbmFnZWQoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEhbV9hbGxvY2F0b3I7CisgICAgfQorICAgICAgICAKKyAgICBNZXRhQWxs
b2NhdG9yKiBhbGxvY2F0b3IoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fYWxsb2NhdG9yKTsK
KyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdG9yOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIE1ldGFBbGxvY2F0b3I7CisgICAgCisgICAgTWV0YUFsbG9jYXRvciogbV9h
bGxvY2F0b3I7CisgICAgdm9pZCogbV9zdGFydDsKKyAgICBzaXplX3QgbV9zaXplSW5CeXRlczsK
K307CisKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJs
YWNrVHJlZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUmVkQmxh
Y2tUcmVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1JlZEJs
YWNrVHJlZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCwgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBS
ZWRCbGFja1RyZWVfaAorI2RlZmluZSBSZWRCbGFja1RyZWVfaAorCisjaW5jbHVkZSA8d3RmL0Fz
c2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFRoaXMgaW1wbGVtZW50cyBhIHJlZC1ibGFjayB0cmVlIHdpdGggdGhlIGZvbGxv
d2luZyBwcm9wZXJ0aWVzOgorLy8gLSBUaGUgYWxsb2NhdGlvbiBvZiBub2RlcyBpbiB0aGUgdHJl
ZSBpcyBlbnRpcmVseSB1cCB0byB0aGUgdXNlci4KKy8vIC0gSWYgeW91IGFyZSBpbiBwb3NzZXNz
aW9uIG9mIGEgcG9pbnRlciB0byBhIG5vZGUsIHlvdSBjYW4gZGVsZXRlCisvLyAgIGl0IGZyb20g
dGhlIHRyZWUuIFRoZSB0cmVlIHdpbGwgc3Vic2VxdWVudGx5IG5vIGxvbmdlciBoYXZlIGEKKy8v
ICAgcmVmZXJlbmNlIHRvIHRoaXMgbm9kZS4KKy8vIC0gVGhlIGtleSB0eXBlIG11c3QgaW1wbGVt
ZW50IG9wZXJhdG9yPCBhbmQgPT0uCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUsIHR5cGVu
YW1lIFZhbHVlVHlwZT4KK2NsYXNzIFJlZEJsYWNrVHJlZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUmVkQmxhY2tUcmVlKTsKK3ByaXZhdGU6CisgICAgZW51bSBDb2xvciB7CisgICAgICAg
IFJlZCA9IDEsCisgICAgICAgIEJsYWNrCisgICAgfTsKKyAgICAKK3B1YmxpYzoKKyAgICBjbGFz
cyBOb2RlIHsKKyAgICAgICAgZnJpZW5kIGNsYXNzIFJlZEJsYWNrVHJlZTsKKyAgICAgICAgCisg
ICAgcHVibGljOgorICAgICAgICBOb2RlKEtleVR5cGUga2V5LCBWYWx1ZVR5cGUgdmFsdWUpCisg
ICAgICAgICAgICA6IG1fa2V5KGtleSkKKyAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjb25zdCBOb2RlKiBzdWNjZXNz
b3IoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBOb2RlKiB4ID0gdGhpczsK
KyAgICAgICAgICAgIGlmICh4LT5yaWdodCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cmVl
TWluaW11bSh4LT5yaWdodCgpKTsKKyAgICAgICAgICAgIGNvbnN0IE5vZGUqIHkgPSB4LT5wYXJl
bnQoKTsKKyAgICAgICAgICAgIHdoaWxlICh5ICYmIHggPT0geS0+cmlnaHQoKSkgeworICAgICAg
ICAgICAgICAgIHggPSB5OworICAgICAgICAgICAgICAgIHkgPSB5LT5wYXJlbnQoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB5OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBjb25zdCBOb2RlKiBwcmVkZWNlc3NvcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnN0IE5vZGUqIHggPSB0aGlzOworICAgICAgICAgICAgaWYgKHgtPmxlZnQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJlZU1heGltdW0oeC0+bGVmdCgpKTsKKyAgICAgICAgICAg
IGNvbnN0IE5vZGUqIHkgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAgIHdoaWxlICh5ICYmIHgg
PT0geS0+bGVmdCgpKSB7CisgICAgICAgICAgICAgICAgeCA9IHk7CisgICAgICAgICAgICAgICAg
eSA9IHktPnBhcmVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIE5vZGUqIHN1Y2Nlc3NvcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihjb25zdF9jYXN0PGNvbnN0IE5v
ZGUqPih0aGlzKS0+c3VjY2Vzc29yKCkpOworICAgICAgICB9CisgICAgCisgICAgICAgIE5vZGUq
IHByZWRlY2Vzc29yKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
Tm9kZSo+KGNvbnN0X2Nhc3Q8Y29uc3QgTm9kZSo+KHRoaXMpLT5wcmVkZWNlc3NvcigpKTsKKyAg
ICAgICAgfQorICAgIAorICAgICAgICBLZXlUeXBlIG1fa2V5OworICAgICAgICBWYWx1ZVR5cGUg
bV92YWx1ZTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcmVzZXQoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2xlZnQgPSAwOworICAgICAgICAgICAgbV9yaWdodCA9IDA7CisgICAg
ICAgICAgICBtX3BhcmVudEFuZFJlZCA9IDE7IC8vIGluaXRpYWxpemUgdG8gcmVkCisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoZXNlIG1ldGhvZHMgc2hvdWxkIHBhY2sg
dGhlIHBhcmVudCBhbmQgcmVkIGludG8gYSBzaW5nbGUKKyAgICAgICAgLy8gd29yZC4gQnV0IGRv
aW5nIHNvIGFwcGVhcnMgdG8gcmV2ZWFsIGEgYnVnIGluIHRoZSBjb21waWxlci4KKyAgICAgICAg
Tm9kZSogcGFyZW50KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Tm9kZSo+KG1fcGFyZW50QW5kUmVkICYgfnN0YXRpY19jYXN0PHVpbnRwdHJf
dD4oMSkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lkIHNldFBhcmVudChOb2Rl
KiBuZXdQYXJlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcGFyZW50QW5kUmVkID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG5ld1BhcmVudCkgfCAobV9wYXJlbnRBbmRSZWQgJiAx
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTm9kZSogbGVmdCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2xlZnQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgc2V0TGVmdChOb2RlKiBub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2xlZnQgPSBub2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiByaWdodCgp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3JpZ2h0OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICB2b2lkIHNldFJpZ2h0KE5vZGUqIG5vZGUpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fcmlnaHQgPSBub2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBDb2xvciBjb2xvcigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3BhcmVu
dEFuZFJlZCAmIDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIFJlZDsKKyAgICAgICAgICAgIHJl
dHVybiBCbGFjazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRDb2xvcihD
b2xvciB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbHVlID09IFJlZCkKKyAg
ICAgICAgICAgICAgICBtX3BhcmVudEFuZFJlZCB8PSAxOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fcGFyZW50QW5kUmVkICY9IH5zdGF0aWNfY2FzdDx1aW50cHRyX3Q+KDEp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBOb2RlKiBtX2xlZnQ7CisgICAgICAgIE5v
ZGUqIG1fcmlnaHQ7CisgICAgICAgIHVpbnRwdHJfdCBtX3BhcmVudEFuZFJlZDsKKyAgICB9Owor
ICAgIAorICAgIFJlZEJsYWNrVHJlZSgpCisgICAgICAgIDogbV9yb290KDApCisgICAgeworICAg
IH0KKyAgICAKKyAgICB2b2lkIGluc2VydChOb2RlKiB4KQorICAgIHsKKyAgICAgICAgeC0+cmVz
ZXQoKTsKKyAgICAgICAgdHJlZUluc2VydCh4KTsKKyAgICAgICAgeC0+c2V0Q29sb3IoUmVkKTsK
KworICAgICAgICAvLyBUaGUgbm9kZSBmcm9tIHdoaWNoIHRvIHN0YXJ0IHByb3BhZ2F0aW5nIHVw
ZGF0ZXMgdXB3YXJkcy4KKyAgICAgICAgTm9kZSogdXBkYXRlU3RhcnQgPSB4LT5wYXJlbnQoKTsK
KworICAgICAgICB3aGlsZSAoeCAhPSBtX3Jvb3QgJiYgeC0+cGFyZW50KCktPmNvbG9yKCkgPT0g
UmVkKSB7CisgICAgICAgICAgICBpZiAoeC0+cGFyZW50KCkgPT0geC0+cGFyZW50KCktPnBhcmVu
dCgpLT5sZWZ0KCkpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiB5ID0geC0+cGFyZW50KCktPnBh
cmVudCgpLT5yaWdodCgpOworICAgICAgICAgICAgICAgIGlmICh5ICYmIHktPmNvbG9yKCkgPT0g
UmVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMQorICAgICAgICAgICAgICAgICAg
ICB4LT5wYXJlbnQoKS0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICB5LT5z
ZXRDb2xvcihCbGFjayk7CisgICAgICAgICAgICAgICAgICAgIHgtPnBhcmVudCgpLT5wYXJlbnQo
KS0+c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHgtPnBhcmVudCgpLT5w
YXJlbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhcnQgPSB4LT5wYXJlbnQoKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSB4
LT5wYXJlbnQoKS0+cmlnaHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAy
CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBsZWZ0Um90YXRlKHgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIC8vIENhc2UgMworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+
c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50
KCktPnNldENvbG9yKFJlZCk7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIG5ld1N1YlRyZWVS
b290ID0gcmlnaHRSb3RhdGUoeC0+cGFyZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgdXBkYXRlU3RhcnQgPSBuZXdTdWJUcmVlUm9vdC0+cGFyZW50KCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTYW1lIGFz
ICJ0aGVuIiBjbGF1c2Ugd2l0aCAicmlnaHQiIGFuZCAibGVmdCIgZXhjaGFuZ2VkLgorICAgICAg
ICAgICAgICAgIE5vZGUqIHkgPSB4LT5wYXJlbnQoKS0+cGFyZW50KCktPmxlZnQoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoeSAmJiB5LT5jb2xvcigpID09IFJlZCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBDYXNlIDEKKyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldENvbG9y
KEJsYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgeS0+c2V0Q29sb3IoQmxhY2spOworICAgICAg
ICAgICAgICAgICAgICB4LT5wYXJlbnQoKS0+cGFyZW50KCktPnNldENvbG9yKFJlZCk7CisgICAg
ICAgICAgICAgICAgICAgIHggPSB4LT5wYXJlbnQoKS0+cGFyZW50KCk7CisgICAgICAgICAgICAg
ICAgICAgIHVwZGF0ZVN0YXJ0ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0geC0+cGFyZW50KCktPmxlZnQoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSAyCisgICAgICAgICAgICAgICAgICAgICAg
ICB4ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICByaWdodFJvdGF0ZSh4
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMK
KyAgICAgICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnNldENvbG9yKEJsYWNrKTsKKyAgICAg
ICAgICAgICAgICAgICAgeC0+cGFyZW50KCktPnBhcmVudCgpLT5zZXRDb2xvcihSZWQpOworICAg
ICAgICAgICAgICAgICAgICBOb2RlKiBuZXdTdWJUcmVlUm9vdCA9IGxlZnRSb3RhdGUoeC0+cGFy
ZW50KCktPnBhcmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhcnQgPSBuZXdT
dWJUcmVlUm9vdC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgbV9yb290LT5zZXRDb2xvcihCbGFjayk7CisgICAgfQorCisg
ICAgTm9kZSogcmVtb3ZlKE5vZGUqIHopCisgICAgeworICAgICAgICBBU1NFUlQoeik7CisgICAg
ICAgIEFTU0VSVCh6LT5wYXJlbnQoKSB8fCB6ID09IG1fcm9vdCk7CisgICAgICAgIAorICAgICAg
ICAvLyBZIGlzIHRoZSBub2RlIHRvIGJlIHVubGlua2VkIGZyb20gdGhlIHRyZWUuCisgICAgICAg
IE5vZGUqIHk7CisgICAgICAgIGlmICghei0+bGVmdCgpIHx8ICF6LT5yaWdodCgpKQorICAgICAg
ICAgICAgeSA9IHo7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHkgPSB6LT5zdWNjZXNzb3Io
KTsKKworICAgICAgICAvLyBZIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwgYXQgdGhpcyBw
b2ludC4KKyAgICAgICAgTm9kZSogeDsKKyAgICAgICAgaWYgKHktPmxlZnQoKSkKKyAgICAgICAg
ICAgIHggPSB5LT5sZWZ0KCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHggPSB5LT5yaWdo
dCgpOworCisgICAgICAgIC8vIFggaXMgdGhlIGNoaWxkIG9mIHkgd2hpY2ggbWlnaHQgcG90ZW50
aWFsbHkgcmVwbGFjZSB5IGluCisgICAgICAgIC8vIHRoZSB0cmVlLiBYIG1pZ2h0IGJlIG51bGwg
YXQgdGhpcyBwb2ludC4KKyAgICAgICAgTm9kZSogeFBhcmVudDsKKyAgICAgICAgaWYgKHgpIHsK
KyAgICAgICAgICAgIHgtPnNldFBhcmVudCh5LT5wYXJlbnQoKSk7CisgICAgICAgICAgICB4UGFy
ZW50ID0geC0+cGFyZW50KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeFBhcmVudCA9
IHktPnBhcmVudCgpOworICAgICAgICBpZiAoIXktPnBhcmVudCgpKQorICAgICAgICAgICAgbV9y
b290ID0geDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoeSA9PSB5LT5wYXJlbnQo
KS0+bGVmdCgpKQorICAgICAgICAgICAgICAgIHktPnBhcmVudCgpLT5zZXRMZWZ0KHgpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHktPnBhcmVudCgpLT5zZXRSaWdodCh4KTsK
KyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmICh5ICE9IHopIHsKKyAgICAgICAg
ICAgIGlmICh5LT5jb2xvcigpID09IEJsYWNrKQorICAgICAgICAgICAgICAgIHJlbW92ZUZpeHVw
KHgsIHhQYXJlbnQpOworICAgICAgICAgICAgCisgICAgICAgICAgICB5LT5zZXRQYXJlbnQoei0+
cGFyZW50KCkpOworICAgICAgICAgICAgeS0+c2V0Q29sb3Ioei0+Y29sb3IoKSk7CisgICAgICAg
ICAgICB5LT5zZXRMZWZ0KHotPmxlZnQoKSk7CisgICAgICAgICAgICB5LT5zZXRSaWdodCh6LT5y
aWdodCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHotPmxlZnQoKSkKKyAgICAg
ICAgICAgICAgICB6LT5sZWZ0KCktPnNldFBhcmVudCh5KTsKKyAgICAgICAgICAgIGlmICh6LT5y
aWdodCgpKQorICAgICAgICAgICAgICAgIHotPnJpZ2h0KCktPnNldFBhcmVudCh5KTsKKyAgICAg
ICAgICAgIGlmICh6LT5wYXJlbnQoKSkgeworICAgICAgICAgICAgICAgIGlmICh6LT5wYXJlbnQo
KS0+bGVmdCgpID09IHopCisgICAgICAgICAgICAgICAgICAgIHotPnBhcmVudCgpLT5zZXRMZWZ0
KHkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgei0+cGFyZW50
KCktPnNldFJpZ2h0KHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobV9yb290ID09IHopOworICAgICAgICAgICAgICAgIG1fcm9vdCA9IHk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoeS0+Y29sb3IoKSA9PSBCbGFjaykKKyAgICAgICAg
ICAgIHJlbW92ZUZpeHVwKHgsIHhQYXJlbnQpOworCisgICAgICAgIHJldHVybiB6OworICAgIH0K
KyAgICAKKyAgICBOb2RlKiByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAg
ICAgTm9kZSogcmVzdWx0ID0gZmluZEV4YWN0KGtleSk7CisgICAgICAgIGlmICghcmVzdWx0KQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiByZW1vdmUocmVzdWx0KTsKKyAg
ICB9CisgICAgCisgICAgTm9kZSogZmluZEV4YWN0KGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QK
KyAgICB7CisgICAgICAgIGZvciAoTm9kZSogY3VycmVudCA9IG1fcm9vdDsgY3VycmVudDspIHsK
KyAgICAgICAgICAgIGlmIChjdXJyZW50LT5tX2tleSA9PSBrZXkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGN1cnJlbnQ7CisgICAgICAgICAgICBpZiAoa2V5IDwgY3VycmVudC0+bV9rZXkpCisg
ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmxlZnQoKTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cmlnaHQoKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZExlYXN0R3Jl
YXRlclRoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICB7CisgICAgICAg
IE5vZGUqIGJlc3QgPSAwOworICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtX3Jvb3Q7IGN1
cnJlbnQ7KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPT0ga2V5KQorICAgICAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQtPm1fa2V5
IDwga2V5KQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5yaWdodCgpOworICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYmVzdCA9IGN1cnJlbnQ7CisgICAgICAg
ICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPmxlZnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gYmVzdDsKKyAgICB9CisgICAgCisgICAgTm9kZSogZmluZEdy
ZWF0ZXN0TGVzc1RoYW5PckVxdWFsKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIE5vZGUqIGJlc3QgPSAwOworICAgICAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBtX3Jv
b3Q7IGN1cnJlbnQ7KSB7CisgICAgICAgICAgICBpZiAoY3VycmVudC0+bV9rZXkgPT0ga2V5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBjdXJyZW50OworICAgICAgICAgICAgaWYgKGN1cnJlbnQt
Pm1fa2V5ID4ga2V5KQorICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5sZWZ0KCk7
CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBiZXN0ID0gY3VycmVudDsKKyAg
ICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cmlnaHQoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVzdDsKKyAgICB9CisgICAgCisgICAgTm9kZSog
Zmlyc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHRyZWVNaW5pbXVtKG1fcm9vdCk7CisgICAgfQorICAg
IAorICAgIE5vZGUqIGxhc3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX3Jvb3QpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHRyZWVNYXhpbXVtKG1fcm9vdCk7
CisgICAgfQorICAgIAorICAgIC8vIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24uCisgICAgc2l6
ZV90IHNpemUoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAgICAgIGZv
ciAoTm9kZSogY3VycmVudCA9IGZpcnN0KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5z
dWNjZXNzb3IoKSkKKyAgICAgICAgICAgIHJlc3VsdCsrOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIE8oMSkgb3BlcmF0aW9uLgorICAgIGJv
b2wgaXNFbXB0eSgpCisgICAgeworICAgICAgICByZXR1cm4gIW1fcm9vdDsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIC8vIEZpbmRzIHRoZSBtaW5pbXVtIGVsZW1lbnQgaW4gdGhlIHN1Yi10
cmVlIHJvb3RlZCBhdCB0aGUgZ2l2ZW4KKyAgICAvLyBub2RlLgorICAgIHN0YXRpYyBOb2RlKiB0
cmVlTWluaW11bShOb2RlKiB4KQorICAgIHsKKyAgICAgICAgd2hpbGUgKHgtPmxlZnQoKSkKKyAg
ICAgICAgICAgIHggPSB4LT5sZWZ0KCk7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgTm9kZSogdHJlZU1heGltdW0oTm9kZSogeCkKKyAgICB7CisgICAgICAgIHdo
aWxlICh4LT5yaWdodCgpKQorICAgICAgICAgICAgeCA9IHgtPnJpZ2h0KCk7CisgICAgICAgIHJl
dHVybiB4OworICAgIH0KKworICAgIHN0YXRpYyBjb25zdCBOb2RlKiB0cmVlTWluaW11bShjb25z
dCBOb2RlKiB4KQorICAgIHsKKyAgICAgICAgd2hpbGUgKHgtPmxlZnQoKSkKKyAgICAgICAgICAg
IHggPSB4LT5sZWZ0KCk7CisgICAgICAgIHJldHVybiB4OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgY29uc3QgTm9kZSogdHJlZU1heGltdW0oY29uc3QgTm9kZSogeCkKKyAgICB7CisgICAgICAg
IHdoaWxlICh4LT5yaWdodCgpKQorICAgICAgICAgICAgeCA9IHgtPnJpZ2h0KCk7CisgICAgICAg
IHJldHVybiB4OworICAgIH0KKworICAgIHZvaWQgdHJlZUluc2VydChOb2RlKiB6KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCF6LT5sZWZ0KCkpOworICAgICAgICBBU1NFUlQoIXotPnJpZ2h0KCkp
OworICAgICAgICBBU1NFUlQoIXotPnBhcmVudCgpKTsKKyAgICAgICAgQVNTRVJUKHotPmNvbG9y
KCkgPT0gUmVkKTsKKyAgICAgICAgCisgICAgICAgIE5vZGUqIHkgPSAwOworICAgICAgICBOb2Rl
KiB4ID0gbV9yb290OworICAgICAgICB3aGlsZSAoeCkgeworICAgICAgICAgICAgeSA9IHg7Cisg
ICAgICAgICAgICBpZiAoei0+bV9rZXkgPCB4LT5tX2tleSkKKyAgICAgICAgICAgICAgICB4ID0g
eC0+bGVmdCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHggPSB4LT5yaWdo
dCgpOworICAgICAgICB9CisgICAgICAgIHotPnNldFBhcmVudCh5KTsKKyAgICAgICAgaWYgKCF5
KQorICAgICAgICAgICAgbV9yb290ID0gejsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBp
ZiAoei0+bV9rZXkgPCB5LT5tX2tleSkKKyAgICAgICAgICAgICAgICB5LT5zZXRMZWZ0KHopOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHktPnNldFJpZ2h0KHopOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgLy8gUmVkLUJsYWNrIHRyZWUg
b3BlcmF0aW9ucworICAgIC8vCisKKyAgICAvLyBMZWZ0LXJvdGF0ZXMgdGhlIHN1YnRyZWUgcm9v
dGVkIGF0IHguCisgICAgLy8gUmV0dXJucyB0aGUgbmV3IHJvb3Qgb2YgdGhlIHN1YnRyZWUgKHgn
cyByaWdodCBjaGlsZCkuCisgICAgTm9kZSogbGVmdFJvdGF0ZShOb2RlKiB4KQorICAgIHsKKyAg
ICAgICAgLy8gU2V0IHkuCisgICAgICAgIE5vZGUqIHkgPSB4LT5yaWdodCgpOworCisgICAgICAg
IC8vIFR1cm4geSdzIGxlZnQgc3VidHJlZSBpbnRvIHgncyByaWdodCBzdWJ0cmVlLgorICAgICAg
ICB4LT5zZXRSaWdodCh5LT5sZWZ0KCkpOworICAgICAgICBpZiAoeS0+bGVmdCgpKQorICAgICAg
ICAgICAgeS0+bGVmdCgpLT5zZXRQYXJlbnQoeCk7CisKKyAgICAgICAgLy8gTGluayB4J3MgcGFy
ZW50IHRvIHkuCisgICAgICAgIHktPnNldFBhcmVudCh4LT5wYXJlbnQoKSk7CisgICAgICAgIGlm
ICgheC0+cGFyZW50KCkpCisgICAgICAgICAgICBtX3Jvb3QgPSB5OworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGlmICh4ID09IHgtPnBhcmVudCgpLT5sZWZ0KCkpCisgICAgICAgICAgICAg
ICAgeC0+cGFyZW50KCktPnNldExlZnQoeSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgeC0+cGFyZW50KCktPnNldFJpZ2h0KHkpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
UHV0IHggb24geSdzIGxlZnQuCisgICAgICAgIHktPnNldExlZnQoeCk7CisgICAgICAgIHgtPnNl
dFBhcmVudCh5KTsKKworICAgICAgICByZXR1cm4geTsKKyAgICB9CisKKyAgICAvLyBSaWdodC1y
b3RhdGVzIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCB5LgorICAgIC8vIFJldHVybnMgdGhlIG5ldyBy
b290IG9mIHRoZSBzdWJ0cmVlICh5J3MgbGVmdCBjaGlsZCkuCisgICAgTm9kZSogcmlnaHRSb3Rh
dGUoTm9kZSogeSkKKyAgICB7CisgICAgICAgIC8vIFNldCB4LgorICAgICAgICBOb2RlKiB4ID0g
eS0+bGVmdCgpOworCisgICAgICAgIC8vIFR1cm4geCdzIHJpZ2h0IHN1YnRyZWUgaW50byB5J3Mg
bGVmdCBzdWJ0cmVlLgorICAgICAgICB5LT5zZXRMZWZ0KHgtPnJpZ2h0KCkpOworICAgICAgICBp
ZiAoeC0+cmlnaHQoKSkKKyAgICAgICAgICAgIHgtPnJpZ2h0KCktPnNldFBhcmVudCh5KTsKKwor
ICAgICAgICAvLyBMaW5rIHkncyBwYXJlbnQgdG8geC4KKyAgICAgICAgeC0+c2V0UGFyZW50KHkt
PnBhcmVudCgpKTsKKyAgICAgICAgaWYgKCF5LT5wYXJlbnQoKSkKKyAgICAgICAgICAgIG1fcm9v
dCA9IHg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKHkgPT0geS0+cGFyZW50KCkt
PmxlZnQoKSkKKyAgICAgICAgICAgICAgICB5LT5wYXJlbnQoKS0+c2V0TGVmdCh4KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5LT5wYXJlbnQoKS0+c2V0UmlnaHQoeCk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBQdXQgeSBvbiB4J3MgcmlnaHQuCisgICAgICAgIHgtPnNl
dFJpZ2h0KHkpOworICAgICAgICB5LT5zZXRQYXJlbnQoeCk7CisKKyAgICAgICAgcmV0dXJuIHg7
CisgICAgfQorCisgICAgLy8gUmVzdG9yZXMgdGhlIHJlZC1ibGFjayBwcm9wZXJ0eSB0byB0aGUg
dHJlZSBhZnRlciBzcGxpY2luZyBvdXQKKyAgICAvLyBhIG5vZGUuIE5vdGUgdGhhdCB4IG1heSBi
ZSBudWxsLCB3aGljaCBpcyB3aHkgeFBhcmVudCBtdXN0IGJlCisgICAgLy8gc3VwcGxpZWQuCisg
ICAgdm9pZCByZW1vdmVGaXh1cChOb2RlKiB4LCBOb2RlKiB4UGFyZW50KQorICAgIHsKKyAgICAg
ICAgd2hpbGUgKHggIT0gbV9yb290ICYmICgheCB8fCB4LT5jb2xvcigpID09IEJsYWNrKSkgewor
ICAgICAgICAgICAgaWYgKHggPT0geFBhcmVudC0+bGVmdCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gTm90ZTogdGhlIHRleHQgcG9pbnRzIG91dCB0aGF0IHcgY2FuIG5vdCBiZSBudWxsLgorICAg
ICAgICAgICAgICAgIC8vIFRoZSByZWFzb24gaXMgbm90IG9idmlvdXMgZnJvbSBzaW1wbHkgbG9v
a2luZyBhdAorICAgICAgICAgICAgICAgIC8vIHRoZSBjb2RlOyBpdCBjb21lcyBhYm91dCBmcm9t
IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZQorICAgICAgICAgICAgICAgIC8vIHJlZC1ibGFjayB0cmVl
LgorICAgICAgICAgICAgICAgIE5vZGUqIHcgPSB4UGFyZW50LT5yaWdodCgpOworICAgICAgICAg
ICAgICAgIEFTU0VSVCh3KTsgLy8geCdzIHNpYmxpbmcgc2hvdWxkIG5vdCBiZSBudWxsLgorICAg
ICAgICAgICAgICAgIGlmICh3LT5jb2xvcigpID09IFJlZCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBDYXNlIDEKKyAgICAgICAgICAgICAgICAgICAgdy0+c2V0Q29sb3IoQmxhY2spOworICAg
ICAgICAgICAgICAgICAgICB4UGFyZW50LT5zZXRDb2xvcihSZWQpOworICAgICAgICAgICAgICAg
ICAgICBsZWZ0Um90YXRlKHhQYXJlbnQpOworICAgICAgICAgICAgICAgICAgICB3ID0geFBhcmVu
dC0+cmlnaHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCghdy0+
bGVmdCgpIHx8IHctPmxlZnQoKS0+Y29sb3IoKSA9PSBCbGFjaykKKyAgICAgICAgICAgICAgICAg
ICAgJiYgKCF3LT5yaWdodCgpIHx8IHctPnJpZ2h0KCktPmNvbG9yKCkgPT0gQmxhY2spKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMgorICAgICAgICAgICAgICAgICAgICB3LT5zZXRD
b2xvcihSZWQpOworICAgICAgICAgICAgICAgICAgICB4ID0geFBhcmVudDsKKyAgICAgICAgICAg
ICAgICAgICAgeFBhcmVudCA9IHgtPnBhcmVudCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghdy0+cmlnaHQoKSB8fCB3LT5yaWdodCgpLT5jb2xv
cigpID09IEJsYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDMKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHctPmxlZnQoKS0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgdy0+c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJpZ2h0Um90YXRlKHcpOworICAgICAgICAgICAgICAgICAgICAgICAgdyA9IHhQYXJlbnQtPnJp
Z2h0KCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gQ2Fz
ZSA0CisgICAgICAgICAgICAgICAgICAgIHctPnNldENvbG9yKHhQYXJlbnQtPmNvbG9yKCkpOwor
ICAgICAgICAgICAgICAgICAgICB4UGFyZW50LT5zZXRDb2xvcihCbGFjayk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh3LT5yaWdodCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgdy0+cmln
aHQoKS0+c2V0Q29sb3IoQmxhY2spOworICAgICAgICAgICAgICAgICAgICBsZWZ0Um90YXRlKHhQ
YXJlbnQpOworICAgICAgICAgICAgICAgICAgICB4ID0gbV9yb290OworICAgICAgICAgICAgICAg
ICAgICB4UGFyZW50ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBTYW1lIGFzICJ0aGVuIiBjbGF1c2Ugd2l0
aCAicmlnaHQiIGFuZCAibGVmdCIKKyAgICAgICAgICAgICAgICAvLyBleGNoYW5nZWQuCisKKyAg
ICAgICAgICAgICAgICAvLyBOb3RlOiB0aGUgdGV4dCBwb2ludHMgb3V0IHRoYXQgdyBjYW4gbm90
IGJlIG51bGwuCisgICAgICAgICAgICAgICAgLy8gVGhlIHJlYXNvbiBpcyBub3Qgb2J2aW91cyBm
cm9tIHNpbXBseSBsb29raW5nIGF0CisgICAgICAgICAgICAgICAgLy8gdGhlIGNvZGU7IGl0IGNv
bWVzIGFib3V0IGZyb20gdGhlIHByb3BlcnRpZXMgb2YgdGhlCisgICAgICAgICAgICAgICAgLy8g
cmVkLWJsYWNrIHRyZWUuCisgICAgICAgICAgICAgICAgTm9kZSogdyA9IHhQYXJlbnQtPmxlZnQo
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodyk7IC8vIHgncyBzaWJsaW5nIHNob3VsZCBub3Qg
YmUgbnVsbC4KKyAgICAgICAgICAgICAgICBpZiAody0+Y29sb3IoKSA9PSBSZWQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gQ2FzZSAxCisgICAgICAgICAgICAgICAgICAgIHctPnNldENvbG9y
KEJsYWNrKTsKKyAgICAgICAgICAgICAgICAgICAgeFBhcmVudC0+c2V0Q29sb3IoUmVkKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmlnaHRSb3RhdGUoeFBhcmVudCk7CisgICAgICAgICAgICAgICAg
ICAgIHcgPSB4UGFyZW50LT5sZWZ0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmICgoIXctPnJpZ2h0KCkgfHwgdy0+cmlnaHQoKS0+Y29sb3IoKSA9PSBCbGFjaykKKyAg
ICAgICAgICAgICAgICAgICAgJiYgKCF3LT5sZWZ0KCkgfHwgdy0+bGVmdCgpLT5jb2xvcigpID09
IEJsYWNrKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDIKKyAgICAgICAgICAgICAg
ICAgICAgdy0+c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAgICAgICAgICAgeCA9IHhQYXJlbnQ7
CisgICAgICAgICAgICAgICAgICAgIHhQYXJlbnQgPSB4LT5wYXJlbnQoKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXctPmxlZnQoKSB8fCB3LT5s
ZWZ0KCktPmNvbG9yKCkgPT0gQmxhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENh
c2UgMworICAgICAgICAgICAgICAgICAgICAgICAgdy0+cmlnaHQoKS0+c2V0Q29sb3IoQmxhY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgdy0+c2V0Q29sb3IoUmVkKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxlZnRSb3RhdGUodyk7CisgICAgICAgICAgICAgICAgICAgICAgICB3ID0g
eFBhcmVudC0+bGVmdCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIC8vIENhc2UgNAorICAgICAgICAgICAgICAgICAgICB3LT5zZXRDb2xvcih4UGFyZW50LT5j
b2xvcigpKTsKKyAgICAgICAgICAgICAgICAgICAgeFBhcmVudC0+c2V0Q29sb3IoQmxhY2spOwor
ICAgICAgICAgICAgICAgICAgICBpZiAody0+bGVmdCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdy0+bGVmdCgpLT5zZXRDb2xvcihCbGFjayk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0
Um90YXRlKHhQYXJlbnQpOworICAgICAgICAgICAgICAgICAgICB4ID0gbV9yb290OworICAgICAg
ICAgICAgICAgICAgICB4UGFyZW50ID0geC0+cGFyZW50KCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh4KQorICAgICAgICAgICAgeC0+
c2V0Q29sb3IoQmxhY2spOworICAgIH0KKworICAgIE5vZGUqIG1fcm9vdDsKK307CisKK30KKwor
I2VuZGlmCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvd3RmLnByaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3d0Zi5wcmkJKHJldmlzaW9uIDk0ODMx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi93dGYucHJpCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw2ICsyMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHd0Zi9IYXNoVGFibGUuY3BwIFwKICAg
ICB3dGYvTUQ1LmNwcCBcCiAgICAgd3RmL01haW5UaHJlYWQuY3BwIFwKKyAgICB3dGYvTWV0YUFs
bG9jYXRvci5jcHAgXAogICAgIHd0Zi9OdWxsUHRyLmNwcCBcCiAgICAgd3RmL09TUmFuZG9tU291
cmNlLmNwcCBcCiAgICAgd3RmL3F0L01haW5UaHJlYWRRdC5jcHAgXApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3lhcnIvWWFyckpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MjksNyAr
MjQyOSw3IEBAIHB1YmxpYzoKICAgICAgICAgYmFja3RyYWNrKCk7CiAKICAgICAgICAgLy8gTGlu
ayAmIGZpbmFsaXplIHRoZSBjb2RlLgotICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKmds
b2JhbERhdGEsIHRoaXMsIGdsb2JhbERhdGEtPnJlZ2V4QWxsb2NhdG9yKTsKKyAgICAgICAgTGlu
a0J1ZmZlciBsaW5rQnVmZmVyKCpnbG9iYWxEYXRhLCB0aGlzKTsKICAgICAgICAgbV9iYWNrdHJh
Y2tpbmdTdGF0ZS5saW5rRGF0YUxhYmVscyhsaW5rQnVmZmVyKTsKICAgICAgICAgaml0T2JqZWN0
LnNldChsaW5rQnVmZmVyLmZpbmFsaXplQ29kZSgpKTsKICAgICAgICAgaml0T2JqZWN0LnNldEZh
bGxCYWNrKG1fc2hvdWxkRmFsbEJhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3lh
cnIvWWFyckpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS95YXJyL1lh
cnJKSVQuaAkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUveWFyci9Z
YXJySklULmgJKHdvcmtpbmcgY29weSkKQEAgLTY1LDExICs2NSwxMSBAQCBwdWJsaWM6CiAKICAg
ICBpbnQgZXhlY3V0ZShjb25zdCBVQ2hhciogaW5wdXQsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBsZW5ndGgsIGludCogb3V0cHV0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8WWFyckpJVENvZGU+KG1fcmVmLm1fY29kZS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1
dCwgc3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8WWFyckpJVENvZGU+KG1fcmVmLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKShpbnB1dCwg
c3RhcnQsIGxlbmd0aCwgb3V0cHV0KTsKICAgICB9CiAKICNpZiBFTkFCTEUoUkVHRVhQX1RSQUNJ
TkcpCi0gICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLm1fY29kZS5leGVjdXRhYmxl
QWRkcmVzcygpOyB9CisgICAgdm9pZCAqZ2V0QWRkcigpIHsgcmV0dXJuIG1fcmVmLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpOyB9CiAjZW5kaWYKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0R2x1ZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRH
bHVlL0NoYW5nZUxvZwkocmV2aXNpb24gOTQ4MzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDgtMTggIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0YWJsZSBh
bGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBj
aHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2Vk
LXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEg
YmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAg
ICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFz
IG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3Jl
J3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCBy
ZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAor
ICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBGb3J3YXJkaW5nSGVhZGVycy93dGYvTWV0YUFs
bG9jYXRvckhhbmRsZS5oOiBBZGRlZC4KKwogMjAxMS0wOS0wOCAgU2FtIFdlaW5pZyAgPHNhbUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQ29tcGxldGlvbiBvYmplY3QgZnJvbSBK
U0MsIEkgaGF2ZSBuZXZlciBsaWtlZCBpdApJbmRleDogU291cmNlL0phdmFTY3JpcHRHbHVlL0Zv
cndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRHbHVlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9y
SGFuZGxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdEdsdWUvRm9yd2FyZGlu
Z0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0b3JIYW5kbGUuaD4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk0ODMxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzw8PDw8PDwgLm1pbmUKKzIwMTEtMDkt
MDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBUaGUgZXhlY3V0
YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRvIGZyZWUgaW5kaXZpZHVhbAorICAg
ICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRyb2R1Y2VkIGEgYmVzdC1maXQsIGJh
bGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxsb2NhdG9yCisgICAgICAgIHJlcXVp
cmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFsbG9jYXRlIG1lbW9yeSBhbmQgdGhh
dAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGluZGl2aWR1YWwgbm9kZXMgZGlyZWN0
bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsgbmVpdGhlciBBVkxUcmVlIG5vciBX
ZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0aGlzLgorICAgICAgICBDaGFuZ2Vk
IGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0byB1c2UgYSByZWZlcmVuY2UgY291
bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTm8gbmV3IGxheW91dCB0ZXN0cyBiZWNhdXNlIGJlaGF2aW9yIGlzIG5v
dCBjaGFuZ2VkLiAgTmV3IEFQSSB1bml0CisgICAgICAgIHRlc3RzOgorICAgICAgICBUZXN0cy9X
VEYvUmVkQmxhY2tUcmVlLmNwcAorICAgICAgICBUZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAK
KworICAgICAgICAqIEZvcndhcmRpbmdIZWFkZXJzL3d0Zi9NZXRhQWxsb2NhdG9ySGFuZGxlLmg6
IEFkZGVkLgorCis9PT09PT09CiAyMDExLTA5LTA4ICBKYW1lcyBXZWF0aGVyYWxsICA8d2V6QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZWxlYXNlIHRoZSByZWZlcmVuY2UgdG8gdGhlIEhUTUxQ
bHVnSW5FbGVtZW50J3Mgc2NyaXB0IG9iamVjdCwgd2hlbiB0aGUgZWxlbWVudCBpcyByZW1vdmVk
IGZyb20gdGhlIGRvY3VtZW50LiAgVGhpcyBicmVha3MgYSBjeWNsaWNhbCByZWZlcmVuY2UgdGhh
dCB3b3VsZCBvdGhlcndpc2UgY2F1c2UgdGhlIGVsZW1lbnQgdG8gYmUgcmV0YWluZWQgdW50aWwg
dGhlIGRvY3VtZW50IGlzIHRvcm4gZG93bi4KQEAgLTUwNjQsNiArNTA5MCw3IEBACiAgICAgICAg
IEJlY2F1c2UgYSBmaWxlIHVwbG9hZCBjb250cm9sIHVzZXMgaW5oZXJpdGVkIGJhY2tncm91bmQg
Y29sb3IsIHRoZQogICAgICAgICBmb3JlZ3JvdW5kIGNvbG9yIGFsc28gc2hvdWxkIGJlIGluaGVy
aXRlZC4KIAorPj4+Pj4+PiAucjk0ODMxCiAyMDExLTA5LTAxICBLZW50YXJvIEhhcmEgIDxoYXJh
a2VuQGdvb2dsZS5jb20+CiAKICAgICAgICAgR2VuZXJhdGUgYSBXb3JrZXIgY29uc3RydWN0b3Ig
b2YgVjggdXNpbmcgdGhlIElETCAnQ29uc3RydWN0b3InIGV4dGVuZGVkIGF0dHJpYnV0ZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvRm9yd2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5k
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYv
TWV0YUFsbG9jYXRvckhhbmRsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvRm9y
d2FyZGluZ0hlYWRlcnMvd3RmL01ldGFBbGxvY2F0b3JIYW5kbGUuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0b3JIYW5kbGUu
aD4KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDk0ODMxKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMTEtMDktMDEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBUaGUgZXhlY3V0YWJsZSBhbGxvY2F0b3IgbWFrZXMgaXQgZGlmZmljdWx0IHRv
IGZyZWUgaW5kaXZpZHVhbAorICAgICAgICBjaHVua3Mgb2YgZXhlY3V0YWJsZSBtZW1vcnkKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MzYzCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBJbnRy
b2R1Y2VkIGEgYmVzdC1maXQsIGJhbGFuY2VkLXRyZWUgYmFzZWQgYWxsb2NhdG9yLiBUaGUgYWxs
b2NhdG9yCisgICAgICAgIHJlcXVpcmVkIGEgYmFsYW5jZWQgdHJlZSB0aGF0IGRvZXMgbm90IGFs
bG9jYXRlIG1lbW9yeSBhbmQgdGhhdAorICAgICAgICBwZXJtaXRzIHRoZSByZW1vdmFsIG9mIGlu
ZGl2aWR1YWwgbm9kZXMgZGlyZWN0bHkgKGFzIG9wcG9zZWQgdG8gYnkKKyAgICAgICAga2V5KTsg
bmVpdGhlciBBVkxUcmVlIG5vciBXZWJDb3JlJ3MgUE9EUmVkQmxhY2tUcmVlIHN1cHBvcnRlZCB0
aGlzLgorICAgICAgICBDaGFuZ2VkIGFsbCByZWZlcmVuY2VzIHRvIGV4ZWN1dGFibGUgY29kZSB0
byB1c2UgYSByZWZlcmVuY2UgY291bnRlZAorICAgICAgICBoYW5kbGUuCisKKyAgICAgICAgKiBU
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcDogQWRkZWQu
CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgorICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6UGFpcjo6ZmluZEV4YWN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlBhaXI6OnJl
bW92ZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjpmaW5kTGVhc3RHcmVhdGVyVGhh
bk9yRXF1YWwpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0Rm91bmRBbmRS
ZW1vdmUpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0RXF1YWwpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6UGFpcjo6YXNzZXJ0U2FtZVZhbHVlc0ZvcktleSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpQYWlyOjp0ZXN0RHJpdmVyKToKKyAgICAgICAgKFRlc3RXZWJL
aXRBUEk6OlRFU1RfRik6CisKIDIwMTEtMDktMDggIEJyaWFuIFdlaW5zdGVpbiAgPGJ3ZWluc3Rl
aW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYktpdDI6IEFzc2VydGlvbiB3aGVuIGNhbGxpbmcg
ZGlkUGVyZm9ybSpSZWRpcmVjdCBvbiBudWxsIHNvdXJjZS9kZXN0aW5hdGlvbiBVUkwgc3RyaW5n
CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTQ4MzEpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNyw2ICs3LDggQEAKIAlvYmplY3RzID0gewogCiAvKiBCZWdpbiBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLworCQkwRkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxh
Y2tUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovOyB9OworCQkw
RkM2QzRDRjE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDRTE0MTAzNEFEMDA1QjdG
MEMgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IH07CiAJCTFBMDJDODRGMTI1RDRBODQwMEUzRjRC
RCAvKiBGaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBGaW5kLmNwcCAqLzsgfTsKIAkJMUEwMkM4
NzAxMjVENENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0QTVFMDBFM0Y0QkQgLyog
ZmluZC5odG1sICovOyB9OwogCQkxQTVGRUZERDEyNzBFMkEzMDAwRTI5MjEgLyogRXZhbHVhdGVK
YXZhU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNUZFRkRDMTI3MEUyQTMwMDBFMjkyMSAvKiBFdmFsdWF0ZUphdmFTY3JpcHQuY3BwICov
OyB9OwpAQCAtMTMwLDYgKzEzMiw4IEBACiAvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBz
ZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLworCQkwRkM2
QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFJlZEJsYWNrVHJlZS5jcHA7IHBhdGggPSBXVEYvUmVkQmxh
Y2tUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZDNkM0Q0UxNDEwMzRB
RDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gTWV0YUFsbG9jYXRvci5jcHA7IHBhdGggPSBXVEYvTWV0YUFsbG9jYXRvci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRCMTI1RDRBNUUwMEUzRjRC
RCAvKiBmaW5kLmh0bWwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0Lmh0bWw7IHBhdGggPSBmaW5kLmh0bWw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBMDJDODRFMTI1RDRBODQwMEUzRjRCRCAvKiBG
aW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZpbmQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTVGRUZEQzEyNzBFMkEzMDAwRTI5MjEgLyog
RXZhbHVhdGVKYXZhU2NyaXB0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEV2YWx1YXRlSmF2YVNjcmlwdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0zNjcsNiArMzcxLDggQEAKIAkJQkM5MDk2NDYxMjU1NjE4OTAwMDgzNzU2IC8qIFdURiAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZDNkM0Q0UxNDEw
MzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovLAorCQkJCTBGQzZDNENCMTQxMDI3
RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJCUE3QTk2NkRBMTQwRUNDQzgw
MDVFRjlCNCAvKiBDaGVja2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwICovLAogCQkJCUMwMTM2
M0M3MTNDMzk5NzMwMEVGMzk2NCAvKiBTdHJpbmdPcGVyYXRvcnMuY3BwICovLAogCQkJCUJDOTA5
NjRCMTI1NTYxQkYwMDA4Mzc1NiAvKiBWZWN0b3JCYXNpYy5jcHAgKi8sCkBAIC01NzcsNiArNTgz
LDggQEAKIAkJCQlDMDg1ODdGQzEzRkVDMzlCMDAxRUY0RTUgLyogSW5zdGFuY2VNZXRob2RTd2l6
emxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUMwODU4ODAwMTNGRUMzQTYwMDFFRjRFNSAvKiBJ
bnN0YW5jZU1ldGhvZFN3aXp6bGVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMzdEQzY3OEQxNDBE
N0M1MDAwQUJDQ0RCIC8qIERPTVJhbmdlT2ZTdHJpbmcubW0gaW4gU291cmNlcyAqLywKKwkJCQkw
RkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGQzZDNENGMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QTk2NkRCMTQwRUNDQzgwMDVFRjlCNCAvKiBDaGVja2VkQXJpdGht
ZXRpY09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5QkE5MTcxNDEwMzQxMjAw
MUEwMUJEIC8qIERldmljZVNjYWxlRmFjdG9yT25CYWNrLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Mzc5OUFEM0ExNDEyMEE0MzAwNUVCMEM2IC8qIFN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHRG
cm9tU3RyaW5nLm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDk1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisg
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL01ldGFBbGxvY2F0b3Iu
aD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNl
IFdURjsKKworbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgeworCitjbGFzcyBNZXRhQWxsb2NhdG9y
VGVzdDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIGVudW0gU2FuaXR5Q2hl
Y2tNb2RlIHsgUnVuU2FuaXR5Q2hlY2ssIERvbnRSdW5TYW5pdHlDaGVjayB9OworICAgIAorICAg
IGVudW0gSGVhcEdyb3d0aE1vZGUgeyBEb250R3Jvd0hlYXAsIEZvclRlc3REZW1hbmRBbGxvY0Nv
YWxlc2NlLCBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2UgfTsKKyAgICAKKyAgICBIZWFw
R3Jvd3RoTW9kZSBjdXJyZW50SGVhcEdyb3d0aE1vZGU7CisgICAgc2l6ZV90IGFsbG93QWxsb2Nh
dGVQYWdlczsKKyAgICBzaXplX3QgcmVxdWVzdGVkTnVtUGFnZXM7CisKKyAgICBjbGFzcyBTaW1w
bGVUZXN0QWxsb2NhdG9yOiBwdWJsaWMgTWV0YUFsbG9jYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBTaW1wbGVUZXN0QWxsb2NhdG9yKE1ldGFBbGxvY2F0b3JUZXN0KiBwYXJlbnQpCisgICAg
ICAgICAgICA6IE1ldGFBbGxvY2F0b3IoMzIpCisgICAgICAgICAgICAsIG1fcGFyZW50KHBhcmVu
dCkKKyAgICAgICAgeworICAgICAgICAgICAgYWRkRnJlc2hGcmVlU3BhY2UocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSwgZGVmYXVsdFBhZ2VzSW5IZWFwICog
cGFnZVNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZpcnR1YWwgflNpbXBs
ZVRlc3RBbGxvY2F0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9w
YXJlbnQtPmFsbG9jYXRvckRlc3Ryb3llZCk7CisgICAgICAgICAgICBtX3BhcmVudC0+YWxsb2Nh
dG9yRGVzdHJveWVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdmlydHVh
bCB2b2lkKiBhbGxvY2F0ZU5ld1NwYWNlKHNpemVfdCYgbnVtUGFnZXMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAobV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSkgeworICAg
ICAgICAgICAgY2FzZSBEb250R3Jvd0hlYXA6CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZvclRlc3REZW1hbmRBbGxvY0NvYWxl
c2NlOgorICAgICAgICAgICAgY2FzZSBGb3JUZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2U6IHsK
KyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBhZ2Vz
KTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+YWxsb3dBbGxvY2F0ZVBh
Z2VzID49IG51bVBhZ2VzKTsKKyAgICAgICAgICAgICAgICBtX3BhcmVudC0+cmVxdWVzdGVkTnVt
UGFnZXMgPSBudW1QYWdlczsKKyAgICAgICAgICAgICAgICBudW1QYWdlcyA9IG1fcGFyZW50LT5h
bGxvd0FsbG9jYXRlUGFnZXM7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgdW5z
aWduZWQgb2Zmc2V0OworICAgICAgICAgICAgICAgIGlmIChtX3BhcmVudC0+Y3VycmVudEhlYXBH
cm93dGhNb2RlID09IEZvclRlc3REZW1hbmRBbGxvY0NvYWxlc2NlKQorICAgICAgICAgICAgICAg
ICAgICBvZmZzZXQgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB2b2lkKiBy
ZXN1bHQgPSByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJ
bkhlYXAgKyBvZmZzZXQpICogcGFnZVNpemUoKSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgbV9wYXJlbnQtPmFsbG93QWxsb2NhdGVQYWdlcyA9IDA7CisgICAgICAgICAgICAg
ICAgbV9wYXJlbnQtPmN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBjb3VudGVyID0gMDsgY291
bnRlciA8IG51bVBhZ2VzICsgb2Zmc2V0OyArK2NvdW50ZXIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9wYXJlbnQtPnBhZ2VNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgYnl0ZUNvdW50ZXIgPSAwOyBieXRlQ291bnRlciA8IHBhZ2VTaXplKCk7
ICsrYnl0ZUNvdW50ZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhcmVudC0+bWVtb3J5
TWFwLT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX3BhcmVudC0+YWRkaXRpb25hbFBhZ2VzSW5IZWFwICs9IG51bVBh
Z2VzOworICAgICAgICAKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBDUkFTSCgpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5TmVlZFBhZ2Uo
dm9pZCogcGFnZSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJl
IGJvdGggZnJlZSBhbmQgdW5tYXBwZWQuCisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghbV9wYXJl
bnQtPnBhZ2VTdGF0ZShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgLyBwYWdlU2l6
ZSgpKSk7CisgICAgICAgICAgICBmb3IgKHVpbnRwdHJfdCBhZGRyZXNzID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50cHRyX3Q+KHBhZ2UpOyBhZGRyZXNzIDwgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KHBhZ2UpICsgcGFnZVNpemUoKTsgKythZGRyZXNzKQorICAgICAgICAgICAgICAgIEVYUEVD
VF9UUlVFKCFtX3BhcmVudC0+Ynl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGFkZHJl
c3MpKSk7CisgICAgICAgICAgICBtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8
dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJc0ZyZWUodm9pZCogcGFnZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgLy8gdGhlIHBhZ2Ugc2hvdWxkIGJlIGZyZWUgb2Ygb2JqZWN0
cyBhdCB0aGlzIHBvaW50LCBidXQgaXQgc2hvdWxkIHN0aWxsCisgICAgICAgICAgICAvLyBiZSBt
YXBwZWQuCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShtX3BhcmVudC0+cGFnZVN0YXRlKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwYWdlKSAvIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgICAg
IGZvciAodWludHB0cl90IGFkZHJlc3MgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFn
ZSk7IGFkZHJlc3MgPCByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocGFnZSkgKyBwYWdlU2l6
ZSgpOyArK2FkZHJlc3MpCisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIW1fcGFyZW50LT5i
eXRlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkcmVzcykpKTsKKyAgICAgICAgICAg
IG1fcGFyZW50LT5wYWdlU3RhdGUocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHBhZ2UpIC8g
cGFnZVNpemUoKSkgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICBwcml2YXRlOgor
ICAgICAgICBNZXRhQWxsb2NhdG9yVGVzdCogbV9wYXJlbnQ7CisgICAgfTsKKworICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBiYXNlUGFnZSA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGRlZmF1bHRQYWdlc0luSGVhcCA9IDEwMDsKKyAgICAKKyAgICB1bnNpZ25lZCBhZGRpdGlvbmFs
UGFnZXNJbkhlYXA7CisgICAgCisgICAgVmVjdG9yPGJvb2wsIDA+KiBtZW1vcnlNYXA7CisgICAg
VmVjdG9yPGJvb2wsIDA+KiBwYWdlTWFwOworICAgIGJvb2wgYWxsb2NhdG9yRGVzdHJveWVkOwor
ICAgIAorICAgIFNpbXBsZVRlc3RBbGxvY2F0b3IqIGFsbG9jYXRvcjsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgbWVtb3J5TWFwID0gbmV3IFZlY3Rvcjxi
b29sLCAwPigpOworICAgICAgICBwYWdlTWFwID0gbmV3IFZlY3Rvcjxib29sLCAwPigpOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBwYWdlID0gYmFzZVBhZ2U7IHBhZ2UgPCBiYXNl
UGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcDsgKytwYWdlKSB7CisgICAgICAgICAgICBwYWdlTWFw
LT5hcHBlbmQoZmFsc2UpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBieXRlSW5QYWdlID0g
MDsgYnl0ZUluUGFnZSA8IHBhZ2VTaXplKCk7ICsrYnl0ZUluUGFnZSkKKyAgICAgICAgICAgICAg
ICBtZW1vcnlNYXAtPmFwcGVuZChmYWxzZSk7CisgICAgICAgIH0KKworICAgICAgICBhbGxvY2F0
b3JEZXN0cm95ZWQgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRIZWFwR3Jvd3Ro
TW9kZSA9IERvbnRHcm93SGVhcDsKKyAgICAgICAgYWxsb3dBbGxvY2F0ZVBhZ2VzID0gMDsKKyAg
ICAgICAgYWRkaXRpb25hbFBhZ2VzSW5IZWFwID0gMDsKKyAgICAgICAgcmVxdWVzdGVkTnVtUGFn
ZXMgPSAwOworICAgICAgICAKKyAgICAgICAgYWxsb2NhdG9yID0gbmV3IFNpbXBsZVRlc3RBbGxv
Y2F0b3IodGhpcyk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisg
ICAgeworICAgICAgICBFWFBFQ1RfVFJVRShjdXJyZW50SGVhcEdyb3d0aE1vZGUgPT0gRG9udEdy
b3dIZWFwKTsKKyAgICAgICAgRVhQRUNUX0VRKGFsbG93QWxsb2NhdGVQYWdlcywgc3RhdGljX2Nh
c3Q8c2l6ZV90PigwKSk7CisgICAgICAgIEVYUEVDVF9FUShyZXF1ZXN0ZWROdW1QYWdlcywgc3Rh
dGljX2Nhc3Q8c2l6ZV90PigwKSk7CisgICAgICAgIAorICAgICAgICAvLyBtZW1vcnkgc2hvdWxk
IGJlIGZyZWUuCisgICAgICAgIGZvciAodW5zaWduZWQgcGFnZSA9IGJhc2VQYWdlOyBwYWdlIDwg
YmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXA7ICsrcGFnZSkgeworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUoIXBhZ2VTdGF0ZShwYWdlKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGJ5
dGVJblBhZ2UgPSAwOyBieXRlSW5QYWdlIDwgcGFnZVNpemUoKTsgKytieXRlSW5QYWdlKQorICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFieXRlU3RhdGUocGFnZSAqIHBhZ2VTaXplKCkgKyBi
eXRlSW5QYWdlKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIE5PVEU6IHRoaXMg
YXV0b21hdGljYWxseSB0ZXN0cyB0aGF0IHRoZSBhbGxvY2F0b3IgZGlkIG5vdCBsZWFrCisgICAg
ICAgIC8vIG1lbW9yeSwgc28gbG9uZyBhcyB0aGVzZSB0ZXN0cyBhcmUgcnVubmluZyB3aXRoICFk
ZWZpbmVkKE5ERUJVRykuCisgICAgICAgIC8vIFNlZSBNZXRhQWxsb2NhdG9yOjptX21hbGxvY0Jh
bGFuY2UuCisgICAgICAgIGRlbGV0ZSBhbGxvY2F0b3I7CisgICAgICAgIAorICAgICAgICBFWFBF
Q1RfVFJVRShhbGxvY2F0b3JEZXN0cm95ZWQpOworICAgICAgICAKKyAgICAgICAgZGVsZXRlIG1l
bW9yeU1hcDsKKyAgICAgICAgZGVsZXRlIHBhZ2VNYXA7CisgICAgfQorICAgIAorICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIGFsbG9jYXRlKHNpemVfdCBzaXplSW5CeXRlcywgU2FuaXR5Q2hlY2tN
b2RlIHNhbml0eUNoZWNrTW9kZSA9IFJ1blNhbml0eUNoZWNrKQorICAgIHsKKyAgICAgICAgTWV0
YUFsbG9jYXRvckhhbmRsZSogaGFuZGxlID0gYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRl
cykubGVha1JlZigpOworICAgICAgICBFWFBFQ1RfVFJVRShoYW5kbGUpOworICAgICAgICBFWFBF
Q1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplSW5CeXRlcyk7CisgICAgICAgIAorICAg
ICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhh
bmRsZS0+c3RhcnQoKSk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsg
c2l6ZUluQnl0ZXM7CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRC
eXRlOyBjdXJyZW50Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKCFieXRlU3RhdGUoY3VycmVudEJ5dGUpKTsKKyAgICAgICAgICAgIGJ5dGVT
dGF0ZShjdXJyZW50Qnl0ZSkgPSB0cnVlOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFnZVN0
YXRlKGN1cnJlbnRCeXRlIC8gcGFnZVNpemUoKSkpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoc2FuaXR5Q2hlY2tNb2RlID09IFJ1blNhbml0eUNoZWNrKQorICAgICAgICAgICAg
c2FuaXR5Q2hlY2soKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBoYW5kbGU7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZnJlZShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUsIFNhbml0eUNo
ZWNrTW9kZSBzYW5pdHlDaGVja01vZGUgPSBSdW5TYW5pdHlDaGVjaykKKyAgICB7CisgICAgICAg
IEVYUEVDVF9UUlVFKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICBub3RpZnlGcmVlKGhhbmRs
ZS0+c3RhcnQoKSwgaGFuZGxlLT5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgaGFuZGxlLT5kZXJl
ZigpOworICAgICAgICAKKyAgICAgICAgaWYgKHNhbml0eUNoZWNrTW9kZSA9PSBSdW5TYW5pdHlD
aGVjaykKKyAgICAgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
bm90aWZ5RnJlZSh2b2lkKiBzdGFydCwgc2l6ZV90IHNpemVJbkJ5dGVzKQorICAgIHsKKyAgICAg
ICAgdWludHB0cl90IHN0YXJ0Qnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihzdGFy
dCk7CisgICAgICAgIHVpbnRwdHJfdCBlbmRCeXRlID0gc3RhcnRCeXRlICsgc2l6ZUluQnl0ZXM7
CisgICAgICAgIGZvciAodWludHB0cl90IGN1cnJlbnRCeXRlID0gc3RhcnRCeXRlOyBjdXJyZW50
Qnl0ZSA8IGVuZEJ5dGU7ICsrY3VycmVudEJ5dGUpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KGJ5dGVTdGF0ZShjdXJyZW50Qnl0ZSkpOworICAgICAgICAgICAgYnl0ZVN0YXRlKGN1cnJlbnRC
eXRlKSA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgc2FuaXR5Q2hl
Y2soKQorICAgIHsKKyNpZm5kZWYgTkRFQlVHCisgICAgICAgIEVYUEVDVF9FUShhbGxvY2F0b3It
PmJ5dGVzUmVzZXJ2ZWQoKSAtIGFsbG9jYXRvci0+Ynl0ZXNBbGxvY2F0ZWQoKSwgYWxsb2NhdG9y
LT5kZWJ1Z0ZyZWVTcGFjZVNpemUoKSk7CisjZW5kaWYKKyAgICAgICAgRVhQRUNUX0VRKGFsbG9j
YXRvci0+Ynl0ZXNSZXNlcnZlZCgpLCAoZGVmYXVsdFBhZ2VzSW5IZWFwICsgYWRkaXRpb25hbFBh
Z2VzSW5IZWFwKSAqIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoYWxsb2NhdG9yLT5i
eXRlc0FsbG9jYXRlZCgpLCBieXRlc0FsbG9jYXRlZCgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGFs
bG9jYXRvci0+Ynl0ZXNDb21taXR0ZWQoKSwgYnl0ZXNDb21taXR0ZWQoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29uZmlybShNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUpCisgICAgewor
ICAgICAgICB1aW50cHRyX3Qgc3RhcnRCeXRlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KGhhbmRsZS0+c3RhcnQoKSk7CisgICAgICAgIGNvbmZpcm0oc3RhcnRCeXRlLCBzdGFydEJ5dGUg
KyBoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHRydWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNv
bmZpcm1IaWdoV2F0ZXJtYXJrKE1ldGFBbGxvY2F0b3JIYW5kbGUqIGhhbmRsZSkKKyAgICB7Cisg
ICAgICAgIGNvbmZpcm0ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+ZW5kKCkp
LCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSwgZmFsc2UpOwor
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICB2b2lkIGNvbmZpcm0odWludHB0cl90IHN0YXJ0
Qnl0ZSwgdWludHB0cl90IGVuZEJ5dGUsIGJvb2wgdmFsdWUpCisgICAgeworICAgICAgICBmb3Ig
KHVpbnRwdHJfdCBjdXJyZW50Qnl0ZSA9IHN0YXJ0Qnl0ZTsgY3VycmVudEJ5dGUgPCBlbmRCeXRl
OyArK2N1cnJlbnRCeXRlKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEoYnl0ZVN0YXRlKGN1cnJl
bnRCeXRlKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKHZhbHVlKQorICAgICAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHBhZ2VTdGF0ZShjdXJyZW50Qnl0ZSAvIHBhZ2VTaXplKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICB1aW50cHRyX3QgZmlyc3RG
cmVlUGFnZSA9IChzdGFydEJ5dGUgKyBwYWdlU2l6ZSgpIC0gMSkgLyBwYWdlU2l6ZSgpOworICAg
ICAgICAgICAgdWludHB0cl90IGxhc3RGcmVlUGFnZSA9IChlbmRCeXRlIC0gcGFnZVNpemUoKSkg
LyBwYWdlU2l6ZSgpOworICAgICAgICAgICAgZm9yICh1aW50cHRyX3QgY3VycmVudFBhZ2UgPSBm
aXJzdEZyZWVQYWdlOyBjdXJyZW50UGFnZSA8PSBsYXN0RnJlZVBhZ2U7ICsrY3VycmVudFBhZ2Up
CisgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoIXBhZ2VTdGF0ZShjdXJyZW50UGFnZSkpOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHNpemVfdCBieXRlc0FsbG9jYXRlZCgpCisgICAg
eworICAgICAgICBzaXplX3QgcmVzdWx0ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgbWVtb3J5TWFwLT5zaXplKCk7ICsraW5kZXgpIHsKKyAgICAgICAgICAg
IGlmIChtZW1vcnlNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICByZXN1bHQrKzsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzaXplX3Qg
Ynl0ZXNDb21taXR0ZWQoKQorICAgIHsKKyAgICAgICAgc2l6ZV90IHJlc3VsdCA9IDA7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IHBhZ2VNYXAtPnNpemUoKTsgKytp
bmRleCkgeworICAgICAgICAgICAgaWYgKHBhZ2VNYXAtPmF0KGluZGV4KSkKKyAgICAgICAgICAg
ICAgICByZXN1bHQrKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmVzdWx0ICogcGFnZVNp
emUoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCYgYnl0ZVN0YXRlKHZvaWQqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICByZXR1cm4gYnl0ZVN0YXRlKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
PihhZGRyZXNzKSk7CisgICAgfQorICAgIAorICAgIGJvb2wmIGJ5dGVTdGF0ZSh1aW50cHRyX3Qg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIHVpbnRwdHJfdCBieXRlSW5kZXggPSBhZGRyZXNzIC0g
YmFzZVBhZ2UgKiBwYWdlU2l6ZSgpOworICAgICAgICByZXR1cm4gbWVtb3J5TWFwLT5hdChieXRl
SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBib29sJiBwYWdlU3RhdGUodWludHB0cl90IHBhZ2Up
CisgICAgeworICAgICAgICB1aW50cHRyX3QgcGFnZUluZGV4ID0gcGFnZSAtIGJhc2VQYWdlOwor
ICAgICAgICByZXR1cm4gcGFnZU1hcC0+YXQocGFnZUluZGV4KTsKKyAgICB9CisKKyAgICAvLyBU
ZXN0IGhlbHBlcnMKKworICAgIHZvaWQgdGVzdE9uZUFsbG9jKHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgLy8gVGVzdHMgdGhlIG1vc3QgYmFzaWMgYmVoYXZpb3I6IGFsbG9jYXRlIG9uZSB0
aGluZyBhbmQgZnJlZSBpdC4gQWxzbworICAgICAgICAvLyB2ZXJpZmllcyB0aGF0IHRoZSBzdGF0
ZSBvZiBwYWdlcyBpcyBjb3JyZWN0LgorICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhh
bmRsZSogaGFuZGxlID0gYWxsb2NhdGUoc2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShoYW5kbGUt
PnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQYWdlICogcGFnZVNpemUoKSkp
OworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zaXplSW5CeXRlcygpLCBzaXplKTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUocGFnZVN0YXRlKGJhc2VQYWdlKSk7CisgICAgICAgIAorICAgICAgICBj
b25maXJtKGhhbmRsZSk7CisgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7Cisg
ICAgICAgIAorICAgICAgICBmcmVlKGhhbmRsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgdGVz
dFJlcGVhdEFsbG9jRnJlZShzaXplX3QgZmlyc3RTaXplLCAuLi4pCisgICAgeworICAgICAgICAv
LyBUZXN0cyByaWdodC1jb2FsZXNjaW5nIGJ5IHJlcGVhdGVkbHkgYWxsb2NhdGluZyBhbmQgZnJl
ZWluZy4gVGhlIGlkZWEKKyAgICAgICAgLy8gaXMgdGhhdCBpZiB5b3UgYWxsb2NhdGUgc29tZXRo
aW5nIGFuZCB0aGVuIGZyZWUgaXQsIHRoZW4gdGhlIGhlYXAgc2hvdWxkCisgICAgICAgIC8vIGxv
b2sgaWRlbnRpY2FsIHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB0aGUgYWxsb2NhdGlvbiBkdWUgdG8g
YSByaWdodC1jb2FsZXNjZQorICAgICAgICAvLyBvZiB0aGUgZnJlZWQgY2h1bmsgYW5kIHRoZSBh
bHJlYWR5LWZyZWUgbWVtb3J5LCBhbmQgc28gc3Vic2VxdWVudAorICAgICAgICAvLyBhbGxvY2F0
aW9ucyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBvbmUuCisgICAgICAgIAor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNpemUp
OworICAgICAgICBFWFBFQ1RfRVEoaGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwgZmlyc3RTaXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oaGFu
ZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgCisg
ICAgICAgIGZyZWUoaGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIHZhX2xpc3QgYXJnTGlzdDsK
KyAgICAgICAgdmFfc3RhcnQoYXJnTGlzdCwgZmlyc3RTaXplKTsKKyAgICAgICAgd2hpbGUgKHNp
emVfdCBzaXplSW5CeXRlcyA9IHZhX2FyZyhhcmdMaXN0LCBpbnQpKSB7CisgICAgICAgICAgICBo
YW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoaGFu
ZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VTaXpl
KCkpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJbkJ5dGVzKCksIHNpemVJ
bkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmlybShoYW5kbGUpOworICAg
ICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICB9CisgICAgICAgIHZhX2VuZChhcmdMaXN0
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0U2ltcGxlRnVsbENvYWxlc2NlKHNpemVfdCBm
aXJzdFNpemUsIHNpemVfdCBzZWNvbmRTaXplLCBzaXplX3QgdGhpcmRTaXplKQorICAgIHsKKyAg
ICAgICAgLy8gQWxsb2NhdGVzIHNvbWV0aGluZyBvZiBzaXplIGZpcnN0U2l6ZSwgdGhlbiBzb21l
dGhpbmcgb2Ygc2l6ZSBzZWNvbmRTaXplLCBhbmQgdGhlbgorICAgICAgICAvLyBmcmVlcyB0aGUg
Zmlyc3QgYWxsb2NhdGlvbiwgYW5kIHRoZW4gdGhlIHNlY29uZCwgYW5kIHRoZW4gYXR0ZW1wdHMg
dG8gYWxsb2NhdGUgdGhlCisgICAgICAgIC8vIHRoaXJkLCBhc3NlcnRpbmcgdGhhdCBpdCBhbGxv
Y2F0ZWQgYXQgdGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgaGVhcC4KKyAgICAgICAgCisgICAgICAg
IC8vIE5vdGUgdGhhdCB0aGlzIHRlc3QgbWF5IGNhdXNlIHJpZ2h0LWFsbG9jYXRpb24sIHdoaWNo
IHdpbGwgY2F1c2UgdGhlIHRlc3QgdG8gZmFpbC4KKyAgICAgICAgLy8gVGh1cyB0aGUgY29ycmVj
dCB3YXkgb2YgcnVubmluZyB0aGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgc2Vjb25kU2l6ZSBp
cworICAgICAgICAvLyBwaWNrZWQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IG5ldmVyIHN0cmFkZGxl
cyBhIHBhZ2UuCisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdEhh
bmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRs
ZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgZmlyc3RT
aXplKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBj
b25maXJtSGlnaFdhdGVybWFyayhmaXJzdEhhbmRsZSk7CisKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogc2Vjb25kSGFuZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVY
UEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSArIGZpcnN0U2l6ZSkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vj
b25kSGFuZGxlLT5zaXplSW5CeXRlcygpLCBzZWNvbmRTaXplKTsKKyAgICAgICAgCisgICAgICAg
IGNvbmZpcm0oZmlyc3RIYW5kbGUpOworICAgICAgICBjb25maXJtKHNlY29uZEhhbmRsZSk7Cisg
ICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKHNlY29uZEhhbmRsZSk7CisgICAgICAgIAorICAg
ICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNvbmZpcm0oc2Vjb25k
SGFuZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoc2Vjb25kSGFuZGxlKTsKKyAg
ICAgICAgCisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGNv
bmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCAoYmFzZVBhZ2UgKyBkZWZhdWx0UGFnZXNJbkhl
YXApICogcGFnZVNpemUoKSwgZmFsc2UpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRv
ckhhbmRsZSogdGhpcmRIYW5kbGUgPSBhbGxvY2F0ZSh0aGlyZFNpemUpOworICAgICAgICBFWFBF
Q1RfRVEodGhpcmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJhc2VQ
YWdlICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfRVEodGhpcmRIYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIHRoaXJkU2l6ZSk7CisgICAgICAgIAorICAgICAgICBjb25maXJtKHRoaXJkSGFu
ZGxlKTsKKyAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsodGhpcmRIYW5kbGUpOworICAgICAg
ICAKKyAgICAgICAgZnJlZSh0aGlyZEhhbmRsZSk7CisgICAgfQorICAgIAorICAgIGVudW0gVGVz
dEZJRk9BbGxvY01vZGUgeyBGaWxsQXRFbmQsIEVhZ2VyRmlsbCB9OworICAgIHZvaWQgdGVzdEZJ
Rk9BbGxvYyhUZXN0RklGT0FsbG9jTW9kZSBtb2RlLCAuLi4pCisgICAgeworICAgICAgICAvLyBU
aGlzIHdpbGwgdGVzdCB0aGUgc2ltcGxlIGNhc2Ugb2Ygbm8tY29hbGVzY2UgKGZyZWVpbmcgdGhl
IGxlZnQtbW9zdAorICAgICAgICAvLyBjaHVuayBpbiBtZW1vcnkgd2hlbiB0aGUgY2h1bmsgdG8g
dGhlIHJpZ2h0IG9mIGl0IGlzIGFsbG9jYXRlZCkgYW5kCisgICAgICAgIC8vIGZ1bGx5IGV4ZXJj
aXNlIGxlZnQtY29hbGVzY2luZyBhbmQgZnVsbC1jb2FsZXNjaW5nLiBJbiBFYWdlckZpbGwKKyAg
ICAgICAgLy8gbW9kZSwgdGhpcyBhbHNvIHRlc3RzIHBlcmZlY3QtZml0IGFsbG9jYXRpb24gYW5k
IG5vLWNvYWxlc2NpbmcgZnJlZS4KKyAgICAgICAgCisgICAgICAgIHNpemVfdCB0b3RhbFNpemUg
PSAwOworICAgICAgICAKKyAgICAgICAgVmVjdG9yPE1ldGFBbGxvY2F0b3JIYW5kbGUqLCAwPiBo
YW5kbGVzOworICAgICAgICAKKyAgICAgICAgdmFfbGlzdCBhcmdMaXN0OworICAgICAgICB2YV9z
dGFydChhcmdMaXN0LCBtb2RlKTsKKyAgICAgICAgd2hpbGUgKHNpemVfdCBzaXplSW5CeXRlcyA9
IHZhX2FyZyhhcmdMaXN0LCBpbnQpKSB7CisgICAgICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBoYW5kbGUgPSBhbGxvY2F0ZShzaXplSW5CeXRlcyk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
aGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPihiYXNlUGFnZSAqIHBhZ2VT
aXplKCkgKyB0b3RhbFNpemUpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShoYW5kbGUtPnNpemVJ
bkJ5dGVzKCksIHNpemVJbkJ5dGVzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgY29uZmly
bShoYW5kbGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoaGFuZGxlKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxlcy5hcHBlbmQoaGFuZGxlKTsKKyAgICAgICAg
ICAgIHRvdGFsU2l6ZSArPSBzaXplSW5CeXRlczsKKyAgICAgICAgfQorICAgICAgICB2YV9lbmQo
YXJnTGlzdCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBoYW5kbGVzLnNpemUoKTsgKytpbmRleCkKKyAgICAgICAgICAgIGNvbmZpcm0oaGFuZGxl
cy5hdChpbmRleCkpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHNpemVTb0ZhciA9IDA7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IGhhbmRsZXMuc2l6ZSgpOyAr
K2luZGV4KSB7CisgICAgICAgICAgICBzaXplU29GYXIgKz0gaGFuZGxlcy5hdChpbmRleCktPnNp
emVJbkJ5dGVzKCk7CisgICAgICAgICAgICBmcmVlKGhhbmRsZXMuYXQoaW5kZXgpKTsKKyAgICAg
ICAgICAgIGlmIChtb2RlID09IEVhZ2VyRmlsbCkgeworICAgICAgICAgICAgICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGhhbmRsZSA9IGFsbG9jYXRlKHNpemVTb0Zhcik7CisgICAgICAgICAgICAg
ICAgRVhQRUNUX0VRKGhhbmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFz
ZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGhhbmRsZS0+
c2l6ZUluQnl0ZXMoKSwgc2l6ZVNvRmFyKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBjb25maXJtKGJhc2VQYWdlICogcGFnZVNpemUoKSwgYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
ICsgdG90YWxTaXplLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCBoYW5kbGVz
LnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhh
bmRsZXMubGFzdCgpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IGNvbmZpcm1IaWdoV2F0ZXJtYXJrKGhhbmRsZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgZnJlZShoYW5kbGUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGNvbmZpcm0oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpLCBiYXNlUGFnZSAqIHBhZ2VTaXplKCkgKyBz
aXplU29GYXIsIGZhbHNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQVNTRVJUKHNpemVTb0ZhciA9PSB0b3RhbFNpemUpOworICAgICAgICAKKyAgICAgICAg
Y29uZmlybShiYXNlUGFnZSAqIHBhZ2VTaXplKCksIChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0lu
SGVhcCkgKiBwYWdlU2l6ZSgpLCBmYWxzZSk7CisgICAgICAgIAorICAgICAgICBpZiAobW9kZSA9
PSBGaWxsQXRFbmQpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIGZpbmFsSGFu
ZGxlID0gYWxsb2NhdGUodG90YWxTaXplKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShmaW5hbEhh
bmRsZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6
ZSgpKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoZmluYWxIYW5kbGUtPnNpemVJbkJ5dGVzKCks
IHRvdGFsU2l6ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNvbmZpcm0oZmluYWxIYW5k
bGUpOworICAgICAgICAgICAgY29uZmlybUhpZ2hXYXRlcm1hcmsoZmluYWxIYW5kbGUpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmcmVlKGZpbmFsSGFuZGxlKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIHRlc3RGaWxsSGVhcChzaXplX3Qgc2l6ZUluQnl0ZXMsIHNpemVf
dCBudW1BbGxvY2F0aW9ucykKKyAgICB7CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFu
ZGxlKiwgMD4gaGFuZGxlczsKKyAgICAgICAgCisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBudW1BbGxvY2F0aW9uczsgKytpbmRleCkKKyAgICAgICAgICAgIGhhbmRsZXMu
YXBwZW5kKGFsbG9jYXRlKHNpemVJbkJ5dGVzLCBEb250UnVuU2FuaXR5Q2hlY2spKTsKKyAgICAg
ICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfVFJV
RSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzaXplSW5CeXRlcykpOworICAgICAgICAKKyAgICAgICAg
Zm9yIChzaXplX3QgaW5kZXggPSAwOyBpbmRleCA8IG51bUFsbG9jYXRpb25zOyArK2luZGV4KQor
ICAgICAgICAgICAgZnJlZShoYW5kbGVzLmF0KGluZGV4KSwgRG9udFJ1blNhbml0eUNoZWNrKTsK
KyAgICAgICAgCisgICAgICAgIHNhbml0eUNoZWNrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQg
dGVzdFJpZ2h0QWxsb2NhdGlvbihzaXplX3QgZmlyc3RMZWZ0U2l6ZSwgc2l6ZV90IGZpcnN0Umln
aHRTaXplLCBzaXplX3Qgc2Vjb25kTGVmdFNpemUsIHNpemVfdCBzZWNvbmRSaWdodFNpemUpCisg
ICAgeworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdExlZnQgPSBhbGxvY2F0ZShm
aXJzdExlZnRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VRKGZpcnN0TGVmdC0+c3RhcnQoKSwgcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAor
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBmaXJzdFJpZ2h0ID0gYWxsb2NhdGUoZmlyc3RS
aWdodFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoZmlyc3RSaWdodC0+ZW5kKCksIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6
ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzZWNvbmRMZWZ0
ID0gYWxsb2NhdGUoc2Vjb25kTGVmdFNpemUpOworICAgICAgICBFWFBFQ1RfRVEoc2Vjb25kTGVm
dC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
ICsgZmlyc3RMZWZ0LT5zaXplSW5CeXRlcygpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBzZWNvbmRSaWdodCA9IGFsbG9jYXRlKHNlY29uZFJpZ2h0U2l6ZSk7Cisg
ICAgICAgIEVYUEVDVF9FUShzZWNvbmRSaWdodC0+ZW5kKCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCkgKiBwYWdlU2l6ZSgpIC0gZmlyc3RS
aWdodC0+c2l6ZUluQnl0ZXMoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdExlZnQp
OworICAgICAgICBmcmVlKGZpcnN0UmlnaHQpOworICAgICAgICBmcmVlKHNlY29uZExlZnQpOwor
ICAgICAgICBmcmVlKHNlY29uZFJpZ2h0KTsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUo
KSk7CisgICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBmcmVlKGZp
bmFsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0ZXN0QmVzdEZpdChzaXplX3QgZmlyc3RTaXpl
LCBzaXplX3Qgc3RlcCwgdW5zaWduZWQgbnVtU2xvdHMsIFNhbml0eUNoZWNrTW9kZSBzYW5pdHlD
aGVja01vZGUpCisgICAgeworICAgICAgICBWZWN0b3I8TWV0YUFsbG9jYXRvckhhbmRsZSosIDA+
IGhhbmRsZXNUb0ZyZWU7CisgICAgICAgIFZlY3RvcjxNZXRhQWxsb2NhdG9ySGFuZGxlKiwgMD4g
aGFuZGxlczsKKyAgICAgICAgVmVjdG9yPHZvaWQqLCAwPiBsb2NhdGlvbnM7CisgICAgICAgIAor
ICAgICAgICBzaXplX3Qgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA9IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFB
bGxvY2F0b3JIYW5kbGUqIHRvRnJlZSA9IGFsbG9jYXRlKHNpemUsIHNhbml0eUNoZWNrTW9kZSk7
CisgICAgICAgICAgICBpZiAoIWhhbmRsZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
d2hpbGUgKHRvRnJlZS0+c3RhcnQoKSAhPSBoYW5kbGVzLmxhc3QoKS0+ZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlc1RvRnJlZS5hcHBlbmQodG9GcmVlKTsKKyAgICAgICAgICAg
ICAgICAgICAgdG9GcmVlID0gYWxsb2NhdGUoc2l6ZSwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0b3JI
YW5kbGUqIGZyYWdnZXIgPSBhbGxvY2F0ZSgzMiwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShmcmFnZ2VyLT5zdGFydCgpLCB0b0ZyZWUtPmVuZCgpKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZCh0b0ZyZWUtPnN0YXJ0KCkpOworCisg
ICAgICAgICAgICBoYW5kbGVzVG9GcmVlLmFwcGVuZCh0b0ZyZWUpOworICAgICAgICAgICAgaGFu
ZGxlcy5hcHBlbmQoZnJhZ2dlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNpemUgKz0g
c3RlcDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGxvY2F0aW9ucy5zaXpl
KCkgPT0gbnVtU2xvdHMpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgaGFuZGxlc1RvRnJlZS5zaXplKCk7ICsraW5kZXgpCisgICAgICAgICAgICBm
cmVlKGhhbmRsZXNUb0ZyZWUuYXQoaW5kZXgpLCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAK
KyAgICAgICAgc2l6ZSA9IGZpcnN0U2l6ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IDA7IGluZGV4IDwgbnVtU2xvdHM7ICsraW5kZXgpIHsKKyAgICAgICAgICAgIE1ldGFBbGxvY2F0
b3JIYW5kbGUqIGJlc3RGaXQgPSBhbGxvY2F0ZShzaXplIC0gMzIsIHNhbml0eUNoZWNrTW9kZSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKGJlc3RGaXQtPnN0YXJ0KCkg
PT0gbG9jYXRpb25zLmF0KGluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmVzdEZp
dC0+ZW5kKCkgPT0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KGxvY2F0aW9ucy5hdChpbmRleCkpICsgc2l6ZSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBzbWFsbCA9IGFsbG9jYXRlKDMyLCBzYW5pdHlD
aGVja01vZGUpOworICAgICAgICAgICAgaWYgKGJlc3RGaXQtPnN0YXJ0KCkgPT0gbG9jYXRpb25z
LmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoc21hbGwtPnN0YXJ0KCksIGJl
c3RGaXQtPmVuZCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBFWFBFQ1Rf
RVEoc21hbGwtPmVuZCgpLCBiZXN0Rml0LT5zdGFydCgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZnJlZShiZXN0Rml0LCBzYW5pdHlDaGVja01vZGUpOworICAgICAgICAgICAgZnJlZShz
bWFsbCwgc2FuaXR5Q2hlY2tNb2RlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZSAr
PSBzdGVwOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4
ID0gMDsgaW5kZXggPCBudW1TbG90czsgKytpbmRleCkKKyAgICAgICAgICAgIGZyZWUoaGFuZGxl
cy5hdChpbmRleCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxs
b2NhdG9ySGFuZGxlKiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VT
aXplKCksIHNhbml0eUNoZWNrTW9kZSk7CisgICAgICAgIEVYUEVDVF9FUShmaW5hbC0+c3RhcnQo
KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgpKSk7CisgICAg
ICAgIAorICAgICAgICBmcmVlKGZpbmFsLCBzYW5pdHlDaGVja01vZGUpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHRlc3RTaHJpbmsoc2l6ZV90IGZpcnN0U2l6ZSwgc2l6ZV90IHNlY29uZFNpemUp
CisgICAgeworICAgICAgICAvLyBBbGxvY2F0ZSB0aGUgdGhpbmcgdGhhdCB3aWxsIGJlIHNocnVu
aworICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxlKiBoYW5kbGUgPSBhbGxvY2F0ZShmaXJzdFNp
emUpOworICAgICAgICAKKyAgICAgICAgLy8gU2hyaW5rIGl0LCBhbmQgbWFrZSBzdXJlIHRoYXQg
b3VyIHN0YXRlIHJlZmxlY3RzIHRoZSBzaHJpbmthZ2UuCisgICAgICAgIG5vdGlmeUZyZWUocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGhhbmRsZS0+
c3RhcnQoKSkgKyBzZWNvbmRTaXplKSwgZmlyc3RTaXplIC0gc2Vjb25kU2l6ZSk7CisgICAgICAg
IAorICAgICAgICBoYW5kbGUtPnNocmluayhzZWNvbmRTaXplKTsKKyAgICAgICAgRVhQRUNUX0VR
KGhhbmRsZS0+c2l6ZUluQnl0ZXMoKSwgc2Vjb25kU2l6ZSk7CisgICAgICAgIAorICAgICAgICBz
YW5pdHlDaGVjaygpOworICAgICAgICAKKyAgICAgICAgLy8gQXNzZXJ0IHRoYXQgdGhlIGhlYXAg
aXMgbm90IGVtcHR5LgorICAgICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShk
ZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICAvLyBB
bGxvY2F0ZSB0aGUgcmVtYWluZGVyIG9mIHRoZSBoZWFwLgorICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiByZW1haW5kZXIgPSBhbGxvY2F0ZShkZWZhdWx0UGFnZXNJbkhlYXAgKiBwYWdlU2l6
ZSgpIC0gc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShyZW1haW5kZXItPnN0YXJ0KCks
IGhhbmRsZS0+ZW5kKCkpOworICAgICAgICAKKyAgICAgICAgZnJlZShyZW1haW5kZXIpOworICAg
ICAgICBmcmVlKGhhbmRsZSk7CisgICAgICAgIAorICAgICAgICAvLyBBc3NlcnQgdGhhdCB0aGUg
aGVhcCBpcyBlbXB0eSBhbmQgZmluaXNoIHVwLgorICAgICAgICBNZXRhQWxsb2NhdG9ySGFuZGxl
KiBmaW5hbCA9IGFsbG9jYXRlKGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoZmluYWwtPnN0YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGJh
c2VQYWdlICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgZnJlZShmaW5hbCk7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgdGVzdERlbWFuZEFsbG9jQ29hbGVzY2Uoc2l6ZV90IGZpcnN0
U2l6ZSwgc2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAgICAg
IEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAgKyBu
dW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBmaXJzdEhhbmRsZSA9IGFsbG9jYXRlKGZpcnN0U2l6ZSk7CisgICAgICAgIAorICAg
ICAgICBFWFBFQ1RfVFJVRSghYWxsb2NhdG9yLT5hbGxvY2F0ZShzZWNvbmRTaXplKSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKCFhbGxvY2F0b3ItPmFsbG9jYXRlKChkZWZhdWx0UGFnZXNJbkhlYXAg
KyBudW1QYWdlcykgKiBwYWdlU2l6ZSgpKSk7CisgICAgICAgIAorICAgICAgICBjdXJyZW50SGVh
cEdyb3d0aE1vZGUgPSBGb3JUZXN0RGVtYW5kQWxsb2NDb2FsZXNjZTsKKyAgICAgICAgYWxsb3dB
bGxvY2F0ZVBhZ2VzID0gbnVtUGFnZXM7CisgICAgICAgIAorICAgICAgICBNZXRhQWxsb2NhdG9y
SGFuZGxlKiBzZWNvbmRIYW5kbGUgPSBhbGxvY2F0ZShzZWNvbmRTaXplKTsKKyAgICAgICAgCisg
ICAgICAgIEVYUEVDVF9UUlVFKGN1cnJlbnRIZWFwR3Jvd3RoTW9kZSA9PSBEb250R3Jvd0hlYXAp
OworICAgICAgICBFWFBFQ1RfRVEoYWxsb3dBbGxvY2F0ZVBhZ2VzLCBzdGF0aWNfY2FzdDxzaXpl
X3Q+KDApKTsKKyAgICAgICAgRVhQRUNUX0VRKHJlcXVlc3RlZE51bVBhZ2VzLCAoc2Vjb25kU2l6
ZSArIHBhZ2VTaXplKCkgLSAxKSAvIHBhZ2VTaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEoc2Vj
b25kSGFuZGxlLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigoYmFzZVBhZ2UgKyBk
ZWZhdWx0UGFnZXNJbkhlYXApICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVx
dWVzdGVkTnVtUGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgZnJlZShmaXJzdEhhbmRsZSk7
CisgICAgICAgIGZyZWUoc2Vjb25kSGFuZGxlKTsKKyAgICAgICAgCisgICAgICAgIGZyZWUoYWxs
b2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCB0ZXN0RGVtYW5kQWxsb2NEb250Q29hbGVzY2Uoc2l6ZV90IGZp
cnN0U2l6ZSwgc2l6ZV90IG51bVBhZ2VzLCBzaXplX3Qgc2Vjb25kU2l6ZSkKKyAgICB7CisgICAg
ICAgIGZyZWUoYWxsb2NhdGUoZmlyc3RTaXplKSk7CisgICAgICAgIGZyZWUoYWxsb2NhdGUoZGVm
YXVsdFBhZ2VzSW5IZWFwICogcGFnZVNpemUoKSkpOworICAgICAgICBFWFBFQ1RfVFJVRSghYWxs
b2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFnZVNp
emUoKSkpOworICAgICAgICAKKyAgICAgICAgTWV0YUFsbG9jYXRvckhhbmRsZSogZmlyc3RIYW5k
bGUgPSBhbGxvY2F0ZShmaXJzdFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUo
IWFsbG9jYXRvci0+YWxsb2NhdGUoc2Vjb25kU2l6ZSkpOworICAgICAgICBFWFBFQ1RfVFJVRSgh
YWxsb2NhdG9yLT5hbGxvY2F0ZSgoZGVmYXVsdFBhZ2VzSW5IZWFwICsgbnVtUGFnZXMpICogcGFn
ZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgY3VycmVudEhlYXBHcm93dGhNb2RlID0gRm9y
VGVzdERlbWFuZEFsbG9jRG9udENvYWxlc2NlOworICAgICAgICBhbGxvd0FsbG9jYXRlUGFnZXMg
PSBudW1QYWdlczsKKyAgICAgICAgCisgICAgICAgIE1ldGFBbGxvY2F0b3JIYW5kbGUqIHNlY29u
ZEhhbmRsZSA9IGFsbG9jYXRlKHNlY29uZFNpemUpOworICAgICAgICAKKyAgICAgICAgRVhQRUNU
X1RSVUUoY3VycmVudEhlYXBHcm93dGhNb2RlID09IERvbnRHcm93SGVhcCk7CisgICAgICAgIEVY
UEVDVF9FUShhbGxvd0FsbG9jYXRlUGFnZXMsIHN0YXRpY19jYXN0PHNpemVfdD4oMCkpOworICAg
ICAgICBFWFBFQ1RfRVEocmVxdWVzdGVkTnVtUGFnZXMsIChzZWNvbmRTaXplICsgcGFnZVNpemUo
KSAtIDEpIC8gcGFnZVNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0
YXJ0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0lu
SGVhcCArIDEpICogcGFnZVNpemUoKSkpOworICAgICAgICAKKyAgICAgICAgcmVxdWVzdGVkTnVt
UGFnZXMgPSAwOworICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxs
b2NhdGUoKGRlZmF1bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKwor
ICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRIYW5kbGUpOwor
ICAgICAgICAKKyAgICAgICAgRVhQRUNUX1RSVUUoIWFsbG9jYXRvci0+YWxsb2NhdGUoKGRlZmF1
bHRQYWdlc0luSGVhcCArIG51bVBhZ2VzKSAqIHBhZ2VTaXplKCkpKTsKKyAgICAgICAgCisgICAg
ICAgIGZpcnN0SGFuZGxlID0gYWxsb2NhdGUoZmlyc3RTaXplKTsKKyAgICAgICAgc2Vjb25kSGFu
ZGxlID0gYWxsb2NhdGUoc2Vjb25kU2l6ZSk7CisgICAgICAgIEVYUEVDVF9FUShmaXJzdEhhbmRs
ZS0+c3RhcnQoKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYmFzZVBhZ2UgKiBwYWdlU2l6ZSgp
KSk7CisgICAgICAgIEVYUEVDVF9FUShzZWNvbmRIYW5kbGUtPnN0YXJ0KCksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KChiYXNlUGFnZSArIGRlZmF1bHRQYWdlc0luSGVhcCArIDEpICogcGFnZVNp
emUoKSkpOworICAgICAgICBmcmVlKGZpcnN0SGFuZGxlKTsKKyAgICAgICAgZnJlZShzZWNvbmRI
YW5kbGUpOworICAgIH0KK307CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRW1wdHkpCit7
CisgICAgLy8gVGVzdHMgdGhhdCBjcmVhdGluZyBhbmQgZGVzdHJveWluZyBhbiBhbGxvY2F0b3Ig
d29ya3MuCit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQWxsb2NaZXJvKSAgICAKK3sK
KyAgICAvLyBUZXN0cyB0aGF0IGFsbG9jYXRpbmcgYSB6ZXJvLWxlbmd0aCBibG9jayByZXR1cm5z
IDAgYW5kCisgICAgLy8gZG9lcyBub3QgY2hhbmdlIGFueXRoaW5nIGluIG1lbW9yeS4KKyAgICAK
KyAgICBBU1NFUlQoIWFsbG9jYXRvci0+YWxsb2NhdGUoMCkpOworICAgIAorICAgIE1ldGFBbGxv
Y2F0b3JIYW5kbGUqIGZpbmFsID0gYWxsb2NhdGUoZGVmYXVsdFBhZ2VzSW5IZWFwICogcGFnZVNp
emUoKSk7CisgICAgRVhQRUNUX0VRKGZpbmFsLT5zdGFydCgpLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihiYXNlUGFnZSAqIHBhZ2VTaXplKCkpKTsKKyAgICBmcmVlKGZpbmFsKTsKK30KKworVEVT
VF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBPbmVBbGxvYzMyKQoreworICAgIHRlc3RPbmVBbGxvYygz
Mik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgT25lQWxsb2M2NCkKK3sKKyAgICB0
ZXN0T25lQWxsb2MoNjQpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIE9uZUFsbG9j
VHdvUGFnZXMpCit7CisgICAgdGVzdE9uZUFsbG9jKHBhZ2VTaXplKCkgKiAyKTsKK30KKworVEVT
VF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlR3aWNlKQoreworICAgIHRl
c3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42NCkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVl
KDMyLCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NG
cmVlNjRUaGVuMzIpCit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSg2NCwgMzIsIDApOworfQor
CitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZTMyVHdpY2VUaGVuNjQp
Cit7CisgICAgdGVzdFJlcGVhdEFsbG9jRnJlZSgzMiwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9G
KE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRoZW42NFR3aWNlKQoreworICAg
IHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDY0LCA2NCwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxs
b2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlNjRUaGVuMzJUaGVuNjQpCit7CisgICAgdGVzdFJl
cGVhdEFsbG9jRnJlZSg2NCwgMzIsIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSZXBlYXRBbGxvY0ZyZWUzMlRocmljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVl
KDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFs
bG9jRnJlZTMyVGhlbjY0VGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoMzIsIDMy
LCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVl
NjRUaGVuMzJUd2ljZSkKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDY0LCAzMiwgMzIsIDAp
OworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJlcGVhdEFsbG9jRnJlZVR3b1BhZ2Vz
VGhlbjMyKQoreworICAgIHRlc3RSZXBlYXRBbGxvY0ZyZWUoc3RhdGljX2Nhc3Q8aW50PihwYWdl
U2l6ZSgpICogMiksIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBSZXBl
YXRBbGxvY0ZyZWUzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0UmVwZWF0QWxsb2NGcmVlKDMy
LCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgKiAyKSwgMCk7Cit9CisKK1RFU1RfRihNZXRh
QWxsb2NhdG9yVGVzdCwgUmVwZWF0QWxsb2NGcmVlUGFnZVRoZW5Ud29QYWdlcykKK3sKKyAgICB0
ZXN0UmVwZWF0QWxsb2NGcmVlKHN0YXRpY19jYXN0PGludD4ocGFnZVNpemUoKSksIHN0YXRpY19j
YXN0PGludD4ocGFnZVNpemUoKSAqIDIpLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBSZXBlYXRBbGxvY0ZyZWVUd29QYWdlc1RoZW5QYWdlKQoreworICAgIHRlc3RSZXBlYXRB
bGxvY0ZyZWUoc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpICogMiksIHN0YXRpY19jYXN0PGlu
dD4ocGFnZVNpemUoKSksIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBs
ZUZ1bGxDb2FsZXNjZTMyUGx1czMyVGhlbjEyOCkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENvYWxl
c2NlKDMyLCAzMiwgMTI4KTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBTaW1wbGVG
dWxsQ29hbGVzY2UzMlBsdXM2NFRoZW4xMjgpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNj
ZSgzMiwgNjQsIDEyOCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVs
bENvYWxlc2NlNjRQbHVzMzJUaGVuMTI4KQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2Uo
NjQsIDMyLCAxMjgpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxD
b2FsZXNjZTMyUGx1c1BhZ2VMZXNzMzJUaGVuUGFnZSkKK3sKKyAgICB0ZXN0U2ltcGxlRnVsbENv
YWxlc2NlKDMyLCBwYWdlU2l6ZSgpIC0gMzIsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0
YUFsbG9jYXRvclRlc3QsIFNpbXBsZUZ1bGxDb2FsZXNjZTMyUGx1c1BhZ2VMZXNzMzJUaGVuVHdv
UGFnZXMpCit7CisgICAgdGVzdFNpbXBsZUZ1bGxDb2FsZXNjZSgzMiwgcGFnZVNpemUoKSAtIDMy
LCBwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxl
RnVsbENvYWxlc2NlUGFnZVBsdXMzMlRoZW5Ud29QYWdlcykKK3sKKyAgICB0ZXN0U2ltcGxlRnVs
bENvYWxlc2NlKHBhZ2VTaXplKCksIDMyLCBwYWdlU2l6ZSgpICogMik7Cit9CisKK1RFU1RfRihN
ZXRhQWxsb2NhdG9yVGVzdCwgU2ltcGxlRnVsbENvYWxlc2NlUGFnZVBsdXNQYWdlVGhlblR3b1Bh
Z2VzKQoreworICAgIHRlc3RTaW1wbGVGdWxsQ29hbGVzY2UocGFnZVNpemUoKSwgcGFnZVNpemUo
KSwgcGFnZVNpemUoKSAqIDIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9B
bGxvY0ZpbGxBdEVuZDMyVHdpY2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMy
LCAzMiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0
RW5kMzJUaHJpY2UpCit7CisgICAgdGVzdEZJRk9BbGxvYyhGaWxsQXRFbmQsIDMyLCAzMiwgMzIs
IDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEZJRk9BbGxvY0ZpbGxBdEVuZDMy
Rm91clRpbWVzKQoreworICAgIHRlc3RGSUZPQWxsb2MoRmlsbEF0RW5kLCAzMiwgMzIsIDMyLCAz
MiwgMCk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRklGT0FsbG9jRmlsbEF0RW5k
UGFnZUxlc3MzMlRoZW4zMlRoZW5QYWdlTGVzczY0VGhlbjY0KQoreworICAgIHRlc3RGSUZPQWxs
b2MoRmlsbEF0RW5kLCBzdGF0aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgLSAzMiksIDMyLCBzdGF0
aWNfY2FzdDxpbnQ+KHBhZ2VTaXplKCkgLSA2NCksIDY0LCAwKTsKK30KKworVEVTVF9GKE1ldGFB
bGxvY2F0b3JUZXN0LCBGSUZPQWxsb2NFYWdlckZpbGwzMlR3aWNlKQoreworICAgIHRlc3RGSUZP
QWxsb2MoRWFnZXJGaWxsLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRl
c3QsIEZJRk9BbGxvY0VhZ2VyRmlsbDMyVGhyaWNlKQoreworICAgIHRlc3RGSUZPQWxsb2MoRWFn
ZXJGaWxsLCAzMiwgMzIsIDMyLCAwKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBG
SUZPQWxsb2NFYWdlckZpbGwzMkZvdXJUaW1lcykKK3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2Vy
RmlsbCwgMzIsIDMyLCAzMiwgMzIsIDApOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3Qs
IEZJRk9BbGxvY0VhZ2VyRmlsbFBhZ2VMZXNzMzJUaGVuMzJUaGVuUGFnZUxlc3M2NFRoZW42NCkK
K3sKKyAgICB0ZXN0RklGT0FsbG9jKEVhZ2VyRmlsbCwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6
ZSgpIC0gMzIpLCAzMiwgc3RhdGljX2Nhc3Q8aW50PihwYWdlU2l6ZSgpIC0gNjQpLCA2NCwgMCk7
Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXAzMikKK3sKKyAgICB0ZXN0
RmlsbEhlYXAoMzIsIGRlZmF1bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkgLyAzMik7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgRmlsbEhlYXBQYWdlKQoreworICAgIHRlc3RGaWxs
SGVhcChwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXApOworfQorCitURVNUX0YoTWV0YUFs
bG9jYXRvclRlc3QsIEZpbGxIZWFwVHdvUGFnZXMpCit7CisgICAgdGVzdEZpbGxIZWFwKHBhZ2VT
aXplKCkgKiAyLCBkZWZhdWx0UGFnZXNJbkhlYXAgLyAyKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBSaWdodEFsbG9jYXRpb24zMlRoZW5QYWdlVGhlbjMyVGhlblBhZ2UpCit7Cisg
ICAgdGVzdFJpZ2h0QWxsb2NhdGlvbigzMiwgcGFnZVNpemUoKSwgMzIsIHBhZ2VTaXplKCkpOwor
fQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFJpZ2h0QWxsb2NhdGlvblF1YXJ0ZXJQYWdl
VGhlblBhZ2VUaGVuUXVhcnRlclBhZ2VUaGVuUGFnZSkKK3sKKyAgICB0ZXN0UmlnaHRBbGxvY2F0
aW9uKHBhZ2VTaXplKCkgLyA0LCBwYWdlU2l6ZSgpLCBwYWdlU2l6ZSgpIC8gNCwgcGFnZVNpemUo
KSk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1czY0VGhyaWNl
KQoreworICAgIHRlc3RCZXN0Rml0KDY0LCA2NCwgMywgUnVuU2FuaXR5Q2hlY2spOworfQorCitU
RVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ2NFBsdXM2NFRlblRpbWVzKQoreworICAg
IHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAsIERvbnRSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1Rf
RihNZXRhQWxsb2NhdG9yVGVzdCwgQmVzdEZpdDY0UGx1czY0SHVuZHJlZFRpbWVzKQoreworICAg
IHRlc3RCZXN0Rml0KDY0LCA2NCwgMTAwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNU
X0YoTWV0YUFsbG9jYXRvclRlc3QsIEJlc3RGaXQ5NlBsdXM2NFRocmljZSkKK3sKKyAgICB0ZXN0
QmVzdEZpdCg5NiwgNjQsIDMsIFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxv
Y2F0b3JUZXN0LCBCZXN0Rml0OTZQbHVzNjRUZW5UaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5
NiwgNjQsIDEwLCBEb250UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRv
clRlc3QsIEJlc3RGaXQ5NlBsdXM2NEh1bmRyZWRUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5
NiwgNjQsIDEwMCwgRG9udFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0
b3JUZXN0LCBCZXN0Rml0OTZQbHVzOTZUaHJpY2UpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2
LCAzLCBSdW5TYW5pdHlDaGVjayk7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgQmVz
dEZpdDk2UGx1czk2VGVuVGltZXMpCit7CisgICAgdGVzdEJlc3RGaXQoOTYsIDk2LCAxMCwgRG9u
dFJ1blNhbml0eUNoZWNrKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBCZXN0Rml0
OTZQbHVzOTZFaWdodHlUaW1lcykKK3sKKyAgICB0ZXN0QmVzdEZpdCg5NiwgOTYsIDgwLCBEb250
UnVuU2FuaXR5Q2hlY2spOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmluazY0
VG8zMikKK3sKKyAgICB0ZXN0U2hyaW5rKDY0LCAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2Nh
dG9yVGVzdCwgU2hyaW5rUGFnZVRvMzIpCit7CisgICAgdGVzdFNocmluayhwYWdlU2l6ZSgpLCAz
Mik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rUGFnZVRvUGFnZUxlc3Mz
MikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VTaXplKCksIHBhZ2VTaXplKCkgLSAzMik7Cit9CisK
K1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdvUGFnZXNUbzMyKQoreworICAgIHRl
c3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIDMyKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JU
ZXN0LCBTaHJpbmtUd29QYWdlc1RvUGFnZVBsdXMzMikKK3sKKyAgICB0ZXN0U2hyaW5rKHBhZ2VT
aXplKCkgKiAyLCBwYWdlU2l6ZSgpICsgMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRl
c3QsIFNocmlua1R3b1BhZ2VzVG9QYWdlKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAq
IDIsIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIFNocmlua1R3
b1BhZ2VzVG9QYWdlTGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIsIHBh
Z2VTaXplKCkgLSAzMik7Cit9CisKK1RFU1RfRihNZXRhQWxsb2NhdG9yVGVzdCwgU2hyaW5rVHdv
UGFnZXNUb1R3b1BhZ2VzTGVzczMyKQoreworICAgIHRlc3RTaHJpbmsocGFnZVNpemUoKSAqIDIs
IHBhZ2VTaXplKCkgKiAyIC0gMzIpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIERl
bWFuZEFsbG9jQ29hbGVzY2VQYWdlVGhlbkRvdWJsZUhlYXApCit7CisgICAgdGVzdERlbWFuZEFs
bG9jQ29hbGVzY2UocGFnZVNpemUoKSwgZGVmYXVsdFBhZ2VzSW5IZWFwLCBkZWZhdWx0UGFnZXNJ
bkhlYXAgKiBwYWdlU2l6ZSgpKTsKK30KKworVEVTVF9GKE1ldGFBbGxvY2F0b3JUZXN0LCBEZW1h
bmRBbGxvY0NvYWxlc2NlUGFnZVRoZW5UcmlwbGVIZWFwKQoreworICAgIHRlc3REZW1hbmRBbGxv
Y0NvYWxlc2NlKHBhZ2VTaXplKCksIGRlZmF1bHRQYWdlc0luSGVhcCAqIDIsIGRlZmF1bHRQYWdl
c0luSGVhcCAqIHBhZ2VTaXplKCkpOworfQorCitURVNUX0YoTWV0YUFsbG9jYXRvclRlc3QsIERl
bWFuZEFsbG9jRG9udENvYWxlc2NlUGFnZVRoZW5Eb3VibGVIZWFwKQoreworICAgIHRlc3REZW1h
bmRBbGxvY0RvbnRDb2FsZXNjZShwYWdlU2l6ZSgpLCBkZWZhdWx0UGFnZXNJbkhlYXAsIGRlZmF1
bHRQYWdlc0luSGVhcCAqIHBhZ2VTaXplKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9SZWRCbGFja1RyZWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1JlZEJsYWNr
VHJlZS5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9S
ZWRCbGFja1RyZWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL1JlZEJsYWNrVHJlZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL1ZlY3Rvci5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdl
YktpdEFQSSB7CisKK2NsYXNzIFJlZEJsYWNrVHJlZVRlc3Q6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0
IHsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBtX2NvdW50ZXI7CisgICAgCisgICAgdmlydHVhbCB2
b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIG1fY291bnRlciA9IDA7CisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgIH0KKyAgICAKKyAgICBzdHJ1
Y3QgUGFpciB7CisgICAgICAgIGNoYXIga2V5OworICAgICAgICB1bnNpZ25lZCB2YWx1ZTsKKyAg
ICAgICAgCisgICAgICAgIFBhaXIoKSB7IH0KKyAgICAgICAgCisgICAgICAgIFBhaXIoY2hhciBr
ZXksIHVuc2lnbmVkIHZhbHVlKQorICAgICAgICAgICAgOiBrZXkoa2V5KQorICAgICAgICAgICAg
LCB2YWx1ZSh2YWx1ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgUGFpciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBrZXkgPT0gb3RoZXIua2V5OworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBib29sIG9wZXJhdG9yPChjb25zdCBQYWlyJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGtleSA8IG90aGVyLmtleTsKKyAgICAgICAgfQorICAgIH07Cisg
ICAgCisgICAgdHlwZWRlZiBWZWN0b3I8UGFpciwgMTY+IFBhaXJWZWN0b3I7CisgICAgCisgICAg
UGFpclZlY3RvciBmaW5kRXhhY3QoUGFpclZlY3RvciYgYXNWZWN0b3IsIGNoYXIga2V5KQorICAg
IHsKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7CisgICAgICAgIAorICAgICAgICBmb3IgKHNp
emVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7CisgICAg
ICAgICAgICBpZiAoYXNWZWN0b3IuYXQoaW5kZXgpLmtleSA9PSBrZXkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChhc1ZlY3Rvci5hdChpbmRleCkpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBzdGQ6OnNvcnQocmVzdWx0LmJlZ2luKCksIHJlc3VsdC5lbmQoKSk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2b2lkIHJlbW92
ZShQYWlyVmVjdG9yJiBhc1ZlY3Rvciwgc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgYXNW
ZWN0b3IuYXQoaW5kZXgpID0gYXNWZWN0b3IubGFzdCgpOworICAgICAgICBhc1ZlY3Rvci5yZW1v
dmVMYXN0KCk7CisgICAgfQorICAgIAorICAgIFBhaXJWZWN0b3IgZmluZExlYXN0R3JlYXRlclRo
YW5PckVxdWFsKFBhaXJWZWN0b3ImIGFzVmVjdG9yLCBjaGFyIGtleSkKKyAgICB7CisgICAgICAg
IGNoYXIgYmVzdEtleSA9IDA7IC8vIGFzc2lnbm1lbnQgdG8gbWFrZSBnY2MgaGFwcHkKKyAgICAg
ICAgYm9vbCBmb3VuZEtleSA9IGZhbHNlOworICAgICAgICAKKyAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggPSAwOyBpbmRleCA8IGFzVmVjdG9yLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICAg
ICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPj0ga2V5KSB7CisgICAgICAgICAgICAgICAg
aWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPCBiZXN0S2V5IHx8ICFmb3VuZEtleSkgeworICAg
ICAgICAgICAgICAgICAgICBmb3VuZEtleSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJl
c3RLZXkgPSBhc1ZlY3Rvci5hdChpbmRleCkua2V5OworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgUGFpclZlY3RvciByZXN1bHQ7
CisgICAgICAgIAorICAgICAgICBpZiAoIWZvdW5kS2V5KQorICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmaW5kRXhhY3QoYXNWZWN0b3IsIGJlc3RL
ZXkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydEZvdW5kQW5kUmVtb3ZlKFBhaXJWZWN0
b3ImIGFzVmVjdG9yLCBjaGFyIGtleSwgdW5zaWduZWQgdmFsdWUpCisgICAgeworICAgICAgICAg
ICAgYm9vbCBmb3VuZCA9IGZhbHNlOworICAgICAgICAgICAgc2l6ZV90IGZvdW5kSW5kZXggPSAw
OyAvLyBtYWtlIGNvbXBpbGVycyBoYXBweQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYXNWZWN0b3Iuc2l6ZSgpOyArK2luZGV4KSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGFzVmVjdG9yLmF0KGluZGV4KS5rZXkgPT0ga2V5CisgICAgICAg
ICAgICAgICAgICAgICYmIGFzVmVjdG9yLmF0KGluZGV4KS52YWx1ZSA9PSB2YWx1ZSkgeworICAg
ICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRSghZm91bmQpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAg
ICBmb3VuZEluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfVFJVRShmb3VuZCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJlbW92ZShhc1ZlY3RvciwgZm91bmRJbmRleCk7CisgICAgfQorICAg
IAorICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IHBhc3NlcyBhIGNvcHkgb2YgdGhlIHZlY3Rvci4K
KyAgICB2b2lkIGFzc2VydEVxdWFsKFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4mIGFzVHJl
ZSwgUGFpclZlY3RvciBhc1ZlY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoUmVkQmxhY2tUcmVl
PGNoYXIsIHVuc2lnbmVkPjo6Tm9kZSogY3VycmVudCA9IGFzVHJlZS5maXJzdCgpOyBjdXJyZW50
OyBjdXJyZW50ID0gY3VycmVudC0+c3VjY2Vzc29yKCkpCisgICAgICAgICAgICBhc3NlcnRGb3Vu
ZEFuZFJlbW92ZShhc1ZlY3RvciwgY3VycmVudC0+bV9rZXksIGN1cnJlbnQtPm1fdmFsdWUpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoUmVkQmxhY2tUcmVl
PGNoYXIsIHVuc2lnbmVkPiYgYXNUcmVlLCBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpO
b2RlKiBub2RlLCBQYWlyVmVjdG9yIGZvdW5kVmFsdWVzLCBjaGFyIGtleSkKKyAgICB7CisgICAg
ICAgIGlmIChub2RlKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+bV9rZXksIGtleSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46
Ok5vZGUqIHByZXZOb2RlID0gbm9kZTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg
ICBub2RlID0gcHJldk5vZGU7CisgICAgICAgICAgICAgICAgcHJldk5vZGUgPSBwcmV2Tm9kZS0+
cHJlZGVjZXNzb3IoKTsKKyAgICAgICAgICAgIH0gd2hpbGUgKHByZXZOb2RlICYmIHByZXZOb2Rl
LT5tX2tleSA9PSBrZXkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBFWFBFQ1RfRVEobm9k
ZS0+bV9rZXksIGtleSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSghcHJldk5vZGUgfHwgcHJl
dk5vZGUtPm1fa2V5IDwga2V5KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZG8geworICAg
ICAgICAgICAgICAgIGFzc2VydEZvdW5kQW5kUmVtb3ZlKGZvdW5kVmFsdWVzLCBub2RlLT5tX2tl
eSwgbm9kZS0+bV92YWx1ZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbm9k
ZSA9IG5vZGUtPnN1Y2Nlc3NvcigpOworICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKCFub2Rl
IHx8IG5vZGUtPm1fa2V5ID49IGtleSk7CisgICAgICAgICAgICB9IHdoaWxlIChub2RlICYmIG5v
ZGUtPm1fa2V5ID09IGtleSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9U
UlVFKGZvdW5kVmFsdWVzLmlzRW1wdHkoKSk7CisgICAgfQorICAgIAorICAgIC8vIFRoZSBjb250
cm9sIHN0cmluZyBpcyBhIG51bGwtdGVybWluYXRlZCBsaXN0IG9mIGNvbW1hbmRzLiBFYWNoCisg
ICAgLy8gY29tbWFuZCBpcyB0d28gY2hhcmFjdGVycywgd2l0aCB0aGUgZmlyc3QgaWRlbnRpZnlp
bmcgdGhlIG9wZXJhdGlvbgorICAgIC8vIGFuZCB0aGUgc2Vjb25kIGdpdmluZyBhIGtleS4gVGhl
IGNvbW1hbmRzIGFyZToKKyAgICAvLyAgK3ggIEFkZCB4CisgICAgLy8gICp4ICBGaW5kIGFsbCBl
bGVtZW50cyBlcXVhbCB0byB4CisgICAgLy8gIEB4ICBGaW5kIGFsbCBlbGVtZW50cyB0aGF0IGhh
dmUgdGhlIHNtYWxsZXN0IGtleSB0aGF0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB4Cisg
ICAgLy8gICF4ICBSZW1vdmUgYWxsIGVsZW1lbnRzIGVxdWFsIHRvIHgKKyAgICB2b2lkIHRlc3RE
cml2ZXIoY29uc3QgY2hhciogY29udHJvbFN0cmluZykKKyAgICB7CisgICAgICAgIFBhaXJWZWN0
b3IgYXNWZWN0b3I7CisgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD4gYXNUcmVl
OworICAgICAgICAKKyAgICAgICAgZm9yIChjb25zdCBjaGFyKiBjdXJyZW50ID0gY29udHJvbFN0
cmluZzsgKmN1cnJlbnQ7IGN1cnJlbnQgKz0gMikgeworICAgICAgICAgICAgY2hhciBjb21tYW5k
ID0gY3VycmVudFswXTsKKyAgICAgICAgICAgIGNoYXIga2V5ID0gY3VycmVudFsxXTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIHZhbHVlID0gKyttX2NvdW50ZXI7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIEFTU0VSVChjb21tYW5kKTsKKyAgICAgICAgICAgIEFTU0VSVChrZXkpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2Ug
JysnOiB7CisgICAgICAgICAgICAgICAgUmVkQmxhY2tUcmVlPGNoYXIsIHVuc2lnbmVkPjo6Tm9k
ZSogbm9kZSA9IG5ldyBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKGtleSwgdmFs
dWUpOworICAgICAgICAgICAgICAgIGFzVHJlZS5pbnNlcnQobm9kZSk7CisgICAgICAgICAgICAg
ICAgYXNWZWN0b3IuYXBwZW5kKFBhaXIoa2V5LCB2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAn
Kic6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFja1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2Rl
KiBub2RlID0gYXNUcmVlLmZpbmRFeGFjdChrZXkpOworICAgICAgICAgICAgICAgIGlmIChub2Rl
KQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+bV9rZXksIGtleSk7CisgICAg
ICAgICAgICAgICAgYXNzZXJ0U2FtZVZhbHVlc0ZvcktleShhc1RyZWUsIG5vZGUsIGZpbmRFeGFj
dChhc1ZlY3Rvciwga2V5KSwga2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgY2FzZSAnQCc6IHsKKyAgICAgICAgICAgICAgICBSZWRCbGFj
a1RyZWU8Y2hhciwgdW5zaWduZWQ+OjpOb2RlKiBub2RlID0gYXNUcmVlLmZpbmRMZWFzdEdyZWF0
ZXJUaGFuT3JFcXVhbChrZXkpOworICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKG5vZGUtPm1fa2V5ID49IGtleSk7CisgICAgICAgICAg
ICAgICAgICAgIGFzc2VydFNhbWVWYWx1ZXNGb3JLZXkoYXNUcmVlLCBub2RlLCBmaW5kTGVhc3RH
cmVhdGVyVGhhbk9yRXF1YWwoYXNWZWN0b3IsIGtleSksIG5vZGUtPm1fa2V5KTsKKyAgICAgICAg
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoZmluZExlYXN0
R3JlYXRlclRoYW5PckVxdWFsKGFzVmVjdG9yLCBrZXkpLmlzRW1wdHkoKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICBjYXNlICchJzogeworICAgICAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAg
ICAgICAgICAgIFJlZEJsYWNrVHJlZTxjaGFyLCB1bnNpZ25lZD46Ok5vZGUqIG5vZGUgPSBhc1Ry
ZWUucmVtb3ZlKGtleSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChub2RlKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEobm9kZS0+bV9rZXksIGtleSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBhc3NlcnRGb3VuZEFuZFJlbW92ZShhc1ZlY3Rvciwgbm9kZS0+bV9rZXks
IG5vZGUtPm1fdmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoZmluZEV4YWN0KGFzVmVjdG9yLCBrZXkpLmlzRW1w
dHkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEVYUEVDVF9FUShhc1RyZWUuc2l6
ZSgpLCBhc1ZlY3Rvci5zaXplKCkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWwoYXNUcmVlLCBh
c1ZlY3Rvcik7CisgICAgICAgIH0KKyAgICB9Cit9OworCitURVNUX0YoUmVkQmxhY2tUcmVlVGVz
dCwgRW1wdHkpCit7CisgICAgdGVzdERyaXZlcigiIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1Ry
ZWVUZXN0LCBFbXB0eUdldEZpbmRSZW1vdmUpCit7CisgICAgdGVzdERyaXZlcigiKnhAeSF6Iik7
Cit9CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBTaW5nbGVBZGQpCit7CisgICAgdGVzdERy
aXZlcigiK2EiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFNpbmdsZUFkZEdldEZp
bmRSZW1vdmVOb3RGb3VuZCkKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSp4QHkheiIpOworfQorCitU
RVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgU2luZ2xlQWRkR2V0RmluZFJlbW92ZSkKK3sKKyAgICB0
ZXN0RHJpdmVyKCIrYSphQGEhYSIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgVHdv
QWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiIik7Cit9CisKK1RFU1RfRihSZWRCbGFja1Ry
ZWVUZXN0LCBUaHJlZUFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjIik7Cit9CisKK1RF
U1RfRihSZWRCbGFja1RyZWVUZXN0LCBGb3VyQWRkcykKK3sKKyAgICB0ZXN0RHJpdmVyKCIrYSti
K2MrZCIpOworfQorCitURVNUX0YoUmVkQmxhY2tUcmVlVGVzdCwgTG90c09mUmVwZWF0QWRkcykK
K3sKKyAgICB0ZXN0RHJpdmVyKCIrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2Ir
YytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitj
K2QiKTsKK30KKworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIExvdHNPZlJlcGVhdEFuZFVuaXF1
ZUFkZHMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2Mr
ZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3greSt6Iik7Cit9
CisKK1RFU1RfRihSZWRCbGFja1RyZWVUZXN0LCBMb3RzT2ZSZXBlYXRBbmRVbmlxdWVBZGRzQW5k
R2V0c0FuZFJlbW92ZXMpCit7CisgICAgdGVzdERyaXZlcigiK2ErYitjK2QrYStiK2MrZCthK2Ir
YytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitjK2QrYStiK2MrZCthK2IrYytkK2ErYitj
K2QrYStiK2MrZCthK2IrYytkK2UrZitnK2graStqK2srbCttK24rbytwK3ErcitzK3QrdSt2K3gr
eSt6KmEqYipjKmQqZSpmKmcqaCppKmoqaypsKm0qbipvKnAqcSpyKnMqdCp1KnYqdyp4KnkqeiFh
IWIhYyFkIWUhZiFnIWghaSFqIWshbCFtIW4hbyFwIXEhciFzIXQhdSF2IXcheCF5IXoiKTsKK30K
KworVEVTVF9GKFJlZEJsYWNrVHJlZVRlc3QsIFNpbXBsZUJlc3RGaXRTZWFyY2gpCit7CisgICAg
dGVzdERyaXZlcigiK2QrZCttK3dAZEBtQHdAYUBnQHEiKTsKK30KKworVEVTVF9GKFJlZEJsYWNr
VHJlZVRlc3QsIEJpZ2dlckJlc3RGaXRTZWFyY2gpCit7CisgICAgdGVzdERyaXZlcigiK2QrZCtk
K2QrZCtkK2QrZCtkK2QrZitmK2YrZitmK2YrZitoK2graStqK2srbCttK28rcCtxK3IrekBhQGJA
Y0BkQGVAZkBnQGhAaUBqQGtAbEBtQG5Ab0BwQHFAckBzQHRAdUB2QHdAeEB5QHoiKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>
<flag name="review"
          id="103366"
          type_id="1"
          status="+"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="103566"
          type_id="3"
          status="-"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>