<?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>74362</bug_id>
          
          <creation_ts>2011-12-12 15:44:24 -0800</creation_ts>
          <short_desc>DFG should know exactly why recompilation was triggered</short_desc>
          <delta_ts>2011-12-13 11:50:16 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>519608</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-12 15:44:24 -0800</bug_when>
    <thetext>Currently the DFG can update predictions on OSR failure, which, in the case of recompilation, greatly reduces the likelihood that the DFG will repeat a broken type speculation on recompilation.  But the same is not true of slow case profiles.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519609</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-12 15:44:51 -0800</bug_when>
    <thetext>&lt;rdar://problem/10568356&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519624</commentid>
    <comment_count>2</comment_count>
      <attachid>118894</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-12 15:57:05 -0800</bug_when>
    <thetext>Created attachment 118894
work in progress

Still working on it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519666</commentid>
    <comment_count>3</comment_count>
      <attachid>118905</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-12 16:36:57 -0800</bug_when>
    <thetext>Created attachment 118905
work in progress

Patched in the code that identifies the kind of an OSR exit.  Still need to patch it into the parser as well, so that it can use this new information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519685</commentid>
    <comment_count>4</comment_count>
      <attachid>118909</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-12 16:52:04 -0800</bug_when>
    <thetext>Created attachment 118909
work in progress

Patched it into the parser, as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519725</commentid>
    <comment_count>5</comment_count>
      <attachid>118920</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-12 17:22:18 -0800</bug_when>
    <thetext>Created attachment 118920
work in progress

I&apos;ve checked that this does what it claims to do on simple programs, but I still need to run a bunch more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519914</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-13 00:24:24 -0800</bug_when>
    <thetext>Looks like this is a minor win on some benchmarks, and never a major regression.


[pizlo@nitroflex bencher] ./bencher TipOfTree:/Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc SlowPathFreq:/Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc --remote oldmac,bigmac
Packaging VM builds for remote hosts...
Sending VM builds to oldmac...
Running on oldmac...
376/376                                                           
Generating benchmark report at TipOfTree_SlowPathFreq_SunSpiderV8Kraken_20111213_0019_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on oldmac.local (MacPro4,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r102562)
&quot;SlowPathFreq&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r102562)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. 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              SlowPathFreq                                  
SunSpider:
   3d-cube                                8.8537+-0.0418          8.8348+-0.0360       
   3d-morph                              10.0126+-0.0337    ?    10.0364+-0.0569       ?
   3d-raytrace                            9.2705+-0.0833    ?     9.3075+-0.0829       ?
   access-binary-trees                    1.9180+-0.0113          1.9117+-0.0096       
   access-fannkuch                        9.0954+-0.0176    ?     9.1007+-0.0099       ?
   access-nbody                           4.7385+-0.0082    ?     4.7480+-0.0106       ?
   access-nsieve                          3.7839+-0.0161          3.7817+-0.0047       
   bitops-3bit-bits-in-byte               1.5116+-0.0262          1.4914+-0.0073         might be 1.0136x faster
   bitops-bits-in-byte                    6.1183+-0.0333          6.1153+-0.0153       
   bitops-bitwise-and                     3.9754+-0.0045          3.9723+-0.0054       
   bitops-nsieve-bits                     6.8446+-0.0439    ?     6.8711+-0.0342       ?
   controlflow-recursive                  2.8318+-0.0134          2.8117+-0.0151       
   crypto-aes                             8.6727+-0.0778    ?     8.7265+-0.0741       ?
   crypto-md5                             2.9831+-0.0511          2.9571+-0.0347       
   crypto-sha1                            2.6242+-0.0427    ?     2.6282+-0.0349       ?
   date-format-tofte                     12.8675+-0.0976    ?    13.0371+-0.2123       ? might be 1.0132x slower
   date-format-xparb                     12.0446+-0.0974         12.0009+-0.1378       
   math-cordic                            8.6462+-0.0370          8.6418+-0.0214       
   math-partial-sums                     12.5511+-0.0403    ?    12.5806+-0.0218       ?
   math-spectral-norm                     3.1285+-0.0067    ?     3.1378+-0.0046       ?
   regexp-dna                            10.7195+-0.0460         10.6978+-0.0606       
   string-base64                          5.1285+-0.0427    ?     5.1960+-0.0392       ? might be 1.0132x slower
   string-fasta                           8.7138+-0.0261          8.7121+-0.0231       
   string-tagcloud                       15.0303+-0.0631    ^    14.7932+-0.0552       ^ definitely 1.0160x faster
   string-unpack-code                    26.0091+-0.1118    ^    25.5598+-0.2073       ^ definitely 1.0176x faster
   string-validate-input                  6.7967+-0.0649          6.7567+-0.0726       

   &lt;arithmetic&gt; *                         7.8796+-0.0276          7.8619+-0.0286         might be 1.0023x faster
   &lt;geometric&gt;                            6.3770+-0.0228          6.3696+-0.0224         might be 1.0012x faster
   &lt;harmonic&gt;                             5.0324+-0.0197          5.0210+-0.0185         might be 1.0023x faster

                                            TipOfTree              SlowPathFreq                                  
V8:
   crypto                                91.9402+-0.2729    ?    92.4680+-0.3077       ?
   deltablue                            210.3022+-2.0088    ^   202.4297+-0.9445       ^ definitely 1.0389x faster
   earley-boyer                         119.7940+-1.0201    ?   119.9616+-1.7648       ?
   raytrace                              63.2143+-0.2426    ?    63.6921+-0.4632       ?
   regexp                               146.0133+-0.2159    !   147.0763+-0.3609       ! definitely 1.0073x slower
   richards                             168.4466+-0.5277    ?   169.0543+-0.9127       ?
   splay                                108.6495+-0.8520        107.1163+-1.0375         might be 1.0143x faster

   &lt;arithmetic&gt;                         129.7657+-0.3659    ^   128.8283+-0.4251       ^ definitely 1.0073x faster
   &lt;geometric&gt; *                        121.5136+-0.2987        121.0456+-0.3954         might be 1.0039x faster
   &lt;harmonic&gt;                           113.2842+-0.2703        113.1795+-0.3618         might be 1.0009x faster

                                            TipOfTree              SlowPathFreq                                  
Kraken:
   ai-astar                             895.9352+-0.8130    ?   896.4024+-0.4021       ?
   audio-beat-detection                 248.6911+-0.5466        248.5920+-0.6787       
   audio-dft                            333.3400+-2.7790        331.6210+-3.0525       
   audio-fft                            161.0966+-0.4296        161.0934+-0.7409       
   audio-oscillator                     342.2135+-5.6457    ?   353.6643+-7.7995       ? might be 1.0335x slower
   imaging-darkroom                     413.3798+-8.7537    ^   392.9760+-7.6859       ^ definitely 1.0519x faster
   imaging-desaturate                   287.2541+-0.2385    ?   287.2603+-0.1409       ?
   imaging-gaussian-blur                759.8175+-1.6110        758.5884+-0.3347       
   json-parse-financial                  84.5241+-0.4509    !    85.9248+-0.2761       ! definitely 1.0166x slower
   json-stringify-tinderbox              99.8472+-0.2651    ?   100.0103+-0.2507       ?
   stanford-crypto-aes                  142.0881+-0.9562        141.3378+-0.5837       
   stanford-crypto-ccm                  135.5311+-0.5801    ?   135.7462+-0.6035       ?
   stanford-crypto-pbkdf2               278.7077+-1.7176    ?   279.0637+-2.1180       ?
   stanford-crypto-sha256-iterative     116.7660+-0.4616        116.2726+-0.0987       

   &lt;arithmetic&gt; *                       307.0851+-0.7445        306.3252+-0.8887         might be 1.0025x faster
   &lt;geometric&gt;                          238.7213+-0.5459        238.4980+-0.6135         might be 1.0009x faster
   &lt;harmonic&gt;                           192.0314+-0.3293    ?   192.2999+-0.3633       ? might be 1.0014x slower

                                            TipOfTree              SlowPathFreq                                  
All benchmarks:
   &lt;arithmetic&gt;                         115.1579+-0.2095        114.7821+-0.3217         might be 1.0033x faster
   &lt;geometric&gt;                           29.0997+-0.0711         29.0564+-0.0847         might be 1.0015x faster
   &lt;harmonic&gt;                             8.8659+-0.0342          8.8463+-0.0321         might be 1.0022x faster

                                            TipOfTree              SlowPathFreq                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       66.4958+-0.1303         66.3057+-0.1910         might be 1.0029x faster

Sending VM builds to bigmac...
Running on bigmac...
376/376                                                           
Generating benchmark report at TipOfTree_SlowPathFreq_SunSpiderV8Kraken_20111213_0023_benchReport.txt

Benchmark report for SunSpider, V8, and Kraken on bigmac.local (MacPro5,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/quinary/OpenSource/WebKitBuild/Release/jsc (r102562)
&quot;SlowPathFreq&quot; at /Volumes/Data/pizlo/tertiary/OpenSource/WebKitBuild/Release/jsc (r102562)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. 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              SlowPathFreq                                  
SunSpider:
   3d-cube                                7.3496+-0.0191          7.3342+-0.0248       
   3d-morph                               8.3914+-0.1279    ?     8.4922+-0.1617       ? might be 1.0120x slower
   3d-raytrace                            7.7298+-0.0734          7.7275+-0.0661       
   access-binary-trees                    1.5971+-0.0062    ?     1.6089+-0.0161       ?
   access-fannkuch                        7.5285+-0.0065    ?     7.5354+-0.0162       ?
   access-nbody                           3.9722+-0.0376          3.9436+-0.0082       
   access-nsieve                          3.2177+-0.0644          3.1874+-0.0412       
   bitops-3bit-bits-in-byte               1.2329+-0.0050    ?     1.2454+-0.0142       ? might be 1.0101x slower
   bitops-bits-in-byte                    5.0886+-0.0433          5.0775+-0.0170       
   bitops-bitwise-and                     3.2872+-0.0044          3.2872+-0.0057       
   bitops-nsieve-bits                     5.6650+-0.0341    ?     5.6770+-0.0306       ?
   controlflow-recursive                  2.3524+-0.0171          2.3325+-0.0282       
   crypto-aes                             7.1755+-0.0338    ?     7.2163+-0.0356       ?
   crypto-md5                             2.4668+-0.0273    ?     2.4882+-0.0270       ?
   crypto-sha1                            2.1764+-0.0247    ?     2.1816+-0.0341       ?
   date-format-tofte                     10.5628+-0.0405    ?    10.7561+-0.1757       ? might be 1.0183x slower
   date-format-xparb                      9.8099+-0.0632    !    10.1406+-0.1309       ! definitely 1.0337x slower
   math-cordic                            7.2481+-0.0737          7.1668+-0.0421         might be 1.0113x faster
   math-partial-sums                     10.4499+-0.0604         10.4214+-0.0482       
   math-spectral-norm                     2.6001+-0.0034    ?     2.6060+-0.0026       ?
   regexp-dna                             8.8181+-0.0134    ?     8.8221+-0.0136       ?
   string-base64                          4.2187+-0.0183    ?     4.2351+-0.0269       ?
   string-fasta                           7.1984+-0.0136          7.1975+-0.0083       
   string-tagcloud                       12.4292+-0.0447    ^    12.2340+-0.0319       ^ definitely 1.0159x faster
   string-unpack-code                    20.9372+-0.1241         20.7755+-0.2039       
   string-validate-input                  5.5901+-0.0305    ?     5.6698+-0.0779       ? might be 1.0143x slower

   &lt;arithmetic&gt; *                         6.5036+-0.0209    ?     6.5138+-0.0189       ? might be 1.0016x slower
   &lt;geometric&gt;                            5.2804+-0.0171    ?     5.2912+-0.0176       ? might be 1.0020x slower
   &lt;harmonic&gt;                             4.1695+-0.0140    ?     4.1804+-0.0172       ? might be 1.0026x slower

                                            TipOfTree              SlowPathFreq                                  
V8:
   crypto                                75.9742+-0.1769    ?    76.3517+-0.2398       ?
   deltablue                            172.8290+-0.4310    ^   168.2014+-0.7885       ^ definitely 1.0275x faster
   earley-boyer                          99.1258+-0.9898    ?    99.3990+-1.3403       ?
   raytrace                              52.6548+-0.3492         52.6276+-0.4544       
   regexp                               122.8457+-0.3108    ?   123.3843+-0.7095       ?
   richards                             139.8939+-0.5605    ?   140.1635+-0.4490       ?
   splay                                 92.0049+-1.4515    ?    92.0586+-1.7017       ?

   &lt;arithmetic&gt;                         107.9040+-0.3600        107.4552+-0.3193         might be 1.0042x faster
   &lt;geometric&gt; *                        101.1485+-0.3840        100.9556+-0.3413         might be 1.0019x faster
   &lt;harmonic&gt;                            94.3474+-0.3875         94.3129+-0.3536         might be 1.0004x faster

                                            TipOfTree              SlowPathFreq                                  
Kraken:
   ai-astar                             826.8116+-0.6011        817.1519+-11.0256        might be 1.0118x faster
   audio-beat-detection                 203.4016+-0.7946        203.0116+-0.5714       
   audio-dft                            275.2446+-2.4037    ?   276.8894+-1.9989       ?
   audio-fft                            131.7718+-0.2776        131.7168+-0.2538       
   audio-oscillator                     285.5972+-4.8680        284.5543+-4.3878       
   imaging-darkroom                     345.3616+-7.5269    ^   323.4195+-6.6397       ^ definitely 1.0678x faster
   imaging-desaturate                   237.5173+-0.0433    ?   237.6266+-0.1685       ?
   imaging-gaussian-blur                626.0200+-0.1894    ?   626.1248+-0.2975       ?
   json-parse-financial                  69.9829+-0.2149    !    70.9664+-0.4633       ! definitely 1.0141x slower
   json-stringify-tinderbox              82.6340+-0.3166         82.4322+-0.1534       
   stanford-crypto-aes                  117.9230+-0.8331    ?   119.7628+-1.7808       ? might be 1.0156x slower
   stanford-crypto-ccm                  114.0365+-0.4470        113.6476+-0.5184       
   stanford-crypto-pbkdf2               228.7191+-0.6243    ?   230.2047+-1.7885       ?
   stanford-crypto-sha256-iterative      96.2021+-0.7075         96.0268+-0.4065       

   &lt;arithmetic&gt; *                       260.0874+-0.6421    ^   258.1097+-1.1704       ^ definitely 1.0077x faster
   &lt;geometric&gt;                          199.0161+-0.4565        198.3234+-0.6149         might be 1.0035x faster
   &lt;harmonic&gt;                           159.1484+-0.2925    ?   159.2616+-0.3870       ? might be 1.0007x slower

                                            TipOfTree              SlowPathFreq                                  
All benchmarks:
   &lt;arithmetic&gt;                          97.1414+-0.2101    ^    96.4911+-0.3598       ^ definitely 1.0067x faster
   &lt;geometric&gt;                           24.1635+-0.0588         24.1587+-0.0625         might be 1.0002x faster
   &lt;harmonic&gt;                             7.3461+-0.0242    ?     7.3649+-0.0297       ? might be 1.0026x slower

                                            TipOfTree              SlowPathFreq                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                       55.5148+-0.1256         55.3673+-0.1331         might be 1.0027x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519925</commentid>
    <comment_count>7</comment_count>
      <attachid>118969</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-13 00:38:37 -0800</bug_when>
    <thetext>Created attachment 118969
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519927</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 00:40:38 -0800</bug_when>
    <thetext>Attachment 118969 did not pass style-queue:

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

Source/JavaScriptCore/dfg/DFGOSRExit.h:85:  The parameter name &quot;kind&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/bytecode/DFGExitProfile.h:162:  The parameter name &quot;site&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 2 in 18 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>519931</commentid>
    <comment_count>9</comment_count>
      <attachid>118970</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-13 00:54:36 -0800</bug_when>
    <thetext>Created attachment 118970
the patch

Fix style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519942</commentid>
    <comment_count>10</comment_count>
      <attachid>118970</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-13 01:07:21 -0800</bug_when>
    <thetext>Comment on attachment 118970
the patch

Attachment 118970 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10850281</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519946</commentid>
    <comment_count>11</comment_count>
      <attachid>118973</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-13 01:17:22 -0800</bug_when>
    <thetext>Created attachment 118973
the patch

Ooops, forgot to write the same code twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519950</commentid>
    <comment_count>12</comment_count>
      <attachid>118973</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-12-13 01:28:27 -0800</bug_when>
    <thetext>Comment on attachment 118973
the patch

Attachment 118973 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/10847292</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>519954</commentid>
    <comment_count>13</comment_count>
      <attachid>118976</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-12-13 01:33:36 -0800</bug_when>
    <thetext>Created attachment 118976
the patch

Forgot to add some build stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520255</commentid>
    <comment_count>14</comment_count>
      <attachid>118976</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 11:50:06 -0800</bug_when>
    <thetext>Comment on attachment 118976
the patch

Clearing flags on attachment: 118976

Committed r102694: &lt;http://trac.webkit.org/changeset/102694&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>520256</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-12-13 11:50:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118894</attachid>
            <date>2011-12-12 15:57:05 -0800</date>
            <delta_ts>2011-12-12 16:36:57 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>countdfgfail_patch_1.diff</filename>
            <type>text/plain</type>
            <size>22674</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBA
CisyMDExLTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBrbm93IGV4YWN0bHkgd2h5IHJlY29tcGlsYXRpb24gd2FzIHRyaWdnZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdP
UksgSU4gUFJPR1JFU1MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmFkZEZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAqIGJ5dGVjb2Rl
L0RGR0V4aXRQcm9maWxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2Zp
bGU6OkV4aXRQcm9maWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6fkV4aXRQ
cm9maWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6YWRkKToKKyAgICAgICAg
KEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgor
ICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjp+UXVlcnlhYmxlRXhpdFBy
b2ZpbGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUpOgorICAg
ICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yISk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkRG
Rzo6RnJlcXVlbnRFeGl0U2l0ZTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRF
eGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhp
dFNpdGU6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGVIYXNoOjpo
YXNoKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlSGFzaDo6ZXF1YWwpOgor
ICAgICAgICAoSlNDOjpERkc6OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFz
c2VtYmx5SGVscGVyczo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpiYXNlbGluZUNvZGVC
bG9ja0Zvcik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnNp
ZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4
aXQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlzdGlj
cy5oOgorCiAyMDExLTEyLTEyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgog
CiAgICAgICAgIEVsaW1pbmF0ZSBEdXBsaWNhdGUgd29yZCBhdCBhIHRpbWUgZXF1YWwgY29kZSBp
biBTdHJpbmdJbXBsLmNwcCBhbmQgU3RyaW5nSGFzaC5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTcyLDYgKzcyLDggQEAKIAkJMEY5NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjJBMTNGODUzQkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIy
IC8qIE1ldGFBbGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9y
SGFuZGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJE
OUIyIC8qIFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJD
MEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OworCQkwRkJD
MEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAv
KiBERkdFeGl0UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5
OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JF
eGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMw
OTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAv
KiBERkdBc3NlbWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBl
cnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
ODUxLDYgKzg1Myw4IEBACiAJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyRTEzRkM2NkFFMDAw
MkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBNZXRhQWxsb2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJE
RCAvKiBERkdFeGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBE
RkdFeGl0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0
NDc5OThGMDA0ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBDb2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5
NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdB
c3NlbWJseUhlbHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
REZHQXNzZW1ibHlIZWxwZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ2MCw2ICsyNDY0LDggQEAKIAkJOTY5
QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZH
RXhpdFByb2ZpbGUuY3BwICovLAorCQkJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdF
eGl0UHJvZmlsZS5oICovLAogCQkJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9y
bWF0LmggKi8sCiAJCQkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3Zlcnku
aCAqLywKIAkJCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmgg
Ki8sCkBAIC0yOTgxLDYgKzI5ODcsNyBAQAogCQkJCUE3M0JFMTdFMTQ4NDIwODQwMDkxMjA0QiAv
KiBUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQkUxODAxNDg0MjBBODAw
OTEyMDRCIC8qIEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
MEJEODAxMTQ4RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJ
CX07CkBAIC0zNTE4LDYgKzM1MjUsNyBAQAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAv
KiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0JFMTY4MTQ4NDIwNTIw
MDkxMjA0QiAvKiBBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNCRTE2QTE0
ODQyMDUyMDA5MTIwNEIgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR0Nv
ZGVCbG9ja3MuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR09T
UkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2Fj
aGUuaCIKQEAgLTc5Niw2ICs3OTcsMTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBB
U1NFUlQoaGFzQ29kZU9yaWdpbnMoKSk7CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5U2VhcmNo
PENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zm
c2V0Rm9yQ29kZU9yaWdpbj4oY29kZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3JpZ2lucygpLnNp
emUoKSwgZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLT5jb2Rl
T3JpZ2luOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZEZyZXF1ZW50RXhp
dFNpdGUoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5hZGQoc2l0ZSk7CisgICAgICAgIH0KICNlbmRpZgog
CiAgICAgICAgIC8vIENvbnN0YW50IFBvb2wKQEAgLTEyMTIsNiArMTIxOSwxMCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfTsKICAgICAgICAgCiAgICAgICAgIE93blB0cjxERkdEYXRhPiBt
X2RmZ0RhdGE7CisgICAgICAgIAorICAgICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1E
RkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jaworICAg
ICAgICAvLyBmb3IgREZHIGNvZGUgYmxvY2tzLgorICAgICAgICBERkc6OkV4aXRQcm9maWxlIG1f
ZXhpdFByb2ZpbGU7CiAjZW5kaWYKICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAg
IFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0
UHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworRXhpdFByb2ZpbGU6OkV4
aXRQcm9maWxlKCkgeyB9CitFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKCkgeyB9CisKK3ZvaWQg
RXhpdFByb2ZpbGU6OmFkZChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQoreworICAgIC8v
IElmIHdlJ3ZlIG5ldmVyIHNlZW4gYW55IGZyZXF1ZW50IGV4aXRzIHRoZW4gY3JlYXRlIHRoZSBs
aXN0IGFuZCBwdXQgdGhpcyBzaXRlCisgICAgLy8gaW50byBpdC4KKyAgICBpZiAoIW1fZnJlcXVl
bnRFeGl0U2l0ZXMpIHsKKyAgICAgICAgbV9mcmVxdWVudEV4aXRTaXRlcyA9IGFkb3B0UHRyKG5l
dyBWZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4oKSk7CisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0
ZXMtPmFwcGVuZChzaXRlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IC8vIERvbid0IGFkZCBpdCBpZiBpdCdzIGFscmVhZHkgdGhlcmUuIFRoaXMgaXMgTyhuKSwgYnV0
IHRoYXQncyBPSywgYmVjYXVzZSB3ZQorICAgIC8vIGtub3cgdGhhdCB0aGUgdG90YWwgbnVtYmVy
IG9mIHBsYWNlcyB3aGVyZSBjb2RlIGV4aXRzIHRlbmRzIHRvIG5vdCBiZSBsYXJnZSwKKyAgICAv
LyBhbmQgdGhpcyBjb2RlIGlzIG9ubHkgdXNlZCB3aGVuIHJlY29tcGlsYXRpb24gaXMgdHJpZ2dl
cmVkLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9mcmVxdWVudEV4aXRTaXRlcy0+YXQoaSkgPT0g
c2l0ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgbV9mcmVx
dWVudEV4aXRTaXRlcy0+YXBwZW5kKHNpdGUpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6
UXVlcnlhYmxlRXhpdFByb2ZpbGUoY29uc3QgRXhpdFByb2ZpbGUmIHByb2ZpbGUpCit7CisgICAg
aWYgKCFwcm9maWxlLT5tX2ZyZXF1ZW50RXhpdFNpdGVzKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGUtPm1fZnJlcXVlbnRFeGl0U2l0
ZXMtPnNpemUoKTsgKytpKQorICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLmFkZChwcm9maWxl
LT5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5hdChpKSk7Cit9CisKK1F1ZXJ5YWJsZUV4aXRQcm9maWxl
Ojp+UXVlcnlhYmxlRXhpdFByb2ZpbGUoKSB7IH0KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRG
RwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9m
aWxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZH
RXhpdFByb2ZpbGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdFeGl0UHJvZmls
ZV9oCisjZGVmaW5lIERGR0V4aXRQcm9maWxlX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2VudW0gRXhpdEtpbmQgeworICAgIEV4aXRLaW5kVW5zZXQsCisgICAgQmFkVHlwZSwg
Ly8gV2UgZXhpdGVkIGJlY2F1c2UgYSB0eXBlIHByZWRpY3Rpb24gd2FzIHdyb25nLgorICAgIFBy
aW1hcnksIC8vIElmIHRoZXJlIGlzIG9ubHkgb25lIHNwZWN1bGF0aW9uIGZvciB0aGUgZ2l2ZW4g
b3BlcmF0aW9uIHRoYXQgeW91IHdpc2ggdG8gdHJhY2ssIHRoZW4gdXNlIHRoaXMgb25lLgorICAg
IEJhZENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhbiBpbmxpbmUgY2FjaGUgd2FzIHdyb25n
LgorICAgIE92ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBvZiBvdmVyZmxvdy4KKyAgICBO
ZWdhdGl2ZVplcm8sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIGVuY291bnRlcmVkIG5lZ2F0aXZl
IHplcm8uCit9OworCitjbGFzcyBGcmVxdWVudEV4aXRTaXRlIHsKK3B1YmxpYzoKKyAgICBGcmVx
dWVudEV4aXRTaXRlKCkKKyAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KDApCisgICAgICAgICwg
bV9raW5kKEV4aXRLaW5kVW5zZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBG
cmVxdWVudEV4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBFeGl0S2luZCBraW5kKQor
ICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgbV9r
aW5kKGtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IEV4aXRLaW5kVW5zZXQ7CisgICAgfQor
ICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0ID09IG90aGVyLm1f
Ynl0ZWNvZGVPZmZzZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQ7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZDsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5dGVjb2Rl
T2Zmc2V0OyB9CisgICAgRXhpdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQor
Citwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgRXhpdEtpbmQg
bV9raW5kOworfTsKKworY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZUhhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIGEs
IEZyZXF1ZW50RXhpdFNpdGUmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNo
PEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlPiB7CisgICAgdHlwZWRlZiBKU0M6OkRGRzo6RnJl
cXVlbnRFeGl0U2l0ZUhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkRGRzo6RnJl
cXVlbnRFeGl0U2l0ZT4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGU+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworY2xhc3MgUXVlcnlhYmxlRXhpdFByb2ZpbGU7CisKK2NsYXNzIEV4
aXRQcm9maWxlIHsKK3B1YmxpYzoKKyAgICBFeGl0UHJvZmlsZSgpOworICAgIH5FeGl0UHJvZmls
ZSgpOworICAgIAorICAgIC8vIEFkZCBhIG5ldyBmcmVxdWVudCBleGl0IHNpdGUuIFJldHVybiB0
cnVlIGlmIHRoaXMgaXMgYSBuZXcgb25lLCBvciBmYWxzZQorICAgIC8vIGlmIHdlIGFscmVhZHkg
a25ldyBhYm91dCBpdC4gVGhpcyBpcyBhbiBPKG4pIG9wZXJhdGlvbiwgYmVjYXVzZSBpdCBlcnJz
CisgICAgLy8gb24gdGhlIHNpZGUgb2Yga2VlcGluZyB0aGUgZGF0YSBzdHJ1Y3R1cmUgY29tcGFj
dC4gQWxzbywgdGhpcyB3aWxsIG9ubHkKKyAgICAvLyBiZSBjYWxsZWQgYSBmaXhlZCBudW1iZXIg
b2YgdGltZXMgcGVyIHJlY29tcGlsYXRpb24uIFJlY29tcGlsYXRpb24gaXMKKyAgICAvLyByYXJl
IHRvIGJlZ2luIHdpdGgsIGFuZCBpbXBsaWVzIGRvaW5nIE8obikgb3BlcmF0aW9ucyBvbiB0aGUg
Q29kZUJsb2NrCisgICAgLy8gYW55d2F5LgorICAgIGJvb2wgYWRkKGNvbnN0IEZyZXF1ZW50RXhp
dFNpdGUmIHNpdGUpOworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUXVlcnlhYmxl
RXhpdFByb2ZpbGU7CisgICAgCisgICAgT3duUHRyPFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiA+
IG1fZnJlcXVlbnRFeGl0U2l0ZXM7Cit9OworCitjbGFzcyBRdWVyeWFibGVFeGl0UHJvZmlsZSB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgUXVlcnlhYmxlRXhpdFByb2ZpbGUoY29uc3QgRXhpdFBy
b2ZpbGUmKTsKKyAgICB+UXVlcnlhYmxlRXhpdFByb2ZpbGUoKTsKKyAgICAKKyAgICBib29sIGhh
c0V4aXRTaXRlKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9mcmVxdWVudEV4aXRTaXRlcy5maW5kKHNpdGUpICE9IG1fZnJlcXVlbnRF
eGl0U2l0ZXMuZW5kKCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBIYXNoU2V0PEZyZXF1ZW50RXhp
dFNpdGU+IG1fZnJlcXVlbnRFeGl0U2l0ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBERkdFeGl0UHJvZmlsZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDEwMjU2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4NCwxNCArMjg0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1v
ZGUoKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihj
b25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHN0YXRpYyBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdp
biYgY29kZU9yaWdpbiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaykKICAgICB7CiAgICAg
ICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0
YWJsZS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+
Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKICAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+YmFz
ZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENv
ZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrKCk7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsK
KyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBD
b2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVD
b2RlQmxvY2soKSk7CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxv
Y2soKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZp
c2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgsMjAgQEAKIAogI2lmIEVOQUJMRShERkdfSklU
KQogCisjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHU3BlY3Vs
YXRpdmVKSVQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi1PU1JFeGl0
OjpPU1JFeGl0KEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiB2YWx1
ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0
LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorT1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5k
LCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWdu
ZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQog
ICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9jaGVjayhjaGVjaykK
ICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21waWxlSW5kZXgpCiAgICAgLCBtX2NvZGVPcmln
aW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3Zl
cnlJbmRleCkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV9jb3VudCgwKQogICAgICwgbV9h
cmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXplKCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQt
Pm1fdmFyaWFibGVzLnNpemUoKSkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RT
ZXRPcGVyYW5kKQpAQCAtNjEsNiArNjQsMTQgQEAgdm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91
dCkgY29uc3QKIH0KICNlbmRpZgogCitib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVx
dWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9m
aWxlZENvZGVCbG9jaykKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAv
IGRmZ0NvZGVCbG9jay0+c3BlY3VsYXRpdmVGYWlsQ291bnRlcigpIDw9IEhldXJpc3RpY3M6Om9z
ckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHJldHVybiBBc3NlbWJsZXJIZWxwZXJzOjpiYXNlbGluZUNvZGVCbG9ja0Zv
ck9yaWdpbkFuZEJhc2VsaW5lQ29kZWJsb2NrKG1fY29kZU9yaWdpbiwgcHJvZmlsZWRDb2RlQmxv
Y2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgsIG1fa2luZCkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdC5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdD
b3JyZWN0YWJsZUp1bXBQb2ludC5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5j
bHVkZSAiREZHR1BSSW5mby5oIgogI2luY2x1ZGUgIkRGR09wZXJhbmRzLmgiCiAjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKQEAgLTgxLDcgKzgyLDcgQEAgcHJpdmF0ZToKIC8vIFRoaXMgc3Ry
dWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8g
Z29pbmcgaW50byBiYXNlbGluZSBjb2RlLgogc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQo
SlNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1
bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIE9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwogICAg
IAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CiAgICAgCkBAIC05NCw2ICs5NSw5
IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7
CiAgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7CisgICAg
CiAgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVyaWVz
IHdoaWxlIGJlaW5nCiAgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJpYWJs
ZS4KICAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVu
dHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CkBAIC0xMjAsNiArMTI0LDEzIEBAIHN0
cnVjdCBPU1JFeGl0IHsKICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgp
OwogICAgIH0KICAgICAKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRl
KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2NvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0Nv
ZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KKyAgICAKICNpZm5kZWYgTkRFQlVH
CiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CiAjZW5kaWYKQEAgLTEyNyw2ICsxMzgs
OSBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJn
dW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKICAgICBp
bnQgbV9sYXN0U2V0T3BlcmFuZDsKKworcHJpdmF0ZToKKyAgICBib29sIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jaykKIH07CiAKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VM
QVRJT05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRo
ZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDEpLCBB
c3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2NvdW50KSk7CisgICAgCiAg
ICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJs
b2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1
bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lv
biAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2MSw4IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhl
cndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBl
cnM6OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2Nv
dW50KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHJldmlzaW9u
IDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAko
d29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBleHRlcm4gZG91YmxlIGNvdWxkVGFrZVNs
b3dDYXNlVGhyZXNob2xkCiBleHRlcm4gdW5zaWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5p
bXVtQ291bnQ7CiBleHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7
CiAKK2V4dGVybiBkb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlOwor
CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlOwogZXh0ZXJuIHVu
c2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3A7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118905</attachid>
            <date>2011-12-12 16:36:57 -0800</date>
            <delta_ts>2011-12-12 16:52:04 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>countdfgfail_patch_2.diff</filename>
            <type>text/plain</type>
            <size>108354</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDExLTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBrbm93IGV4YWN0bHkgd2h5IHJlY29tcGlsYXRpb24gd2FzIHRyaWdnZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdP
UksgSU4gUFJPR1JFU1MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRF
eGl0U2l0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVvcHRpbWl6ZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpFeGl0
UHJvZmlsZTo6RXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxlOjp+
RXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxlOjphZGQpOgorICAg
ICAgICAoSlNDOjpERkc6OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjpRdWVyeWFibGVFeGl0UHJvZmls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6On5RdWVyeWFibGVF
eGl0UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6ZXhpdEtpbmRUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6ZXhpdEtpbmRJc0NvdW50YWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0
U2l0ZTo6RnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0
U2l0ZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpoYXNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpieXRlY29kZU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6a2luZCk6CisgICAgICAgIChKU0M6
OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGVIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpGcmVxdWVudEV4aXRTaXRlSGFzaDo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpERkc6OlF1
ZXJ5YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6YmFzZWxp
bmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQp
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVk
QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5z
dGFuY2VPZkZvck9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTb2Z0TW9kdWxvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJv
b2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlzdGljcy5oOgorCiAyMDExLTEyLTEyICBN
aWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEVsaW1pbmF0ZSBE
dXBsaWNhdGUgd29yZCBhdCBhIHRpbWUgZXF1YWwgY29kZSBpbiBTdHJpbmdJbXBsLmNwcCBhbmQg
U3RyaW5nSGFzaC5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDggQEAKIAkJMEY5
NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAv
KiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQkMw
QUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OworCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3RTY5
MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9y
aWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIg
LyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZD
MTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODUxLDYgKzg1Myw4IEBACiAJCTBG
OTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRv
ckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9y
SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkMwQUU0
MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29k
ZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4
aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNw
cDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjQ2MCw2ICsyNDY0LDggQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovLAor
CQkJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovLAogCQkJ
CTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCiAJCQkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKIAkJCQkwRjQyNkE0NjE0
NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCkBAIC0yOTgxLDYgKzI5ODcs
NyBAQAogCQkJCUE3M0JFMTdFMTQ4NDIwODQwMDkxMjA0QiAvKiBUeXBlZEFycmF5QmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTczQkUxODAxNDg0MjBBODAwOTEyMDRCIC8qIEludGVncmFsVHlw
ZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0
RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTE4LDYgKzM1MjUs
NyBAQAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3M0JFMTY4MTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNCRTE2QTE0ODQyMDUyMDA5MTIwNEIgLyogQXJy
YXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0
RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDI1NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDI4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShERkdfSklUKQordm9pZCBDb2RlQmxv
Y2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBBU1NFUlQoYWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoISFtX2RmZ0RhdGEpOwor
ICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+b3NyRXhpdC5zaXplKCk7
ICsraSkgeworICAgICAgICBERkc6Ok9TUkV4aXQmIGV4aXQgPSBtX2RmZ0RhdGEtPm9zckV4aXRb
aV07CisgICAgICAgIAorICAgICAgICBpZiAoIWV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUodGhpcywgcHJvZmlsZWRCbG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIk9TUiBleGl0ICMlbHUgKGJjIyV1LCBAJXUsICVzKSBmb3IgY29kZSBibG9jayAlcCBv
Y2N1cnJlZCBmcmVxdWVudGx5OyBjb3VudGluZyBhcyBmcmVxdWVudCBleGl0IHNpdGUuXG4iLCBp
LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBERkc6
OmV4aXRLaW5kVG9TdHJpbmcobV9raW5kKSwgdGhpcyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxF
KQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwMjU2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJD
b21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKQEAgLTc5Niw2ICs3OTcs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoaGFzQ29kZU9yaWdpbnMo
KSk7CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5U2VhcmNoPENvZGVPcmlnaW5BdENhbGxSZXR1
cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbj4oY29k
ZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3JpZ2lucygpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9m
ZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLT5jb2RlT3JpZ2luOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgRnJlcXVlbnRF
eGl0U2l0ZSYgc2l0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGdldEpJVFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGl0UHJv
ZmlsZS5hZGQoc2l0ZSk7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIC8vIENvbnN0YW50
IFBvb2wKQEAgLTEwNjUsNiArMTA3Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHJlb3B0aW1pemUoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQo
KSAhPSB0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpLT5hbHRlcm5hdGl2
ZSgpID09IHRoaXMpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+dGFsbHlGcmVxdWVudEV4
aXRTaXRlcygpOwogICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+amV0dGlzb24oKTsKICAgICAg
ICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKICAgICAgICAgICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKQEAgLTEwOTMsNiArMTEwMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2
YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgREZHQ29kZUJsb2NrczsKICAgICAgICAgCisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwor
I2Vsc2UKKyAgICAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkgeyB9CisjZW5kaWYK
KyAgICAgICAgCiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYpIGNvbnN0OwogCkBAIC0xMjEyLDYgKzEyMjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwor
ICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxv
Y2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gZm9y
IERGRyBjb2RlIGJsb2Nrcy4KKyAgICAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxl
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0V4aXRQcm9maWxlOjpFeGl0UHJvZmlsZSgp
IHsgfQorRXhpdFByb2ZpbGU6On5FeGl0UHJvZmlsZSgpIHsgfQorCit2b2lkIEV4aXRQcm9maWxl
OjphZGQoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBu
ZXZlciBzZWVuIGFueSBmcmVxdWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0
IHRoaXMgc2l0ZQorICAgIC8vIGludG8gaXQuCisgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVz
KSB7CisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZy
ZXF1ZW50RXhpdFNpdGU+KCkpOworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQo
c2l0ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCBh
ZGQgaXQgaWYgaXQncyBhbHJlYWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ss
IGJlY2F1c2Ugd2UKKyAgICAvLyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMg
d2hlcmUgY29kZSBleGl0cyB0ZW5kcyB0byBub3QgYmUgbGFyZ2UsCisgICAgLy8gYW5kIHRoaXMg
Y29kZSBpcyBvbmx5IHVzZWQgd2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIG1fZnJlcXVlbnRFeGl0U2l0
ZXMtPmFwcGVuZChzaXRlKTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4
aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQoreworICAgIGlmICghcHJvZmls
ZS0+bV9mcmVxdWVudEV4aXRTaXRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlLT5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9mcmVxdWVudEV4aXRTaXRlcy5hZGQocHJvZmlsZS0+bV9mcmVxdWVu
dEV4aXRTaXRlcy0+YXQoaSkpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJs
ZUV4aXRQcm9maWxlKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRXhpdFByb2ZpbGVfaAorI2RlZmlu
ZSBERkdFeGl0UHJvZmlsZV9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVt
IEV4aXRLaW5kIHsKKyAgICBFeGl0S2luZFVuc2V0LAorICAgIEJhZFR5cGUsIC8vIFdlIGV4aXRl
ZCBiZWNhdXNlIGEgdHlwZSBwcmVkaWN0aW9uIHdhcyB3cm9uZy4KKyAgICBQcmltYXJ5LCAvLyBJ
ZiB0aGVyZSBpcyBvbmx5IG9uZSBzcGVjdWxhdGlvbiBmb3IgdGhlIGdpdmVuIG9wZXJhdGlvbiB0
aGF0IHlvdSB3aXNoIHRvIHRyYWNrLCB0aGVuIHVzZSB0aGlzIG9uZS4KKyAgICBCYWRDYWNoZSwg
Ly8gV2UgZXhpdGVkIGJlY2F1c2UgYW4gaW5saW5lIGNhY2hlIHdhcyB3cm9uZy4KKyAgICBPdmVy
ZmxvdywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugb2Ygb3ZlcmZsb3cuCisgICAgTmVnYXRpdmVaZXJv
LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBlbmNvdW50ZXJlZCBuZWdhdGl2ZSB6ZXJvLgorICAg
IFVuY291bnRhYmxlLCAvLyBXZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFib3ZlIHJlYXNvbnMs
IGFuZCB3ZSBzaG91bGQgbm90IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhpcyBzaG91bGQgYmUg
dmlld2VkIGFzIGEgRklYTUUuCit9OworCisjaWZuZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNo
YXIqIGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIEV4aXRLaW5kVW5zZXQ6CisgICAgICAgIHJldHVybiAiVW5zZXQiOworICAg
IGNhc2UgQmFkVHlwZToKKyAgICAgICAgcmV0dXJuICJCYWRUeXBlIjsKKyAgICBjYXNlIFByaW1h
cnk6CisgICAgICAgIHJldHVybiAiUHJpbWFyeSI7CisgICAgY2FzZSBCYWRDYWNoZToKKyAgICAg
ICAgcmV0dXJuICJCYWRDYWNoZSI7CisgICAgY2FzZSBPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJu
ICJPdmVyZmxvdyI7CisgICAgY2FzZSBOZWdhdGl2ZVplcm86CisgICAgICAgIHJldHVybiAiTmVn
YXRpdmVaZXJvIjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gIlVua25vd24iOworICAg
IH0KK30KKyNlbmRpZgorCitpbmxpbmUgYm9vbCBleGl0S2luZElzQ291bnRhYmxlKEV4aXRLaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgY2Fz
ZSBVbmNvdW50YWJsZToKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKworY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7Citw
dWJsaWM6CisgICAgRnJlcXVlbnRFeGl0U2l0ZSgpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNl
dCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIEZyZXF1ZW50RXhpdFNpdGUoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fZXhlY3V0YWJsZSgxKSAvLyAxID0gZGVsZXRl
ZCB2YWx1ZQorICAgICAgICAsIG1fa2luZChFeGl0S2luZFVuc2V0KQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZXhwbGljaXQgRnJlcXVlbnRFeGl0U2l0ZSh1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCwgRXhpdEtpbmQga2luZCkKKyAgICAgICAgOiBtX2J5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGV4aXRL
aW5kSXNDb3VudGFibGUoa2luZCkpOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IEV4aXRLaW5kVW5zZXQ7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J5dGVjb2RlT2Zmc2V0ID09IG90
aGVyLm1fYnl0ZWNvZGVPZmZzZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tp
bmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2J5dGVjb2RlT2Zmc2V0KSArIG1fa2luZDsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVjb2RlT2Zmc2V0OyB9CisgICAgRXhpdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9raW5kID09IEV4aXRLaW5kVW5zZXQgJiYgbV9ieXRlY29kZU9mZnNl
dDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9ieXRlY29kZU9mZnNldDsKKyAg
ICBFeGl0S2luZCBtX2tpbmQ7Cit9OworCitjbGFzcyBGcmVxdWVudEV4aXRTaXRlSGFzaCB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRnJlcXVlbnRF
eGl0U2l0ZSYgYSwgRnJlcXVlbnRFeGl0U2l0ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g8SlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6REZHOjpGcmVxdWVudEV4aXRTaXRlSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6REZHOjpGcmVxdWVudEV4aXRTaXRlPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRG
Rzo6RnJlcXVlbnRFeGl0U2l0ZT4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitjbGFzcyBRdWVyeWFibGVFeGl0UHJvZmlsZTsK
KworY2xhc3MgRXhpdFByb2ZpbGUgeworcHVibGljOgorICAgIEV4aXRQcm9maWxlKCk7CisgICAg
fkV4aXRQcm9maWxlKCk7CisgICAgCisgICAgLy8gQWRkIGEgbmV3IGZyZXF1ZW50IGV4aXQgc2l0
ZS4gUmV0dXJuIHRydWUgaWYgdGhpcyBpcyBhIG5ldyBvbmUsIG9yIGZhbHNlCisgICAgLy8gaWYg
d2UgYWxyZWFkeSBrbmV3IGFib3V0IGl0LiBUaGlzIGlzIGFuIE8obikgb3BlcmF0aW9uLCBiZWNh
dXNlIGl0IGVycnMKKyAgICAvLyBvbiB0aGUgc2lkZSBvZiBrZWVwaW5nIHRoZSBkYXRhIHN0cnVj
dHVyZSBjb21wYWN0LiBBbHNvLCB0aGlzIHdpbGwgb25seQorICAgIC8vIGJlIGNhbGxlZCBhIGZp
eGVkIG51bWJlciBvZiB0aW1lcyBwZXIgcmVjb21waWxhdGlvbi4gUmVjb21waWxhdGlvbiBpcwor
ICAgIC8vIHJhcmUgdG8gYmVnaW4gd2l0aCwgYW5kIGltcGxpZXMgZG9pbmcgTyhuKSBvcGVyYXRp
b25zIG9uIHRoZSBDb2RlQmxvY2sKKyAgICAvLyBhbnl3YXkuCisgICAgYm9vbCBhZGQoY29uc3Qg
RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSk7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBRdWVyeWFibGVFeGl0UHJvZmlsZTsKKyAgICAKKyAgICBPd25QdHI8VmVjdG9yPEZyZXF1ZW50
RXhpdFNpdGU+ID4gbV9mcmVxdWVudEV4aXRTaXRlczsKK307CisKK2NsYXNzIFF1ZXJ5YWJsZUV4
aXRQcm9maWxlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBRdWVyeWFibGVFeGl0UHJvZmlsZShj
b25zdCBFeGl0UHJvZmlsZSYpOworICAgIH5RdWVyeWFibGVFeGl0UHJvZmlsZSgpOworICAgIAor
ICAgIGJvb2wgaGFzRXhpdFNpdGUoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ZyZXF1ZW50RXhpdFNpdGVzLmZpbmQoc2l0ZSkgIT0g
bV9mcmVxdWVudEV4aXRTaXRlcy5lbmQoKTsKKyAgICB9Citwcml2YXRlOgorICAgIEhhc2hTZXQ8
RnJlcXVlbnRFeGl0U2l0ZT4gbV9mcmVxdWVudEV4aXRTaXRlczsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIERGR0V4aXRQcm9maWxlX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24g
MTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDE0ICsyODQsMTkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+anNFeGVjdXRhYmxlKCkt
PmlzU3RyaWN0TW9kZSgpOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgc3RhdGljIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrKQog
ICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAg
ICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5leGVjdXRhYmxlLmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUtPnN0
cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRhYmxlOjpzX2luZm8pOwog
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1
dGFibGUpLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAgICAgfQotICAg
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2soKTsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhjb2RlT3JpZ2lu
LCBiYXNlbGluZUNvZGVCbG9jaygpKTsKICAgICB9CiAgICAgCiAgICAgQ29kZUJsb2NrKiBiYXNl
bGluZUNvZGVCbG9jaygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE3ICsyOCwyMCBAQAogCiAjaWYgRU5B
QkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBc3NlbWJseUhlbHBlcnMuaCIKICNpbmNsdWRl
ICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKLU9TUkV4aXQ6Ok9TUkV4aXQoSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBWYWx1ZVBy
b2ZpbGUqIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCitPU1JFeGl0OjpPU1JFeGl0KEV4
aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiB2
YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCog
aml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFs
dWVTb3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX2No
ZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5tX2NvbXBpbGVJbmRleCkKICAgICAs
IG1fY29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKICAgICAsIG1fcmVjb3ZlcnlJ
bmRleChyZWNvdmVyeUluZGV4KQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX2NvdW50KDAp
CiAgICAgLCBtX2FyZ3VtZW50cyhqaXQtPm1fYXJndW1lbnRzLnNpemUoKSkKICAgICAsIG1fdmFy
aWFibGVzKGppdC0+bV92YXJpYWJsZXMuc2l6ZSgpKQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChq
aXQtPm1fbGFzdFNldE9wZXJhbmQpCkBAIC02MSw2ICs2NCwxNCBAQCB2b2lkIE9TUkV4aXQ6OmR1
bXAoRklMRSogb3V0KSBjb25zdAogfQogI2VuZGlmCiAKK2Jvb2wgT1NSRXhpdDo6Y29uc2lkZXJB
ZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQoreworICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+
KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5zcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkgPD0gSGV1
cmlzdGljczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEFzc2VtYmxlckhlbHBlcnM6OmJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlYmxvY2sobV9jb2RlT3JpZ2luLCBwcm9m
aWxlZENvZGVCbG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0ZShtX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2lu
Y2x1ZGUgIkRGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2Zp
bGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAiREZHT3BlcmFuZHMuaCIK
ICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgpAQCAtODEsNyArODIsNyBAQCBwcml2YXRlOgog
Ly8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBw
YXRoIGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCiBzdHJ1Y3QgT1NSRXhpdCB7Ci0g
ICAgT1NSRXhpdChKU1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gMCk7CisgICAg
T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqLCBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
ID0gMCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKICAgICAKQEAg
LTk0LDYgKzk1LDkgQEAgc3RydWN0IE9TUkV4aXQgewogICAgIAogICAgIHVuc2lnbmVkIG1fcmVj
b3ZlcnlJbmRleDsKICAgICAKKyAgICBFeGl0S2luZCBtX2tpbmQ7CisgICAgdWludDMyX3QgbV9j
b3VudDsKKyAgICAKICAgICAvLyBDb252ZW5pZW50IHdheSBvZiBpdGVyYXRpbmcgb3ZlciBWYWx1
ZVJlY292ZXJpZXMgd2hpbGUgYmVpbmcKICAgICAvLyBnZW5lcmljIG92ZXIgYXJndW1lbnQgdmVy
c3VzIHZhcmlhYmxlLgogICAgIGludCBudW1iZXJPZlJlY292ZXJpZXMoKSBjb25zdCB7IHJldHVy
biBtX2FyZ3VtZW50cy5zaXplKCkgKyBtX3ZhcmlhYmxlcy5zaXplKCk7IH0KQEAgLTEyMCw2ICsx
MjQsMTMgQEAgc3RydWN0IE9TUkV4aXQgewogICAgICAgICByZXR1cm4gaW5kZXggLSBtX2FyZ3Vt
ZW50cy5zaXplKCk7CiAgICAgfQogICAgIAorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1
ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRD
b2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3Vu
dGFibGUobV9raW5kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2Zp
bGVkQ29kZUJsb2NrKTsKKyAgICB9CisgICAgCiAjaWZuZGVmIE5ERUJVRwogICAgIHZvaWQgZHVt
cChGSUxFKiBvdXQpIGNvbnN0OwogI2VuZGlmCkBAIC0xMjcsNiArMTM4LDkgQEAgc3RydWN0IE9T
UkV4aXQgewogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX2FyZ3VtZW50czsKICAgICBW
ZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV92YXJpYWJsZXM7CiAgICAgaW50IG1fbGFzdFNldE9w
ZXJhbmQ7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0
U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2spCiB9OwogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
MSw2ICs0NTEsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwog
ICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCiAgICAgCisg
ICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigxKSwgQXNzZW1ibHlIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoJmV4aXQubV9jb3VudCkpOworICAgIAogICAgIG1faml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6cmVnVDApOwogICAgIAogICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpLCBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2MSw2ICs0NjEsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0
aGUgY291bnRlciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkuCiAgICAgCisgICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigxKSwg
QXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmV4aXQubV9jb3VudCkpOworICAgIAog
ICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVC
bG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAgIG1faml0LmxvYWQzMihBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVj
dWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
MDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJlY292ZXJ5ID0gJmNvZGVCbG9jay0+c3BlY3VsYXRp
b25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCAtIDEpOwogCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiR2VuZXJhdGluZyBPU1IgZXhpdCAj
JXUgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGNvZGVCbG9jayk7CisgICAgZnBy
aW50ZihzdGRlcnIsICJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMpIGZv
ciBjb2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRvU3RyaW5nKG1fa2luZCksIGNvZGVC
bG9jayk7CiAjZW5kaWYKIAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4Miw3ICsxMjgyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlSW50SQogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2Fz
ZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoKG5vZGUuaGFzQ29uc3RhbnQoKSAmJiAh
aXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRh
Rm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAg
ICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgIHJldHVy
biBhbGxvY2F0ZSgpOwogICAgICAgICB9CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIC8vIENoZWNrIHRoZSB2YWx1
ZSBpcyBhbiBpbnRlZ2VyLgogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAg
ICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3cs
IGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTSW50
ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJuLgogICAgICAg
ICBpZiAoIXN0cmljdCkgewpAQCAtMTM4OSw3ICsxMzg5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CiAgICAg
Y2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogewot
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1h
dEludGVnZXI7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAgLTE0NDgsNyAr
MTQ0OCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAg
ICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4g
ZnByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAg
ICAgICAgICAgcmV0dXJuIGZwckFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0x
NDkxLDcgKzE0OTEsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgY2FzZSBEYXRhRm9ybWF0Q2Vs
bDoKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgp
OwogCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgpAQCAtMTUwNCw3ICsxNTA0LDcgQEAgRlBS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwog
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwgR1BSSW5mbzo6
dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAKICAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBo
ZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKICAgICAgICAgbV9qaXQu
bW92ZShqc1ZhbHVlR3ByLCB0ZW1wR3ByKTsKQEAgLTE1NzgsNyArMTU3OCw3IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0
ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgaWYgKGlu
Zm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBpbmZvLnNwaWxsRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUp
OwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0xNTkyLDcgKzE1OTIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsCiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Nl
bGwpOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUp
OworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAg
ICB9CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwpA
QCAtMTYwMSw3ICsxNjAxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Q2VsbAogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAg
ICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0NlbGwpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBn
cHI7CiAgICAgfQpAQCAtMTYxNiw3ICsxNjE2LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CiAgICAgICAgIEdQUlJl
ZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhn
cHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9
CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVDZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpT
Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7Ci0gICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAKQEAgLTE2NTEsNyAr
MTY1MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBz
d2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6
IHsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlciB8
fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAg
ICAgIH0KICAgICAgICAgCkBAIC0xNjY1LDcgKzE2NjUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVK
SVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShn
cHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihK
U1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0
KCkgJiBEYXRhRm9ybWF0SlMpOwpAQCAtMTY3NSw3ICsxNjc1LDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwg
RGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9y
bWF0SlNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25D
aGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hl
Y2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAgICAg
IH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwpA
QCAtMTY5Myw3ICsxNjkzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRl
Qm9vbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxv
Y2soZ3ByKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZh
bGlkR1BSUmVnKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3Bl
Y3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BS
UmVnKSk7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwg
RGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybiBncHI7CkBAIC0xNzA1LDcgKzE3
MDUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgY2Fz
ZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNl
IERhdGFGb3JtYXRDZWxsOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICByZXR1
cm4gYWxsb2NhdGUoKTsKICAgICB9CiAgICAgICAgIApAQCAtMTc0OCw5ICsxNzQ4LDkgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAg
IGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5
cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUu
Y2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
b3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBm
YWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFH
UFIsIG9wMkdQUik7CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCByZXN1bHRHUFIp
OwpAQCAtMTgxNyw3ICsxODE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTgyNiw3ICsxODI2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlmIChuZWVkU3BlY3VsYXRpb25D
aGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAg
ICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZp
bmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJl
dF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgfQog
ICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1
ZSkpLCByZXN1bHRHUFIpOwogICAgIApAQCAtMTg4Miw3ICsxODgyLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAKICAgICAgICAgbV9qaXQubW92
ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0
ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCByZXN1
bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWUuZ3ByKCkpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBy
ZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAg
ICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBhZGQg
YSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgpAQCAtMTkyMSw3ICsxOTIx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsK
ICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIGFk
ZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxsLmxpbmsoJm1f
aml0KTsKQEAgLTE5MjksNyArMTkyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmpl
Y3RPck90aGVyQnIKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9q
aXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0LmFuZFB0cihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFs
dWVOdWxsKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgaWYgKG5vdFRha2Vu
ICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIG5vdFRh
a2VuKTsKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCcmFu
Y2goTm9kZSYgbm8KICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVl
OjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAgICAgICAgYWRk
QnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4odHJ1ZSkpKSks
IHRha2VuKTsKIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShq
c051bWJlcigwKSkpKSwgbm90VGFrZW4pOwpAQCAtMjA0Myw3ICsyMDQzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIElmIHdlIGhhdmUg
bm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRvIGNvbXBp
bGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lIHx8IHZhbHVlLmlzQ2xl
YXIoKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMTEzLDE0ICsyMTEzLDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcg
Y2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9u
KG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwg
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGNlbGxHUFIg
PSBjZWxsLmdwcigpOwogICAgICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxH
UFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblBy
ZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIyMjUsNyArMjIyNSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhlIG9wZXJhbmQgaXMgcG9zaXRp
dmUuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgVHJ1c3RlZElt
bTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEu
Z3ByKCksIFRydXN0ZWRJbW0zMigwKSkpOwogCiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CkBAIC0yMjczLDcgKzIyNzMsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5hZGQzMihJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ay
LmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIEltbTMyKGlt
bTEpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0y
Mjg4LDcgKzIyODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkp
OwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0yKSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0Lmdwcigp
KSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzEzLDExICsyMzEzLDExIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBjaGVjayA9IG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxv
dywgZ3ByMSwgZ3ByMiwgZ3ByUmVzdWx0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICBpZiAoZ3ByMSA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVy
eShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ss
IFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMikpOwog
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKGdwcjIgPT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMSkpOworICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJGbG93LCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJS
ZXN1bHQsIGdwcjEpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjayk7CisgICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlckZsb3csIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgY2hlY2spOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KGdwclJlc3VsdCwgbV9jb21waWxlSW5kZXgpOwpAQCAtMjM1Myw3ICsyMzUzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAg
bV9qaXQuc3ViMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9w
MS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJGbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihp
bW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJl
c3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjM2Nyw3ICsyMzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAg
ICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJGbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBvcDIuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzk5LDEzICsy
Mzk5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgb3Ay
R1BSID0gb3AyLmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVy
OjpaZXJvLCBvcDJHUFIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3cs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpa
ZXJvLCBvcDJHUFIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIg
Y2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3Qg
YWJvdXQKICAgICAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4KICAgICAgICAg
ICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkp
KSB7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVy
byA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDJHUFIsIFRydXN0ZWRJ
bW0zMigwKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJv
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgICAgICBudW1l
cmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApA
QCAtMjQyNSw3ICsyNDI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogCiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIHdhcyBubyByZW1haW5kZXIu
IElmIHRoZXJlIGhhZCBiZWVuLCB0aGVuIHdlJ2QgYmUgb2JsaWdhdGVkIHRvCiAgICAgICAgICAg
ICAvLyBwcm9kdWNlIGEgZG91YmxlIHJlc3VsdCBpbnN0ZWFkLgotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRD
b21waWxlcjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihK
SVRDb21waWxlcjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQoZWF4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI0NTgsNyArMjQ1OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnJzaGlmdDMyKHJlc3VsdC5ncHIoKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2guZ3ByKCkpOwogICAgICAg
ICAgICAgbV9qaXQuYWRkMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
ICAgIG1faml0LnhvcjMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMSA8PCAzMSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCByZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSA8PCAz
MSkpKTsKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjY4OCwxNSArMjY4OCwx
NSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVy
dHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxl
bmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJbiBjYXNlcyB3aGVyZSB0aGVy
ZSBhcmUgc3Vic2VxdWVudCBieV92YWwgYWNjZXNzZXMgdG8gdGhlIHNhbWUgYmFzZSBpdCBtaWdo
dCBoZWxwIHRvIGNhY2hlCiAgICAgICAgIC8vIHRoZSBzdG9yYWdlIHBvaW50ZXIgLSBlc3BlY2lh
bGx5IGlmIHRoZXJlIGhhcHBlbnMgdG8gYmUgYW5vdGhlciByZWdpc3RlciBmcmVlIHJpZ2h0IG5v
dy4gSWYgd2UgZG8gc28sCiAgICAgICAgIC8vIHRoZW4gd2UnbGwgbmVlZCB0byBhbGxvY2F0ZSBh
IG5ldyB0ZW1wb3JhcnkgZm9yIHJlc3VsdC4KICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIoKSk7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmN1bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJlc3VsdC5ncHIoKSkpOwogCiAgICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMjc5OSw3ICsyNzk5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFu
ZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JM
ZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0
eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIGlmICghaXNBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJhc2UudXNlKCk7CiAgICAgICAgIHByb3Bl
cnR5LnVzZSgpOwpAQCAtMjk0MywxMyArMjk0MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIHdyaXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQ
Uiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVyRm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VH
UFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BS
KTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5n
dGhHUFIpOwogICAgICAgICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxl
bmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRy
dXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7
CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7CiAgICAgICAgIApAQCAtMjk4Niw3ICsyOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQ
UiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
c3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMwOTEsNyArMzA5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6IHsK
ICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhyb3cgc3RhdGVtZW50cyBhcmUgcmFyZSBhbmQg
YXJlIGludGVuZGVkIHRvIGV4aXQgdGhlIGNvZGUgYmxvY2sKICAgICAgICAgLy8gYW55d2F5LCBz
byB3ZSBqdXN0IE9TUiBiYWNrIHRvIHRoZSBvbGQgSklUIGZvciBub3cuCi0gICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIApAQCAtMzIyNCw3ICsz
MjI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgaWYgKCFpc090aGVyUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkgewogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBz
Y3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQq
PihWYWx1ZU51bGwpKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3Jp
Z2luKSksIHNjcmF0Y2hHUFIpOwpAQCAtMzIzOSw3ICszMjM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9
IHJlc3VsdC5ncHIoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKCFpc09iamVjdFBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRy
ZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2pp
dC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgICAgIApAQCAtMzI4Myw3
ICszMjgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KICAgICAgICAgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKICAgICAg
ICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyhwcm90b0dQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2Jq
ZWN0VlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHByb3RvR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxP
YmplY3RWUHRyKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwpAQCAtMzM5MCw3ICszMzkwLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICBjYXNlIEdldEJ5
SWQ6IHsKICAgICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
CkBAIC0zNDQ2LDEyICszNDQ2LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAg
ICAgCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQ
UiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBK
U0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOwogICAgICAgICAKLSAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBy
ZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgCiAg
ICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
IGJyZWFrOwpAQCAtMzQ2NSw3ICszNDY1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwog
ICAgICAgICAKICAgICAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQ
dHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAg
ICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogCkBAIC0zNDgx
LDcgKzM0ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAg
ICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEJ5dGVBcnJheTo6b2Zm
c2V0T2ZTaXplKCkpLCByZXN1bHRHUFIpOwpAQCAtMzUyMyw3ICszNTIzLDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIH0KICAgICBjYXNlIENoZWNrRnVu
Y3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9k
ZS5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24u
Z3ByKCksIG5vZGUuZnVuY3Rpb24oKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENh
Y2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS5mdW5jdGlvbigpKSk7CiAgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUz
OCw3ICszNTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
ICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkpOwogICAgICAgICAKICAg
ICAgICAgaWYgKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0
cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCks
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBub2RlLnN0cnVjdHVyZVNldCgpWzBdKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxl
cjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgbm9kZS5z
dHJ1Y3R1cmVTZXQoKVswXSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAgICAgICAKQEAgLTM1NDksNyArMzU0OSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kp
CiAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21w
aWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSkpOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVj
dHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5z
dHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZG9uZS5s
aW5rKCZtX2ppdCk7CiAgICAgICAgIH0KQEAgLTM3MDUsNyArMzcwNSw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhh
dCBiYXNlICdJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlJy4KICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgc3RydWN0dXJlLmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmUuZ3ByKCksIFN0cnVjdHVyZTo6
dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbXBs
ZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJ1Y3R1cmUuZ3ByKCksIFN0
cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOwogCiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNzk0LDcgKzM3OTQsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2Fz
ZSBGb3JjZU9TUkV4aXQ6IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MjQsOSArODI0
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIEdQUlJl
ZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgCiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7
CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BSLCBvcDJHUFIpLCB0YWtlbik7CiAgICAgaWYgKG5v
dFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBAIC0xMDU5LDEyOCArMTA1OSwxMjggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICBQcmVkaWN0ZWRUeXBl
IHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rpb24oKTsKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRl
bXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJy
YXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
IHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9q
aXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1w
LmdwcigpKTsKICAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW50OEFycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAu
Z3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9y
KCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW50MTZBcnJheVByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNj
cmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDhBcnJheVByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDE2QXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDMy
QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdw
cigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5n
cHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlz
RmxvYXQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVs
c2UgaWYgKGlzRmxvYXQ2NEFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3Io
KS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAg
ICAgICB9CiAjZWxzZQogICAgICAgICBpZiAoaXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFn
Rm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21w
aWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQz
MlRhZykpKTsKICAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5n
cHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgIH0g
ZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xlYW5UYWcpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKICAg
ICAgICAgZWxzZSBpZiAoaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3Jp
cHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0ludDE2QXJyYXlQcmVkaWN0
aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVs
c2UgaWYgKGlzSW50MzJBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
Lm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3Io
KS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50OEFycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRl
bXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlm
IChpc1VpbnQxNkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdp
c3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLm1f
dnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCku
bV92cHRyKSkpOwogICAgICAgICB9ICBlbHNlIGlmIChpc1VpbnQzMkFycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRl
bXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9ICBlbHNl
IGlmIChpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJ
VENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFs
UmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9y
KCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOwogICAgICAgICB9ICAgZWxzZSBpZiAoaXNGbG9hdDY0QXJyYXlQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAg
ICAgfSAKICNlbmRpZgogICAgIH0KQEAgLTEzNTQsMTMgKzEzNTQsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQQogICAgIAogICAgIGlmICghaXNTdHJpbmdQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAg
IEFTU0VSVCghKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSAmIFByZWRpY3RTdHJpbmcp
KTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlz
b24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0
IGFyZSB0b28gbGFyZ2UKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhSZWcs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ1JlZywgSlNTdHJpbmc6Om9mZnNldE9mTGVu
Z3RoKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBp
bmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zm
c2V0T2ZMZW5ndGgoKSkpKTsKIAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAg
IEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKQEAgLTEzOTMsMTMgKzEzOTMsMTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogCiAgICAgaWYgKCFp
c1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
IHsKICAgICAgICAgQVNTRVJUKCEoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpICYgUHJl
ZGljdFN0cmluZykpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1Zh
bHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gdW5zaWdu
ZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBp
bmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6
Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CkBAIC0xNDE3
LDcgKzE0MTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAg
ICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc1R3bywgMCksIHNjcmF0Y2hSZWcpOwogCiAg
ICAgLy8gV2Ugb25seSBzdXBwb3J0IGFzY2lpIGNoYXJhY3RlcnMKLSAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgc2NyYXRjaFJlZywgVHJ1c3RlZEltbTMyKDB4MTAwKSkpOworICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaFJlZywgVHJ1c3Rl
ZEltbTMyKDB4MTAwKSkpOwogCiAgICAgLy8gOCBiaXQgc3RyaW5nIHZhbHVlcyBkb24ndCBuZWVk
IHRoZSBpc0FTQ0lJIGNoZWNrLgogICAgIGNvbnQ4Qml0LmxpbmsoJm1faml0KTsKQEAgLTE0MjYs
NyArMTQyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAg
ICBHUFJSZWcgc21hbGxTdHJpbmdzUmVnID0gc21hbGxTdHJpbmdzLmdwcigpOwogICAgIG1faml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5z
bWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsK
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc21hbGxTdHJpbmdz
UmVnLCBzY3JhdGNoUmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVn
KTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7CisgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKICAgICBjZWxsUmVz
dWx0KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUluZGV4KTsKIH0KIApAQCAtMTQ5NSwxNCArMTQ5NSwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCCiAgICAgTm9kZUlu
ZGV4IHZhbHVlSW5kZXggPSBub2RlLmNoaWxkMygpOwogICAgIAogICAgIGlmICghaXNCeXRlQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShiYXNlSW5kZXgpLm1fdHlwZSkpCi0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJ
bmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAg
ICAgR1BSUmVnIHZhbHVlR1BSOwogCiAgICAgaWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3RhbnQo
KSkgewogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZUlu
ZGV4KTsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTU2Myw3ICsxNTYzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25CeQogICAgIEdQUlJlZyBwcm9wZXJ0
eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKLSAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE1NzQsNyArMTU3NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uQnkKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VSZWcp
OwogICAgIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQg
bmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKLSAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHN0b3JhZ2VSZWcsIEJ5dGVBcnJheTo6b2Zmc2V0T2ZTaXplKCkpKSk7CisgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSkpKTsK
IAogICAgIG1faml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSwgQnl0ZUFycmF5OjpvZmZzZXRP
ZkRhdGEoKSksIHN0b3JhZ2VSZWcpOwogICAgIGludGVnZXJSZXN1bHQoc3RvcmFnZVJlZywgbV9j
b21waWxlSW5kZXgpOwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7
CiAgICAgCiAgICAgaWYgKG5lZWRzU3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIp
KSk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZzZXQpLCByZXN1bHRHUFIpOwogICAgIApAQCAtMTYx
MSw3ICsxNjExLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25Jbgog
CiAgICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVj
Q2hlY2spIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xNjUyLDE0ICsxNjUyLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVQdXRCeVZhbEZvckkKICAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hpbGQz
KCk7CiAgICAgCiAgICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJh
eVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNl
SW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fdnB0cikpKTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZh
bHVlR1BSOwogICAgIAogICAgIGlmIChhdCh2YWx1ZUluZGV4KS5pc0NvbnN0YW50KCkpIHsKICAg
ICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29uc3RhbnQodmFsdWVJbmRleCk7CiAg
ICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE3MzQsNyArMTczNCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmwKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25S
ZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykgewogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3NzUsNyAr
MTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYKICAgICBT
cGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVlT3AodGhpcywgdmFsdWVJbmRleCk7CiAgICAgCiAg
ICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hl
Y2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
YmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2UpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0
cikpKTsKICAgICAKICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgIApAQCAtMTgx
MCw3ICsxODEwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGbwog
ewogICAgIC8vIENoZWNrIHRoYXQgcHJvdG90eXBlIGlzIGFuIG9iamVjdC4KICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvdHlwZVJlZywgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hJZk5vdE9iamVjdChzY3JhdGNoUmVnKSk7Cisg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hSZWcpKTsKICAgICAKICAgICAvLyBJbml0aWFsaXpl
IHNjcmF0Y2hSZWcgd2l0aCB0aGUgdmFsdWUgYmVpbmcgY2hlY2tlZC4KICAgICBtX2ppdC5tb3Zl
KHZhbHVlUmVnLCBzY3JhdGNoUmVnKTsKQEAgLTE5NjQsNyArMTk2NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxvKE4KICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFu
ZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7CiAgICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIo
KTsKIAotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdwcikpOworICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMy
KEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHcHIpKTsKIAogI2lmIENQVShYODYpIHx8IENQVShYODZf
NjQpCiAgICAgR1BSVGVtcG9yYXJ5IGVheCh0aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC0y
MDkyLDEzICsyMDkyLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChO
b2QKICAgICAgICAgLy8gdGhlIHNlbWFudGljcyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0aXBs
eSBoYWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhlIGRvdWJsZQogICAgICAgICAvLyBkb21haW4uCiAg
ICAgICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaE11bDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVn
MiwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgemVybywgaWYgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZSBj
YXJlIGFib3V0IHN1Y2ggdGhpbmdzLgogICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2
ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBU
cnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAgIHJlc3VsdE5vblplcm8ubGluaygmbV9qaXQp
OwogICAgICAgICB9CiAKQEAgLTIzMjIsNyArMjMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICBQcmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0g
YXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlvbigpOwogICAgIGlmICghKGJhc2VQcmVkaWN0aW9u
ICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJlZGljdGlvbikgewogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTIzMzEsNjEgKzIzMzEs
NjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIEdQUlJl
ZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIoKTsKICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
cHJlZGljdGlvbigpID09IFByZWRpY3RTdHJpbmcpIHsKICAgICAgICAgaWYgKCFpc1N0cmluZ1By
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0
cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgICAgIAogICAgICAgICAv
LyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWNjZXNzaW5nIGEgcm9wZQotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdlUmVnKSk7CiAKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRh
T2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgpKSB7CiAgICAgICAgIGlmICghaXNCeXRlQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKICAg
ICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9i
YWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0ludDhBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9y
YWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZUludDE2QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKICAg
ICAgICAgaWYgKCFpc0ludDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3Iu
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQzMkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDMy
QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNJbnQzMkFycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihk
ZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAg
IH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgp
KSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlz
VWludDhBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlw
ZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZz
ZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3Vs
ZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3Jp
cHRvcigpOwogICAgICAgICBpZiAoIWlzVWludDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3Iu
bV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CiAgICAg
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc1VpbnQzMkFy
cmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFz
ZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0
b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3Vs
YXRlRmxvYXQzMkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3Im
IGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KTsKICAgICAgICAgaWYgKCFpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3Zw
dHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVz
Y3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZsb2F0NjRBcnJheSgpKSB7CiAgICAgICAg
IGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0
YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNGbG9hdDY0QXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
UmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3Rv
cmFnZVJlZyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9m
ZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgfQogICAgIHN0b3JhZ2VSZXN1bHQoc3RvcmFnZVJl
ZywgbV9jb21waWxlSW5kZXgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI5LDM3
ICsyMDI5LDM3IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9u
IGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVj
ayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBu
b2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCiAgICAgewogICAgICAg
ICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1faml0
LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoanNWYWx1ZVNvdXJjZSwgbV9qaXQu
dmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMpKTsKICAgICB9CiAg
ICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNoZWNrcyB3aXRob3V0IGFkZGl0aW9uYWwg
cmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBq
dW1wc1RvRmFpbCkKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogICAgIHsKICAgICAgICAgVmVjdG9yPE1hY3Jv
QXNzZW1ibGVyOjpKdW1wLCAxNj4gSnVtcFZlY3RvciA9IGp1bXBzVG9GYWlsLmp1bXBzKCk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBKdW1wVmVjdG9yLnNpemUoKTsgKytpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIEp1
bXBWZWN0b3JbaV0pOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVl
U291cmNlLCBub2RlSW5kZXgsIEp1bXBWZWN0b3JbaV0pOwogICAgIH0KICAgICAvLyBBZGQgYSBz
cGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJ
bmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25S
ZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYg
cmVjb3ZlcnkpCiAgICAgewogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRTcGVjdWxhdGlvblJl
Y292ZXJ5KHJlY292ZXJ5KTsKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChqc1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4
KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRp
b25SZWNvdmVyaWVzKCkpKTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4
aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2ZpbGVGb3Iobm9k
ZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJsb2NrKCktPm51bWJlck9mU3Bl
Y3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKICAgICB9CiAKICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBz
dGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3VsYXRpb24gd2lsbCBmYWlsLgotICAgIHZv
aWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3Ms
IE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5v
ZGVJbmRleCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHdhcyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5k
aWYKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKGpzVmFsdWVSZWdzLCBub2RlSW5kZXgsIG1faml0Lmp1bXAo
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVJlZ3MsIG5vZGVJbmRl
eCwgbV9qaXQuanVtcCgpKTsKICAgICAgICAgbV9jb21waWxlT2theSA9IGZhbHNlOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJ
KHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJp
c3RpY3MuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBleHRlcm4gZG91YmxlIGNv
dWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkCiBleHRlcm4gdW5zaWduZWQgbGlrZWx5VG9UYWtlU2xv
d0Nhc2VNaW5pbXVtQ291bnQ7CiBleHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5p
bXVtQ291bnQ7CiAKK2V4dGVybiBkb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4
aXRTaXRlOworCiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlOwog
ZXh0ZXJuIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3A7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118909</attachid>
            <date>2011-12-12 16:52:04 -0800</date>
            <delta_ts>2011-12-12 17:22:18 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>countdfgfail_patch_3.diff</filename>
            <type>text/plain</type>
            <size>117740</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgzIEBA
CisyMDExLTEyLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIHNob3VsZCBrbm93IGV4YWN0bHkgd2h5IHJlY29tcGlsYXRpb24gd2FzIHRyaWdnZXJlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQzNjIKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdP
UksgSU4gUFJPR1JFU1MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRF
eGl0U2l0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6cmVvcHRpbWl6ZSk6CisgICAgICAg
IChKU0M6OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0
ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6REZHOjpFeGl0
UHJvZmlsZTo6RXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxlOjp+
RXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6OkV4aXRQcm9maWxlOjphZGQpOgorICAg
ICAgICAoSlNDOjpERkc6OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjpRdWVyeWFibGVFeGl0UHJvZmls
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6On5RdWVyeWFibGVF
eGl0UHJvZmlsZSk6CisgICAgICAgICogYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkRGRzo6ZXhpdEtpbmRUb1N0cmluZyk6CisgICAgICAgIChKU0M6OkRG
Rzo6ZXhpdEtpbmRJc0NvdW50YWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0
U2l0ZTo6RnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0
U2l0ZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpoYXNoKToK
KyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpieXRlY29kZU9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6a2luZCk6CisgICAgICAgIChKU0M6
OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGVIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpGcmVxdWVudEV4aXRTaXRlSGFzaDo6ZXF1YWwpOgorICAgICAgICAoSlNDOjpERkc6OlF1
ZXJ5YWJsZUV4aXRQcm9maWxlOjpoYXNFeGl0U2l0ZSk6CisgICAgICAgICogZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5oOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6YmFzZWxp
bmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayk6CisgICAgICAgIChKU0M6
OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpiYXNlbGluZUNvZGVCbG9ja0Zvcik6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQp
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNv
bXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9iamVjdEVxdWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2RlQXQpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0cmluZyk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckJ5dGVBcnJheSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQnl0ZUFy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVk
QXJyYXlMZW5ndGgpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
R2V0QnlWYWxPbkludFR5cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlUHV0QnlWYWxGb3JJbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXkpOgorICAg
ICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JGbG9hdFR5
cGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5z
dGFuY2VPZkZvck9iamVjdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVTb2Z0TW9kdWxvKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZUdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGlvbkNo
ZWNrKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6dGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24pOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEludGVy
bmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWJsZSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVD
ZWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJv
b2xlYW4pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpdHkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlckxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6ZW1pdEJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlzdGljcy5oOgorCiAyMDExLTEyLTEyICBN
aWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEVsaW1pbmF0ZSBE
dXBsaWNhdGUgd29yZCBhdCBhIHRpbWUgZXF1YWwgY29kZSBpbiBTdHJpbmdJbXBsLmNwcCBhbmQg
U3RyaW5nSGFzaC5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcyLDggQEAKIAkJMEY5
NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJBMTNGODUzQkQwMDAyRDlCMiAv
KiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3JIYW5k
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYz
QjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMzgxM0ZDNkZFOTAw
MDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGQkMw
QUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OworCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQg
LyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQkQ3RTY5
MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29kZU9y
aWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIg
LyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzA5NzZD
MTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODUxLDYgKzg1Myw4IEBACiAJCTBG
OTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyogTWV0YUFsbG9jYXRv
ckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRhQWxsb2NhdG9y
SGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjM2MTNGQzZGREUw
MDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkMwQUU0
MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0ODEzMTUgLyogQ29k
ZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlT3JpZ2luLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4
aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXNzZW1ibHlIZWxwZXJzLmNw
cDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjQ2MCw2ICsyNDY0LDggQEAKIAkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovLAor
CQkJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oICovLAogCQkJ
CTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8sCiAJCQkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKIAkJCQkwRjQyNkE0NjE0
NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCkBAIC0yOTgxLDYgKzI5ODcs
NyBAQAogCQkJCUE3M0JFMTdFMTQ4NDIwODQwMDkxMjA0QiAvKiBUeXBlZEFycmF5QmFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTczQkUxODAxNDg0MjBBODAwOTEyMDRCIC8qIEludGVncmFsVHlw
ZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4RUE2RjIwMDExMkIy
RiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0
RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0zNTE4LDYgKzM1MjUs
NyBAQAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3M0JFMTY4MTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNCRTE2QTE0ODQyMDUyMDA5MTIwNEIgLyogQXJy
YXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0
RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAxMDI1NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDI4IEBAIGJvb2wgQ29kZUJsb2NrOjpzaG91bGRPcHRp
bWl6ZU5vdygpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShERkdfSklUKQordm9pZCBDb2RlQmxv
Y2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQoreworICAgIEFTU0VSVChnZXRKSVRUeXBlKCkg
PT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBBU1NFUlQoYWx0ZXJuYXRpdmUoKS0+Z2V0SklUVHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoISFtX2RmZ0RhdGEpOwor
ICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0aXZlKCk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+b3NyRXhpdC5zaXplKCk7
ICsraSkgeworICAgICAgICBERkc6Ok9TUkV4aXQmIGV4aXQgPSBtX2RmZ0RhdGEtPm9zckV4aXRb
aV07CisgICAgICAgIAorICAgICAgICBpZiAoIWV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUodGhpcywgcHJvZmlsZWRCbG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIk9TUiBleGl0ICMlbHUgKGJjIyV1LCBAJXUsICVzKSBmb3IgY29kZSBibG9jayAlcCBv
Y2N1cnJlZCBmcmVxdWVudGx5OyBjb3VudGluZyBhcyBmcmVxdWVudCBleGl0IHNpdGUuXG4iLCBp
LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBERkc6
OmV4aXRLaW5kVG9TdHJpbmcobV9raW5kKSwgdGhpcyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNpZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxF
KQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVByb2ZpbGVzKCkKIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDEwMjU2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJD
b21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUgIkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAi
REZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxDb2RlQ2FjaGUuaCIKQEAgLTc5Niw2ICs3OTcs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoaGFzQ29kZU9yaWdpbnMo
KSk7CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5U2VhcmNoPENvZGVPcmlnaW5BdENhbGxSZXR1
cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbj4oY29k
ZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3JpZ2lucygpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9m
ZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLT5jb2RlT3JpZ2luOwogICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBib29sIGFkZEZyZXF1ZW50RXhpdFNpdGUoY29uc3QgRnJlcXVlbnRF
eGl0U2l0ZSYgc2l0ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKGdldEpJVFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAgICAgICByZXR1cm4gbV9leGl0UHJv
ZmlsZS5hZGQoc2l0ZSk7CisgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIC8vIENvbnN0YW50
IFBvb2wKQEAgLTEwNjUsNiArMTA3Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IHJlb3B0aW1pemUoKQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQo
KSAhPSB0aGlzKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpLT5hbHRlcm5hdGl2
ZSgpID09IHRoaXMpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+dGFsbHlGcmVxdWVudEV4
aXRTaXRlcygpOwogICAgICAgICAgICAgcmVwbGFjZW1lbnQoKS0+amV0dGlzb24oKTsKICAgICAg
ICAgICAgIGNvdW50UmVvcHRpbWl6YXRpb24oKTsKICAgICAgICAgICAgIG9wdGltaXplQWZ0ZXJX
YXJtVXAoKTsKQEAgLTEwOTMsNiArMTEwMiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2
YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgREZHQ29kZUJsb2NrczsKICAgICAgICAgCisjaWYg
RU5BQkxFKERGR19KSVQpCisgICAgICAgIHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwor
I2Vsc2UKKyAgICAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCkgeyB9CisjZW5kaWYK
KyAgICAgICAgCiAjaWYgIWRlZmluZWQoTkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5H
KQogICAgICAgICB2b2lkIGR1bXAoRXhlY1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9u
Pjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2luLCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYpIGNvbnN0OwogCkBAIC0xMjEyLDYgKzEyMjcsMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH07CiAgICAgICAgIAogICAgICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOwor
ICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxv
Y2tzIHRoYXQgc2VydmUgYXMgdGhlIHByb2ZpbGVkIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gZm9y
IERGRyBjb2RlIGJsb2Nrcy4KKyAgICAgICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxl
OwogI2VuZGlmCiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRW
ZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBtX3ZhbHVlUHJvZmlsZXM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0V4aXRQcm9maWxlOjpFeGl0UHJvZmlsZSgp
IHsgfQorRXhpdFByb2ZpbGU6On5FeGl0UHJvZmlsZSgpIHsgfQorCit2b2lkIEV4aXRQcm9maWxl
OjphZGQoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBu
ZXZlciBzZWVuIGFueSBmcmVxdWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0
IHRoaXMgc2l0ZQorICAgIC8vIGludG8gaXQuCisgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVz
KSB7CisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZy
ZXF1ZW50RXhpdFNpdGU+KCkpOworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQo
c2l0ZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCBh
ZGQgaXQgaWYgaXQncyBhbHJlYWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ss
IGJlY2F1c2Ugd2UKKyAgICAvLyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMg
d2hlcmUgY29kZSBleGl0cyB0ZW5kcyB0byBub3QgYmUgbGFyZ2UsCisgICAgLy8gYW5kIHRoaXMg
Y29kZSBpcyBvbmx5IHVzZWQgd2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgaWYgKG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIG1fZnJlcXVlbnRFeGl0U2l0
ZXMtPmFwcGVuZChzaXRlKTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4
aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQoreworICAgIGlmICghcHJvZmls
ZS0+bV9mcmVxdWVudEV4aXRTaXRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcm9maWxlLT5tX2ZyZXF1ZW50RXhpdFNpdGVzLT5zaXplKCk7
ICsraSkKKyAgICAgICAgbV9mcmVxdWVudEV4aXRTaXRlcy5hZGQocHJvZmlsZS0+bV9mcmVxdWVu
dEV4aXRTaXRlcy0+YXQoaSkpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJs
ZUV4aXRQcm9maWxlKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRXhpdFByb2ZpbGVfaAorI2RlZmlu
ZSBERkdFeGl0UHJvZmlsZV9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitlbnVt
IEV4aXRLaW5kIHsKKyAgICBFeGl0S2luZFVuc2V0LAorICAgIEJhZFR5cGUsIC8vIFdlIGV4aXRl
ZCBiZWNhdXNlIGEgdHlwZSBwcmVkaWN0aW9uIHdhcyB3cm9uZy4KKyAgICBCYWRDYWNoZSwgLy8g
V2UgZXhpdGVkIGJlY2F1c2UgYW4gaW5saW5lIGNhY2hlIHdhcyB3cm9uZy4KKyAgICBPdmVyZmxv
dywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugb2Ygb3ZlcmZsb3cuCisgICAgTmVnYXRpdmVaZXJvLCAv
LyBXZSBleGl0ZWQgYmVjYXVzZSB3ZSBlbmNvdW50ZXJlZCBuZWdhdGl2ZSB6ZXJvLgorICAgIFVu
Y291bnRhYmxlLCAvLyBXZSBleGl0ZWQgZm9yIG5vbmUgb2YgdGhlIGFib3ZlIHJlYXNvbnMsIGFu
ZCB3ZSBzaG91bGQgbm90IGNvdW50IGl0LiBNb3N0IHVzZXMgb2YgdGhpcyBzaG91bGQgYmUgdmll
d2VkIGFzIGEgRklYTUUuCit9OworCisjaWZuZGVmIE5ERUJVRworaW5saW5lIGNvbnN0IGNoYXIq
IGV4aXRLaW5kVG9TdHJpbmcoRXhpdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIEV4aXRLaW5kVW5zZXQ6CisgICAgICAgIHJldHVybiAiVW5zZXQiOworICAgIGNh
c2UgQmFkVHlwZToKKyAgICAgICAgcmV0dXJuICJCYWRUeXBlIjsKKyAgICBjYXNlIEJhZENhY2hl
OgorICAgICAgICByZXR1cm4gIkJhZENhY2hlIjsKKyAgICBjYXNlIE92ZXJmbG93OgorICAgICAg
ICByZXR1cm4gIk92ZXJmbG93IjsKKyAgICBjYXNlIE5lZ2F0aXZlWmVybzoKKyAgICAgICAgcmV0
dXJuICJOZWdhdGl2ZVplcm8iOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVW5rbm93
biI7CisgICAgfQorfQorI2VuZGlmCisKK2lubGluZSBib29sIGV4aXRLaW5kSXNDb3VudGFibGUo
RXhpdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEV4aXRLaW5k
VW5zZXQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGNhc2UgQmFkVHlwZToK
KyAgICBjYXNlIFVuY291bnRhYmxlOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitjbGFzcyBGcmVxdWVudEV4aXRT
aXRlIHsKK3B1YmxpYzoKKyAgICBGcmVxdWVudEV4aXRTaXRlKCkKKyAgICAgICAgOiBtX2J5dGVj
b2RlT2Zmc2V0KDApIC8vIDAgPSBlbXB0eSB2YWx1ZQorICAgICAgICAsIG1fa2luZChFeGl0S2lu
ZFVuc2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgRnJlcXVlbnRFeGl0U2l0ZShXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9leGVjdXRhYmxlKDEpIC8vIDEg
PSBkZWxldGVkIHZhbHVlCisgICAgICAgICwgbV9raW5kKEV4aXRLaW5kVW5zZXQpCisgICAgewor
ICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRlKHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBFeGl0S2luZCBraW5kKQorICAgICAgICA6IG1fYnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgeworICAgICAgICBBU1NF
UlQoZXhpdEtpbmRJc0NvdW50YWJsZShraW5kKSk7CisgICAgfQorICAgIAorICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gRXhpdEtpbmRV
bnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZXF1ZW50RXhp
dFNpdGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZWNvZGVPZmZz
ZXQgPT0gb3RoZXIubV9ieXRlY29kZU9mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09IG90
aGVyLm1fa2luZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVPZmZzZXQpICsgbV9raW5k
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KKyAgICBFeGl0S2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gRXhpdEtpbmRVbnNldCAmJiBtX2J5dGVj
b2RlT2Zmc2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2J5dGVjb2RlT2Zm
c2V0OworICAgIEV4aXRLaW5kIG1fa2luZDsKK307CisKK2NsYXNzIEZyZXF1ZW50RXhpdFNpdGVI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
cmVxdWVudEV4aXRTaXRlJiBhLCBGcmVxdWVudEV4aXRTaXRlJiBiKSB7IHJldHVybiBhID09IGI7
IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZT4geworICAgIHR5
cGVkZWYgSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQ
cm9maWxlOworCitjbGFzcyBFeGl0UHJvZmlsZSB7CitwdWJsaWM6CisgICAgRXhpdFByb2ZpbGUo
KTsKKyAgICB+RXhpdFByb2ZpbGUoKTsKKyAgICAKKyAgICAvLyBBZGQgYSBuZXcgZnJlcXVlbnQg
ZXhpdCBzaXRlLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGEgbmV3IG9uZSwgb3IgZmFsc2UKKyAg
ICAvLyBpZiB3ZSBhbHJlYWR5IGtuZXcgYWJvdXQgaXQuIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRp
b24sIGJlY2F1c2UgaXQgZXJycworICAgIC8vIG9uIHRoZSBzaWRlIG9mIGtlZXBpbmcgdGhlIGRh
dGEgc3RydWN0dXJlIGNvbXBhY3QuIEFsc28sIHRoaXMgd2lsbCBvbmx5CisgICAgLy8gYmUgY2Fs
bGVkIGEgZml4ZWQgbnVtYmVyIG9mIHRpbWVzIHBlciByZWNvbXBpbGF0aW9uLiBSZWNvbXBpbGF0
aW9uIGlzCisgICAgLy8gcmFyZSB0byBiZWdpbiB3aXRoLCBhbmQgaW1wbGllcyBkb2luZyBPKG4p
IG9wZXJhdGlvbnMgb24gdGhlIENvZGVCbG9jaworICAgIC8vIGFueXdheS4KKyAgICBib29sIGFk
ZChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlOworICAgIAorICAgIE93blB0cjxWZWN0b3I8
RnJlcXVlbnRFeGl0U2l0ZT4gPiBtX2ZyZXF1ZW50RXhpdFNpdGVzOworfTsKKworY2xhc3MgUXVl
cnlhYmxlRXhpdFByb2ZpbGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFF1ZXJ5YWJsZUV4aXRQ
cm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJik7CisgICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7
CisgICAgCisgICAgYm9vbCBoYXNFeGl0U2l0ZShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZnJlcXVlbnRFeGl0U2l0ZXMuZmluZChz
aXRlKSAhPSBtX2ZyZXF1ZW50RXhpdFNpdGVzLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBib29s
IGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaGFzRXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0ZShieXRl
Y29kZUluZGV4LCBraW5kKSk7CisgICAgfQorcHJpdmF0ZToKKyAgICBIYXNoU2V0PEZyZXF1ZW50
RXhpdFNpdGU+IG1fZnJlcXVlbnRFeGl0U2l0ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6REZHCisKKyNlbmRpZiAvLyBERkdFeGl0UHJvZmlsZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDEwMjU2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4NCwxNCArMjg0LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmlj
dE1vZGUoKTsKICAgICB9CiAgICAgCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
cihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHN0YXRpYyBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9y
aWdpbiYgY29kZU9yaWdpbiwgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jaykKICAgICB7CiAg
ICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhl
Y3V0YWJsZS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUo
KS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+
YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/
IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGJhc2VsaW5lQ29kZUJsb2NrKCk7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9j
azsKKyAgICB9CisgICAgCisgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25z
dCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxp
bmVDb2RlQmxvY2soKSk7CiAgICAgfQogICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2Rl
QmxvY2soKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MzEsMTEgKzYzMSwx
MyBAQCBwcml2YXRlOgogCiAgICAgTm9kZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5k
ZXgpCiAgICAgewotICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKQorICAgICAgICBpZiAoIW1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9j
dXJyZW50SW5kZXgpCisgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJv
ZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpCisgICAgICAgICAgICAm
JiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgTmVnYXRpdmVaZXJvKSkKICAgICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAg
ICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJNYWtp
bmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRlciBpcyBhdCAl
dVxuIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1f
Y3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNl
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyAg
ICAgICAgcHJpbnRmKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNh
c2UgY291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFw
aDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5k
ZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwg
bV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRl
eCwgTmVnYXRpdmVaZXJvKSk7CiAjZW5kaWYKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9n
cmFwaFtub2RlSW5kZXhdLm9wKSB7CkBAIC02NDgsMTIgKzY1MCwxNCBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBBcml0aE11bDoKLSAg
ICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRv
VGFrZURlZXBlc3RTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgIGlmICht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZURlZXBlc3RTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9w
LT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpIHsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJN
YWtpbmcgQXJpdGhNdWwgQCV1IHRha2UgZGVlcGVzdCBzbG93IGNhc2UuXG4iLCBub2RlSW5kZXgp
OwogI2VuZGlmCiAgICAgICAgICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlQXJpdGhO
b2RlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1heU5lZ1plcm8pOwotICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0
U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkgewogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKICAgICAgICAgICAgICAgICBwcmludGYoIk1ha2luZyBBcml0aE11bCBAJXUg
dGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxuIiwgbm9kZUluZGV4KTsKICNlbmRpZgpAQCAtNjc5LDEz
ICs2ODMsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gY2FyZSBhYm91dCB3aGVuIHRoZSBvdXRj
b21lIG9mIHRoZSBkaXZpc2lvbiBpcyBub3QgYW4gaW50ZWdlciwgd2hpY2gKICAgICAgICAgLy8g
aXMgd2hhdCB0aGUgc3BlY2lhbCBmYXN0IGNhc2UgY291bnRlciB0ZWxscyB1cy4KICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlU
b1Rha2VTcGVjaWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgpKQorICAgICAgICBpZiAoIW1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNl
KG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KQorICAgICAgICAg
ICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJy
ZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpCiAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4Owog
ICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50Zigi
TWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2UgY291
bnRlciBpcyBhdCAldVxuIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBu
b2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnNwZWNpYWxGYXN0Q2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRl
eCktPm1fY291bnRlcik7CisgICAgICAgIHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJj
IyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBw
cm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5v
cCksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVu
dEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwogI2Vu
ZGlmCiAgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogSXQgbWlnaHQgYmUgcG9zc2libGUgdG8g
bWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIuIFRoZSBERkcgY2VydGFpbmx5IGNhbgorICAgICAgICAv
LyBkaXN0aW5ndWlzaCBiZXR3ZWVuIG5lZ2F0aXZlIHplcm8gYW5kIG92ZXJmbG93IGluIGl0cyBl
eGl0IHByb2ZpbGVzLgogICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VBcml0aE5vZGVG
bGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVybyk7CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gbm9kZUluZGV4OwpAQCAtODg3LDEyICs4OTUsMTQgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgIGVudW0geyBDb25zdGFudEZ1bmN0aW9uLCBM
aW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5cGU7CiAgICAgICAgICAgICAK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgcHJpbnRmKCJTbG93IGNhc2UgY291
bnQgZm9yIGNhbGwgYXQgQCVsdSBiYyMldTogJXUvJXUuXG4iLCBtX2dyYXBoLnNpemUoKSwgbV9j
dXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5s
aW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+ZXhlY3V0aW9uRW50cnlDb3VudCgpKTsKKyAg
ICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1OiAldS8ldTsg
ZXhpdCBwcm9maWxlOiAlZC5cbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9w
cm9maWxlZEJsb2NrLT5leGVjdXRpb25FbnRyeUNvdW50KCksIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAjZW5k
aWYKICAgICAgICAgICAgIAogICAgIGlmIChtX2dyYXBoLmlzRnVuY3Rpb25Db25zdGFudChtX2Nv
ZGVCbG9jaywgY2FsbFRhcmdldCkpCiAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRGdW5jdGlv
bjsKLSAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0
Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAhbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkpCisgICAgZWxzZSBpZiAoISFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdl
dENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxsZWUKKyAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2Fz
ZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKQogICAgICAg
ICBjYWxsVHlwZSA9IExpbmtlZEZ1bmN0aW9uOwogICAgIGVsc2UKICAgICAgICAgY2FsbFR5cGUg
PSBVbmtub3duRnVuY3Rpb247CkBAIC0xMTY3LDcgKzExNzcsMTAgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpz
dXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFicywgT3BJbmZvKE5v
ZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVy
YW5kKDEpKSkpOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFwaChBcml0
aEFicywgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rlck9mZnNldCAr
IGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLT5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQorICAg
ICAgICAgICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU92
ZXJmbG93KTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGVJbmRleCk7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTY2OCw3ICsxNjgxLDEwIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJ
bmZvJiBzdHViSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0U3R1
YkluZm8obV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgTWV0aG9kQ2FsbExpbmtJbmZvJiBt
ZXRob2RDYWxsID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRNZXRob2RD
YWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZiAobWV0aG9kQ2FsbC5zZWVuICYmICEhbWV0aG9kQ2FsbC5jYWNoZWRTdHJ1Y3R1cmUgJiYgIXN0
dWJJbmZvLnNlZW4pIHsKKyAgICAgICAgICAgIGlmIChtZXRob2RDYWxsLnNlZW4KKyAgICAgICAg
ICAgICAgICAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlCisgICAgICAgICAgICAgICAg
JiYgIXN0dWJJbmZvLnNlZW4KKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+
bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gSXQncyBtb25vbW9ycGhpYyBhcyBmYXIgYXMgd2UgY2FuIHRlbGws
IHNpbmNlIHRoZSBtZXRob2RfY2hlY2sgd2FzIGxpbmtlZAogICAgICAgICAgICAgICAgIC8vIGJ1
dCB0aGUgc2xvdyBwYXRoIChpLmUuIHRoZSBub3JtYWwgZ2V0X2J5X2lkKSBuZXZlciBmaXJlZC4K
IApAQCAtMTcxMSwxMiArMTcyNywxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4
KTsKICAgICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAg
ICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBHZXRCeUlkIEAlbHUgYmMjJXU6ICV1XG4i
LCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5k
ZXgpLT5tX2NvdW50ZXIpOworICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9y
IEdldEJ5SWQgQCVsdSBiYyMldTogJXU7IGV4aXQgcHJvZmlsZTogJWRcbiIsIG1fZ3JhcGguc2l6
ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5y
YXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRl
ciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgQmFkQ2FjaGUpKTsKICNlbmRpZgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXpl
X3Qgb2Zmc2V0ID0gbm90Rm91bmQ7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJl
U2V0OwotICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4gJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7
CisgICAgICAgICAgICBpZiAoc3R1YkluZm8uc2VlbgorICAgICAgICAgICAgICAgICYmICFtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3Vy
cmVudEluZGV4KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpIHsKICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgICAgICBj
YXNlIGFjY2Vzc19nZXRfYnlfaWRfc2VsZjogewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVy
ZS5nZXQoKTsKQEAgLTE4MDUsMTAgKzE4MjMsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgYm9vbCBhbHJlYWR5R2VuZXJhdGVkID0gZmFs
c2U7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAg
ICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgUHV0QnlJZCBAJWx1IGJjIyV1OiAldVxu
IiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudElu
ZGV4KS0+bV9jb3VudGVyKTsKKyAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZv
ciBQdXRCeUlkIEAlbHUgYmMjJXU6ICV1OyBleGl0IHByb2ZpbGU6ICVkXG4iLCBtX2dyYXBoLnNp
emUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50
ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIEJhZENhY2hlKSk7CiAjZW5kaWYgICAgICAgICAgICAKIAotICAgICAgICAgICAgaWYg
KHN0dWJJbmZvLnNlZW4gJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlr
ZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoc3R1
YkluZm8uc2VlbgorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAg
ICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDYWNoZSkpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJ
bmZvLmFjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRf
cmVwbGFjZTogewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0
dWJJbmZvLnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTAyNTYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTcgKzI4LDIwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1
ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotT1NSRXhpdDo6T1NSRXhpdChK
U1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQg
cmVjb3ZlcnlJbmRleCkKK09TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNv
dXJjZSBqc1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5
SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKICAgICAsIG1fdmFs
dWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fY2hlY2soY2hlY2spCiAgICAgLCBtX25v
ZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQogICAgICwgbV9jb2RlT3JpZ2luKGppdC0+bV9j
b2RlT3JpZ2luRm9yT1NSKQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCisg
ICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fY291bnQoMCkKICAgICAsIG1fYXJndW1lbnRzKGpp
dC0+bV9hcmd1bWVudHMuc2l6ZSgpKQogICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxl
cy5zaXplKCkpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkK
QEAgLTYxLDYgKzY0LDE0IEBAIHZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiB9
CiAjZW5kaWYKIAorYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxv
Y2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxv
Y2stPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA8PSBIZXVyaXN0aWNzOjpvc3JFeGl0UHJvbWlu
ZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICByZXR1cm4gQXNzZW1ibGVySGVscGVyczo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRC
YXNlbGluZUNvZGVibG9jayhtX2NvZGVPcmlnaW4sIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJl
cXVlbnRFeGl0U2l0ZShGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
LCBtX2tpbmQpKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlT3Jp
Z2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHQ29ycmVjdGFibGVK
dW1wUG9pbnQuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQ
UkluZm8uaCIKICNpbmNsdWRlICJERkdPcGVyYW5kcy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCkBAIC04MSw3ICs4Miw3IEBAIHByaXZhdGU6CiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNj
cmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKIC8vIGdvaW5nIGludG8g
YmFzZWxpbmUgY29kZS4KIHN0cnVjdCBPU1JFeGl0IHsKLSAgICBPU1JFeGl0KEpTVmFsdWVTb3Vy
Y2UsIFZhbHVlUHJvZmlsZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCos
IHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKKyAgICBPU1JFeGl0KEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVj
dWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKICAgICAKICAgICBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwogICAgIApAQCAtOTQsNiArOTUsOSBAQCBzdHJ1Y3Qg
T1NSRXhpdCB7CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OwogICAgIAorICAg
IEV4aXRLaW5kIG1fa2luZDsKKyAgICB1aW50MzJfdCBtX2NvdW50OworICAgIAogICAgIC8vIENv
bnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3aGlsZSBiZWlu
ZwogICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUuCiAgICAgaW50
IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKSAr
IG1fdmFyaWFibGVzLnNpemUoKTsgfQpAQCAtMTIwLDYgKzEyNCwxMyBAQCBzdHJ1Y3QgT1NSRXhp
dCB7CiAgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sq
IGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKKyAgICB7CisgICAg
ICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1
ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0K
KyAgICAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CiAj
ZW5kaWYKQEAgLTEyNyw2ICsxMzgsOSBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgVmVjdG9yPFZh
bHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAw
PiBtX3ZhcmlhYmxlczsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKworcHJpdmF0ZToKKyAg
ICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRm
Z0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKIH07CiAKICNpZiBERkdf
RU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZp
c2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw4IEBAIHZvaWQgT1NS
RXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAw
OyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1
ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJs
eUhlbHBlcnM6OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhp
dC5tX2NvdW50KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAg
bV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29k
ZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1Qy
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2
MSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAg
ICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAgLy8g
ICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBtX2pp
dC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29s
dXRlQWRkcmVzcygmZXhpdC5tX2NvdW50KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdU
MCk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJ
bmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSks
IEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAg
ICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNv
dmVyeUluZGV4IC0gMSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnBy
aW50ZihzdGRlcnIsICJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSBmb3IgY29kZSBibG9jayAlcC5c
biIsIGV4aXRJbmRleCwgY29kZUJsb2NrKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdlbmVyYXRp
bmcgT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBl
eGl0SW5kZXgsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2RlSW5k
ZXgsIGV4aXRLaW5kVG9TdHJpbmcobV9raW5kKSwgY29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgyLDcgKzEyODIs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgc3dpdGNo
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAg
ICAgICAgIGlmICgobm9kZS5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQobm9kZUlu
ZGV4KSkgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERh
dGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAg
IH0KQEAgLTEzMzIsNyArMTMzMiw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludEkKICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIuCiAgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYg
IXN0cmljdCB3ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC0x
Mzg5LDcgKzEzODksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJ
CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6
CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUp
OwogICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0
dXJuIGFsbG9jYXRlKCk7CiAgICAgfQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIGluZm8uZmlsbERv
dWJsZShmcHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZnByQWxs
b2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIEZQUlJl
ZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKICAgICAgICAgcmV0dXJuIGZwckFsbG9jYXRlKCk7CiAKICAgICBjYXNlIERhdGFGb3Jt
YXRKU0NlbGw6CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVEb3ViCiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0g
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyhqc1ZhbHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKIAogICAgICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBl
bmNvZGVkIGFzIGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBH
cHIpOwpAQCAtMTU3OCw3ICsxNTc4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3Bl
Y3VsYXRlQ2VsbAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2Fz
ZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERh
dGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91Ymxl
KSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4g
YWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE1OTIsNyArMTU5Miw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgICAgICBp
bmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
KTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGlu
Zm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xNjE2LDcg
KzE2MTYsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAg
Y2FzZSBEYXRhRm9ybWF0SlM6IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAg
ICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRK
U0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTE2MjcsNyArMTYyNyw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBjYXNlIERhdGFG
b3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgIGNhc2UgRGF0
YUZvcm1hdEJvb2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVy
biBhbGxvY2F0ZSgpOwogICAgIH0KIApAQCAtMTY1MSw3ICsxNjUxLDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZv
cm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5z
cGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9
PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE2
NjUsNyArMTY2NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wK
ICAgICAgICAgICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVh
bik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7
CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAg
IH0KICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CkBA
IC0xNjc1LDcgKzE2NzUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVC
b29sCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAg
ICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Jvb2xlYW4pIHsKICAgICAg
ICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFs
dWVGYWxzZSkpLCBncHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVj
dWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJS
ZWcpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
Z3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3Vs
YXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVn
KSk7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xNjkzLDcgKzE2OTMsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBn
cHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBtX2pp
dC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwg
Z3ByKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1
c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5
KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xl
YW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgbV9qaXQu
eG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdw
cik7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsK
ICAgICAgICAgcmV0dXJuIGdwcjsKQEAgLTE3MDUsNyArMTcwNSw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAg
ICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6IHsKLSAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
KTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0K
ICAgICAgICAgCkBAIC0xNzQ4LDkgKzE3NDgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAg
ICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhvcDFHUFIp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVSZWdzKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2so
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3Ay
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCBub2RlLmNoaWxkMigp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2pp
dC5tb3ZlKEltbTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CkBAIC0xODE3LDcgKzE4MTcsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAg
IGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgbV9qaXQu
bW92ZShUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1
bHRHUFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAg
ICAgCkBAIC0xODI2LDcgKzE4MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2Jq
ZWN0T3JPdGhlCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0
Lm1vdmUodmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CiAgICAg
CkBAIC0xODgyLDcgKzE4ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNh
bE5vdChOCiAgICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBz
aG91bGQgdXNlIGl0IGhlcmUuCkBAIC0xOTIxLDcgKzE5MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
bm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZh
bHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChuZWVkU3BlY3VsYXRp
b25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwg
dGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwpAQCAtMTkyOSw3ICsxOTI5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIGlmIChu
ZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBzY3Jh
dGNoR1BSKTsKICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1
ZU51bGwpKSkpOwogICAgIH0KICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAg
ICAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwpAQCAtMTk5Nyw3ICsxOTk3
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAg
ICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVl
R1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFs
c2UpKSkpLCBub3RUYWtlbik7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
SlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOwogCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuanVtcCgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOwogICAgICAg
ICAgICAgdmFsdWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGRCcmFu
Y2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpLCBub3RUYWtl
bik7CkBAIC0yMDQzLDcgKzIwNDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlz
IGxvY2FsLCB0aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYgKHByZWRp
Y3Rpb24gPT0gUHJlZGljdE5vbmUgfHwgdmFsdWUuaXNDbGVhcigpKSB7Ci0gICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTIxMTMsMTQgKzIxMTMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsK
ICAgICAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAg
ICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
IHsKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGls
ZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAgICAg
ICAgICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkp
OwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgewpAQCAtMjIyNSw3ICsyMjI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAg
ICAgICAgLy8gVGVzdCB0aGUgb3BlcmFuZCBpcyBwb3NpdGl2ZS4KLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpMZXNzVGhhbiwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDAp
KSk7CiAKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1h
dCgpKTsKQEAgLTIyNzMsNyArMjI3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTEp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
QWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIEltbTMyKGltbTEpLCBy
ZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOwog
CiAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyODgsNyArMjI4OCw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAg
IG1faml0LmFkZDMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBv
cDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIo
aW1tMiksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTIzMTMsMTEgKzIzMTMsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrID0gbV9qaXQu
YnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBncHIxLCBncHIyLCBncHJSZXN1
bHQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJl
c3VsdCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJS
ZXN1bHQsIGdwcjIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShT
cGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZ3ByMiA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVj
dWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3ZlckZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1
bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMSkpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIGNoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdmVyRmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjayk7CiAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByUmVzdWx0LCBtX2NvbXBpbGVJ
bmRleCk7CkBAIC0yMzUzLDcgKzIzNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihJbW0zMihpbW0y
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwg
cmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3Zl
ckZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsK
IAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzY3LDcgKzIzNjcsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9q
aXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQu
c3ViMzIob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBvcDIuZ3By
KCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3Zl
ckZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CiAK
ICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTIzOTksMTMgKzIzOTksMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9
IG9wMS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQUikpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQUikpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6
ZXJvLCB0aGVuIHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAgICAgLy8g
dG8gcHJvZHVjZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAgaWYgKCFub2RlQ2FuSWdub3Jl
TmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwotICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDJHUFIsIFRydXN0
ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgICAgIG51bWVyYXRvck5vblplcm8ubGluaygmbV9q
aXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yNDI1LDcgKzI0MjUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgICAgIC8v
IENoZWNrIHRoYXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRo
ZW4gd2UnZCBiZSBvYmxpZ2F0ZWQgdG8KICAgICAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUg
cmVzdWx0IGluc3RlYWQuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBlZHgu
Z3ByKCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBl
ZHguZ3ByKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChlYXgu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ1OCw3ICsy
NDU4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgbV9qaXQucnNoaWZ0MzIocmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDMxKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihzY3Jh
dGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQueG9yMzIoc2NyYXRj
aC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdC5ncHIoKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOwogICAgICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CkBAIC0yNjg4LDE1ICsyNjg4LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlUmVnKSwg
bm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VSZWcpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAg
ICAgICAgLy8gRklYTUU6IEluIGNhc2VzIHdoZXJlIHRoZXJlIGFyZSBzdWJzZXF1ZW50IGJ5X3Zh
bCBhY2Nlc3NlcyB0byB0aGUgc2FtZSBiYXNlIGl0IG1pZ2h0IGhlbHAgdG8gY2FjaGUKICAgICAg
ICAgLy8gdGhlIHN0b3JhZ2UgcG9pbnRlciAtIGVzcGVjaWFsbHkgaWYgdGhlcmUgaGFwcGVucyB0
byBiZSBhbm90aGVyIHJlZ2lzdGVyIGZyZWUgcmlnaHQgbm93LiBJZiB3ZSBkbyBzbywKICAgICAg
ICAgLy8gdGhlbiB3ZSdsbCBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHRlbXBvcmFyeSBmb3IgcmVz
dWx0LgogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcs
IE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwg
bV92ZWN0b3JbMF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIHJlc3VsdC5ncHIoKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0yNzk5LDcgKzI3
OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29u
dGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lw
IHRoZSBjaGVjay4KICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAK
ICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgcHJvcGVydHkudXNlKCk7CkBAIC0yOTQzLDEz
ICsyOTQzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0
ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7
CiAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAog
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpT
QXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2Fk
MzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFy
cmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAg
ICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVu
Z3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCiAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCkBA
IC0yOTg2LDcgKzI5ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIo
KTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwog
ICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9P
RkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAt
MzA5MSw3ICszMDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjogewogICAgICAgICAvLyBXZSBleHBlY3Qg
dGhhdCB0aHJvdyBzdGF0ZW1lbnRzIGFyZSByYXJlIGFuZCBhcmUgaW50ZW5kZWQgdG8gZXhpdCB0
aGUgY29kZSBibG9jawogICAgICAgICAvLyBhbnl3YXksIHNvIHdlIGp1c3QgT1NSIGJhY2sgdG8g
dGhlIG9sZCBKSVQgZm9yIG5vdy4KLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMjI0LDcgKzMyMjQsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIWlzT3RoZXJQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRV
bmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFs
dWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVy
cHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CkBA
IC0zMjM5LDcgKzMyMzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQ
UiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJp
bmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklU
Q29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIp
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBy
ZXN1bHRHUFIpOwogICAgICAgICAgICAgCkBAIC0zMjgzLDcgKzMyODMsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChz
dHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgogICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKCFpc0ZpbmFsT2Jq
ZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHByb3RvR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOworICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MocHJvdG9HUFIpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAg
ICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlw
ZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5
cGUpKSk7CkBAIC0zMzkwLDcgKzMzOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogICAgIGNhc2UgR2V0QnlJZDogewogICAgICAgICBpZiAoIW5v
ZGUucHJlZGljdGlvbigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM0NDYsMTIgKzM0NDYsMTIg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc0Fy
cmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQo
KSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSks
IHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBy
ZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAKICAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNDY1LDcgKzM0
NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0
T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAKQEAgLTM0ODEsNyArMzQ4MSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQ
UiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNCeXRlQXJyYXlQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0J5dGVBcnJheTo6b2Zmc2V0T2ZT
dG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSksIHJlc3VsdEdQ
Uik7CkBAIC0zNTIzLDcgKzM1MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgfQogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQ
dHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS5mdW5jdGlvbigp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9u
LmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNTM4LDcgKzM1MzgsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEFTU0VSVChub2RlLnN0
cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS5zdHJ1Y3R1
cmVTZXQoKS5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0
cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCks
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBub2RlLnN0cnVjdHVyZVNldCgpWzBdKSk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsK
ICAgICAgICAgICAgIApAQCAtMzU0OSw3ICszNTQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
b2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKICAgICAgICAgICAgICAgICBkb25l
LmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJl
LmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpW2ldKSk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hX
ZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVj
dHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNo
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAg
fQpAQCAtMzcwNSw3ICszNzA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogCiAgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UnLgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmUu
Z3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFu
Y2UpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb0Zs
YWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZh
dWx0SGFzSW5zdGFuY2UpKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKQEAgLTM3OTQsNyArMzc5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewot
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2
aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyNCw5ICs4MjQsOSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIo
KTsKICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5j
aGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHZwdHIpKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2Rl
LmNoaWxkMigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih2cHRyKSkpOwogICAgIAogICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9u
LCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sg
KyAxKSkKQEAgLTEwNTksMTI4ICsxMDU5LDEyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVj
a0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZh
cmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAg
IGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAg
ICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6
dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5
VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGlj
dGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAg
ICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5
dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwogICAgICAgICAg
ICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZh
bHNlKSksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRl
bXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIo
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRv
cigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNJbnQxNkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewog
ICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5s
b2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCks
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkg
ewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAu
Z3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3By
KCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNj
cmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50OEFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRl
bXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAu
Z3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlE
ZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIp
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGljdGVk
VHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0
ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5t
X3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50MzJBcnJheVByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0
b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXlQcmVkaWN0
aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJh
eURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGbG9hdDY0QXJy
YXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIo
KSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZs
b2F0NjRBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0KICNlbHNlCiAgICAg
ICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVh
bFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgICAgICBl
bHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdp
c3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0J5dGVB
cnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdG
b3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1w
LmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1w
LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5Q
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwogICAgICAgICBlbHNlIGlmIChpc0lu
dDhBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0
YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwog
ICAgICAgICB9IGVsc2UgaWYgKGlzSW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
IHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9q
aXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIo
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9h
ZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5
RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJh
eURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkFycmF5
UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3By
KCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAg
ICAgfSBlbHNlIGlmIChpc1VpbnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2Ny
aXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNj
cmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDE2QXJyYXlQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAg
IH0gIGVsc2UgaWYgKGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNj
cmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURl
c2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGlzRmxvYXQzMkFycmF5
UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRl
bXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3By
KCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAg
ICAgICAgIH0gICBlbHNlIGlmIChpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5n
cHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5
bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0
QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9h
dDY0QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IAogI2VuZGlmCiAgICAg
fQpAQCAtMTM1NCwxMyArMTM1NCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
Q2hhckNvZGVBCiAgICAgCiAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgQVNTRVJUKCEoYXQobm9kZS5j
aGlsZDEoKSkucHJlZGljdGlvbigpICYgUHJlZGljdFN0cmluZykpOwotICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVy
IG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdHJpbmdSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwog
CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcg
PSBzY3JhdGNoLmdwcigpOwpAQCAtMTM5MywxMyArMTM5MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAKICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICBBU1NFUlQo
IShhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSk7Ci0gICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7
CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdl
IGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9v
IGxhcmdlCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkp
KTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpKTsKIAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlJl
ZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKQEAgLTE0MTcsNyArMTQxNyw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBtX2ppdC5sb2FkMTYoTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3Nl
bWJsZXI6OlRpbWVzVHdvLCAwKSwgc2NyYXRjaFJlZyk7CiAKICAgICAvLyBXZSBvbmx5IHN1cHBv
cnQgYXNjaWkgY2hhcmFjdGVycwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3Jh
dGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgxMDApKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgxMDApKSk7CiAK
ICAgICAvLyA4IGJpdCBzdHJpbmcgdmFsdWVzIGRvbid0IG5lZWQgdGhlIGlzQVNDSUkgY2hlY2su
CiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBzbWFsbFN0cmlu
Z3NSZWcgPSBzbWFsbFN0cmluZ3MuZ3ByKCk7CiAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHNjcmF0Y2hSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwotICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2Vt
Ymxlcjo6WmVybywgc2NyYXRjaFJlZykpOwogICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9j
b21waWxlSW5kZXgpOwogfQogCkBAIC0xNDk1LDE0ICsxNDk1LDE0IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckIKICAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5v
ZGUuY2hpbGQzKCk7CiAgICAgCiAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKGJhc2VJbmRleCkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5
dGVBcnJheVZQdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJy
YXlWUHRyKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7
CiAKICAgICBpZiAoYXQodmFsdWVJbmRleCkuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFs
dWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlSW5kZXgpOwogICAgICAgICBpZiAo
IWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwog
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0xNTYzLDcgKzE1NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkJ5CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3By
KCk7CiAKICAgICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU3
NCw3ICsxNTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25CeQog
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNCeXRl
QXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgCiAgICAgLy8gdW5z
aWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFu
ZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnl0
ZUFycmF5OjpvZmZzZXRPZlNpemUoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9y
YWdlUmVnLCBCeXRlQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSkpOwogCiAgICAgbV9qaXQubG9hZDgo
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9B
c3NlbWJsZXI6OlRpbWVzT25lLCBCeXRlQXJyYXk6Om9mZnNldE9mRGF0YSgpKSwgc3RvcmFnZVJl
Zyk7CiAgICAgaW50ZWdlclJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRleCk7CkBAIC0x
NTg5LDcgKzE1ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJh
CiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBpZiAobmVl
ZHNTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAKICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci5tX2xl
bmd0aE9mZnNldCksIHJlc3VsdEdQUik7CiAgICAgCkBAIC0xNjExLDcgKzE2MTEsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAKICAgICBpZiAoc3BlY3VsYXRp
b25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykgewogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5v
UmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NTIs
MTQgKzE2NTIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQog
ICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKICAgICAKICAgICBpZiAo
c3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwg
YmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
ZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwog
ICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7CiAgICAgCiAgICAg
aWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZUluZGV4KTsKICAgICAgICAgaWYgKCFqc1ZhbHVl
LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTczNCw3ICsxNzM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25GbAogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5
cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJh
bmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25S
ZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5t
X3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgIAogICAgIEdQ
UlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCkBAIC0xODEwLDcgKzE4MTAsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiB7CiAgICAgLy8gQ2hlY2sgdGhh
dCBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LgogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MocHJvdG90eXBlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2Ny
YXRjaFJlZyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoSWZOb3RPYmplY3Qo
c2NyYXRjaFJlZykpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgc2NyYXRjaFJlZyB3aXRoIHRo
ZSB2YWx1ZSBiZWluZyBjaGVja2VkLgogICAgIG1faml0Lm1vdmUodmFsdWVSZWcsIHNjcmF0Y2hS
ZWcpOwpAQCAtMTk2NCw3ICsxOTY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNv
ZnRNb2R1bG8oTgogICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNo
aWxkMigpKTsKICAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwogCi0gICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21w
aWxlcjo6WmVybywgb3AyR3ByKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8s
IG9wMkdwcikpOwogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICBHUFJUZW1wb3Jh
cnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTIwOTIsMTMgKzIwOTIsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICAvLyB0aGUg
c2VtYW50aWNzIGFyZSBhbHdheXMgYXMgaWYgdGhlIG11bHRpcGx5IGhhZCBiZWVuIHBlcmZvcm1l
ZCBpbiB0aGUgZG91YmxlCiAgICAgICAgIC8vIGRvbWFpbi4KICAgICAgICAgICAgIAotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVs
MzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZzEsIHJlZzIs
IHJlc3VsdC5ncHIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBuZWdh
dGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJvdXQgc3VjaCB0aGlu
Z3MuCiAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25a
ZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3Rl
ZEltbTMyKDApKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBU
cnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVa
ZXJvLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRydXN0ZWRJbW0zMigwKSkpOwog
ICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIApAQCAt
MjMyMiw3ICsyMzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQ
cgogICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxkMigpKS5w
cmVkaWN0aW9uKCk7CiAgICAgaWYgKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYm
IGJhc2VQcmVkaWN0aW9uKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtMjMzMSw2MSArMjMzMSw2MSBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9y
YWdlLmdwcigpOwogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gUHJl
ZGljdFN0cmluZykgewogICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVl
KCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgCiAgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0IHdl
J3JlIG5vdCBhY2Nlc3NpbmcgYSByb3BlCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IHN0b3JhZ2VSZWcpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHN0b3JhZ2VSZWcpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VS
ZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQnl0
ZUFycmF5KCkpIHsKICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNCeXRlQXJyYXk6Om9mZnNl
dE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxk
MSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFy
cmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5
RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzSW50OEFycmF5UHJlZGljdGlvbihtX3N0YXRl
LmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlw
dG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0
cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxz
ZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CiAg
ICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzSW50MTZB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBz
dG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUludDMyQXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsK
ICAgICAgICAgaWYgKCFpc0ludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0
b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2Rl
LmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKICAgICAgICAgY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNVaW50OEFycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlw
dG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwog
ICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJy
YXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9
IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlm
ICghaXNVaW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3Jh
Z2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJh
eURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5
RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzVWludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92
cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBl
bHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkg
ewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0
Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlz
RmxvYXQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFz
ZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9m
ZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURl
c2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3Zw
dHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVn
KTsKICAgICB9CiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRleCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5o
CShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMjksMzcgKzIwMjksMzcgQEAgcHJpdmF0
ZToKICNlbmRpZgogCiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwpCisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXAganVtcFRvRmFpbCkKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2th
eSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVu
ZE9TUkV4aXQoT1NSRXhpdChqc1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2ZpbGVGb3Iobm9k
ZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOwogICAgIH0KICAgICAvLyBBZGQgYSBzZXQgb2Yg
c3BlY3VsYXRpb24gY2hlY2tzIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lk
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXgg
bm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQorICAgIHZv
aWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVt
cHNUb0ZhaWwpCiAgICAgewogICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXAsIDE2
PiBKdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVtcHMoKTsKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgSnVtcFZlY3RvcltpXSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwg
SnVtcFZlY3RvcltpXSk7CiAgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdp
dGggYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkK
KyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBq
dW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKICAgICB7CiAg
ICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
bV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3ZlcnkpOwot
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGpzVmFsdWVT
b3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlz
LCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkpOwor
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpz
VmFsdWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWls
LCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMo
KSkpOwogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2FsbHkgZGV0ZXJtaW5l
IHRoYXQgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwuCi0gICAgdm9pZCB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJbmRl
eCkKKyAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtpbmQs
IEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiU3Bl
Y3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKICNlbmRpZgogICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soanNWYWx1ZVJlZ3MsIG5vZGVJbmRleCwgbV9qaXQuanVtcCgpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkpOwog
ICAgICAgICBtX2NvbXBpbGVPa2F5ID0gZmFsc2U7CiAgICAgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkocmV2aXNpb24gMTAyNTYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw4IEBAIGV4dGVybiBkb3VibGUgY291bGRUYWtlU2xvd0Nhc2VUaHJl
c2hvbGQKIGV4dGVybiB1bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudDsK
IGV4dGVybiB1bnNpZ25lZCBjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudDsKIAorZXh0ZXJu
IGRvdWJsZSBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGU7CisKIGV4dGVybiB1
bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CiBleHRlcm4gdW5zaWduZWQgbGFy
Z2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118920</attachid>
            <date>2011-12-12 17:22:18 -0800</date>
            <delta_ts>2011-12-13 00:38:37 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>countdfgfail_patch_4.diff</filename>
            <type>text/plain</type>
            <size>122747</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMyBA
QAorMjAxMS0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQga25vdyBleGFjdGx5IHdoeSByZWNvbXBpbGF0aW9uIHdhcyB0cmlnZ2VyZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBX
T1JLIElOIFBST0dSRVNTLiBJJ3ZlIGNoZWNrZWQgdGhhdCBpdCBzb3J0IG9mIGRvZXMgd2hhdCBp
dCB3YXMga2luZCBvZiBtZWFudCB0bworICAgICAgICBkbywgYnV0IEkgc3RpbGwgbmVlZCB0byBy
dW4gYSBidW5jaCBtb3JlIHRlc3RzLgorICAgICAgICAKKyAgICAgICAgRWFjaCBPU1IgZXhpdCBp
cyBub3cgaW5kaXZpZHVhbGx5IGNvdW50ZWQsIGFzIHdlbGwgYXMgY291bnRpbmcgdGhlIHRvdGFs
IG51bWJlciAKKyAgICAgICAgb2YgT1NSIGV4aXRzIHRoYXQgb2NjdXJyZWQgaW4gYSBjb2RlIGJs
b2NrLiBJZiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZCwgd2UKKyAgICAgICAgY2hlY2sgdG8g
c2VlIGlmIHRoZXJlIGFyZSBPU1IgZXhpdCBzaXRlcyB0aGF0IG1ha2UgdXAgYSBzdWZmaWNpZW50
bHkgbGFyZ2UKKyAgICAgICAgcG9ydGlvbiBvZiB0aGUgdG90YWwgT1NSIGV4aXRzIHRoYXQgb2Nj
dXJyZWQuIEZvciBhbnkgc3VjaCBPU1IgZXhpdCBzaXRlcywgd2UKKyAgICAgICAgYWRkIGEgZGVz
Y3JpcHRpb24gb2YgdGhlIHNpdGUgKGJ5dGVjb2RlIGluZGV4LCBraW5kKSB0byBhIGRhdGEgc3Ry
dWN0dXJlIGluIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIGJhc2VsaW5lIENvZGVCbG9jay4g
VGhlbiwgd2hlbiB3ZSByZWNvbXBpbGUgdGhlIGNvZGUsIHdlIGltbWVkaWF0ZWx5CisgICAgICAg
IGtub3cgd2hpY2ggc3BlY3VsYXRpb25zIHdvdWxkIGJlIHVud2lzZSBiYXNlZCBvbiB0aGUgZmFj
dCB0aGF0IHByZXZpb3VzIHN1Y2gKKyAgICAgICAgc3BlY3VsYXRpb25zIHByb3ZlZCB0byBiZSBm
cnVpdGxlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0
ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdFByb2ZpbGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFi
bGVFeGl0UHJvZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjp+UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmV4
aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OmV4aXRLaW5kSXNDb3VudGFibGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJl
cXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGU6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZUhh
c2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6aGFz
RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6
YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5dGVBcnJheSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNl
T2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
U29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFs
aXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuY3BwOgorICAgICAgICAoSlNDOjpIZXVy
aXN0aWNzOjppbml0aWFsaXplSGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0
aWNzLmg6CisKIDIwMTEtMTItMTIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CiAKICAgICAgICAgRWxpbWluYXRlIER1cGxpY2F0ZSB3b3JkIGF0IGEgdGltZSBlcXVhbCBjb2Rl
IGluIFN0cmluZ0ltcGwuY3BwIGFuZCBTdHJpbmdIYXNoLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsOCBAQAogCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5
QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3JIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07CisJCTBG
QkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkRE
IC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0
Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09T
UkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDk3NkMxNDY4QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVs
cGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC04NTEsNiArODUzLDggQEAKIAkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0YUFsbG9j
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjJFMTNGQzY2QUUw
MDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTUxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3
MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
MDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQyIC8qIERG
R0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDYwLDYgKzI0NjQsOCBAQAogCQk5
NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgKi8sCisJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFG
b3JtYXQuaCAqLywKIAkJCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLywKQEAgLTI5ODEsNiArMjk4Nyw3IEBACiAJCQkJQTczQkUxN0UxNDg0MjA4NDAwOTEyMDRC
IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNCRTE4MDE0ODQyMEE4
MDA5MTIwNEIgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTM1MTgsNiArMzUyNSw3IEBACiAJCQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRG
IC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczQkUxNjgxNDg0MjA1
MjAwOTEyMDRCIC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0JFMTZB
MTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQxLDYgKzIyNDEsMjggQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KERGR19KSVQpCit2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCit7Cisg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIEFTU0VSVChh
bHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAg
IEFTU0VSVCghIW1fZGZnRGF0YSk7CisgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gYWx0ZXJuYXRpdmUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9k
ZmdEYXRhLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERGRzo6T1NSRXhpdCYgZXhp
dCA9IG1fZGZnRGF0YS0+b3NyRXhpdFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmICghZXhpdC5j
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSh0aGlzLCBwcm9maWxlZEJsb2NrKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1LCAl
cykgZm9yIGNvZGUgYmxvY2sgJXAgb2NjdXJyZWQgZnJlcXVlbnRseTsgY291bnRpbmcgYXMgZnJl
cXVlbnQgZXhpdCBzaXRlLlxuIiwgaSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwg
ZXhpdC5tX25vZGVJbmRleCwgREZHOjpleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdGhp
cyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNpZiBF
TkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVBy
b2ZpbGVzKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUg
IkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxD
b2RlQ2FjaGUuaCIKQEAgLTc5Niw2ICs3OTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoaGFzQ29kZU9yaWdpbnMoKSk7CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5
U2VhcmNoPENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0
dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbj4oY29kZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3JpZ2lu
cygpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LT5jb2RlT3JpZ2luOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZEZyZXF1
ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmFkZChzaXRlKTsKKyAgICAgICAg
fQorCisgICAgICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9l
eGl0UHJvZmlsZTsgfQogI2VuZGlmCiAKICAgICAgICAgLy8gQ29uc3RhbnQgUG9vbApAQCAtMTA2
NSw2ICsxMDc0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVvcHRpbWl6ZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpICE9IHRoaXMpOwor
ICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50KCktPmFsdGVybmF0aXZlKCkgPT0gdGhpcyk7
CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT50YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CiAg
ICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbigpOwogICAgICAgICAgICAgY291bnRS
ZW9wdGltaXphdGlvbigpOwogICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwpAQCAt
MTA5Myw2ICsxMTA0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZWxzZQorICAgICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KKyNlbmRpZgorICAgICAgICAKICNp
ZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIHZv
aWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7
CiAKQEAgLTEyMTIsNiArMTIyOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsKICAg
ICAgICAgCiAgICAgICAgIE93blB0cjxERkdEYXRhPiBtX2RmZ0RhdGE7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jaworICAgICAgICAvLyBmb3IgREZHIGNvZGUgYmxv
Y2tzLgorICAgICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0V4aXRQcm9maWxlOjpFeGl0UHJvZmlsZSgpIHsgfQorRXhpdFByb2ZpbGU6
On5FeGl0UHJvZmlsZSgpIHsgfQorCitib29sIEV4aXRQcm9maWxlOjphZGQoY29uc3QgRnJlcXVl
bnRFeGl0U2l0ZSYgc2l0ZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVx
dWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQorICAgIC8v
IGludG8gaXQuCisgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKSB7CisgICAgICAgIG1fZnJl
cXVlbnRFeGl0U2l0ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+KCkp
OworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0ZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCBhZGQgaXQgaWYgaXQncyBhbHJl
YWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ssIGJlY2F1c2Ugd2UKKyAgICAv
LyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29kZSBleGl0cyB0
ZW5kcyB0byBub3QgYmUgbGFyZ2UsCisgICAgLy8gYW5kIHRoaXMgY29kZSBpcyBvbmx5IHVzZWQg
d2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
ZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmFwcGVuZChzaXRlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4
aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQoreworICAgIGlmICghcHJvZmls
ZS5tX2ZyZXF1ZW50RXhpdFNpdGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMuYWRkKHByb2ZpbGUubV9mcmVxdWVudEV4
aXRTaXRlcy0+YXQoaSkpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJsZUV4
aXRQcm9maWxlKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRXhpdFByb2ZpbGVfaAorI2RlZmluZSBE
RkdFeGl0UHJvZmlsZV9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworZW51bSBFeGl0S2luZCB7CisgICAgRXhpdEtpbmRVbnNldCwKKyAg
ICBCYWRUeXBlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHR5cGUgcHJlZGljdGlvbiB3YXMgd3Jv
bmcuCisgICAgQmFkQ2FjaGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFuIGlubGluZSBjYWNoZSB3
YXMgd3JvbmcuCisgICAgT3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIG92ZXJmbG93
LgorICAgIE5lZ2F0aXZlWmVybywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgZW5jb3VudGVyZWQg
bmVnYXRpdmUgemVyby4KKyAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9m
IHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2Vz
IG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgorfTsKKworI2lmbmRlZiBOREVC
VUcKK2lubGluZSBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBy
ZXR1cm4gIlVuc2V0IjsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgICAgIHJldHVybiAiQmFkVHlw
ZSI7CisgICAgY2FzZSBCYWRDYWNoZToKKyAgICAgICAgcmV0dXJuICJCYWRDYWNoZSI7CisgICAg
Y2FzZSBPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJPdmVyZmxvdyI7CisgICAgY2FzZSBOZWdh
dGl2ZVplcm86CisgICAgICAgIHJldHVybiAiTmVnYXRpdmVaZXJvIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KK30KKyNlbmRpZgorCitpbmxpbmUgYm9v
bCBleGl0S2luZElzQ291bnRhYmxlKEV4aXRLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5k
KSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgY2FzZSBVbmNvdW50YWJsZToKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CitwdWJsaWM6CisgICAgRnJlcXVlbnRFeGl0U2l0
ZSgpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAg
ICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEZy
ZXF1ZW50RXhpdFNpdGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKKyAgICAgICAgLCBtX2tp
bmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZyZXF1
ZW50RXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEV4aXRLaW5kIGtpbmQpCisgICAg
ICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2tpbmQo
a2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChleGl0S2luZElzQ291bnRhYmxlKGtpbmQpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fa2luZCA9PSBFeGl0S2luZFVuc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0Cisg
ICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmludEhhc2go
bV9ieXRlY29kZU9mZnNldCkgKyBtX2tpbmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorICAgIEV4
aXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9
PSBFeGl0S2luZFVuc2V0ICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgRXhpdEtpbmQgbV9raW5kOworfTsK
Kworc3RydWN0IEZyZXF1ZW50RXhpdFNpdGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBhLCBjb25zdCBGcmVx
dWVudEV4aXRTaXRlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlOworCitjbGFzcyBFeGl0UHJv
ZmlsZSB7CitwdWJsaWM6CisgICAgRXhpdFByb2ZpbGUoKTsKKyAgICB+RXhpdFByb2ZpbGUoKTsK
KyAgICAKKyAgICAvLyBBZGQgYSBuZXcgZnJlcXVlbnQgZXhpdCBzaXRlLiBSZXR1cm4gdHJ1ZSBp
ZiB0aGlzIGlzIGEgbmV3IG9uZSwgb3IgZmFsc2UKKyAgICAvLyBpZiB3ZSBhbHJlYWR5IGtuZXcg
YWJvdXQgaXQuIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24sIGJlY2F1c2UgaXQgZXJycworICAg
IC8vIG9uIHRoZSBzaWRlIG9mIGtlZXBpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGNvbXBhY3QuIEFs
c28sIHRoaXMgd2lsbCBvbmx5CisgICAgLy8gYmUgY2FsbGVkIGEgZml4ZWQgbnVtYmVyIG9mIHRp
bWVzIHBlciByZWNvbXBpbGF0aW9uLiBSZWNvbXBpbGF0aW9uIGlzCisgICAgLy8gcmFyZSB0byBi
ZWdpbiB3aXRoLCBhbmQgaW1wbGllcyBkb2luZyBPKG4pIG9wZXJhdGlvbnMgb24gdGhlIENvZGVC
bG9jaworICAgIC8vIGFueXdheS4KKyAgICBib29sIGFkZChjb25zdCBGcmVxdWVudEV4aXRTaXRl
JiBzaXRlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFF1ZXJ5YWJsZUV4aXRQ
cm9maWxlOworICAgIAorICAgIE93blB0cjxWZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4gPiBtX2Zy
ZXF1ZW50RXhpdFNpdGVzOworfTsKKworY2xhc3MgUXVlcnlhYmxlRXhpdFByb2ZpbGUgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IFF1ZXJ5YWJsZUV4aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxl
Jik7CisgICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CisgICAgCisgICAgYm9vbCBoYXNFeGl0
U2l0ZShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZnJlcXVlbnRFeGl0U2l0ZXMuZmluZChzaXRlKSAhPSBtX2ZyZXF1ZW50RXhpdFNp
dGVzLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aGFzRXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CisgICAg
fQorcHJpdmF0ZToKKyAgICBIYXNoU2V0PEZyZXF1ZW50RXhpdFNpdGU+IG1fZnJlcXVlbnRFeGl0
U2l0ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBERkdF
eGl0UHJvZmlsZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NCwxNCArMjg0
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKTsKICAgICB9CiAgICAgCi0g
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2Rl
T3JpZ2luKQorICAgIHN0YXRpYyBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jaykKICAgICB7CiAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0
aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrKCk7
CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICB9CisgICAgCisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2soKSk7CiAgICAgfQog
ICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2soKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEw
MjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MzEsMTEgKzYzMSwxMyBAQCBwcml2YXRlOgogCiAgICAgTm9k
ZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAo
IW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2Uo
bV9jdXJyZW50SW5kZXgpKQorICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgT3ZlcmZsb3cpCisgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkKICAg
ICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUg
YmVjYXVzZSBzbG93LWNhc2UgY291bnRlciBpcyBhdCAldVxuIiwgR3JhcGg6Om9wTmFtZShtX2dy
YXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMg
QCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQg
ZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUlu
ZGV4XS5vcCksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50
SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSk7CiAjZW5k
aWYKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ncmFwaFtub2RlSW5kZXhdLm9wKSB7CkBA
IC02NDgsMTIgKzY1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgICAgIGlmIChtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShtX2N1
cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAg
ICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJNYWtpbmcgQXJpdGhNdWwgQCV1IHRha2Ug
ZGVlcGVzdCBzbG93IGNhc2UuXG4iLCBub2RlSW5kZXgpOwogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU92ZXJmbG93
IHwgTm9kZU1heU5lZ1plcm8pOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VT
bG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVn
YXRpdmVaZXJvKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICBwcmludGYoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxu
Iiwgbm9kZUluZGV4KTsKICNlbmRpZgpAQCAtNjc5LDEzICs2ODMsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gY2FyZSBhYm91dCB3aGVuIHRoZSBvdXRjb21lIG9mIHRoZSBkaXZpc2lvbiBpcyBu
b3QgYW4gaW50ZWdlciwgd2hpY2gKICAgICAgICAgLy8gaXMgd2hhdCB0aGUgc3BlY2lhbCBmYXN0
IGNhc2UgY291bnRlciB0ZWxscyB1cy4KICAgICAgICAgCi0gICAgICAgIGlmICghbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTcGVjaWFsRmFzdENhc2UobV9j
dXJyZW50SW5kZXgpKQorICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAg
ICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE92ZXJmbG93KQorICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykp
CiAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJj
IyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2UgY291bnRlciBpcyBhdCAldVxuIiwgR3JhcGg6
Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAg
IHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0
LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBH
cmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCksIG5vZGVJbmRleCwgbV9jdXJyZW50
SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNl
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBP
dmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIu
IFRoZSBERkcgY2VydGFpbmx5IGNhbgorICAgICAgICAvLyBkaXN0aW5ndWlzaCBiZXR3ZWVuIG5l
Z2F0aXZlIHplcm8gYW5kIG92ZXJmbG93IGluIGl0cyBleGl0IHByb2ZpbGVzLgogICAgICAgICBt
X2dyYXBoW25vZGVJbmRleF0ubWVyZ2VBcml0aE5vZGVGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBO
b2RlTWF5TmVnWmVybyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwpAQCAt
NzkzLDYgKzgwMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBTY3JpcHRFeGVjdXRh
YmxlKiBleGVjdXRhYmxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
OyB9CiAgICAgICAgIAorICAgICAgICBRdWVyeWFibGVFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxl
OworICAgICAgICAKICAgICAgICAgLy8gUmVtYXBwaW5nIG9mIGlkZW50aWZpZXIgYW5kIGNvbnN0
YW50IG51bWJlcnMgZnJvbSB0aGUgY29kZSBibG9jayBiZWluZwogICAgICAgICAvLyBpbmxpbmVk
IChpbmxpbmUgY2FsbGVlKSB0byB0aGUgY29kZSBibG9jayB0aGF0IHdlJ3JlIGlubGluaW5nIGlu
dG8KICAgICAgICAgLy8gKHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIHdoaWNoIGlzIHRoZSB0cmFu
c2l0aXZlLCB0aG91Z2ggbm90IG5lY2Vzc2FyaWx5CkBAIC04ODcsMTIgKzg5NywxNCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgZW51bSB7IENvbnN0YW50
RnVuY3Rpb24sIExpbmtlZEZ1bmN0aW9uLCBVbmtub3duRnVuY3Rpb24gfSBjYWxsVHlwZTsKICAg
ICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBwcmludGYoIlNs
b3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1OiAldS8ldS5cbiIsIG1fZ3JhcGgu
c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291
bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5leGVjdXRpb25FbnRyeUNv
dW50KCkpOworICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBjYWxsIGF0IEAlbHUgYmMj
JXU6ICV1LyV1OyBleGl0IHByb2ZpbGU6ICVkLlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVu
dEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmV4ZWN1dGlvbkVudHJ5Q291bnQoKSwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2Fj
aGUpKTsKICNlbmRpZgogICAgICAgICAgICAgCiAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNv
bnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KSkKICAgICAgICAgY2FsbFR5cGUgPSBDb25z
dGFudEZ1bmN0aW9uOwotICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1f
Y3VycmVudEluZGV4KSkKKyAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZQor
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxk
VGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNo
ZSkpCiAgICAgICAgIGNhbGxUeXBlID0gTGlua2VkRnVuY3Rpb247CiAgICAgZWxzZQogICAgICAg
ICBjYWxsVHlwZSA9IFVua25vd25GdW5jdGlvbjsKQEAgLTExNjcsNyArMTE3OSwxMCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmICghTWFjcm9B
c3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoQWJz
LCBPcEluZm8oTm9kZVVzZUJvdHRvbSksIGdldFRvTnVtYmVyKHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSkpKSk7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRU
b0dyYXBoKEFyaXRoQWJzLCBPcEluZm8oTm9kZVVzZUJvdHRvbSksIGdldFRvTnVtYmVyKHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgaWYgKG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJm
bG93KSkKKyAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdz
KE5vZGVNYXlPdmVyZmxvdyk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2NjgsNyArMTY4MywxMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIE1ldGhvZENhbGxM
aW5rSW5mbyYgbWV0aG9kQ2FsbCA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
Z2V0TWV0aG9kQ2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG1ldGhvZENhbGwuc2VlbiAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0
dXJlICYmICFzdHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICBpZiAobWV0aG9kQ2FsbC5zZWVu
CisgICAgICAgICAgICAgICAgJiYgISFtZXRob2RDYWxsLmNhY2hlZFN0cnVjdHVyZQorICAgICAg
ICAgICAgICAgICYmICFzdHViSW5mby5zZWVuCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSkgewogICAgICAgICAgICAgICAgIC8vIEl0J3MgbW9ub21vcnBoaWMgYXMgZmFyIGFzIHdl
IGNhbiB0ZWxsLCBzaW5jZSB0aGUgbWV0aG9kX2NoZWNrIHdhcyBsaW5rZWQKICAgICAgICAgICAg
ICAgICAvLyBidXQgdGhlIHNsb3cgcGF0aCAoaS5lLiB0aGUgbm9ybWFsIGdldF9ieV9pZCkgbmV2
ZXIgZmlyZWQuCiAKQEAgLTE3MTEsMTIgKzE3MjksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1
cnJlbnRJbmRleCk7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgR2V0QnlJZCBAJWx1IGJj
IyV1OiAldVxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1f
Y3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNl
IGNvdW50IGZvciBHZXRCeUlkIEAlbHUgYmMjJXU6ICV1OyBleGl0IHByb2ZpbGU6ICVkXG4iLCBt
X2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgp
LT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAjZW5kaWYKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IG5vdEZvdW5kOwogICAgICAgICAgICAgU3RydWN0dXJlU2V0
IHN0cnVjdHVyZVNldDsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmICFtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVu
dEluZGV4KSkgeworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4KKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7CkBAIC0xODA1LDEwICsxODI1LDEyIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUdlbmVy
YXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQotICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIFB1dEJ5SWQgQCVsdSBi
YyMldTogJXVcbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCht
X2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgICAgICBwcmludGYoIlNsb3cgY2Fz
ZSBjb3VudCBmb3IgUHV0QnlJZCBAJWx1IGJjIyV1OiAldTsgZXhpdCBwcm9maWxlOiAlZFxuIiwg
bV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4
KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogI2VuZGlmICAgICAgICAgICAgCiAKLSAgICAg
ICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkgeworICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLnNlZW4KKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7CiAgICAgICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2U6IHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCk7CkBAIC0yNDI1LDYgKzI0NDcsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRy
eTo6SW5saW5lCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVk
QmxvY2socHJvZmlsZWRCbG9jaykKICAgICAsIG1fY2FsbGVlVlIoY2FsbGVlVlIpCisgICAgLCBt
X2V4aXRQcm9maWxlKHByb2ZpbGVkQmxvY2stPmV4aXRQcm9maWxlKCkpCiAgICAgLCBtX2NhbGxz
aXRlQmxvY2tIZWFkKGNhbGxzaXRlQmxvY2tIZWFkKQogICAgICwgbV9yZXR1cm5WYWx1ZShyZXR1
cm5WYWx1ZVZSKQogICAgICwgbV9kaWRSZXR1cm4oZmFsc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ29tbW9uLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAK
ICNkZWZpbmUgREZHX0VOQUJMRShERkdfRkVBVFVSRSkgKGRlZmluZWQgREZHX0VOQUJMRV8jI0RG
R19GRUFUVVJFICYmIERGR19FTkFCTEVfIyNERkdfRkVBVFVSRSkKIAogLy8gRW1pdCB2YXJpb3Vz
IGxvZ2dpbmcgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZywgaW5jbHVkaW5nIGR1bXBpbmcgdGhl
IGRhdGFmbG93IGdyYXBocy4KLSNkZWZpbmUgREZHX0VOQUJMRV9ERUJVR19WRVJCT1NFIDAKKyNk
ZWZpbmUgREZHX0VOQUJMRV9ERUJVR19WRVJCT1NFIDEKIC8vIEVtaXQgZHVtcHMgZHVyaW5nIHBy
b3BhZ2F0aW9uLCBpbiBhZGRpdGlvbiB0byBqdXN0IGFmdGVyLgogI2RlZmluZSBERkdfRU5BQkxF
X0RFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UgMAogLy8gRW1pdCBsb2dnaW5nIGZvciBPU1IgZXhp
dCB2YWx1ZSByZWNvdmVyaWVzIGF0IGV2ZXJ5IG5vZGUsIG5vdCBqdXN0IG5vZGVzIHRoYXQKQEAg
LTYyLDcgKzYyLDcgQEAKIC8vIEVtaXQgYSBicmVha3BvaW50IGludG8gdGhlIHNwZWN1bGF0aW9u
IGZhaWx1cmUgY29kZS4KICNkZWZpbmUgREZHX0VOQUJMRV9KSVRfQlJFQUtfT05fU1BFQ1VMQVRJ
T05fRkFJTFVSRSAwCiAvLyBMb2cgZXZlcnkgc3BlY3VsYXRpb24gZmFpbHVyZS4KLSNkZWZpbmUg
REZHX0VOQUJMRV9WRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUgMAorI2RlZmluZSBERkdfRU5B
QkxFX1ZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSAxCiAvLyBEaXNhYmxlIHRoZSBERkcgSklU
IHdpdGhvdXQgaGF2aW5nIHRvIHRvdWNoIFBsYXRmb3JtLmgKICNkZWZpbmUgREZHX0RFQlVHX0xP
Q0FMX0RJU0JBTEUgMAogLy8gRW5hYmxlIE9TUiBlbnRyeSBmcm9tIGJhc2VsaW5lIEpJVC4KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTAy
NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDIwIEBACiAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAorI2lu
Y2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklU
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotT1NSRXhpdDo6T1NSRXhp
dChKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxl
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWdu
ZWQgcmVjb3ZlcnlJbmRleCkKK09TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSwgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292
ZXJ5SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJjZSkKICAgICAsIG1f
dmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fY2hlY2soY2hlY2spCiAgICAgLCBt
X25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQogICAgICwgbV9jb2RlT3JpZ2luKGppdC0+
bV9jb2RlT3JpZ2luRm9yT1NSKQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgp
CisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fY291bnQoMCkKICAgICAsIG1fYXJndW1lbnRz
KGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQogICAgICwgbV92YXJpYWJsZXMoaml0LT5tX3Zhcmlh
Ymxlcy5zaXplKCkpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFu
ZCkKQEAgLTYxLDYgKzY0LDE0IEBAIHZvaWQgT1NSRXhpdDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0
CiB9CiAjZW5kaWYKIAorYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0
U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2Rl
QmxvY2stPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA8PSBIZXVyaXN0aWNzOjpvc3JFeGl0UHJv
bWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICByZXR1cm4gQXNzZW1ibHlIZWxwZXJzOjpiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKG1fY29kZU9yaWdpbiwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRG
cmVxdWVudEV4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5k
ZXgsIG1fa2luZCkpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkNvZGVP
cmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdDb3JyZWN0YWJs
ZUp1bXBQb2ludC5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZH
R1BSSW5mby5oIgogI2luY2x1ZGUgIkRGR09wZXJhbmRzLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKQEAgLTgxLDcgKzgyLDcgQEAgcHJpdmF0ZToKIC8vIFRoaXMgc3RydWN0dXJlIGRl
c2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50
byBiYXNlbGluZSBjb2RlLgogc3RydWN0IE9TUkV4aXQgewotICAgIE9TUkV4aXQoSlNWYWx1ZVNv
dXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklU
KiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOworICAgIE9TUkV4aXQoRXhpdEtpbmQga2lu
ZCwgSlNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNw
ZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwogICAgIAogICAgIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CiAgICAgCkBAIC05NCw2ICs5NSw5IEBAIHN0cnVj
dCBPU1JFeGl0IHsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgCisg
ICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7CisgICAgCiAgICAgLy8g
Q29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5nIG92ZXIgVmFsdWVSZWNvdmVyaWVzIHdoaWxlIGJl
aW5nCiAgICAgLy8gZ2VuZXJpYyBvdmVyIGFyZ3VtZW50IHZlcnN1cyB2YXJpYWJsZS4KICAgICBp
bnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgp
ICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CkBAIC0xMjAsNiArMTI0LDEzIEBAIHN0cnVjdCBPU1JF
eGl0IHsKICAgICAgICAgcmV0dXJuIGluZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwogICAgIH0K
ICAgICAKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9j
ayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291bnRhYmxlKG1fa2luZCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJl
cXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2NrLCBwcm9maWxlZENvZGVCbG9jayk7CisgICAg
fQorICAgIAogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsK
ICNlbmRpZgpAQCAtMTI3LDYgKzEzOCw5IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBWZWN0b3I8
VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVudHM7CiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnks
IDA+IG1fdmFyaWFibGVzOwogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworCitwcml2YXRlOgor
ICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayog
ZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKIH07CiAKICNpZiBE
RkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJT05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShy
ZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw4IEBAIHZvaWQg
T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0
byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJW
YWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3Nl
bWJseUhlbHBlcnM6OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygm
ZXhpdC5tX2NvdW50KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAg
ICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwg
Q29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJl
Z1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYg
KzQ2MSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAv
LyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAg
Ly8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBt
X2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFi
c29sdXRlQWRkcmVzcygmZXhpdC5tX2NvdW50KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3Nl
bWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpy
ZWdUMCk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIo
KSksIEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNyArNTMsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAg
ICAgICAgcmVjb3ZlcnkgPSAmY29kZUJsb2NrLT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9y
ZWNvdmVyeUluZGV4IC0gMSk7CiAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAg
ZnByaW50ZihzdGRlcnIsICJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSBmb3IgY29kZSBibG9jayAl
cC5cbiIsIGV4aXRJbmRleCwgY29kZUJsb2NrKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdlbmVy
YXRpbmcgT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4i
LCBleGl0SW5kZXgsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2Rl
SW5kZXgsIGV4aXRLaW5kVG9TdHJpbmcoZXhpdC5tX2tpbmQpLCBjb2RlQmxvY2spOwogI2VuZGlm
CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODIs
NyArMTI4Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAg
ICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5v
bmU6IHsKICAgICAgICAgaWYgKChub2RlLmhhc0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFu
dChub2RlSW5kZXgpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkg
ewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuRm9y
bWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsK
ICAgICAgICAgfQpAQCAtMTMzMiw3ICsxMzMyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlSW50SQogICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMgYW4gaW50ZWdl
ci4KICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2Nr
KGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAg
ICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAg
ICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgaWYgKCFzdHJpY3Qp
IHsKQEAgLTEzODksNyArMTM4OSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUludEkKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1h
dEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKLSAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCBGUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaW5m
by5maWxsRG91YmxlKGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVy
biBmcHJBbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ5MSw3ICsxNDkxLDcg
QEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOwogICAgICAgICByZXR1cm4gZnByQWxsb2NhdGUoKTsKIAogICAgIGNhc2Ug
RGF0YUZvcm1hdEpTQ2VsbDoKQEAgLTE1MDQsNyArMTUwNCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2
ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0lu
dGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNW
YWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRh
Z1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcikpOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEg
ZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdw
ciwgdGVtcEdwcik7CkBAIC0xNTc4LDcgKzE1NzgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6
OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsK
ICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0
KCkgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3Jt
YXREb3VibGUpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAg
IHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTU5Miw3ICsxNTky
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBB
U1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKQEAgLTE2MDEsNyArMTYw
MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKIAogICAgICAg
ICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8u
c3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNDZWxsKQotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAg
LTE2MTYsNyArMTYxNiw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNl
bGwKICAgICBjYXNlIERhdGFGb3JtYXRKUzogewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5n
cHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAtMTYyNyw3ICsx
NjI3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIGNh
c2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAg
Y2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAg
ICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQogCkBAIC0xNjUxLDcgKzE2NTEsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgc3dpdGNoIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlm
IChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZv
cm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAg
IApAQCAtMTY2NSw3ICsxNjY1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbAogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0
SlNCb29sZWFuKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsK
ICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1h
dEpTKTsKQEAgLTE2NzUsNyArMTY3NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7
CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVhbikg
ewogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEp
KSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52
YWxpZEdQUlJlZykpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkp
LCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFs
aWRHUFJSZWcpKTsKICAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTE2OTMsNyArMTY5
Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAg
R1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAg
ICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVG
YWxzZSkpLCBncHIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
Z3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9u
UmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3Zl
cnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAg
ICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFs
c2UpKSwgZ3ByKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTcwNSw3ICsxNzA1LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0YUZvcm1hdERv
dWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0Q2Vs
bDogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygp
LCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7
CiAgICAgfQogICAgICAgICAKQEAgLTE3NDgsOSArMTc0OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgIAogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBpZiAoIXByZWRpY3Rp
b25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUu
Y2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOwog
ICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKQEAgLTE4MTcsNyAr
MTgxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAK
ICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cik7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNl
KSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1
bXAoKTsKICAgICAKQEAgLTE4MjYsNyArMTgyNiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVPYmplY3RPck90aGUKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAg
ICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5kUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQ
Uik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
SW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
VmFsdWVOdWxsKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWlu
dGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIH0KICAgICBtX2ppdC5tb3Zl
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BS
KTsKICAgICAKQEAgLTE4ODIsNyArMTg4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVMb2dpY2FsTm90KE4KICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICBtX2ppdC54
b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJv
b2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KQEAgLTE5MjEsNyArMTkyMSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG5lZWRT
cGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZh
bHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBhZGRCcmFuY2gobV9qaXQu
anVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xOTI5
LDcgKzE5MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAg
ICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVH
UFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0
Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgfQogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayAr
IDEpKQogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7CkBAIC0xOTk3
LDcgKzE5OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAg
ICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9v
bGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6
OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YWtlbik7CiAKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0Lmp1bXAoKSk7
CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQ
UiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSks
IG5vdFRha2VuKTsKQEAgLTIwNDMsNyArMjA0Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24g
Zm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgogICAgICAgICBp
ZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1ZS5pc0NsZWFyKCkpIHsKLSAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMjExMywxNCArMjExMywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxs
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSBjZWxs
LmdwcigpOwogICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBu
b2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsK
ICAgICAgICAgICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFy
cmF5VlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJh
eVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRp
Y3RlZFR5cGUpKSB7CkBAIC0yMjI1LDcgKzIyMjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3Ax
KTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBvcGVyYW5kIGlzIHBvc2l0aXZlLgotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AxLmdwcigpLCBUcnVzdGVk
SW1tMzIoMCkpKTsKIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0Lmdwcigp
KTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBv
cDEuZm9ybWF0KCkpOwpAQCAtMjI3Myw3ICsyMjczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMi5n
cHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1t
MzIoaW1tMSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIo
aW1tMSksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1h
Y3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0Lmdw
cigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI4OCw3ICsyMjg4LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigp
LCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjMxMywxMSArMjMxMywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2sg
PSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGdwcjEsIGdwcjIs
IGdwclJlc3VsdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGdwcjEg
PT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVB
ZGQsIGdwclJlc3VsdCwgZ3ByMikpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJl
Y292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIpKTsKICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292
ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVj
aywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2spOworICAgICAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrKTsK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG1f
Y29tcGlsZUluZGV4KTsKQEAgLTIzNTMsNyArMjM1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEu
Z3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKElt
bTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMy
KGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihN
YWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5n
cHIoKSkpOwogCiAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzNjcsNyArMjM2Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAg
ICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihN
YWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3By
KCkpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM5OSwxMyArMjM5OSwxMyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcg
b3AxR1BSID0gb3AxLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIo
KTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR1BS
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR1BSKSk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5l
Z2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAg
ICAgICAvLyB0byBwcm9kdWNlIG5lZ2F0aXZlIHplcm8uCiAgICAgICAgICAgICBpZiAoIW5vZGVD
YW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG51bWVyYXRvck5vblplcm8gPSBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUik7Ci0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQ
UiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAgICAgbnVtZXJhdG9yTm9uWmVyby5s
aW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0MjUsNyArMjQy
NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAg
ICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSB3YXMgbm8gcmVtYWluZGVyLiBJZiB0aGVyZSBoYWQg
YmVlbiwgdGhlbiB3ZSdkIGJlIG9ibGlnYXRlZCB0bwogICAgICAgICAgICAgLy8gcHJvZHVjZSBh
IGRvdWJsZSByZXN1bHQgaW5zdGVhZC4KLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblpl
cm8sIGVkeC5ncHIoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5v
blplcm8sIGVkeC5ncHIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpbnRlZ2VyUmVz
dWx0KGVheC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
NDU4LDcgKzI0NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgICAgICBtX2ppdC5yc2hpZnQzMihyZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgICAgIG1faml0LmFk
ZDMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC54b3Iz
MihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwg
MzEpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0
LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7CiAgICAgICAg
ICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2ODgsMTUgKzI2ODgsMTUgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZyks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkp
KTsKIAogICAgICAgICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVl
bnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNo
ZQogICAgICAgICAvLyB0aGUgc3RvcmFnZSBwb2ludGVyIC0gZXNwZWNpYWxseSBpZiB0aGVyZSBo
YXBwZW5zIHRvIGJlIGFub3RoZXIgcmVnaXN0ZXIgZnJlZSByaWdodCBub3cuIElmIHdlIGRvIHNv
LAogICAgICAgICAvLyB0aGVuIHdlJ2xsIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgdGVtcG9yYXJ5
IGZvciByZXN1bHQuCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlT
dG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAganNWYWx1ZVJl
c3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0y
Nzk5LDcgKzI3OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVy
dHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAg
ICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdl
IGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgcHJvcGVydHkudXNlKCk7CkBA
IC0yOTQzLDEzICsyOTQzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxk
MigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxl
bmd0aEdQUik7CiAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAg
ICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBt
X2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAg
ICAgIAogICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4
N2ZmZmZmZmUpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBz
dG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCiAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAg
ICAgICAgCkBAIC0yOTg2LDcgKzI5ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxl
bmd0aC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsK
ICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhH
UFIpOwpAQCAtMzA5MSw3ICszMDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjogewogICAgICAgICAvLyBX
ZSBleHBlY3QgdGhhdCB0aHJvdyBzdGF0ZW1lbnRzIGFyZSByYXJlIGFuZCBhcmUgaW50ZW5kZWQg
dG8gZXhpdCB0aGUgY29kZSBibG9jawogICAgICAgICAvLyBhbnl3YXksIHNvIHdlIGp1c3QgT1NS
IGJhY2sgdG8gdGhlIG9sZCBKSVQgZm9yIG5vdy4KLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMjI0LDcgKzMyMjQsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIWlz
T3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7
CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwog
ICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkp
KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSwgc2NyYXRj
aEdQUik7CkBAIC0zMjM5LDcgKzMyMzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdwcigp
OwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRo
aXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVl
R1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0
cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1Zh
bHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCkBAIC0zMjgzLDcgKzMyODMsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIGRvIHRo
ZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgogICAgICAgICBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgewogICAgICAgICAgICAgaWYgKCFp
c0ZpbmFsT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHByb3Rv
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MocHJv
dG9HUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRj
aEdQUik7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fz
c2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVj
dHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KE9iamVjdFR5cGUpKSk7CkBAIC0zMzkwLDcgKzMzOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgIGNhc2UgR2V0QnlJZDogewogICAgICAg
ICBpZiAoIW5vZGUucHJlZGljdGlvbigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM0NDYsMTIg
KzM0NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAg
aWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3Jh
Z2VPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1f
bGVuZ3RoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAKICAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0z
NDY1LDcgKzM0NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAg
ICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgCiAgICAg
ICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmlu
Zzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAKQEAgLTM0ODEsNyArMzQ4MSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNCeXRl
QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0J5dGVBcnJheTo6
b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSks
IHJlc3VsdEdQUik7CkBAIC0zNTIzLDcgKzM1MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNoaWxkMSgpKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS5m
dW5jdGlvbigpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNTM4LDcgKzM1MzgsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEFTU0VS
VChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobm9k
ZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJh
c2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBub2RlLnN0cnVjdHVyZVNldCgp
WzBdKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVy
ZSh0aGlzKTsKICAgICAgICAgICAgIApAQCAtMzU0OSw3ICszNTQ5LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKICAgICAgICAgICAg
ICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
c3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpW2ldKSk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBu
b2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgp
Lmxhc3QoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsK
ICAgICAgICAgfQpAQCAtMzcwNSw3ICszNzA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0IGJhc2UgJ0ltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBz
dHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdz
T2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0
SGFzSW5zdGFuY2UpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJlOjp0
eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxl
bWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3OTQsNyArMzc5NCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNlIEZvcmNlT1NS
RXhpdDogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyNCw5ICs4MjQsOSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQUiA9
IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhv
cDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQ
UiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJH
UFIpLCBub2RlLmNoaWxkMigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIo
Y29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0g
KG1fYmxvY2sgKyAxKSkKQEAgLTEwNTksMTI4ICsxMDU5LDEyOCBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVk
VHlwZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOwogI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7
CiAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIo
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAu
Z3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rl
cikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAg
ICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRy
KEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwog
ICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVt
cC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5
RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIp
KSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQxNkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRl
bXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJy
YXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3Zw
dHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8s
IHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMy
QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRy
KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVn
aXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKS5t
X3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50OEFycmF5UHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNr
UmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3Io
KS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50MTZBcnJheVByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFs
UmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2Ny
aXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50MzJBcnJheVByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJh
eURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGbG9hdDMyQXJy
YXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIo
KSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNG
bG9hdDY0QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0KICNl
bHNlCiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVh
bFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdG
b3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwog
ICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZp
cnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChp
c0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdp
c3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwogICAgICAgICBlbHNl
IGlmIChpc0ludDhBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVn
aXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92
cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92
cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGlj
dGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAg
ICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdw
cigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxl
cjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5n
cHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikp
KTsKICAgICAgICAgfSBlbHNlIGlmIChpc1VpbnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAu
Z3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhB
cnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4
QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDE2
QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFn
Rm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVt
cC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVt
cC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7
CiAgICAgICAgIH0gIGVsc2UgaWYgKGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAu
Z3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMy
QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGlzRmxv
YXQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3Zw
dHIpKSk7CiAgICAgICAgIH0gICBlbHNlIGlmIChpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1w
LmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IAogI2Vu
ZGlmCiAgICAgfQpAQCAtMTM1NCwxMyArMTM1NCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0Q2hhckNvZGVBCiAgICAgCiAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgQVNTRVJUKCEo
YXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpICYgUHJlZGljdFN0cmluZykpOwotICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBj
YW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBs
YXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleFJlZywgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsK
KyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4UmVnLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0
aCgpKSkpOwogCiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHNj
cmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwpAQCAtMTM5MywxMyArMTM5MywxMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAKICAgICBpZiAoIWlzU3RyaW5nUHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAg
ICBBU1NFUlQoIShhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5n
KSk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJ
bmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJp
c29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhh
dCBhcmUgdG9vIGxhcmdlCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5
UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZM
ZW5ndGgoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKIAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwog
ICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKQEAgLTE0MTcsNyArMTQxNyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBtX2ppdC5s
b2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgc2NyYXRjaFJlZyk7CiAKICAgICAvLyBXZSBv
bmx5IHN1cHBvcnQgYXNjaWkgY2hhcmFjdGVycwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVx
dWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgxMDApKSk7CisgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgx
MDApKSk7CiAKICAgICAvLyA4IGJpdCBzdHJpbmcgdmFsdWVzIGRvbid0IG5lZWQgdGhlIGlzQVND
SUkgY2hlY2suCiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwpAQCAtMTQyNiw3ICsxNDI2LDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBz
bWFsbFN0cmluZ3NSZWcgPSBzbWFsbFN0cmluZ3MuZ3ByKCk7CiAgICAgbV9qaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5n
cy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHNjcmF0
Y2hSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwotICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykpOwogICAgIGNlbGxSZXN1bHQoc2NyYXRj
aFJlZywgbV9jb21waWxlSW5kZXgpOwogfQogCkBAIC0xNDk1LDE0ICsxNDk1LDE0IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckIKICAgICBOb2RlSW5kZXggdmFsdWVJ
bmRleCA9IG5vZGUuY2hpbGQzKCk7CiAgICAgCiAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKGJhc2VJbmRleCkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNCeXRlQXJyYXlWUHRyKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcg
dmFsdWVHUFI7CiAKICAgICBpZiAoYXQodmFsdWVJbmRleCkuaXNDb25zdGFudCgpKSB7CiAgICAg
ICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlSW5kZXgpOwogICAg
ICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTYzLDcgKzE1NjMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJv
cGVydHkuZ3ByKCk7CiAKICAgICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTU3NCw3ICsxNTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25CeQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgCiAg
ICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBp
bmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFn
ZVJlZywgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhzdG9yYWdlUmVnLCBCeXRlQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSkpOwogCiAgICAgbV9q
aXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBCeXRlQXJyYXk6Om9mZnNldE9mRGF0YSgpKSwg
c3RvcmFnZVJlZyk7CiAgICAgaW50ZWdlclJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRl
eCk7CkBAIC0xNTg5LDcgKzE1ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
VHlwZWRBcnJhCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAg
ICBpZiAobmVlZHNTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3Zw
dHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAK
ICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3Jp
cHRvci5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7CiAgICAgCkBAIC0xNjExLDcgKzE2MTEs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAKICAgICBpZiAo
c3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykgewog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRp
dmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAg
ICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
QEAgLTE2NTIsMTQgKzE2NTIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9ySQogICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKICAgICAK
ICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWND
aGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92
cHRyKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7CiAg
ICAgCiAgICAgaWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1Zh
bHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZUluZGV4KTsKICAgICAgICAgaWYg
KCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
ICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtMTczNCw3ICsxNzM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50
cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc3NSw3ICsxNzc1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKICAgICAKICAgICBpZiAoc3Bl
Y3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFz
ZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVz
Y3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAg
IAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCkBAIC0xODEwLDcgKzE4MTAs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiB7CiAgICAgLy8g
Q2hlY2sgdGhhdCBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LgogICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG90eXBlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoSWZO
b3RPYmplY3Qoc2NyYXRjaFJlZykpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUgc2NyYXRjaFJl
ZyB3aXRoIHRoZSB2YWx1ZSBiZWluZyBjaGVja2VkLgogICAgIG1faml0Lm1vdmUodmFsdWVSZWcs
IHNjcmF0Y2hSZWcpOwpAQCAtMTk2NCw3ICsxOTY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVNvZnRNb2R1bG8oTgogICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlz
LCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigpOwogCi0gICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Qz
MihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhPdmVy
ZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGls
ZXI6Olplcm8sIG9wMkdwcikpOwogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICBH
UFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTIwOTIsMTMgKzIw
OTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAg
ICAvLyB0aGUgc2VtYW50aWNzIGFyZSBhbHdheXMgYXMgaWYgdGhlIG11bHRpcGx5IGhhZCBiZWVu
IHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlCiAgICAgICAgIC8vIGRvbWFpbi4KICAgICAgICAgICAg
IAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQu
Z3ByKCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJl
ZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgIC8vIENoZWNr
IGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJvdXQg
c3VjaCB0aGluZ3MuCiAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2Rl
LmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBy
ZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVn
MSwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
LCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
TmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRydXN0ZWRJbW0z
MigwKSkpOwogICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAg
IH0KIApAQCAtMjMyMiw3ICsyMzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEluZGV4ZWRQcgogICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBhdChub2RlLmNo
aWxkMigpKS5wcmVkaWN0aW9uKCk7CiAgICAgaWYgKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0
SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjMzMSw2MSArMjMzMSw2MSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSUmVnIHN0b3JhZ2VS
ZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9u
KCkgPT0gUHJlZGljdFN0cmluZykgewogICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKIAogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZz
ZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgCiAgICAgICAgIC8vIFNwZWN1bGF0
ZSB0aGF0IHdlJ3JlIG5vdCBhY2Nlc3NpbmcgYSByb3BlCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHN0b3JhZ2VSZWcpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSks
IHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3Bl
Y3VsYXRlQnl0ZUFycmF5KCkpIHsKICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNCeXRlQXJy
YXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewogICAgICAgICBjb25z
dCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzSW50OEFycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlw
dG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwog
ICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJh
eSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0g
bV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAo
IWlzSW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1f
dHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VP
ZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNo
b3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVz
Y3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0ludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3Iu
bV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkp
OwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcs
IGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkpIHsKICAgICAg
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNVaW50OEFycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3Jh
Z2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
VWludDE2QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CiAg
ICAgICAgIGlmICghaXNVaW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRv
ci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKICAgICAgICAgY29uc3Qg
VHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVp
bnQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzVWludDMyQXJyYXlQcmVkaWN0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7
CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMy
QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRv
ciA9IG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgICAg
ICBpZiAoIWlzRmxvYXQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1f
c3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlw
ZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0
NjRBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0Zsb2F0NjRBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsK
ICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBz
dG9yYWdlUmVnKTsKICAgICB9CiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBp
bGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMjksMzcgKzIwMjksMzcg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0
aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1i
bGVyOjpKdW1wIGp1bXBUb0ZhaWwpCisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKICAgICB7CiAgICAgICAgIGlmICghbV9j
b21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9qaXQuY29kZUJsb2Nr
KCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChqc1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2Zp
bGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOworICAgICAgICBtX2ppdC5jb2Rl
QmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0
LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7CiAgICAgfQog
ICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxhdGlvbiBjaGVja3Mgd2l0aG91dCBhZGRpdGlvbmFs
IHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
anVtcHNUb0ZhaWwpCisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpT
VmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKICAgICB7CiAgICAgICAgIFZlY3RvcjxNYWNy
b0Fzc2VtYmxlcjo6SnVtcCwgMTY+IEp1bXBWZWN0b3IgPSBqdW1wc1RvRmFpbC5qdW1wcygpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgSnVtcFZlY3Rvci5zaXplKCk7ICsraSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soanNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBK
dW1wVmVjdG9yW2ldKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1
ZVNvdXJjZSwgbm9kZUluZGV4LCBKdW1wVmVjdG9yW2ldKTsKICAgICB9CiAgICAgLy8gQWRkIGEg
c3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2Rl
SW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9u
UmVjb3ZlcnkmIHJlY292ZXJ5KQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBr
aW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3Zlcnkm
IHJlY292ZXJ5KQogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRpb25S
ZWNvdmVyeShyZWNvdmVyeSk7Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JF
eGl0KE9TUkV4aXQoanNWYWx1ZVNvdXJjZSwgbV9qaXQudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRl
eCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0
aW9uUmVjb3ZlcmllcygpKSk7CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JF
eGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQudmFsdWVQcm9maWxlRm9yKG5v
ZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNw
ZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ug
c3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KLSAgICB2
b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdz
LCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBu
b2RlSW5kZXgpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2Vu
ZGlmCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1w
KCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlSW5k
ZXgsIG1faml0Lmp1bXAoKSk7CiAgICAgICAgIG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKICAgICB9
CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDEwMjU2MikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcg
KzMxLDcgQEAKIC8vIFZlcmJvc2UgbG9nZ2luZyBvZiBjb2RlIGdlbmVyYXRpb24KICNkZWZpbmUg
RU5BQkxFX0pJVF9WRVJCT1NFIDAKIC8vIFZlcmJvc2UgbG9nZ2luZyBmb3IgT1NSLXJlbGF0ZWQg
Y29kZS4KLSNkZWZpbmUgRU5BQkxFX0pJVF9WRVJCT1NFX09TUiAwCisjZGVmaW5lIEVOQUJMRV9K
SVRfVkVSQk9TRV9PU1IgMQogCiAvLyBXZSd2ZSBydW4gaW50byBzb21lIHByb2JsZW1zIHdoZXJl
IGNoYW5naW5nIHRoZSBzaXplIG9mIHRoZSBjbGFzcyBKSVQgbGVhZHMgdG8KIC8vIHBlcmZvcm1h
bmNlIGZsdWN0dWF0aW9ucy4gIFRyeSBmb3JjaW5nIGFsaWdubWVudCBpbiBhbiBhdHRlbXB0IHRv
IHN0YWJhbGl6ZSB0aGlzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1
cmlzdGljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SGV1cmlzdGljcy5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBA
IGRvdWJsZSBjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZDsKIHVuc2lnbmVkIGxpa2VseVRvVGFr
ZVNsb3dDYXNlTWluaW11bUNvdW50OwogdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVt
Q291bnQ7CiAKK2RvdWJsZSBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGU7CisK
IHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZTsKIHVuc2lnbmVkIGxhcmdlRmFp
bENvdW50VGhyZXNob2xkQmFzZUZvckxvb3A7CiAKQEAgLTE0Nyw2ICsxNDksOCBAQCB2b2lkIGlu
aXRpYWxpemVIZXVyaXN0aWNzKCkKICAgICBTRVQoY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQs
ICAgICAgIDAuMDUpOyAvLyBTaG91bGRuJ3QgYmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwg
c3B1cmlvdXNseSB0YWtlIHNsb3cgY2FzZSwgZm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2Fj
aGluZy4KICAgICBTRVQobGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwMCk7CiAg
ICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50LCAgICAxMCk7CisgICAgCisgICAg
U0VUKG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSwgMC4zKTsKIAogICAgIFNF
VChsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2UsICAgICAgICAyMCk7CiAgICAgU0VUKGxhcmdl
RmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3AsIDEpOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01
Myw2ICs1Myw4IEBAIGV4dGVybiBkb3VibGUgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQKIGV4
dGVybiB1bnNpZ25lZCBsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudDsKIGV4dGVybiB1
bnNpZ25lZCBjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudDsKIAorZXh0ZXJuIGRvdWJsZSBv
c3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGU7CisKIGV4dGVybiB1bnNpZ25lZCBs
YXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291
bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118969</attachid>
            <date>2011-12-13 00:38:37 -0800</date>
            <delta_ts>2011-12-13 00:54:36 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>countdfgfail_patch_5.diff</filename>
            <type>text/plain</type>
            <size>121124</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMS0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQga25vdyBleGFjdGx5IHdoeSByZWNvbXBpbGF0aW9uIHdhcyB0cmlnZ2VyZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
YWNoIE9TUiBleGl0IGlzIG5vdyBpbmRpdmlkdWFsbHkgY291bnRlZCwgYXMgd2VsbCBhcyBjb3Vu
dGluZyB0aGUgdG90YWwgbnVtYmVyIAorICAgICAgICBvZiBPU1IgZXhpdHMgdGhhdCBvY2N1cnJl
ZCBpbiBhIGNvZGUgYmxvY2suIElmIHJlY29tcGlsYXRpb24gaXMgdHJpZ2dlcmVkLCB3ZQorICAg
ICAgICBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIE9TUiBleGl0IHNpdGVzIHRoYXQgbWFrZSB1
cCBhIHN1ZmZpY2llbnRseSBsYXJnZQorICAgICAgICBwb3J0aW9uIG9mIHRoZSB0b3RhbCBPU1Ig
ZXhpdHMgdGhhdCBvY2N1cnJlZC4gRm9yIGFueSBzdWNoIE9TUiBleGl0IHNpdGVzLCB3ZQorICAg
ICAgICBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc2l0ZSAoYnl0ZWNvZGUgaW5kZXgsIGtpbmQp
IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgYmFzZWxp
bmUgQ29kZUJsb2NrLiBUaGVuLCB3aGVuIHdlIHJlY29tcGlsZSB0aGUgY29kZSwgd2UgaW1tZWRp
YXRlbHkKKyAgICAgICAga25vdyB3aGljaCBzcGVjdWxhdGlvbnMgd291bGQgYmUgdW53aXNlIGJh
c2VkIG9uIHRoZSBmYWN0IHRoYXQgcHJldmlvdXMgc3VjaAorICAgICAgICBzcGVjdWxhdGlvbnMg
cHJvdmVkIHRvIGJlIGZydWl0bGVzcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWVhbnMgMiUg
d2luIG9uIHR3byBvZiB0aGUgU3VuU3BpZGVyIHN0cmluZyB0ZXN0cywgYSA0JSB3aW4gb24gVjgn
cyBkZWx0YWJsdWUsCisgICAgICAgIGFuZCA1JSBvbiBLcmFrZW4ncyBpbWFnaW5nLWRhcmtyb29t
LiBJdCBpcyBvbmx5IGEgbWlub3Igd2luIGluIHRoZSBhdmVyYWdlcywgbGVzcworICAgICAgICB0
aGFuIDAuNSUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0
ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdFByb2ZpbGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFi
bGVFeGl0UHJvZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjp+UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmV4
aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OmV4aXRLaW5kSXNDb3VudGFibGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJl
cXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGU6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZUhh
c2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6aGFz
RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6
YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5dGVBcnJheSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNl
T2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
U29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFs
aXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuY3BwOgorICAgICAgICAoSlNDOjpIZXVy
aXN0aWNzOjppbml0aWFsaXplSGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0
aWNzLmg6CisKIDIwMTEtMTItMTIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CiAKICAgICAgICAgRWxpbWluYXRlIER1cGxpY2F0ZSB3b3JkIGF0IGEgdGltZSBlcXVhbCBjb2Rl
IGluIFN0cmluZ0ltcGwuY3BwIGFuZCBTdHJpbmdIYXNoLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsOCBAQAogCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5
QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3JIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07CisJCTBG
QkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkRE
IC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0
Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09T
UkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDk3NkMxNDY4QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVs
cGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC04NTEsNiArODUzLDggQEAKIAkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0YUFsbG9j
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjJFMTNGQzY2QUUw
MDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTUxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3
MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
MDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQyIC8qIERG
R0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDYwLDYgKzI0NjQsOCBAQAogCQk5
NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgKi8sCisJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFG
b3JtYXQuaCAqLywKIAkJCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLywKQEAgLTI5ODEsNiArMjk4Nyw3IEBACiAJCQkJQTczQkUxN0UxNDg0MjA4NDAwOTEyMDRC
IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNCRTE4MDE0ODQyMEE4
MDA5MTIwNEIgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTM1MTgsNiArMzUyNSw3IEBACiAJCQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRG
IC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczQkUxNjgxNDg0MjA1
MjAwOTEyMDRCIC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0JFMTZB
MTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQxLDYgKzIyNDEsMjggQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KERGR19KSVQpCit2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCit7Cisg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIEFTU0VSVChh
bHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAg
IEFTU0VSVCghIW1fZGZnRGF0YSk7CisgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gYWx0ZXJuYXRpdmUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9k
ZmdEYXRhLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERGRzo6T1NSRXhpdCYgZXhp
dCA9IG1fZGZnRGF0YS0+b3NyRXhpdFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmICghZXhpdC5j
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSh0aGlzLCBwcm9maWxlZEJsb2NrKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1LCAl
cykgZm9yIGNvZGUgYmxvY2sgJXAgb2NjdXJyZWQgZnJlcXVlbnRseTsgY291bnRpbmcgYXMgZnJl
cXVlbnQgZXhpdCBzaXRlLlxuIiwgaSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwg
ZXhpdC5tX25vZGVJbmRleCwgREZHOjpleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdGhp
cyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNpZiBF
TkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVBy
b2ZpbGVzKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUg
IkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxD
b2RlQ2FjaGUuaCIKQEAgLTc5Niw2ICs3OTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoaGFzQ29kZU9yaWdpbnMoKSk7CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5
U2VhcmNoPENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0
dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbj4oY29kZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3JpZ2lu
cygpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LT5jb2RlT3JpZ2luOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZEZyZXF1
ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmFkZChzaXRlKTsKKyAgICAgICAg
fQorCisgICAgICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9l
eGl0UHJvZmlsZTsgfQogI2VuZGlmCiAKICAgICAgICAgLy8gQ29uc3RhbnQgUG9vbApAQCAtMTA2
NSw2ICsxMDc0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVvcHRpbWl6ZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpICE9IHRoaXMpOwor
ICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50KCktPmFsdGVybmF0aXZlKCkgPT0gdGhpcyk7
CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT50YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CiAg
ICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbigpOwogICAgICAgICAgICAgY291bnRS
ZW9wdGltaXphdGlvbigpOwogICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwpAQCAt
MTA5Myw2ICsxMTA0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZWxzZQorICAgICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KKyNlbmRpZgorICAgICAgICAKICNp
ZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIHZv
aWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7
CiAKQEAgLTEyMTIsNiArMTIyOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsKICAg
ICAgICAgCiAgICAgICAgIE93blB0cjxERkdEYXRhPiBtX2RmZ0RhdGE7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jaworICAgICAgICAvLyBmb3IgREZHIGNvZGUgYmxv
Y2tzLgorICAgICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0V4aXRQcm9maWxlOjpFeGl0UHJvZmlsZSgpIHsgfQorRXhpdFByb2ZpbGU6
On5FeGl0UHJvZmlsZSgpIHsgfQorCitib29sIEV4aXRQcm9maWxlOjphZGQoY29uc3QgRnJlcXVl
bnRFeGl0U2l0ZSYgc2l0ZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVx
dWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQorICAgIC8v
IGludG8gaXQuCisgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKSB7CisgICAgICAgIG1fZnJl
cXVlbnRFeGl0U2l0ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+KCkp
OworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0ZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCBhZGQgaXQgaWYgaXQncyBhbHJl
YWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ssIGJlY2F1c2Ugd2UKKyAgICAv
LyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29kZSBleGl0cyB0
ZW5kcyB0byBub3QgYmUgbGFyZ2UsCisgICAgLy8gYW5kIHRoaXMgY29kZSBpcyBvbmx5IHVzZWQg
d2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
ZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmFwcGVuZChzaXRlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4
aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQoreworICAgIGlmICghcHJvZmls
ZS5tX2ZyZXF1ZW50RXhpdFNpdGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMuYWRkKHByb2ZpbGUubV9mcmVxdWVudEV4
aXRTaXRlcy0+YXQoaSkpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJsZUV4
aXRQcm9maWxlKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRXhpdFByb2ZpbGVfaAorI2RlZmluZSBE
RkdFeGl0UHJvZmlsZV9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworZW51bSBFeGl0S2luZCB7CisgICAgRXhpdEtpbmRVbnNldCwKKyAg
ICBCYWRUeXBlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHR5cGUgcHJlZGljdGlvbiB3YXMgd3Jv
bmcuCisgICAgQmFkQ2FjaGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFuIGlubGluZSBjYWNoZSB3
YXMgd3JvbmcuCisgICAgT3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIG92ZXJmbG93
LgorICAgIE5lZ2F0aXZlWmVybywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgZW5jb3VudGVyZWQg
bmVnYXRpdmUgemVyby4KKyAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9m
IHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2Vz
IG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgorfTsKKworI2lmbmRlZiBOREVC
VUcKK2lubGluZSBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBy
ZXR1cm4gIlVuc2V0IjsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgICAgIHJldHVybiAiQmFkVHlw
ZSI7CisgICAgY2FzZSBCYWRDYWNoZToKKyAgICAgICAgcmV0dXJuICJCYWRDYWNoZSI7CisgICAg
Y2FzZSBPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJPdmVyZmxvdyI7CisgICAgY2FzZSBOZWdh
dGl2ZVplcm86CisgICAgICAgIHJldHVybiAiTmVnYXRpdmVaZXJvIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KK30KKyNlbmRpZgorCitpbmxpbmUgYm9v
bCBleGl0S2luZElzQ291bnRhYmxlKEV4aXRLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5k
KSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgY2FzZSBVbmNvdW50YWJsZToKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CitwdWJsaWM6CisgICAgRnJlcXVlbnRFeGl0U2l0
ZSgpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAg
ICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEZy
ZXF1ZW50RXhpdFNpdGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKKyAgICAgICAgLCBtX2tp
bmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZyZXF1
ZW50RXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEV4aXRLaW5kIGtpbmQpCisgICAg
ICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2tpbmQo
a2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChleGl0S2luZElzQ291bnRhYmxlKGtpbmQpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fa2luZCA9PSBFeGl0S2luZFVuc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0Cisg
ICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmludEhhc2go
bV9ieXRlY29kZU9mZnNldCkgKyBtX2tpbmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorICAgIEV4
aXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9
PSBFeGl0S2luZFVuc2V0ICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgRXhpdEtpbmQgbV9raW5kOworfTsK
Kworc3RydWN0IEZyZXF1ZW50RXhpdFNpdGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBhLCBjb25zdCBGcmVx
dWVudEV4aXRTaXRlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlOworCitjbGFzcyBFeGl0UHJv
ZmlsZSB7CitwdWJsaWM6CisgICAgRXhpdFByb2ZpbGUoKTsKKyAgICB+RXhpdFByb2ZpbGUoKTsK
KyAgICAKKyAgICAvLyBBZGQgYSBuZXcgZnJlcXVlbnQgZXhpdCBzaXRlLiBSZXR1cm4gdHJ1ZSBp
ZiB0aGlzIGlzIGEgbmV3IG9uZSwgb3IgZmFsc2UKKyAgICAvLyBpZiB3ZSBhbHJlYWR5IGtuZXcg
YWJvdXQgaXQuIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24sIGJlY2F1c2UgaXQgZXJycworICAg
IC8vIG9uIHRoZSBzaWRlIG9mIGtlZXBpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGNvbXBhY3QuIEFs
c28sIHRoaXMgd2lsbCBvbmx5CisgICAgLy8gYmUgY2FsbGVkIGEgZml4ZWQgbnVtYmVyIG9mIHRp
bWVzIHBlciByZWNvbXBpbGF0aW9uLiBSZWNvbXBpbGF0aW9uIGlzCisgICAgLy8gcmFyZSB0byBi
ZWdpbiB3aXRoLCBhbmQgaW1wbGllcyBkb2luZyBPKG4pIG9wZXJhdGlvbnMgb24gdGhlIENvZGVC
bG9jaworICAgIC8vIGFueXdheS4KKyAgICBib29sIGFkZChjb25zdCBGcmVxdWVudEV4aXRTaXRl
JiBzaXRlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFF1ZXJ5YWJsZUV4aXRQ
cm9maWxlOworICAgIAorICAgIE93blB0cjxWZWN0b3I8RnJlcXVlbnRFeGl0U2l0ZT4gPiBtX2Zy
ZXF1ZW50RXhpdFNpdGVzOworfTsKKworY2xhc3MgUXVlcnlhYmxlRXhpdFByb2ZpbGUgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IFF1ZXJ5YWJsZUV4aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxl
Jik7CisgICAgflF1ZXJ5YWJsZUV4aXRQcm9maWxlKCk7CisgICAgCisgICAgYm9vbCBoYXNFeGl0
U2l0ZShjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBzaXRlKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fZnJlcXVlbnRFeGl0U2l0ZXMuZmluZChzaXRlKSAhPSBtX2ZyZXF1ZW50RXhpdFNp
dGVzLmVuZCgpOworICAgIH0KKyAgICAKKyAgICBib29sIGhhc0V4aXRTaXRlKHVuc2lnbmVkIGJ5
dGVjb2RlSW5kZXgsIEV4aXRLaW5kIGtpbmQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aGFzRXhpdFNpdGUoRnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBraW5kKSk7CisgICAg
fQorcHJpdmF0ZToKKyAgICBIYXNoU2V0PEZyZXF1ZW50RXhpdFNpdGU+IG1fZnJlcXVlbnRFeGl0
U2l0ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBERkdF
eGl0UHJvZmlsZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4NCwxNCArMjg0
LDE5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5jYWxsZWUtPmpzRXhlY3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKTsKICAgICB9CiAgICAgCi0g
ICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2Rl
T3JpZ2luKQorICAgIHN0YXRpYyBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2lu
QW5kQmFzZWxpbmVDb2RlQmxvY2soY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbiwgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jaykKICAgICB7CiAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUg
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKTsKICAgICAgICAg
ICAgIEFTU0VSVChleGVjdXRhYmxlLT5zdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJkZ1bmN0
aW9uRXhlY3V0YWJsZTo6c19pbmZvKTsKICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKS0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNv
bnN0cnVjdCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrKCk7
CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jazsKKyAgICB9CisgICAgCisgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2lu
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFz
ZWxpbmVDb2RlQmxvY2soY29kZU9yaWdpbiwgYmFzZWxpbmVDb2RlQmxvY2soKSk7CiAgICAgfQog
ICAgIAogICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2soKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDEw
MjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02MzEsMTEgKzYzMSwxMyBAQCBwcml2YXRlOgogCiAgICAgTm9k
ZUluZGV4IG1ha2VTYWZlKE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICBpZiAo
IW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2Uo
bV9jdXJyZW50SW5kZXgpKQorICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJl
bnRJbmRleCwgT3ZlcmZsb3cpCisgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9l
eGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkKICAg
ICAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVC
VUdfVkVSQk9TRSkKLSAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUg
YmVjYXVzZSBzbG93LWNhc2UgY291bnRlciBpcyBhdCAldVxuIiwgR3JhcGg6Om9wTmFtZShtX2dy
YXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0
KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMg
QCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzbG93LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQg
ZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUlu
ZGV4XS5vcCksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50
SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSk7CiAjZW5k
aWYKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ncmFwaFtub2RlSW5kZXhdLm9wKSB7CkBA
IC02NDgsMTIgKzY1MCwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAKICAgICAgICAgY2FzZSBBcml0aE11bDoKLSAgICAgICAgICAgIGlmIChtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShtX2N1
cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmxpa2VseVRvVGFrZURlZXBlc3RTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAg
ICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJNYWtpbmcgQXJpdGhNdWwgQCV1IHRha2Ug
ZGVlcGVzdCBzbG93IGNhc2UuXG4iLCBub2RlSW5kZXgpOwogI2VuZGlmCiAgICAgICAgICAgICAg
ICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU92ZXJmbG93
IHwgTm9kZU1heU5lZ1plcm8pOwotICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VT
bG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgICAgfHwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVn
YXRpdmVaZXJvKSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgICAg
ICAgICBwcmludGYoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBmYXN0ZXIgc2xvdyBjYXNlLlxu
Iiwgbm9kZUluZGV4KTsKICNlbmRpZgpAQCAtNjc5LDEzICs2ODMsMTcgQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gY2FyZSBhYm91dCB3aGVuIHRoZSBvdXRjb21lIG9mIHRoZSBkaXZpc2lvbiBpcyBu
b3QgYW4gaW50ZWdlciwgd2hpY2gKICAgICAgICAgLy8gaXMgd2hhdCB0aGUgc3BlY2lhbCBmYXN0
IGNhc2UgY291bnRlciB0ZWxscyB1cy4KICAgICAgICAgCi0gICAgICAgIGlmICghbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTcGVjaWFsRmFzdENhc2UobV9j
dXJyZW50SW5kZXgpKQorICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAg
ICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE92ZXJmbG93KQorICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykp
CiAgICAgICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAKICNpZiBERkdfRU5BQkxF
KERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJj
IyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0LWNhc2UgY291bnRlciBpcyBhdCAldVxuIiwgR3JhcGg6
Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAg
IHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc3BlY2lhbCBmYXN0
LWNhc2UgY291bnRlciBpcyBhdCAldSBhbmQgZXhpdCBwcm9maWxlcyBzYXkgJWQsICVkXG4iLCBH
cmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCksIG5vZGVJbmRleCwgbV9jdXJyZW50
SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNl
UHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lu
bGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBP
dmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9j
dXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwogI2VuZGlmCiAgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gbWFrZSB0aGlzIG1vcmUgZ3JhbnVsYXIu
IFRoZSBERkcgY2VydGFpbmx5IGNhbgorICAgICAgICAvLyBkaXN0aW5ndWlzaCBiZXR3ZWVuIG5l
Z2F0aXZlIHplcm8gYW5kIG92ZXJmbG93IGluIGl0cyBleGl0IHByb2ZpbGVzLgogICAgICAgICBt
X2dyYXBoW25vZGVJbmRleF0ubWVyZ2VBcml0aE5vZGVGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBO
b2RlTWF5TmVnWmVybyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gbm9kZUluZGV4OwpAQCAt
NzkzLDYgKzgwMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBTY3JpcHRFeGVjdXRh
YmxlKiBleGVjdXRhYmxlKCkgeyByZXR1cm4gbV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
OyB9CiAgICAgICAgIAorICAgICAgICBRdWVyeWFibGVFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxl
OworICAgICAgICAKICAgICAgICAgLy8gUmVtYXBwaW5nIG9mIGlkZW50aWZpZXIgYW5kIGNvbnN0
YW50IG51bWJlcnMgZnJvbSB0aGUgY29kZSBibG9jayBiZWluZwogICAgICAgICAvLyBpbmxpbmVk
IChpbmxpbmUgY2FsbGVlKSB0byB0aGUgY29kZSBibG9jayB0aGF0IHdlJ3JlIGlubGluaW5nIGlu
dG8KICAgICAgICAgLy8gKHRoZSBtYWNoaW5lIGNvZGUgYmxvY2ssIHdoaWNoIGlzIHRoZSB0cmFu
c2l0aXZlLCB0aG91Z2ggbm90IG5lY2Vzc2FyaWx5CkBAIC04ODcsMTIgKzg5NywxNCBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgZW51bSB7IENvbnN0YW50
RnVuY3Rpb24sIExpbmtlZEZ1bmN0aW9uLCBVbmtub3duRnVuY3Rpb24gfSBjYWxsVHlwZTsKICAg
ICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBwcmludGYoIlNs
b3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1OiAldS8ldS5cbiIsIG1fZ3JhcGgu
c2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291
bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5leGVjdXRpb25FbnRyeUNv
dW50KCkpOworICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBjYWxsIGF0IEAlbHUgYmMj
JXU6ICV1LyV1OyBleGl0IHByb2ZpbGU6ICVkLlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVu
dEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmV4ZWN1dGlvbkVudHJ5Q291bnQoKSwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2Fj
aGUpKTsKICNlbmRpZgogICAgICAgICAgICAgCiAgICAgaWYgKG1fZ3JhcGguaXNGdW5jdGlvbkNv
bnN0YW50KG1fY29kZUJsb2NrLCBjYWxsVGFyZ2V0KSkKICAgICAgICAgY2FsbFR5cGUgPSBDb25z
dGFudEZ1bmN0aW9uOwotICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5nZXRDYWxsTGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlICYm
ICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxkVGFrZVNsb3dDYXNlKG1f
Y3VycmVudEluZGV4KSkKKyAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZQor
ICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmNvdWxk
VGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNo
ZSkpCiAgICAgICAgIGNhbGxUeXBlID0gTGlua2VkRnVuY3Rpb247CiAgICAgZWxzZQogICAgICAg
ICBjYWxsVHlwZSA9IFVua25vd25GdW5jdGlvbjsKQEAgLTExNjcsNyArMTE3OSwxMCBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmICghTWFjcm9B
c3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludEFicygpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoQWJz
LCBPcEluZm8oTm9kZVVzZUJvdHRvbSksIGdldFRvTnVtYmVyKHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSkpKSk7CisgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBhZGRU
b0dyYXBoKEFyaXRoQWJzLCBPcEluZm8oTm9kZVVzZUJvdHRvbSksIGdldFRvTnVtYmVyKHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgaWYgKG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJm
bG93KSkKKyAgICAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdz
KE5vZGVNYXlPdmVyZmxvdyk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlSW5kZXgp
OwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2NjgsNyArMTY4MywxMCBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBTdHJ1
Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIE1ldGhvZENhbGxM
aW5rSW5mbyYgbWV0aG9kQ2FsbCA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
Z2V0TWV0aG9kQ2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgaWYgKG1ldGhvZENhbGwuc2VlbiAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0
dXJlICYmICFzdHViSW5mby5zZWVuKSB7CisgICAgICAgICAgICBpZiAobWV0aG9kQ2FsbC5zZWVu
CisgICAgICAgICAgICAgICAgJiYgISFtZXRob2RDYWxsLmNhY2hlZFN0cnVjdHVyZQorICAgICAg
ICAgICAgICAgICYmICFzdHViSW5mby5zZWVuCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENh
Y2hlKSkgewogICAgICAgICAgICAgICAgIC8vIEl0J3MgbW9ub21vcnBoaWMgYXMgZmFyIGFzIHdl
IGNhbiB0ZWxsLCBzaW5jZSB0aGUgbWV0aG9kX2NoZWNrIHdhcyBsaW5rZWQKICAgICAgICAgICAg
ICAgICAvLyBidXQgdGhlIHNsb3cgcGF0aCAoaS5lLiB0aGUgbm9ybWFsIGdldF9ieV9pZCkgbmV2
ZXIgZmlyZWQuCiAKQEAgLTE3MTEsMTIgKzE3MjksMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJ
bmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRTdHViSW5mbyhtX2N1
cnJlbnRJbmRleCk7CiAgICAgICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0Up
Ci0gICAgICAgICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgR2V0QnlJZCBAJWx1IGJj
IyV1OiAldVxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNr
VG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1f
Y3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNl
IGNvdW50IGZvciBHZXRCeUlkIEAlbHUgYmMjJXU6ICV1OyBleGl0IHByb2ZpbGU6ICVkXG4iLCBt
X2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgp
LT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUo
bV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7CiAjZW5kaWYKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgc2l6ZV90IG9mZnNldCA9IG5vdEZvdW5kOwogICAgICAgICAgICAgU3RydWN0dXJlU2V0
IHN0cnVjdHVyZVNldDsKLSAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmICFtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVu
dEluZGV4KSkgeworICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4KKyAgICAgICAgICAgICAg
ICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93
Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7
CiAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CiAgICAgICAg
ICAgICAgICAgY2FzZSBhY2Nlc3NfZ2V0X2J5X2lkX3NlbGY6IHsKICAgICAgICAgICAgICAgICAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBzdHViSW5mby51LmdldEJ5SWRTZWxmLmJhc2VPYmpl
Y3RTdHJ1Y3R1cmUuZ2V0KCk7CkBAIC0xODA1LDEwICsxODI1LDEyIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGJvb2wgYWxyZWFkeUdlbmVy
YXRlZCA9IGZhbHNlOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQotICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIFB1dEJ5SWQgQCVsdSBi
YyMldTogJXVcbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCht
X2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgICAgICBwcmludGYoIlNsb3cgY2Fz
ZSBjb3VudCBmb3IgUHV0QnlJZCBAJWx1IGJjIyV1OiAldTsgZXhpdCBwcm9maWxlOiAlZFxuIiwg
bV9ncmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4
KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogI2VuZGlmICAgICAgICAgICAgCiAKLSAgICAg
ICAgICAgIGlmIChzdHViSW5mby5zZWVuICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkgeworICAgICAgICAg
ICAgaWYgKHN0dWJJbmZvLnNlZW4KKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkK
KyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNF
eGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7CiAgICAgICAgICAgICAgICAgc3dp
dGNoIChzdHViSW5mby5hY2Nlc3NUeXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBhY2Nlc3Nf
cHV0X2J5X2lkX3JlcGxhY2U6IHsKICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUgPSBzdHViSW5mby51LnB1dEJ5SWRSZXBsYWNlLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0
KCk7CkBAIC0yNDI1LDYgKzI0NDcsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRy
eTo6SW5saW5lCiAgICAgLCBtX2NvZGVCbG9jayhjb2RlQmxvY2spCiAgICAgLCBtX3Byb2ZpbGVk
QmxvY2socHJvZmlsZWRCbG9jaykKICAgICAsIG1fY2FsbGVlVlIoY2FsbGVlVlIpCisgICAgLCBt
X2V4aXRQcm9maWxlKHByb2ZpbGVkQmxvY2stPmV4aXRQcm9maWxlKCkpCiAgICAgLCBtX2NhbGxz
aXRlQmxvY2tIZWFkKGNhbGxzaXRlQmxvY2tIZWFkKQogICAgICwgbV9yZXR1cm5WYWx1ZShyZXR1
cm5WYWx1ZVZSKQogICAgICwgbV9kaWRSZXR1cm4oZmFsc2UpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDE3
ICsyOCwyMCBAQAogCiAjaWYgRU5BQkxFKERGR19KSVQpCiAKKyNpbmNsdWRlICJERkdBc3NlbWJs
eUhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdTcGVjdWxhdGl2ZUpJVC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLU9TUkV4aXQ6Ok9TUkV4aXQoSlNWYWx1ZVNvdXJjZSBq
c1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgp
CitPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNo
ZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQogICAgIDog
bV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1
ZVByb2ZpbGUpCiAgICAgLCBtX2NoZWNrKGNoZWNrKQogICAgICwgbV9ub2RlSW5kZXgoaml0LT5t
X2NvbXBpbGVJbmRleCkKICAgICAsIG1fY29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9T
UikKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUluZGV4KQorICAgICwgbV9raW5kKGtp
bmQpCisgICAgLCBtX2NvdW50KDApCiAgICAgLCBtX2FyZ3VtZW50cyhqaXQtPm1fYXJndW1lbnRz
LnNpemUoKSkKICAgICAsIG1fdmFyaWFibGVzKGppdC0+bV92YXJpYWJsZXMuc2l6ZSgpKQogICAg
ICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCkBAIC02MSw2ICs2NCwx
NCBAQCB2b2lkIE9TUkV4aXQ6OmR1bXAoRklMRSogb3V0KSBjb25zdAogfQogI2VuZGlmCiAKK2Jv
b2wgT1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9j
ayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQoreworICAgIGlm
IChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5zcGVjdWxhdGl2
ZUZhaWxDb3VudGVyKCkgPD0gSGV1cmlzdGljczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVu
dEV4aXRTaXRlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIEFzc2Vt
Ymx5SGVscGVyczo6YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9j
ayhtX2NvZGVPcmlnaW4sIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVlbnRFeGl0U2l0ZShG
cmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBtX2tpbmQpKTsKK30K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTAy
NTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVk
ZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHQ29ycmVjdGFibGVKdW1wUG9pbnQuaCIKKyNp
bmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKICNpbmNs
dWRlICJERkdPcGVyYW5kcy5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCkBAIC04MSw3
ICs4Miw3IEBAIHByaXZhdGU6CiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4
aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKIC8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4K
IHN0cnVjdCBPU1JFeGl0IHsKLSAgICBPU1JFeGl0KEpTVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmls
ZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292
ZXJ5SW5kZXggPSAwKTsKKyAgICBPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2Us
IFZhbHVlUHJvZmlsZSosIE1hY3JvQXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXggPSAwKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbV9jb2RlOwogICAgIApAQCAtOTQsNiArOTUsOSBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAg
CiAgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OwogICAgIAorICAgIEV4aXRLaW5kIG1fa2lu
ZDsKKyAgICB1aW50MzJfdCBtX2NvdW50OworICAgIAogICAgIC8vIENvbnZlbmllbnQgd2F5IG9m
IGl0ZXJhdGluZyBvdmVyIFZhbHVlUmVjb3ZlcmllcyB3aGlsZSBiZWluZwogICAgIC8vIGdlbmVy
aWMgb3ZlciBhcmd1bWVudCB2ZXJzdXMgdmFyaWFibGUuCiAgICAgaW50IG51bWJlck9mUmVjb3Zl
cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNp
emUoKTsgfQpAQCAtMTIwLDYgKzEyNCwxMyBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgICAgIHJl
dHVybiBpbmRleCAtIG1fYXJndW1lbnRzLnNpemUoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywg
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmICghbV9jb3Vu
dCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93
KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KKyAgICAKICNpZm5kZWYg
TkRFQlVHCiAgICAgdm9pZCBkdW1wKEZJTEUqIG91dCkgY29uc3Q7CiAjZW5kaWYKQEAgLTEyNyw2
ICsxMzgsOSBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+
IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsK
ICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKworcHJpdmF0ZToKKyAgICBib29sIGNvbnNpZGVy
QWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29k
ZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7CiB9OwogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NF
X1NQRUNVTEFUSU9OX0ZBSUxVUkUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTAyNTYyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1MSw2ICs0NTEsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6
Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdl
IHNldCB0aGUgY291bnRlciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFm
dGVyV2FybVVwKCkuCiAgICAgCisgICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0z
MigxKSwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmV4aXQubV9jb3VudCkpOwor
ICAgIAogICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0
LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAgIG1faml0LmxvYWQzMihB
c3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0
T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAko
cmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2MSw2ICs0NjEsOCBAQCB2b2lkIE9T
UkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgLy8gICAgIGNvdW50ZXIgdG8g
MDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwogICAgIC8vICAgICBjb3VudGVyVmFs
dWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCiAgICAgCisgICAgbV9qaXQuYWRkMzIoQXNzZW1i
bHlIZWxwZXJzOjpJbW0zMigxKSwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmV4
aXQubV9jb3VudCkpOworICAgIAogICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAg
IG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENv
ZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdU
Mik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAg
dm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJlY292ZXJ5ID0g
JmNvZGVCbG9jay0+c3BlY3VsYXRpb25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCAtIDEp
OwogCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAi
R2VuZXJhdGluZyBPU1IgZXhpdCAjJXUgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgs
IGNvZGVCbG9jayk7CisgICAgZnByaW50ZihzdGRlcnIsICJHZW5lcmF0aW5nIE9TUiBleGl0ICMl
dSAoYmMjJXUsIEAldSwgJXMpIGZvciBjb2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRv
U3RyaW5nKGV4aXQubV9raW5kKSwgY29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAgewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgyLDcgKzEyODIsNyBAQCBHUFJS
ZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgc3dpdGNoIChpbmZvLnJl
Z2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlm
ICgobm9kZS5oYXNDb25zdGFudCgpICYmICFpc0ludDMyQ29uc3RhbnQobm9kZUluZGV4KSkgfHwg
aW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJ
bnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KQEAgLTEz
MzIsNyArMTMzMiw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkK
ICAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIGFuIGludGVnZXIuCiAgICAgICAgIEdQUlJl
ZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhn
cHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGdw
ciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGluZm8uZmlsbEpT
VmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNJbnRlZ2VyKTsKICAgICAgICAgLy8gSWYgIXN0cmljdCB3
ZSdyZSBkb25lLCByZXR1cm4uCiAgICAgICAgIGlmICghc3RyaWN0KSB7CkBAIC0xMzg5LDcgKzEz
ODksNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgY2Fz
ZSBEYXRhRm9ybWF0Qm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2Fz
ZSBEYXRhRm9ybWF0SlNCb29sZWFuOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAg
ICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgcmV0dXJuIGFsbG9j
YXRlKCk7CiAgICAgfQpAQCAtMTQ0OCw3ICsxNDQ4LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlRG91YgogICAgICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZShmcHIp
OwogICAgICAgICAgICAgICAgIHJldHVybiBmcHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZnByQWxsb2NhdGUoKTsK
ICAgICAgICAgfQogICAgICAgICAKQEAgLTE0OTEsNyArMTQ5MSw3IEBAIEZQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAg
ICAgICAgcmV0dXJuIGZwckFsbG9jYXRlKCk7CiAKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6
CkBAIC0xNTA0LDcgKzE1MDQsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxh
dGVEb3ViCiAKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGpzVmFsdWVHcHIsIEdQUkluZm86
OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CiAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyhqc1ZhbHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhqc1Zh
bHVlR3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKIAogICAg
ICAgICAvLyBGaXJzdCwgaWYgd2UgZ2V0IGhlcmUgd2UgaGF2ZSBhIGRvdWJsZSBlbmNvZGVkIGFz
IGEgSlNWYWx1ZQogICAgICAgICBtX2ppdC5tb3ZlKGpzVmFsdWVHcHIsIHRlbXBHcHIpOwpAQCAt
MTU3OCw3ICsxNTc4LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7CiAgICAgY2FzZSBEYXRhRm9y
bWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXRJ
bnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUo
KTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE1OTIsNyArMTU5Miw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxK
U1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAg
ICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxG
b3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CkBAIC0xNjAxLDcgKzE2MDEsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAKICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZShncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0g
RGF0YUZvcm1hdEpTQ2VsbCkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpO
b25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0
SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdwcjsKICAgICB9CkBAIC0xNjE2LDcgKzE2MTYsNyBA
QCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgY2FzZSBEYXRh
Rm9ybWF0SlM6IHsKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1f
Z3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOwog
ICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTE2MjcsNyArMTYyNyw3IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBjYXNlIERhdGFGb3JtYXREb3Vi
bGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdEJv
b2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0
ZSgpOwogICAgIH0KIApAQCAtMTY1MSw3ICsxNjUxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7
CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1h
dCgpID09IERhdGFGb3JtYXRJbnRlZ2VyIHx8IGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9y
bWF0RG91YmxlKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihK
U1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAg
ICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICAgICAgfQogICAgICAgICAKQEAgLTE2NjUsNyArMTY2
NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAg
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgIH0KICAgICAg
ICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRKUyk7CkBAIC0xNjc1LDcg
KzE2NzUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICBpZiAoaW5m
by5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0Jvb2xlYW4pIHsKICAgICAgICAgICAgIG1f
aml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkp
LCBncHIpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdw
ciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJl
Y292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9k
ZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIs
IFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNv
dmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CiAgICAg
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgfQogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdw
ciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CkBAIC0xNjkzLDcgKzE2OTMsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgIEdQUlJlZyBncHIgPSBpbmZv
LmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwogICAgICAgICBtX2ppdC54b3JQdHIo
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5T
cGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxh
dGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7CiAgICAg
ICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAg
cmV0dXJuIGdwcjsKQEAgLTE3MDUsNyArMTcwNSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBE
YXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6IHsKLSAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KICAgICAgICAg
CkBAIC0xNzQ4LDkgKzE3NDgsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBp
ZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9w
MUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAgICBtX2ppdC5tb3ZlKElt
bTMyKFZhbHVlVHJ1ZSksIHJlc3VsdEdQUik7CkBAIC0xODE3LDcgKzE4MTcsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhlCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHZhbHVlR1BSLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChuZWVk
U3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2
YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgbV9qaXQubW92ZShUcnVz
dGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOwog
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgCkBAIC0x
ODI2LDcgKzE4MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0T3JPdGhl
CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFs
dWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCByZXN1bHRHUFIpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3Vs
dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oVmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdEdQUik7CiAgICAgCkBAIC0xODgy
LDcgKzE4ODIsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTG9naWNhbE5vdChOCiAg
ICAgICAgIAogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlLmdwcigpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3RQdHIo
SklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh2YWx1ZS5ncHIoKSksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3RQ
dHIoSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0LmdwcigpKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNl
IGl0IGhlcmUuCkBAIC0xOTIxLDcgKzE5MjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHZhbHVlR1BSLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpOwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVl
R1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgYWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwog
ICAgIAogICAgIG5vdENlbGwubGluaygmbV9qaXQpOwpAQCAtMTkyOSw3ICsxOTI5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIGlmIChuZWVkU3BlY3Vs
YXRpb25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCBzY3JhdGNoR1BSKTsK
ICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0Jp
dFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkp
OwogICAgIH0KICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKICAgICAgICAgYWRk
QnJhbmNoKG1faml0Lmp1bXAoKSwgbm90VGFrZW4pOwpAQCAtMTk5Nyw3ICsxOTk3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdEJyYW5jaChOb2RlJiBubwogICAgICAgICAgICAgYWRkQnJh
bmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNy
b0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4oZmFsc2UpKSkpLCBu
b3RUYWtlbik7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6
ZW5jb2RlKGpzQm9vbGVhbih0cnVlKSkpKSwgdGFrZW4pOwogCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuanVt
cCgpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
dmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOwogICAgICAgICAgICAgdmFs
dWUudXNlKCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKDApKSkpLCBub3RUYWtlbik7CkBAIC0y
MDQzLDcgKzIwNDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUp
CiAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwcmVkaWN0aW9uIGZvciB0aGlzIGxvY2FsLCB0
aGVuIGRvbid0IGF0dGVtcHQgdG8gY29tcGlsZS4KICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0g
UHJlZGljdE5vbmUgfHwgdmFsdWUuaXNDbGVhcigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAgLTIx
MTMsMTQgKzIxMTMsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxk
MSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKICAgICAgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhj
ZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhjZWxsR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgICAg
ICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxv
Y2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAgICAgICAgICBpZiAo
IWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGNlbGxH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhjZWxsR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgICAg
ICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9k
ZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewpAQCAt
MjIyNSw3ICsyMjI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CiAKICAgICAgICAgLy8g
VGVzdCB0aGUgb3BlcmFuZCBpcyBwb3NpdGl2ZS4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKSk7CiAKICAg
ICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGludGVn
ZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgb3AxLmZvcm1hdCgpKTsKQEAg
LTIyNzMsNyArMjI3Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDIuZ3ByKCksIHJlc3VsdC5ncHIo
KSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTEpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIEltbTMyKGltbTEpLCByZXN1bHQuZ3By
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTIyODgsNyArMjI4OCw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmFk
ZDMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCks
IEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hB
ZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJl
c3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzMTMsMTEg
KzIzMTMsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNoZWNrID0gbV9qaXQuYnJhbmNoQWRk
MzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBncHIxLCBncHIyLCBncHJSZXN1bHQpOwogICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChncHIxID09IGdwclJlc3VsdCkKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdw
cjIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2
ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ3ByMiA9
PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFk
ZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVj
b3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMSkpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIGNoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjayk7CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByUmVzdWx0LCBtX2NvbXBpbGVJbmRleCk7CkBA
IC0yMzUzLDcgKzIzNTMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihJbW0zMihpbW0yKSwgcmVzdWx0
LmdwcigpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFN1YjMyKE1h
Y3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0Lmdw
cigpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAg
ICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzY3LDcgKzIzNjcsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShv
cDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIob3Ay
LmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFN1
YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3Vs
dC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAg
ICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTIzOTksMTMgKzIzOTksMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIo
KTsKICAgICAgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQUikpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQUikpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91dCBuZWdhdGl2ZSB6ZXJvLCB0aGVu
IHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAgICAgICAgICAgLy8gdG8gcHJvZHVj
ZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAgaWYgKCFub2RlQ2FuSWdub3JlTmVnYXRpdmVa
ZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDJHUFIsIFRydXN0ZWRJbW0zMigw
KSkpOwogICAgICAgICAgICAgICAgIG51bWVyYXRvck5vblplcm8ubGluaygmbV9qaXQpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yNDI1LDcgKzI0MjUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgICAgIC8vIENoZWNrIHRo
YXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUgaGFkIGJlZW4sIHRoZW4gd2UnZCBi
ZSBvYmxpZ2F0ZWQgdG8KICAgICAgICAgICAgIC8vIHByb2R1Y2UgYSBkb3VibGUgcmVzdWx0IGlu
c3RlYWQuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBlZHguZ3ByKCkpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpOb25aZXJvLCBlZHguZ3ByKCkp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChlYXguZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjQ1OCw3ICsyNDU4LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9q
aXQucnNoaWZ0MzIocmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDMx
KSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC5hZGQzMihzY3JhdGNoLmdwcigp
LCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQueG9yMzIoc2NyYXRjaC5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdC5n
cHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOwogICAgICAgICAgICAgaW50ZWdlclJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CkBAIC0yNjg4LDE1ICsyNjg4LDE1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAKICAgICAgICAgLy8g
RklYTUU6IEluIGNhc2VzIHdoZXJlIHRoZXJlIGFyZSBzdWJzZXF1ZW50IGJ5X3ZhbCBhY2Nlc3Nl
cyB0byB0aGUgc2FtZSBiYXNlIGl0IG1pZ2h0IGhlbHAgdG8gY2FjaGUKICAgICAgICAgLy8gdGhl
IHN0b3JhZ2UgcG9pbnRlciAtIGVzcGVjaWFsbHkgaWYgdGhlcmUgaGFwcGVucyB0byBiZSBhbm90
aGVyIHJlZ2lzdGVyIGZyZWUgcmlnaHQgbm93LiBJZiB3ZSBkbyBzbywKICAgICAgICAgLy8gdGhl
biB3ZSdsbCBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHRlbXBvcmFyeSBmb3IgcmVzdWx0LgogICAg
ICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNz
ZW1ibGVyOjpTY2FsZVB0ciwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3Jb
MF0pKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjc5OSw3ICsyNzk5LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBDaGVj
ayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3
aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgpLgogICAgICAgICAvLyBJZiB3ZSBoYXZl
IHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFycmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hl
Y2suCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAg
IGJhc2UudXNlKCk7CiAgICAgICAgIHByb3BlcnR5LnVzZSgpOwpAQCAtMjk0MywxMyArMjk0Mywx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIHdy
aXRlQmFycmllcihiYXNlR1BSLCB2YWx1ZUdQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCiAgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwogICAgICAgICAKICAgICAgICAgLy8g
UmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxlbmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwg
VHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNldCgpKSk7CiAgICAgICAgIApAQCAtMjk4Niw3
ICsyOTg2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQUiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0Lmxv
YWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMwOTEsNyAr
MzA5MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICBj
YXNlIFRocm93UmVmZXJlbmNlRXJyb3I6IHsKICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhy
b3cgc3RhdGVtZW50cyBhcmUgcmFyZSBhbmQgYXJlIGludGVuZGVkIHRvIGV4aXQgdGhlIGNvZGUg
YmxvY2sKICAgICAgICAgLy8gYW55d2F5LCBzbyB3ZSBqdXN0IE9TUiBiYWNrIHRvIHRoZSBvbGQg
SklUIGZvciBub3cuCi0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgICAgIApAQCAtMzIyNCw3ICszMjI0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgaWYgKCFpc090aGVyUHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICAgICAgICAg
IG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgICAgICBt
X2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwg
bm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
c2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAg
ICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSksIHNjcmF0Y2hHUFIpOwpAQCAtMzIzOSw3
ICszMjM5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgaWYgKCFpc09iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUu
Y2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxl
cjo6RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNWYWx1ZUdQUiwgcmVzdWx0R1BS
KTsKICAgICAgICAgICAgIApAQCAtMzI4Myw3ICszMjgzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJl
LWJhc2VkKSBjaGVjay4KICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUZpbmFsT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhwcm90b0dQUiksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKKyAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHByb3RvR1BSKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90
b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAg
ICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlw
ZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwpA
QCAtMzM5MCw3ICszMzkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KICAgICBjYXNlIEdldEJ5SWQ6IHsKICAgICAgICAgaWYgKCFub2RlLnByZWRp
Y3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zNDQ2LDEyICszNDQ2LDEyIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNBcnJheVByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1
bHRHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVz
dWx0R1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRH
UFIpOwogICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCkpKTsKICAgICAgICAgCiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BS
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzQ2NSw3ICszNDY1LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcg
cmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc1N0cmlu
Z1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxk
MSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkMzIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3Ro
KCkpLCByZXN1bHRHUFIpOwogCkBAIC0zNDgxLDcgKzM0ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1
bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmpzQnl0ZUFycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
Qnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgp
KSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIsIEJ5dGVBcnJheTo6b2Zmc2V0T2ZTaXplKCkpLCByZXN1bHRHUFIpOwpAQCAt
MzUyMyw3ICszNTIzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgIH0KICAgICBjYXNlIENoZWNrRnVuY3Rpb246IHsKICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgZnVuY3Rpb24odGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUuZnVuY3Rpb24oKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwg
bm9kZS5mdW5jdGlvbigpKSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMzUzOCw3ICszNTM4LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBBU1NFUlQobm9kZS5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKG5vZGUuc3RydWN0dXJlU2V0KCku
c2l6ZSgpID09IDEpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBu
b2RlLnN0cnVjdHVyZVNldCgpWzBdKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29t
cGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6
OnN0cnVjdHVyZU9mZnNldCgpKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKVswXSkpOwogICAgICAgICBl
bHNlIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSBzdHJ1Y3R1cmUodGhpcyk7CiAgICAgICAg
ICAgICAKQEAgLTM1NDksNyArMzU0OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbm9kZS5zdHJ1
Y3R1cmVTZXQoKS5zaXplKCkgLSAxOyArK2kpCiAgICAgICAgICAgICAgICAgZG9uZS5hcHBlbmQo
bV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwg
bm9kZS5zdHJ1Y3R1cmVTZXQoKVtpXSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihK
SVRDb21waWxlcjo6Tm90RXF1YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQo
KS5sYXN0KCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1
YWwsIHN0cnVjdHVyZS5ncHIoKSwgbm9kZS5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KQEAgLTM3
MDUsNyArMzcwNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCBiYXNlICdJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlJy4KICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc3RydWN0dXJlLmdwcigpKTsK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhz
dHJ1Y3R1cmUuZ3ByKCksIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNldCgpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0luc3RhbmNlKSkpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFRlc3Q4KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhzdHJ1Y3R1cmUuZ3ByKCksIFN0cnVjdHVyZTo6dHlwZUluZm9GbGFnc09mZnNl
dCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihJbXBsZW1lbnRzRGVmYXVsdEhhc0lu
c3RhbmNlKSkpOwogCiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
YnJlYWs7CkBAIC0zNzk0LDcgKzM3OTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6IHsKLSAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDEw
MjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MjQsOSArODI0LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVBlZXBIb2xlT2JqZQogICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIuZ3ByKCk7CiAgICAg
CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMigp
KS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikp
KTsKICAgICAKICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKGNvbmRpdGlvbiwgb3AxR1BS
LCBvcDJHUFIpLCB0YWtlbik7CiAgICAgaWYgKG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCkBA
IC0xMDU5LDEyOCArMTA1OSwxMjggQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVu
dFR5cGVzKAogICAgICAgICBQcmVkaWN0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFj
Y2Vzc0RhdGEtPnByZWRpY3Rpb24oKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBpZiAo
aXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBlbHNlIGlm
IChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVt
cC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5n
cHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlW
UHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9v
bGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKICAgICAgICAgICAgIG1faml0
LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1w
LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigp
LCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAgICB9IGVs
c2UgaWYgKGlzSW50OEFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3IoKS5tX3Zw
dHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVs
c2UgaWYgKGlzSW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLm1f
dnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9
IGVsc2UgaWYgKGlzSW50MzJBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
Lm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAg
ICB9IGVsc2UgaWYgKGlzVWludDhBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigp
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRv
cigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAg
ICAgICB9IGVsc2UgaWYgKGlzVWludDE2QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7
CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0
LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5n
cHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIo
KSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNj
cmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVt
cC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJy
YXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92
cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzRmxvYXQzMkFycmF5UHJlZGljdGlvbihwcmVk
aWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAg
ICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzRmxvYXQ2NEFycmF5UHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUklu
Zm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJy
YXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9CiAjZWxzZQogICAgICAgICBpZiAo
aXNJbnQzMlByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKICAgICAgICAgZWxzZSBpZiAo
aXNBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBv
cmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0
YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQcmVk
aWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0
aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1
YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2Fk
MzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJ
VENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJvb2xlYW5UYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbnQ4QXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZp
cnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIo
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5s
b2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIo
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0ludDE2QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAg
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcp
KSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iodmly
dHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW50MzJBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNVaW50OEFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCku
bV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigp
Lm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc1VpbnQxNkFycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRl
bXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9ICBlbHNl
IGlmIChpc1VpbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigp
Lm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9y
KCkubV92cHRyKSkpOwogICAgICAgICB9ICBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9
ICAgZWxzZSBpZiAoaXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0Lmxv
YWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVz
Y3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5
RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSAKICNlbmRpZgogICAgIH0KQEAgLTEz
NTQsMTMgKzEzNTQsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldENoYXJDb2Rl
QQogICAgIAogICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIEFTU0VSVCghKGF0KG5vZGUuY2hpbGQxKCkp
LnByZWRpY3Rpb24oKSAmIFByZWRpY3RTdHJpbmcpKTsKLSAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7
CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVn
YXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKLSAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
cmluZ1JlZywgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKIAogICAgIEdQ
UlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRj
aC5ncHIoKTsKQEAgLTEzOTMsMTMgKzEzOTMsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TdAogCiAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgQVNTRVJUKCEoYXQobm9k
ZS5jaGlsZDEoKSkucHJlZGljdGlvbigpICYgUHJlZGljdFN0cmluZykpOwotICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmls
dGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQot
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CisgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkp
KSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICBHUFJSZWcgc2NyYXRj
aFJlZyA9IHNjcmF0Y2guZ3ByKCk7CkBAIC0xNDE3LDcgKzE0MTcsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAgICAgbV9qaXQubG9hZDE2KE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpU
aW1lc1R3bywgMCksIHNjcmF0Y2hSZWcpOwogCiAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFzY2lp
IGNoYXJhY3RlcnMKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaFJlZywg
VHJ1c3RlZEltbTMyKDB4MTAwKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgc2NyYXRjaFJlZywgVHJ1c3RlZEltbTMyKDB4MTAwKSkpOwogCiAgICAgLy8g
OCBiaXQgc3RyaW5nIHZhbHVlcyBkb24ndCBuZWVkIHRoZSBpc0FTQ0lJIGNoZWNrLgogICAgIGNv
bnQ4Qml0LmxpbmsoJm1faml0KTsKQEAgLTE0MjYsNyArMTQyNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAgICBHUFJSZWcgc21hbGxTdHJpbmdzUmVnID0g
c21hbGxTdHJpbmdzLmdwcigpOwogICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVy
U3RyaW5ncygpKSwgc21hbGxTdHJpbmdzUmVnKTsKICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc21hbGxTdHJpbmdzUmVnLCBzY3JhdGNoUmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6U2NhbGVQdHIsIDApLCBzY3JhdGNoUmVnKTsKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCBzY3JhdGNoUmVnKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olpl
cm8sIHNjcmF0Y2hSZWcpKTsKICAgICBjZWxsUmVzdWx0KHNjcmF0Y2hSZWcsIG1fY29tcGlsZUlu
ZGV4KTsKIH0KIApAQCAtMTQ5NSwxNCArMTQ5NSwxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JCCiAgICAgTm9kZUluZGV4IHZhbHVlSW5kZXggPSBub2RlLmNoaWxk
MygpOwogICAgIAogICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShiYXNlSW5kZXgpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlW
UHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikp
KTsKICAgICBHUFJUZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogCiAgICAg
aWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIGpzVmFs
dWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZUluZGV4KTsKICAgICAgICAgaWYgKCFqc1ZhbHVl
LmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQpAQCAtMTU2Myw3ICsxNTYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25CeQogICAgIEdQUlJlZyBwcm9wZXJ0eVJlZyA9IHByb3BlcnR5LmdwcigpOwogCiAg
ICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpIHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0
KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NzQsNyArMTU3
NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQnkKICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQnl0ZUFycmF5Ojpv
ZmZzZXRPZlN0b3JhZ2UoKSksIHN0b3JhZ2VSZWcpOwogICAgIAogICAgIC8vIHVuc2lnbmVkIGNv
bXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUgaW5kaWNlcyBhbmQgaW5kaWNl
cyB0aGF0IGFyZSB0b28gbGFyZ2UKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ5dGVBcnJheTo6
b2Zmc2V0T2ZTaXplKCkpKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVP
ckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywg
Qnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSkpKTsKIAogICAgIG1faml0LmxvYWQ4KE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVy
OjpUaW1lc09uZSwgQnl0ZUFycmF5OjpvZmZzZXRPZkRhdGEoKSksIHN0b3JhZ2VSZWcpOwogICAg
IGludGVnZXJSZXN1bHQoc3RvcmFnZVJlZywgbV9jb21waWxlSW5kZXgpOwpAQCAtMTU4OSw3ICsx
NTg5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldFR5cGVkQXJyYQogICAgIEdQ
UlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgaWYgKG5lZWRzU3BlY3Vs
YXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIGRlc2NyaXB0b3IubV9sZW5ndGhPZmZz
ZXQpLCByZXN1bHRHUFIpOwogICAgIApAQCAtMTYxMSw3ICsxNjExLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25JbgogCiAgICAgaWYgKHNwZWN1bGF0aW9uUmVxdWly
ZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsKICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNjUyLDE0ICsxNjUy
LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckkKICAgICBOb2Rl
SW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hpbGQzKCk7CiAgICAgCiAgICAgaWYgKHNwZWN1bGF0
aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRl
eCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0
b3IubV92cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICBHUFJU
ZW1wb3JhcnkgdmFsdWU7CiAgICAgR1BSUmVnIHZhbHVlR1BSOwogICAgIAogICAgIGlmIChhdCh2
YWx1ZUluZGV4KS5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFs
dWVPZkpTQ29uc3RhbnQodmFsdWVJbmRleCk7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJl
cigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVl
UmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBub1Jl
c3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAg
LTE3MzQsNyArMTczNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
RmwKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5
VHlwZVNwZWNDaGVjaykgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KQEAgLTE3NzUsNyArMTc3NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVQdXRCeVZhbEZvckYKICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHZhbHVl
T3AodGhpcywgdmFsdWVJbmRleCk7CiAgICAgCiAgICAgaWYgKHNwZWN1bGF0aW9uUmVxdWlyZW1l
bnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkp
OworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAKICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwogICAgIApAQCAtMTgxMCw3ICsxODEwLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGbwogewogICAgIC8vIENoZWNrIHRoYXQgcHJvdG90
eXBlIGlzIGFuIG9iamVjdC4KICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKHByb3RvdHlwZVJlZywgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0Y2hSZWcp
OwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hJZk5vdE9iamVjdChzY3JhdGNoUmVnKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hS
ZWcpKTsKICAgICAKICAgICAvLyBJbml0aWFsaXplIHNjcmF0Y2hSZWcgd2l0aCB0aGUgdmFsdWUg
YmVpbmcgY2hlY2tlZC4KICAgICBtX2ppdC5tb3ZlKHZhbHVlUmVnLCBzY3JhdGNoUmVnKTsKQEAg
LTE5NjQsNyArMTk2NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVTb2Z0TW9kdWxv
KE4KICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIoKSk7
CiAgICAgR1BSUmVnIG9wMkdwciA9IG9wMi5ncHIoKTsKIAotICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olpl
cm8sIG9wMkdwcikpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHcHIp
KTsKIAogI2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCiAgICAgR1BSVGVtcG9yYXJ5IGVheCh0
aGlzLCBYODZSZWdpc3RlcnM6OmVheCk7CkBAIC0yMDkyLDEzICsyMDkyLDEzIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aE11bChOb2QKICAgICAgICAgLy8gdGhlIHNlbWFudGlj
cyBhcmUgYWx3YXlzIGFzIGlmIHRoZSBtdWx0aXBseSBoYWQgYmVlbiBwZXJmb3JtZWQgaW4gdGhl
IGRvdWJsZQogICAgICAgICAvLyBkb21haW4uCiAgICAgICAgICAgICAKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaE11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQu
Z3ByKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAvLyBDaGVjayBmb3IgbmVnYXRpdmUgemVy
bywgaWYgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZSBjYXJlIGFib3V0IHN1Y2ggdGhpbmdzLgogICAg
ICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygp
KSkgewogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcmVzdWx0Tm9uWmVybyA9IG1f
aml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzEsIFRydXN0ZWRJbW0zMigw
KSkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMiwgVHJ1c3RlZElt
bTMyKDApKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIHJlZzEsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAg
ICAgIHJlc3VsdE5vblplcm8ubGluaygmbV9qaXQpOwogICAgICAgICB9CiAKQEAgLTIzMjIsNyAr
MjMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVkUHIKICAgICBQ
cmVkaWN0ZWRUeXBlIGJhc2VQcmVkaWN0aW9uID0gYXQobm9kZS5jaGlsZDIoKSkucHJlZGljdGlv
bigpOwogICAgIGlmICghKGJhc2VQcmVkaWN0aW9uICYgUHJlZGljdEludDMyKSAmJiBiYXNlUHJl
ZGljdGlvbikgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTIzMzEsNjEgKzIzMzEsNjEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIEdQUlJlZyBzdG9yYWdlUmVnID0gc3RvcmFnZS5ncHIo
KTsKICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpID09IFByZWRpY3RTdHJp
bmcpIHsKICAgICAgICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZWYWx1ZSgpKSwgc3Rv
cmFnZVJlZyk7CiAgICAgICAgIAogICAgICAgICAvLyBTcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3Qg
YWNjZXNzaW5nIGEgcm9wZQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9yYWdl
UmVnKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzdG9y
YWdlUmVnKSk7CiAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlUmVnLCBTdHJpbmdJbXBsOjpkYXRhT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAg
ICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUJ5dGVBcnJheSgp
KSB7CiAgICAgICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShu
b2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3Jh
Z2UoKSksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hv
dWxkU3BlY3VsYXRlSW50OEFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0
b3IoKTsKICAgICAgICAgaWYgKCFpc0ludDhBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3Zw
dHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAg
ICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVz
Y3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0
KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDE2QXJyYXkoKSkgewogICAgICAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEo
KS0+aW50MTZBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0ludDE2QXJyYXlQcmVk
aWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwg
bm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRl
c2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJl
Zyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQz
MkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAg
IGlmICghaXNJbnQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQu
bG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3Rv
cmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEo
KSkuc2hvdWxkU3BlY3VsYXRlVWludDhBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5
RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzVWludDhBcnJheVByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3Zw
dHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVs
c2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQxNkFycmF5KCkpIHsK
ICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzVWlu
dDE2QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0
KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVVaW50MzJBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlw
dG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0
b3IoKTsKICAgICAgICAgaWYgKCFpc1VpbnQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5v
ZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1f
dnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsK
ICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBk
ZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAo
YXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQzMkFycmF5KCkpIHsKICAgICAg
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0Zsb2F0MzJB
cnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBz
dG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1
bGF0ZUZsb2F0NjRBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9y
JiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9y
KCk7CiAgICAgICAgIGlmICghaXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9k
ZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92
cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwog
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRl
c2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNB
cnJheVZQdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAg
fQogICAgIHN0b3JhZ2VSZXN1bHQoc3RvcmFnZVJlZywgbV9jb21waWxlSW5kZXgpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMDI5LDM3ICsyMDI5LDM3IEBAIHByaXZhdGU6CiAjZW5k
aWYKIAogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNrIHdpdGhvdXQgYWRkaXRpb25hbCBy
ZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZSBqc1ZhbHVl
U291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9G
YWlsKQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGp1bXBUb0ZhaWwpCiAgICAgewogICAgICAgICBpZiAoIW1fY29tcGlsZU9rYXkpCiAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0
KE9TUkV4aXQoanNWYWx1ZVNvdXJjZSwgbV9qaXQudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCks
IGp1bXBUb0ZhaWwsIHRoaXMpKTsKKyAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9T
UkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2ZpbGVGb3Io
bm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOwogICAgIH0KICAgICAvLyBBZGQgYSBzZXQg
b2Ygc3BlY3VsYXRpb24gY2hlY2tzIHdpdGhvdXQgYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2
b2lkIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5k
ZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQorICAg
IHZvaWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFs
dWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYg
anVtcHNUb0ZhaWwpCiAgICAgewogICAgICAgICBWZWN0b3I8TWFjcm9Bc3NlbWJsZXI6Okp1bXAs
IDE2PiBKdW1wVmVjdG9yID0ganVtcHNUb0ZhaWwuanVtcHMoKTsKICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEp1bXBWZWN0b3Iuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRleCwgSnVtcFZlY3RvcltpXSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVTb3VyY2UsIG5vZGVJbmRl
eCwgSnVtcFZlY3RvcltpXSk7CiAgICAgfQogICAgIC8vIEFkZCBhIHNwZWN1bGF0aW9uIGNoZWNr
IHdpdGggYWRkaXRpb25hbCByZWNvdmVyeS4KLSAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVy
eSkKKyAgICB2b2lkIHNwZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJj
ZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBqdW1wVG9GYWlsLCBjb25zdCBTcGVjdWxhdGlvblJlY292ZXJ5JiByZWNvdmVyeSkKICAgICB7
CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZFNwZWN1bGF0aW9uUmVjb3ZlcnkocmVjb3Zlcnkp
OwotICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGpzVmFs
dWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0
aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJpZXMoKSkp
OworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQs
IGpzVmFsdWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9G
YWlsLCB0aGlzLCBtX2ppdC5jb2RlQmxvY2soKS0+bnVtYmVyT2ZTcGVjdWxhdGlvblJlY292ZXJp
ZXMoKSkpOwogICAgIH0KIAogICAgIC8vIENhbGxlZCB3aGVuIHdlIHN0YXRpY2FsbHkgZGV0ZXJt
aW5lIHRoYXQgYSBzcGVjdWxhdGlvbiB3aWxsIGZhaWwuCi0gICAgdm9pZCB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncyBqc1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJ
bmRleCkKKyAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEV4aXRLaW5kIGtp
bmQsIEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsK
ICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
U3BlY3VsYXRpdmVKSVQgd2FzIHRlcm1pbmF0ZWQuXG4iKTsKICNlbmRpZgogICAgICAgICBpZiAo
IW1fY29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soanNWYWx1ZVJlZ3MsIG5vZGVJbmRleCwgbV9qaXQuanVtcCgpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhraW5kLCBqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkp
OwogICAgICAgICBtX2NvbXBpbGVPa2F5ID0gZmFsc2U7CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHJldmlzaW9uIDEw
MjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIGRvdWJsZSBjb3VsZFRha2VTbG93Q2FzZVRo
cmVzaG9sZDsKIHVuc2lnbmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwogdW5z
aWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7CiAKK2RvdWJsZSBvc3JFeGl0UHJv
bWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGU7CisKIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhy
ZXNob2xkQmFzZTsKIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3A7
CiAKQEAgLTE0Nyw2ICsxNDksOCBAQCB2b2lkIGluaXRpYWxpemVIZXVyaXN0aWNzKCkKICAgICBT
RVQoY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQsICAgICAgIDAuMDUpOyAvLyBTaG91bGRuJ3Qg
YmUgemVybyBiZWNhdXNlIHNvbWUgb3BzIHdpbGwgc3B1cmlvdXNseSB0YWtlIHNsb3cgY2FzZSwg
Zm9yIGV4YW1wbGUgZm9yIGxpbmtpbmcgb3IgY2FjaGluZy4KICAgICBTRVQobGlrZWx5VG9UYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQsIDEwMCk7CiAgICAgU0VUKGNvdWxkVGFrZVNsb3dDYXNlTWlu
aW11bUNvdW50LCAgICAxMCk7CisgICAgCisgICAgU0VUKG9zckV4aXRQcm9taW5lbmNlRm9yRnJl
cXVlbnRFeGl0U2l0ZSwgMC4zKTsKIAogICAgIFNFVChsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJh
c2UsICAgICAgICAyMCk7CiAgICAgU0VUKGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxv
b3AsIDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3Mu
aAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1
cmlzdGljcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBAIGV4dGVybiBkb3VibGUg
Y291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQKIGV4dGVybiB1bnNpZ25lZCBsaWtlbHlUb1Rha2VT
bG93Q2FzZU1pbmltdW1Db3VudDsKIGV4dGVybiB1bnNpZ25lZCBjb3VsZFRha2VTbG93Q2FzZU1p
bmltdW1Db3VudDsKIAorZXh0ZXJuIGRvdWJsZSBvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50
RXhpdFNpdGU7CisKIGV4dGVybiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7
CiBleHRlcm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118970</attachid>
            <date>2011-12-13 00:54:36 -0800</date>
            <delta_ts>2011-12-13 01:17:22 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>countdfgfail_patch_6.diff</filename>
            <type>text/plain</type>
            <size>121114</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjQyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMS0xMi0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQga25vdyBleGFjdGx5IHdoeSByZWNvbXBpbGF0aW9uIHdhcyB0cmlnZ2VyZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
YWNoIE9TUiBleGl0IGlzIG5vdyBpbmRpdmlkdWFsbHkgY291bnRlZCwgYXMgd2VsbCBhcyBjb3Vu
dGluZyB0aGUgdG90YWwgbnVtYmVyIAorICAgICAgICBvZiBPU1IgZXhpdHMgdGhhdCBvY2N1cnJl
ZCBpbiBhIGNvZGUgYmxvY2suIElmIHJlY29tcGlsYXRpb24gaXMgdHJpZ2dlcmVkLCB3ZQorICAg
ICAgICBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIE9TUiBleGl0IHNpdGVzIHRoYXQgbWFrZSB1
cCBhIHN1ZmZpY2llbnRseSBsYXJnZQorICAgICAgICBwb3J0aW9uIG9mIHRoZSB0b3RhbCBPU1Ig
ZXhpdHMgdGhhdCBvY2N1cnJlZC4gRm9yIGFueSBzdWNoIE9TUiBleGl0IHNpdGVzLCB3ZQorICAg
ICAgICBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc2l0ZSAoYnl0ZWNvZGUgaW5kZXgsIGtpbmQp
IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgYmFzZWxp
bmUgQ29kZUJsb2NrLiBUaGVuLCB3aGVuIHdlIHJlY29tcGlsZSB0aGUgY29kZSwgd2UgaW1tZWRp
YXRlbHkKKyAgICAgICAga25vdyB3aGljaCBzcGVjdWxhdGlvbnMgd291bGQgYmUgdW53aXNlIGJh
c2VkIG9uIHRoZSBmYWN0IHRoYXQgcHJldmlvdXMgc3VjaAorICAgICAgICBzcGVjdWxhdGlvbnMg
cHJvdmVkIHRvIGJlIGZydWl0bGVzcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWVhbnMgMiUg
d2luIG9uIHR3byBvZiB0aGUgU3VuU3BpZGVyIHN0cmluZyB0ZXN0cywgYSA0JSB3aW4gb24gVjgn
cyBkZWx0YWJsdWUsCisgICAgICAgIGFuZCA1JSBvbiBLcmFrZW4ncyBpbWFnaW5nLWRhcmtyb29t
LiBJdCBpcyBvbmx5IGEgbWlub3Igd2luIGluIHRoZSBhdmVyYWdlcywgbGVzcworICAgICAgICB0
aGFuIDAuNSUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0
ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdFByb2ZpbGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFi
bGVFeGl0UHJvZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjp+UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmV4
aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OmV4aXRLaW5kSXNDb3VudGFibGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJl
cXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGU6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZUhh
c2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6aGFz
RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6
YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5dGVBcnJheSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNl
T2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
U29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5hbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3VibGUp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbCk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFs
aXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0
T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuY3BwOgorICAgICAgICAoSlNDOjpIZXVy
aXN0aWNzOjppbml0aWFsaXplSGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0
aWNzLmg6CisKIDIwMTEtMTItMTIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+
CiAKICAgICAgICAgRWxpbWluYXRlIER1cGxpY2F0ZSB3b3JkIGF0IGEgdGltZSBlcXVhbCBjb2Rl
IGluIFN0cmluZ0ltcGwuY3BwIGFuZCBTdHJpbmdIYXNoLmgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNzIsNiArNzIsOCBAQAogCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFsbG9j
YXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyRjEzRkM2NkJCMDAwMkQ5
QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0
b3JIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRFMDAw
MkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07CisJCTBG
QkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkRE
IC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3MTQ0
Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09T
UkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
QzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkQxNDY4QUI0RTAwQ0YyNDQy
IC8qIERGR0Fzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZDMDk3NkMxNDY4QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVs
cGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC04NTEsNiArODUzLDggQEAKIAkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0YUFsbG9j
YXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjJFMTNGQzY2QUUw
MDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0V4aXRQcm9maWxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTUxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3RTY3
MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZD
MDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQyIC8qIERG
R0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDYwLDYgKzI0NjQsOCBAQAogCQk5
NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBE
RkdFeGl0UHJvZmlsZS5jcHAgKi8sCisJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8qIERG
R0V4aXRQcm9maWxlLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERhdGFG
b3JtYXQuaCAqLywKIAkJCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVy
eS5oICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIu
aCAqLywKQEAgLTI5ODEsNiArMjk4Nyw3IEBACiAJCQkJQTczQkUxN0UxNDg0MjA4NDAwOTEyMDRC
IC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNCRTE4MDE0ODQyMEE4
MDA5MTIwNEIgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKQEAgLTM1MTgsNiArMzUyNSw3IEBACiAJCQkJMEYyQzU1NzAxNDczOEYzNTAwMTIxRTRG
IC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczQkUxNjgxNDg0MjA1
MjAwOTEyMDRCIC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0JFMTZB
MTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQxLDYgKzIyNDEsMjggQEAgYm9v
bCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KERGR19KSVQpCit2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCit7Cisg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIEFTU0VSVChh
bHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOworICAg
IEFTU0VSVCghIW1fZGZnRGF0YSk7CisgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
ID0gYWx0ZXJuYXRpdmUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9k
ZmdEYXRhLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERGRzo6T1NSRXhpdCYgZXhp
dCA9IG1fZGZnRGF0YS0+b3NyRXhpdFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmICghZXhpdC5j
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSh0aGlzLCBwcm9maWxlZEJsb2NrKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJP
U0UpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1LCAl
cykgZm9yIGNvZGUgYmxvY2sgJXAgb2NjdXJyZWQgZnJlcXVlbnRseTsgY291bnRpbmcgYXMgZnJl
cXVlbnQgZXhpdCBzaXRlLlxuIiwgaSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwg
ZXhpdC5tX25vZGVJbmRleCwgREZHOjpleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdGhp
cyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNpZiBF
TkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1ZVBy
b2ZpbGVzKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1ZGUg
IkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUg
IkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2YWxD
b2RlQ2FjaGUuaCIKQEAgLTc5Niw2ICs3OTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
ICAgICBBU1NFUlQoaGFzQ29kZU9yaWdpbnMoKSk7CiAgICAgICAgICAgICByZXR1cm4gYmluYXJ5
U2VhcmNoPENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0
dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbj4oY29kZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3JpZ2lu
cygpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkp
LT5jb2RlT3JpZ2luOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZEZyZXF1
ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklU
KTsKKyAgICAgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmFkZChzaXRlKTsKKyAgICAgICAg
fQorCisgICAgICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4gbV9l
eGl0UHJvZmlsZTsgfQogI2VuZGlmCiAKICAgICAgICAgLy8gQ29uc3RhbnQgUG9vbApAQCAtMTA2
NSw2ICsxMDc0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVvcHRpbWl6ZSgp
CiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpICE9IHRoaXMpOwor
ICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50KCktPmFsdGVybmF0aXZlKCkgPT0gdGhpcyk7
CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT50YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CiAg
ICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbigpOwogICAgICAgICAgICAgY291bnRS
ZW9wdGltaXphdGlvbigpOwogICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwpAQCAt
MTA5Myw2ICsxMTA0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAgICAg
IGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgICAgICAKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZWxzZQorICAgICAg
ICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KKyNlbmRpZgorICAgICAgICAKICNp
ZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAgIHZv
aWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVy
YXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29uc3Q7
CiAKQEAgLTEyMTIsNiArMTIyOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsKICAg
ICAgICAgCiAgICAgICAgIE93blB0cjxERkdEYXRhPiBtX2RmZ0RhdGE7CisgICAgICAgIAorICAg
ICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBzZXJ2
ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jaworICAgICAgICAvLyBmb3IgREZHIGNvZGUgYmxv
Y2tzLgorICAgICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYKICNp
ZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1ZVBy
b2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK0V4aXRQcm9maWxlOjpFeGl0UHJvZmlsZSgpIHsgfQorRXhpdFByb2ZpbGU6
On5FeGl0UHJvZmlsZSgpIHsgfQorCitib29sIEV4aXRQcm9maWxlOjphZGQoY29uc3QgRnJlcXVl
bnRFeGl0U2l0ZSYgc2l0ZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBmcmVx
dWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQorICAgIC8v
IGludG8gaXQuCisgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKSB7CisgICAgICAgIG1fZnJl
cXVlbnRFeGl0U2l0ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+KCkp
OworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0ZSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCBhZGQgaXQgaWYgaXQncyBhbHJl
YWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ssIGJlY2F1c2Ugd2UKKyAgICAv
LyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29kZSBleGl0cyB0
ZW5kcyB0byBub3QgYmUgbGFyZ2UsCisgICAgLy8gYW5kIHRoaXMgY29kZSBpcyBvbmx5IHVzZWQg
d2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
ZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmFwcGVuZChzaXRlKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4
aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQoreworICAgIGlmICghcHJvZmls
ZS5tX2ZyZXF1ZW50RXhpdFNpdGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyAr
K2kpCisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMuYWRkKHByb2ZpbGUubV9mcmVxdWVudEV4
aXRTaXRlcy0+YXQoaSkpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJsZUV4
aXRQcm9maWxlKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmgJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRXhpdFByb2ZpbGVfaAorI2RlZmluZSBE
RkdFeGl0UHJvZmlsZV9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworZW51bSBFeGl0S2luZCB7CisgICAgRXhpdEtpbmRVbnNldCwKKyAg
ICBCYWRUeXBlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHR5cGUgcHJlZGljdGlvbiB3YXMgd3Jv
bmcuCisgICAgQmFkQ2FjaGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFuIGlubGluZSBjYWNoZSB3
YXMgd3JvbmcuCisgICAgT3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIG92ZXJmbG93
LgorICAgIE5lZ2F0aXZlWmVybywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgZW5jb3VudGVyZWQg
bmVnYXRpdmUgemVyby4KKyAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25lIG9m
IHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1c2Vz
IG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgorfTsKKworI2lmbmRlZiBOREVC
VUcKK2lubGluZSBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBy
ZXR1cm4gIlVuc2V0IjsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgICAgIHJldHVybiAiQmFkVHlw
ZSI7CisgICAgY2FzZSBCYWRDYWNoZToKKyAgICAgICAgcmV0dXJuICJCYWRDYWNoZSI7CisgICAg
Y2FzZSBPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJPdmVyZmxvdyI7CisgICAgY2FzZSBOZWdh
dGl2ZVplcm86CisgICAgICAgIHJldHVybiAiTmVnYXRpdmVaZXJvIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KK30KKyNlbmRpZgorCitpbmxpbmUgYm9v
bCBleGl0S2luZElzQ291bnRhYmxlKEV4aXRLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5k
KSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgY2FzZSBVbmNvdW50YWJsZToKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30K
KworY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CitwdWJsaWM6CisgICAgRnJlcXVlbnRFeGl0U2l0
ZSgpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUKKyAg
ICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEZy
ZXF1ZW50RXhpdFNpdGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6
IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKKyAgICAgICAgLCBtX2tp
bmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZyZXF1
ZW50RXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEV4aXRLaW5kIGtpbmQpCisgICAg
ICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2tpbmQo
a2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChleGl0S2luZElzQ291bnRhYmxlKGtpbmQpKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fa2luZCA9PSBFeGl0S2luZFVuc2V0OworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0Cisg
ICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAgIH0KKyAgICAKKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmludEhhc2go
bV9ieXRlY29kZU9mZnNldCkgKyBtX2tpbmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorICAgIEV4
aXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9
PSBFeGl0S2luZFVuc2V0ICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgRXhpdEtpbmQgbV9raW5kOworfTsK
Kworc3RydWN0IEZyZXF1ZW50RXhpdFNpdGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBhLCBjb25zdCBGcmVx
dWVudEV4aXRTaXRlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6
OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFz
aFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkZyZXF1ZW50
RXhpdFNpdGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpGcmVxdWVudEV4aXRT
aXRlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlOworCitjbGFzcyBFeGl0UHJv
ZmlsZSB7CitwdWJsaWM6CisgICAgRXhpdFByb2ZpbGUoKTsKKyAgICB+RXhpdFByb2ZpbGUoKTsK
KyAgICAKKyAgICAvLyBBZGQgYSBuZXcgZnJlcXVlbnQgZXhpdCBzaXRlLiBSZXR1cm4gdHJ1ZSBp
ZiB0aGlzIGlzIGEgbmV3IG9uZSwgb3IgZmFsc2UKKyAgICAvLyBpZiB3ZSBhbHJlYWR5IGtuZXcg
YWJvdXQgaXQuIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24sIGJlY2F1c2UgaXQgZXJycworICAg
IC8vIG9uIHRoZSBzaWRlIG9mIGtlZXBpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGNvbXBhY3QuIEFs
c28sIHRoaXMgd2lsbCBvbmx5CisgICAgLy8gYmUgY2FsbGVkIGEgZml4ZWQgbnVtYmVyIG9mIHRp
bWVzIHBlciByZWNvbXBpbGF0aW9uLiBSZWNvbXBpbGF0aW9uIGlzCisgICAgLy8gcmFyZSB0byBi
ZWdpbiB3aXRoLCBhbmQgaW1wbGllcyBkb2luZyBPKG4pIG9wZXJhdGlvbnMgb24gdGhlIENvZGVC
bG9jaworICAgIC8vIGFueXdheS4KKyAgICBib29sIGFkZChjb25zdCBGcmVxdWVudEV4aXRTaXRl
Jik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBRdWVyeWFibGVFeGl0UHJvZmls
ZTsKKyAgICAKKyAgICBPd25QdHI8VmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+ID4gbV9mcmVxdWVu
dEV4aXRTaXRlczsKK307CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBRdWVyeWFibGVFeGl0UHJvZmlsZShjb25zdCBFeGl0UHJvZmlsZSYpOwor
ICAgIH5RdWVyeWFibGVFeGl0UHJvZmlsZSgpOworICAgIAorICAgIGJvb2wgaGFzRXhpdFNpdGUo
Y29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2ZyZXF1ZW50RXhpdFNpdGVzLmZpbmQoc2l0ZSkgIT0gbV9mcmVxdWVudEV4aXRTaXRlcy5l
bmQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNFeGl0U2l0ZSh1bnNpZ25lZCBieXRlY29k
ZUluZGV4LCBFeGl0S2luZCBraW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGhhc0V4
aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwga2luZCkpOworICAgIH0KK3By
aXZhdGU6CisgICAgSGFzaFNldDxGcmVxdWVudEV4aXRTaXRlPiBtX2ZyZXF1ZW50RXhpdFNpdGVz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHRXhpdFBy
b2ZpbGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBl
cnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2VtYmx5
SGVscGVycy5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsMTQgKzI4NCwxOSBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlLT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgfQogICAgIAotICAgIENv
ZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdp
bikKKyAgICBzdGF0aWMgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2spCiAgICAgewogICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVD
YWxsRnJhbWUpIHsKICAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CiAgICAgICAgICAgICBB
U1NFUlQoZXhlY3V0YWJsZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlvbkV4
ZWN1dGFibGU6OnNfaW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1
Y3QpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jaygpOworICAg
ICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CisgICAgfQorICAgIAorICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5l
Q29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKCkpOwogICAgIH0KICAgICAK
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDI1NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMxLDExICs2MzEsMTMgQEAgcHJpdmF0ZToKIAogICAgIE5vZGVJbmRl
eCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFtX2lu
bGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3Vy
cmVudEluZGV4KSkKKyAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIE92ZXJmbG93KQorICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpCiAgICAgICAg
ICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCi0gICAgICAgIHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJlY2F1
c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtu
b2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1
cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgIHByaW50ZigiTWFraW5nICVzIEAldSBz
YWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQg
cHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0u
b3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4
KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRl
KG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2Zp
bGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwogI2VuZGlmCiAg
ICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgewpAQCAtNjQ4
LDEyICs2NTAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
CiAgICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UobV9jdXJyZW50
SW5kZXgpKSB7CisgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5saWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAgICAg
ICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NF
KQogICAgICAgICAgICAgICAgIHByaW50ZigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGRlZXBl
c3Qgc2xvdyBjYXNlLlxuIiwgbm9kZUluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgICAgIG1f
Z3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5v
ZGVNYXlOZWdaZXJvKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nh
c2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZl
WmVybykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgICAgICAgICAg
cHJpbnRmKCJNYWtpbmcgQXJpdGhNdWwgQCV1IHRha2UgZmFzdGVyIHNsb3cgY2FzZS5cbiIsIG5v
ZGVJbmRleCk7CiAjZW5kaWYKQEAgLTY3OSwxMyArNjgzLDE3IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIGNhcmUgYWJvdXQgd2hlbiB0aGUgb3V0Y29tZSBvZiB0aGUgZGl2aXNpb24gaXMgbm90IGFu
IGludGVnZXIsIHdoaWNoCiAgICAgICAgIC8vIGlzIHdoYXQgdGhlIHNwZWNpYWwgZmFzdCBjYXNl
IGNvdW50ZXIgdGVsbHMgdXMuCiAgICAgICAgIAotICAgICAgICBpZiAoIW1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKG1fY3VycmVu
dEluZGV4KSkKKyAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pmxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBPdmVyZmxvdykKKyAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKQogICAg
ICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJV
R19WRVJCT1NFKQotICAgICAgICBwcmludGYoIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBi
ZWNhdXNlIHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIsIEdyYXBoOjpvcE5h
bWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOworICAgICAgICBwcmlu
dGYoIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBiZWNhdXNlIHNwZWNpYWwgZmFzdC1jYXNl
IGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6
Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4
LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVByb2Zp
bGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVT
dGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZs
b3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGdyYW51bGFyLiBUaGUg
REZHIGNlcnRhaW5seSBjYW4KKyAgICAgICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBuZWdhdGl2
ZSB6ZXJvIGFuZCBvdmVyZmxvdyBpbiBpdHMgZXhpdCBwcm9maWxlcy4KICAgICAgICAgbV9ncmFw
aFtub2RlSW5kZXhdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9kZU1h
eU5lZ1plcm8pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKQEAgLTc5Myw2
ICs4MDEsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsgfQog
ICAgICAgICAKKyAgICAgICAgUXVlcnlhYmxlRXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsKKyAg
ICAgICAgCiAgICAgICAgIC8vIFJlbWFwcGluZyBvZiBpZGVudGlmaWVyIGFuZCBjb25zdGFudCBu
dW1iZXJzIGZyb20gdGhlIGNvZGUgYmxvY2sgYmVpbmcKICAgICAgICAgLy8gaW5saW5lZCAoaW5s
aW5lIGNhbGxlZSkgdG8gdGhlIGNvZGUgYmxvY2sgdGhhdCB3ZSdyZSBpbmxpbmluZyBpbnRvCiAg
ICAgICAgIC8vICh0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCB3aGljaCBpcyB0aGUgdHJhbnNpdGl2
ZSwgdGhvdWdoIG5vdCBuZWNlc3NhcmlseQpAQCAtODg3LDEyICs4OTcsMTQgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgIGVudW0geyBDb25zdGFudEZ1bmN0
aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5cGU7CiAgICAgICAg
ICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgcHJpbnRmKCJTbG93IGNh
c2UgY291bnQgZm9yIGNhbGwgYXQgQCVsdSBiYyMldTogJXUvJXUuXG4iLCBtX2dyYXBoLnNpemUo
KSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFy
ZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIs
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+ZXhlY3V0aW9uRW50cnlDb3VudCgp
KTsKKyAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1OiAl
dS8ldTsgZXhpdCBwcm9maWxlOiAlZC5cbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRl
eCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JC
eXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5leGVjdXRpb25FbnRyeUNvdW50KCksIG1faW5saW5lU3RhY2tU
b3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSk7
CiAjZW5kaWYKICAgICAgICAgICAgIAogICAgIGlmIChtX2dyYXBoLmlzRnVuY3Rpb25Db25zdGFu
dChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCkpCiAgICAgICAgIGNhbGxUeXBlID0gQ29uc3RhbnRG
dW5jdGlvbjsKLSAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9j
ay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAhbV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1cnJl
bnRJbmRleCkpCisgICAgZWxzZSBpZiAoISFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxsZWUKKyAgICAg
ICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VT
bG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1Rv
cC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKQog
ICAgICAgICBjYWxsVHlwZSA9IExpbmtlZEZ1bmN0aW9uOwogICAgIGVsc2UKICAgICAgICAgY2Fs
bFR5cGUgPSBVbmtub3duRnVuY3Rpb247CkBAIC0xMTY3LDcgKzExNzksMTAgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoIU1hY3JvQXNzZW1i
bGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFicywgT3BJ
bmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50
VG9PcGVyYW5kKDEpKSkpOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9HcmFw
aChBcml0aEFicywgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIGlmIChtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykp
CisgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VBcml0aE5vZGVGbGFncyhOb2Rl
TWF5T3ZlcmZsb3cpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgbm9kZUluZGV4KTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjY4LDcgKzE2ODMsMTAgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3RydWN0dXJl
U3R1YkluZm8mIHN0dWJJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5n
ZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICBNZXRob2RDYWxsTGlua0lu
Zm8mIG1ldGhvZENhbGwgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldE1l
dGhvZENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICAKLSAgICAgICAg
ICAgIGlmIChtZXRob2RDYWxsLnNlZW4gJiYgISFtZXRob2RDYWxsLmNhY2hlZFN0cnVjdHVyZSAm
JiAhc3R1YkluZm8uc2VlbikgeworICAgICAgICAgICAgaWYgKG1ldGhvZENhbGwuc2VlbgorICAg
ICAgICAgICAgICAgICYmICEhbWV0aG9kQ2FsbC5jYWNoZWRTdHJ1Y3R1cmUKKyAgICAgICAgICAg
ICAgICAmJiAhc3R1YkluZm8uc2VlbgorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkp
IHsKICAgICAgICAgICAgICAgICAvLyBJdCdzIG1vbm9tb3JwaGljIGFzIGZhciBhcyB3ZSBjYW4g
dGVsbCwgc2luY2UgdGhlIG1ldGhvZF9jaGVjayB3YXMgbGlua2VkCiAgICAgICAgICAgICAgICAg
Ly8gYnV0IHRoZSBzbG93IHBhdGggKGkuZS4gdGhlIG5vcm1hbCBnZXRfYnlfaWQpIG5ldmVyIGZp
cmVkLgogCkBAIC0xNzExLDEyICsxNzI5LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5mbyA9
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0U3R1YkluZm8obV9jdXJyZW50
SW5kZXgpOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIEdldEJ5SWQgQCVsdSBiYyMldTog
JXVcbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+
bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJl
bnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgICAgICBwcmludGYoIlNsb3cgY2FzZSBjb3Vu
dCBmb3IgR2V0QnlJZCBAJWx1IGJjIyV1OiAldTsgZXhpdCBwcm9maWxlOiAlZFxuIiwgbV9ncmFw
aC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9j
b3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBCYWRDYWNoZSkpOwogI2VuZGlmCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHNpemVfdCBvZmZzZXQgPSBub3RGb3VuZDsKICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBzdHJ1
Y3R1cmVTZXQ7Ci0gICAgICAgICAgICBpZiAoc3R1YkluZm8uc2VlbiAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRl
eCkpIHsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuCisgICAgICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2Uo
bV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkgewogICAg
ICAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgICAgICAgICAg
ICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0U3Ry
dWN0dXJlLmdldCgpOwpAQCAtMTgwNSwxMCArMTgyNSwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBib29sIGFscmVhZHlHZW5lcmF0ZWQg
PSBmYWxzZTsKICAgICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAg
ICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBQdXRCeUlkIEAlbHUgYmMjJXU6
ICV1XG4iLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJy
ZW50SW5kZXgpLT5tX2NvdW50ZXIpOworICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291
bnQgZm9yIFB1dEJ5SWQgQCVsdSBiYyMldTogJXU7IGV4aXQgcHJvZmlsZTogJWRcbiIsIG1fZ3Jh
cGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1f
Y291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1
cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICNlbmRpZiAgICAgICAgICAgIAogCi0gICAgICAgICAg
ICBpZiAoc3R1YkluZm8uc2VlbiAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAgIGlm
IChzdHViSW5mby5zZWVuCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAg
ICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNp
dGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkgewogICAgICAgICAgICAgICAgIHN3aXRjaCAo
c3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1dF9i
eV9pZF9yZXBsYWNlOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOwpA
QCAtMjQyNSw2ICsyNDQ3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6Oklu
bGluZQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJsb2Nr
KHByb2ZpbGVkQmxvY2spCiAgICAgLCBtX2NhbGxlZVZSKGNhbGxlZVZSKQorICAgICwgbV9leGl0
UHJvZmlsZShwcm9maWxlZEJsb2NrLT5leGl0UHJvZmlsZSgpKQogICAgICwgbV9jYWxsc2l0ZUJs
b2NrSGVhZChjYWxsc2l0ZUJsb2NrSGVhZCkKICAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJuVmFs
dWVWUikKICAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgs
MjAgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQXNzZW1ibHlIZWxw
ZXJzLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCi1PU1JFeGl0OjpPU1JFeGl0KEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQorT1NS
RXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywg
U3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1fanNW
YWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9m
aWxlKQogICAgICwgbV9jaGVjayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9jb21w
aWxlSW5kZXgpCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCiAg
ICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fa2luZChraW5kKQor
ICAgICwgbV9jb3VudCgwKQogICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5zaXpl
KCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQpAQCAtNjEsNiArNjQsMTQgQEAg
dm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIH0KICNlbmRpZgogCitib29sIE9T
UkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRm
Z0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKK3sKKyAgICBpZiAoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0NvZGVCbG9jay0+c3BlY3VsYXRpdmVGYWls
Q291bnRlcigpIDw9IEhldXJpc3RpY3M6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0
U2l0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBBc3NlbWJseUhl
bHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2sobV9j
b2RlT3JpZ2luLCBwcm9maWxlZENvZGVCbG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoRnJlcXVl
bnRFeGl0U2l0ZShtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7Cit9CisKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDEwMjU2MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmgiCisjaW5jbHVk
ZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
REZHT3BlcmFuZHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgpAQCAtODEsNyArODIs
NyBAQCBwcml2YXRlOgogLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRo
ZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCiBzdHJ1
Y3QgT1NSRXhpdCB7Ci0gICAgT1NSRXhpdChKU1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUqLCBN
YWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVyeUlu
ZGV4ID0gMCk7CisgICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9m
aWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgcmVj
b3ZlcnlJbmRleCA9IDApOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7
CiAgICAgCkBAIC05NCw2ICs5NSw5IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAKICAgICB1bnNp
Z25lZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVp
bnQzMl90IG1fY291bnQ7CisgICAgCiAgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0aW5n
IG92ZXIgVmFsdWVSZWNvdmVyaWVzIHdoaWxlIGJlaW5nCiAgICAgLy8gZ2VuZXJpYyBvdmVyIGFy
Z3VtZW50IHZlcnN1cyB2YXJpYWJsZS4KICAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkgY29u
c3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9CkBA
IC0xMjAsNiArMTI0LDEzIEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAgICAgcmV0dXJuIGluZGV4
IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwogICAgIH0KICAgICAKKyAgICBib29sIGNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sq
IHByb2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0
S2luZElzQ291bnRhYmxlKG1fa2luZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJs
b2NrLCBwcm9maWxlZENvZGVCbG9jayk7CisgICAgfQorICAgIAogI2lmbmRlZiBOREVCVUcKICAg
ICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKICNlbmRpZgpAQCAtMTI3LDYgKzEzOCw5IEBA
IHN0cnVjdCBPU1JFeGl0IHsKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1bWVu
dHM7CiAgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOwogICAgIGludCBt
X2xhc3RTZXRPcGVyYW5kOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHBy
b2ZpbGVkQ29kZUJsb2NrKTsKIH07CiAKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VMQVRJ
T05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDUxLDYgKzQ1MSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhp
dChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRoZSBj
b3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJtVXAo
KS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDEpLCBBc3Nl
bWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2NvdW50KSk7CisgICAgCiAgICAg
bV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJsb2Nr
KCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5SGVs
cGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1bGF0
aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAx
MDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2MSw4IEBAIHZvaWQgT1NSRXhpdENvbXBp
bGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndp
c2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGlt
aXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6
OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2NvdW50
KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAgbV9qaXQubG9h
ZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpv
ZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJ
KHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGNvbXBp
bGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmVjb3ZlcnkgPSAmY29kZUJsb2Nr
LT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4IC0gMSk7CiAKICNpZiBE
RkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICJHZW5lcmF0aW5n
IE9TUiBleGl0ICMldSBmb3IgY29kZSBibG9jayAlcC5cbiIsIGV4aXRJbmRleCwgY29kZUJsb2Nr
KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdlbmVyYXRpbmcgT1NSIGV4aXQgIyV1IChiYyMldSwg
QCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGV4aXQubV9jb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2RlSW5kZXgsIGV4aXRLaW5kVG9TdHJpbmcoZXhp
dC5tX2tpbmQpLCBjb2RlQmxvY2spOwogI2VuZGlmCiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9u
IDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2
NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyODIsNyArMTI4Miw3IEBAIEdQUlJlZyBTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3Jt
YXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAgICAgaWYgKChub2RlLmhh
c0NvbnN0YW50KCkgJiYgIWlzSW50MzJDb25zdGFudChub2RlSW5kZXgpKSB8fCBpbmZvLnNwaWxs
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOwogICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAg
ICAgICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICAgICAgfQpAQCAtMTMzMiw3ICsxMzMy
LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAv
LyBDaGVjayB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlci4KICAgICAgICAgR1BSUmVnIGdwciA9IGlu
Zm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIs
IERhdGFGb3JtYXRKU0ludGVnZXIpOwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUs
IHJldHVybi4KICAgICAgICAgaWYgKCFzdHJpY3QpIHsKQEAgLTEzODksNyArMTM4OSw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICBjYXNlIERhdGFGb3Jt
YXRCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3Jt
YXRKU0Jvb2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybkZv
cm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAg
ICB9CkBAIC0xNDQ4LDcgKzE0NDgsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgpOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMTQ5MSw3ICsxNDkxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICByZXR1
cm4gZnByQWxsb2NhdGUoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKQEAgLTE1MDQs
NyArMTUwNCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51
bWJlclJlZ2lzdGVyKTsKIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGpz
VmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFs
dWVHcHIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAgIC8vIEZp
cnN0LCBpZiB3ZSBnZXQgaGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVl
CiAgICAgICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xNTc4LDcgKzE1
NzgsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgc3dp
dGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7
CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwg
aW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMTU5Miw3ICsxNTkyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3By
LCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0
dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYg
RGF0YUZvcm1hdEpTKTsKQEAgLTE2MDEsNyArMTYwMSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUNlbGwKIAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0
YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0
SlNDZWxsKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBu
b2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdw
ciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOwog
ICAgICAgICByZXR1cm4gZ3ByOwogICAgIH0KQEAgLTE2MTYsNyArMTYxNiw3IEBAIEdQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBjYXNlIERhdGFGb3JtYXRKUzog
ewogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2so
Z3ByKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BS
SW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAg
ICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgfQpAQCAtMTYyNyw3ICsxNjI3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZl
SklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBj
YXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogewot
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAg
fQogCkBAIC0xNjUxLDcgKzE2NTEsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVCb29sCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNl
IERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0
YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUp
IHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBh
bGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTY2NSw3ICsxNjY1LDcgQEAgR1BS
UmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQo
aW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKQEAgLTE2NzUsNyArMTY3NSw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9y
bWF0KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVhbikgewogICAgICAgICAgICAgbV9qaXQueG9yUHRy
KFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9v
bGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xl
YW5TcGVjdWxhdGlvbkNoZWNrLCBncHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgICAgIG1f
aml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkp
LCBncHIpOwogICAgICAgICB9CiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9y
bWF0SlNCb29sZWFuKTsKQEAgLTE2OTMsNyArMTY5Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAg
ICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9u
Q2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ss
IGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMy
KHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4gZ3By
OwpAQCAtMTcwNSw3ICsxNzA1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3Vs
YXRlQm9vbAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRK
U0NlbGw6CiAgICAgY2FzZSBEYXRhRm9ybWF0Q2VsbDogewotICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
KTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQogICAgICAgICAKQEAgLTE3NDgs
OSArMTc0OCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAg
ICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgIAogICAgIGlmICghcHJlZGlj
dGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cyhvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKG9wMkdQUiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZmFsc2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgb3AxR1BSLCBvcDJHUFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVU
cnVlKSwgcmVzdWx0R1BSKTsKQEAgLTE4MTcsNyArMTgxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBu
b3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFs
dWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlv
bkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJl
Z3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTE4MjYsNyArMTgy
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBpZiAo
bmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVz
dWx0R1BSKTsKICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoflRhZ0JpdFVuZGVmaW5lZCksIHJlc3VsdEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51
bGwpKSkpOwogICAgIH0KICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxp
bnQzMl90PihWYWx1ZVRydWUpKSwgcmVzdWx0R1BSKTsKICAgICAKQEAgLTE4ODIsNyArMTg4Miw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgCiAg
ICAgICAgIG1faml0Lm1vdmUodmFsdWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1f
aml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZh
bHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxl
cjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4ofjEpKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHZhbHVlLmdwcigpKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21w
aWxlcjo6Tm9uWmVybywgcmVzdWx0LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSkpOwogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAKICAgICAg
ICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4K
QEAgLTE5MjEsNyArMTkyMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90
aGVyQnIKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2Rl
SW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
dnB0cikpKTsKICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAg
bm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xOTI5LDcgKzE5MjksNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNr
KSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBt
X2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVk
KSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgfQog
ICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQogICAgICAgICBhZGRCcmFuY2gobV9q
aXQuanVtcCgpLCBub3RUYWtlbik7CkBAIC0xOTk3LDcgKzE5OTcsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0QnJhbmNoKE5vZGUmIG5vCiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVy
OjpJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsK
ICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVx
dWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNC
b29sZWFuKHRydWUpKSkpLCB0YWtlbik7CiAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGUuY2hpbGQxKCksIG1faml0Lmp1bXAoKSk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoMCkpKSksIG5vdFRha2VuKTsKQEAgLTIwNDMsNyArMjA0
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAg
ICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3Qg
YXR0ZW1wdCB0byBjb21waWxlLgogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9u
ZSB8fCB2YWx1ZS5pc0NsZWFyKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMjExMywxNCArMjEx
MywxNCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAg
ICAgICAgICAgR1BSUmVnIGNlbGxHUFIgPSBjZWxsLmdwcigpOwogICAgICAgICAgICAgaWYgKCFp
c0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0
b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwog
ICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3Bl
Y3VsYXRlQ2VsbE9wZXJhbmQgY2VsbCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAg
IEdQUlJlZyBjZWxsR1BSID0gY2VsbC5ncHIoKTsKICAgICAgICAgICAgIGlmICghaXNCeXRlQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkp
KTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNl
IGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0yMjI1LDcgKzIy
MjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBv
cGVyYW5kIGlzIHBvc2l0aXZlLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEu
Z3ByKCksIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpMZXNzVGhhbiwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpKTsKIAogICAgICAgICBtX2pp
dC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChy
ZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4LCBvcDEuZm9ybWF0KCkpOwpAQCAtMjI3Myw3ICsy
MjczLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxl
cjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOworICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ay
LmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMjI4OCw3ICsyMjg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIo
KSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIo
aW1tMiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1t
MiksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0Lmdwcigp
KSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMxMywxMSArMjMxMywxMSBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fz
c2VtYmxlcjo6T3ZlcmZsb3csIGdwcjEsIGdwcjIsIGdwclJlc3VsdCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMikpOworICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJS
ZXN1bHQsIGdwcjIpKTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3Vs
dCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1
bHQsIGdwcjEpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxv
dywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVj
dWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
Y2hlY2spOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgaW50ZWdlclJlc3VsdChncHJSZXN1bHQsIG1fY29tcGlsZUluZGV4KTsKQEAgLTIzNTMsNyAr
MjM1Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9w
MS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICAgICAg
aW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTIzNjcsNyArMjM2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJl
c3VsdC5ncHIoKSk7CiAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9B
c3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9w
MS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFr
OwpAQCAtMjM5OSwxMyArMjM5OSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgICAg
ICAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR1BSKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3Qz
MihKSVRDb21waWxlcjo6WmVybywgb3AyR1BSKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IC8vIElmIHRoZSB1c2VyIGNhcmVzIGFib3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRl
IHRoYXQgd2UncmUgbm90IGFib3V0CiAgICAgICAgICAgICAvLyB0byBwcm9kdWNlIG5lZ2F0aXZl
IHplcm8uCiAgICAgICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5h
cml0aE5vZGVGbGFncygpKSkgewogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IG51bWVyYXRvck5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIG9wMUdQUik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwg
b3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAg
ICAgICAgICAgICAgbnVtZXJhdG9yTm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAKQEAgLTI0MjUsNyArMjQyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSB3
YXMgbm8gcmVtYWluZGVyLiBJZiB0aGVyZSBoYWQgYmVlbiwgdGhlbiB3ZSdkIGJlIG9ibGlnYXRl
ZCB0bwogICAgICAgICAgICAgLy8gcHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVhZC4KLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGVheC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yNDU4LDcgKzI0NTgsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5yc2hpZnQz
MihyZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNo
LmdwcigpKTsKICAgICAgICAgICAgIG1faml0LmFkZDMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CiAgICAgICAgICAgICBtX2ppdC54b3IzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKDEgPDwgMzEpKSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTI2ODgsMTUgKzI2ODgsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5qc0FycmF5VlB0cikpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5
Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKIAogICAgICAgICAvLyBGSVhNRTogSW4g
Y2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBz
YW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNoZQogICAgICAgICAvLyB0aGUgc3RvcmFnZSBw
b2ludGVyIC0gZXNwZWNpYWxseSBpZiB0aGVyZSBoYXBwZW5zIHRvIGJlIGFub3RoZXIgcmVnaXN0
ZXIgZnJlZSByaWdodCBub3cuIElmIHdlIGRvIHNvLAogICAgICAgICAvLyB0aGVuIHdlJ2xsIG5l
ZWQgdG8gYWxsb2NhdGUgYSBuZXcgdGVtcG9yYXJ5IGZvciByZXN1bHQuCiAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNj
YWxlUHRyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1
bHQuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0Lmdwcigp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0
LmdwcigpKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0yNzk5LDcgKzI3OTksNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFz
ZSBpcyBhbiBhcnJheSwgYW5kIHRoYXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3Zl
Y3RvciAoPCBtX3ZlY3Rvckxlbmd0aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVk
IHRoZSBiYXNlIHRvIGJlIHR5cGUgYXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAg
ICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2Uo
KTsKICAgICAgICAgcHJvcGVydHkudXNlKCk7CkBAIC0yOTQzLDEzICsyOTQzLDEzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgd3JpdGVCYXJyaWVy
KGJhc2VHUFIsIHZhbHVlR1BSLCBub2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0
eUFjY2Vzcywgc3RvcmFnZUdQUiwgc3RvcmFnZUxlbmd0aEdQUik7CiAKICAgICAgICAgaWYgKCFp
c0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZz
ZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5n
dGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1c2UgdG8g
aGFuZGxlIGJpemFycmUgbGVuZ3Rocy4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3Rv
cmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1t
MzIoMHg3ZmZmZmZmZSkpKTsKICAgICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
c3RvcmFnZUxlbmd0aEdQUiwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJh
eTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKTsKICAgICAgICAgCkBAIC0yOTg2LDcgKzI5ODYsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJl
ZyBzdG9yYWdlTGVuZ3RoR1BSID0gc3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAg
bV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojpz
dG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5ndGhHUFIpOwpAQCAtMzA5MSw3ICszMDkxLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgVGhyb3dS
ZWZlcmVuY2VFcnJvcjogewogICAgICAgICAvLyBXZSBleHBlY3QgdGhhdCB0aHJvdyBzdGF0ZW1l
bnRzIGFyZSByYXJlIGFuZCBhcmUgaW50ZW5kZWQgdG8gZXhpdCB0aGUgY29kZSBibG9jawogICAg
ICAgICAvLyBhbnl3YXksIHNvIHdlIGp1c3QgT1NSIGJhY2sgdG8gdGhlIG9sZCBKSVQgZm9yIG5v
dy4KLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAg
ICAgCkBAIC0zMjI0LDcgKzMyMjQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBpZiAoIWlzT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92
ZSh0aGlzVmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFuZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNo
R1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRoaXNW
YWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxk
MSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BS
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihW
YWx1ZU51bGwpKSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBt
X2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVj
dEZvcihub2RlLmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CkBAIC0zMjM5LDcgKzMyMzksNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRo
aXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVl
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAg
ICAgICAgCkBAIC0zMjgzLDcgKzMyODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
KE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNo
ZWNrLgogICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxP
YmplY3QoKSkgewogICAgICAgICAgICAgaWYgKCFpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHByb3RvR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MocHJvdG9HUFIpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU0Nl
bGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoOChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHNjcmF0Y2hHUFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CkBAIC0zMzkwLDcg
KzMzOTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
fQogICAgIGNhc2UgR2V0QnlJZDogewogICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpKSB7
Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygp
LCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTM0NDYsMTIgKzM0NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9C
SkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdEdQUik7CiAgICAg
ICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigw
KSkpOwogICAgICAgICAKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKICAgICAgICAgYnJlYWs7CkBAIC0zNDY1LDcgKzM0NjUsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
U3RyaW5nVlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3Vs
dEdQUik7CiAKQEAgLTM0ODEsNyArMzQ4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAgICAgCiAgICAgICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRl
QXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlW
UHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBKU0J5dGVBcnJheTo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZXN1bHRH
UFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSksIHJlc3VsdEdQUik7CkBAIC0zNTIzLDcgKzM1
MjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQog
ICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBm
dW5jdGlvbih0aGlzLCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5v
dEVxdWFsLCBmdW5jdGlvbi5ncHIoKSwgbm9kZS5mdW5jdGlvbigpKSk7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
V2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0
aW9uKCkpKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVh
azsKICAgICB9CkBAIC0zNTM4LDcgKzM1MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUo
KSk7CiAgICAgICAgIAogICAgICAgICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0g
MSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFk
ZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0
dXJlU2V0KClbMF0pKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90
RXF1YWwsIEpJVENvbXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCBub2RlLnN0cnVjdHVyZVNldCgpWzBdKSk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgR1BSVGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgICAgIApAQCAt
MzU0OSw3ICszNTQ5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2Rl
KQogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgp
LnNpemUoKSAtIDE7ICsraSkKICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFu
Y2hXZWFrUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVj
dHVyZVNldCgpW2ldKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0
dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgfQpAQCAtMzcwNSw3ICszNzA1
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAg
IC8vIFNwZWN1bGF0ZSB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgog
ICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCks
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5n
cHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7
CiAKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAg
LTM3OTQsNyArMzc5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICB9CiAKICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewotICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTgyNCw5ICs4MjQsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVl
cEhvbGVPYmplCiAgICAgR1BSUmVnIG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAo
IXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgaWYg
KCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkp
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ay
R1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAog
ICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoY29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiks
IHRha2VuKTsKICAgICBpZiAobm90VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKQEAgLTEwNTksMTI4
ICsxMDU5LDEyOCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAg
ICAgICAgIFByZWRpY3RlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+
cHJlZGljdGlvbigpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpCZWxvdywgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BS
SW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVt
cCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdp
c3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAu
Z3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkp
OwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5n
cHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAu
Z3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJ
bnQxNkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVy
OjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tS
ZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1w
LmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVt
cC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAo
aXNJbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0
ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXNVaW50OEFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRy
KSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
LCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNVaW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAg
ICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5t
X3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAg
IH0gZWxzZSBpZiAoaXNVaW50MzJBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigp
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0
b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVt
cC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5n
cHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5
RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3Zw
dHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9uKHByZWRp
Y3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAg
ICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lz
dGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIo
KSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+Zmxv
YXQ2NEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0
b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0KICNlbHNlCiAgICAgICAgIGlmIChpc0ludDMyUHJl
ZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwogICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJl
ZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkp
OwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0Fy
cmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJl
ZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAg
ICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1w
LmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5
VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3Rl
ZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6
OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRh
ZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBK
SVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpCb29sZWFuVGFnKSkpOwogICAgICAgICBlbHNlIGlmIChpc0ludDhBcnJheVByZWRpY3Rpb24o
cHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0
ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRD
b21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzSW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQ
UlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAg
ICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0
ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3Zw
dHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3By
KCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc1Vp
bnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
dGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDE2QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAg
IG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAu
Z3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2
QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGlzVWlu
dDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6
dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
dGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIp
KSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGlzRmxvYXQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3By
KCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZs
b2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAu
Z3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gICBlbHNlIGlm
IChpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENv
bXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVn
aXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCku
bV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9y
KCkubV92cHRyKSkpOwogICAgICAgICB9IAogI2VuZGlmCiAgICAgfQpAQCAtMTM1NCwxMyArMTM1
NCwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2hhckNvZGVBCiAgICAgCiAg
ICAgaWYgKCFpc1N0cmluZ1ByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpIHsKICAgICAgICAgQVNTRVJUKCEoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlv
bigpICYgUHJlZGljdFN0cmluZykpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAg
Ly8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRp
Y2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJv
dmVPckVxdWFsLCBpbmRleFJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBK
U1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJp
bmdSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogCiAgICAgR1BSVGVtcG9yYXJ5
IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwpA
QCAtMTM5MywxMyArMTM5MywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlW
YWxPblN0CiAKICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkgewogICAgICAgICBBU1NFUlQoIShhdChub2RlLmNoaWxkMSgp
KS5wcmVkaWN0aW9uKCkgJiBQcmVkaWN0U3RyaW5nKSk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUp
OwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5l
Z2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCi0gICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKIAogICAg
IEdQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2Ny
YXRjaC5ncHIoKTsKQEAgLTE0MTcsNyArMTQxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVHZXRCeVZhbE9uU3QKICAgICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAw
KSwgc2NyYXRjaFJlZyk7CiAKICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgYXNjaWkgY2hhcmFjdGVy
cwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1t
MzIoMHgxMDApKSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFs
LCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgxMDApKSk7CiAKICAgICAvLyA4IGJpdCBzdHJp
bmcgdmFsdWVzIGRvbid0IG5lZWQgdGhlIGlzQVNDSUkgY2hlY2suCiAgICAgY29udDhCaXQubGlu
aygmbV9qaXQpOwpAQCAtMTQyNiw3ICsxNDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25TdAogICAgIEdQUlJlZyBzbWFsbFN0cmluZ3NSZWcgPSBzbWFsbFN0cmlu
Z3MuZ3ByKCk7CiAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkp
LCBzbWFsbFN0cmluZ3NSZWcpOwogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzbWFsbFN0cmluZ3NSZWcsIHNjcmF0Y2hSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZVB0ciwgMCksIHNjcmF0Y2hSZWcpOwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0
Y2hSZWcpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRj
aFJlZykpOwogICAgIGNlbGxSZXN1bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgpOwogfQog
CkBAIC0xNDk1LDE0ICsxNDk1LDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRC
eVZhbEZvckIKICAgICBOb2RlSW5kZXggdmFsdWVJbmRleCA9IG5vZGUuY2hpbGQzKCk7CiAgICAg
CiAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGJhc2VJbmRl
eCkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7Cisg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgIEdQ
UlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7CiAKICAgICBpZiAoYXQodmFs
dWVJbmRleCkuaXNDb25zdGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVl
T2ZKU0NvbnN0YW50KHZhbHVlSW5kZXgpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIo
KSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0x
NTYzLDcgKzE1NjMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5
CiAgICAgR1BSUmVnIHByb3BlcnR5UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICBpZiAoIWlz
Qnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkgewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygp
LCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxl
SW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU3NCw3ICsxNTc0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25CeQogICAgIG1faml0LmxvYWRQdHIo
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3Rv
cmFnZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBz
byB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJl
IHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgQnl0ZUFycmF5OjpvZmZzZXRPZlNp
emUoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHBy
b3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCeXRlQXJyYXk6
Om9mZnNldE9mU2l6ZSgpKSkpOwogCiAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25l
LCBCeXRlQXJyYXk6Om9mZnNldE9mRGF0YSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgaW50ZWdlclJl
c3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRleCk7CkBAIC0xNTg5LDcgKzE1ODksNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0VHlwZWRBcnJhCiAgICAgR1BSUmVnIHJlc3Vs
dEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAKICAgICBpZiAobmVlZHNTcGVjdWxhdGlvbkNoZWNr
KQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCksIHJlc3Vs
dEdQUik7CiAgICAgCkBAIC0xNjExLDcgKzE2MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0QnlWYWxPbkluCiAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0g
Tm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUlu
ZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE2NTIsMTQgKzE2NTIsMTQgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9ySQogICAgIE5vZGVJbmRleCB2YWx1
ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJl
bWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2
YWx1ZTsKICAgICBHUFJSZWcgdmFsdWVHUFI7CiAgICAgCiAgICAgaWYgKGF0KHZhbHVlSW5kZXgp
LmlzQ29uc3RhbnQoKSkgewogICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25z
dGFudCh2YWx1ZUluZGV4KTsKICAgICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTczNCw3ICsx
NzM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIAog
ICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0No
ZWNrKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTc3NSw3ICsxNzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZVB1dEJ5VmFsRm9yRgogICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2
YWx1ZUluZGV4KTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9U
eXBlZEFycmF5VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
U291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFz
ZSksIGJhc2VJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcyk7CiAgICAgCkBAIC0xODEwLDcgKzE4MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlSW5zdGFuY2VPZkZvCiB7CiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90b3R5cGUgaXMgYW4g
b2JqZWN0LgogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG90
eXBlUmVnLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaElmTm90T2Jq
ZWN0KHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoSWZOb3RPYmplY3Qoc2NyYXRjaFJlZykpOwogICAg
IAogICAgIC8vIEluaXRpYWxpemUgc2NyYXRjaFJlZyB3aXRoIHRoZSB2YWx1ZSBiZWluZyBjaGVj
a2VkLgogICAgIG1faml0Lm1vdmUodmFsdWVSZWcsIHNjcmF0Y2hSZWcpOwpAQCAtMTk2NCw3ICsx
OTY0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogICAgIFNw
ZWN1bGF0ZUludGVnZXJPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJS
ZWcgb3AyR3ByID0gb3AyLmdwcigpOwogCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3By
KSk7CisgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdwcikpOwogCiAjaWYg
Q1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJl
Z2lzdGVyczo6ZWF4KTsKQEAgLTIwOTIsMTMgKzIwOTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoTXVsKE5vZAogICAgICAgICAvLyB0aGUgc2VtYW50aWNzIGFyZSBhbHdh
eXMgYXMgaWYgdGhlIG11bHRpcGx5IGhhZCBiZWVuIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlCiAg
ICAgICAgIC8vIGRvbWFpbi4KICAgICAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93LCByZWcxLCByZWcyLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hNdWwz
MihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOwog
ICAgICAgICAgICAgCiAgICAgICAgIC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUg
dXNlcnMgb2YgdGhpcyBub2RlIGNhcmUgYWJvdXQgc3VjaCB0aGluZ3MuCiAgICAgICAgIGlmICgh
bm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAg
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNo
VGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZl
WmVybywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIHJlZzIsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgcmVzdWx0
Tm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAgIH0KIApAQCAtMjMyMiw3ICsyMzIyLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIFByZWRpY3RlZFR5
cGUgYmFzZVByZWRpY3Rpb24gPSBhdChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CiAgICAg
aWYgKCEoYmFzZVByZWRpY3Rpb24gJiBQcmVkaWN0SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKSB7
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVT
cGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMjMzMSw2MSArMjMzMSw2MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
SW5kZXhlZFByCiAgICAgR1BSUmVnIHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykgewogICAg
ICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEo
KSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5n
VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
U3RyaW5nVlB0cikpKTsKIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsK
ICAgICAgICAgCiAgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhY2Nlc3Npbmcg
YSByb3BlCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcpKTsK
IAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VS
ZWcsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlQnl0ZUFycmF5KCkpIHsKICAgICAg
ICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQx
KCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVB
cnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhi
YXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3Rv
cmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVJbnQ4QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwogICAg
ICAgICBpZiAoIWlzSW50OEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1f
c3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGls
ZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MTZBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVk
QXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFy
cmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzSW50MTZBcnJheVByZWRpY3Rpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxk
MSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVz
Y3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUs
IEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5t
X3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9
IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkg
ewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0
Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0lu
dDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVn
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0
KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRT
cGVjdWxhdGVVaW50OEFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0
b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9y
KCk7CiAgICAgICAgIGlmICghaXNVaW50OEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewogICAgICAgICBj
b25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNVaW50MTZBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNo
aWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
ZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdl
UmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVp
bnQzMkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwogICAg
ICAgICBpZiAoIWlzVWludDMyQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3Iu
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDMyQXJyYXkoKSkgewogICAgICAgICBjb25zdCBU
eXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+Zmxv
YXQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzRmxvYXQzMkFycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNj
cmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcp
OwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2
NEFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0
b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKICAgICAg
ICAgaWYgKCFpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5t
X3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAo
IWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikp
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICB9CiAgICAgc3Rv
cmFnZVJlc3VsdChzdG9yYWdlUmVnLCBtX2NvbXBpbGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMDI1NjIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtp
bmcgY29weSkKQEAgLTIwMjksMzcgKzIwMjksMzcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAg
Ly8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5Lgot
ICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5v
ZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCisgICAg
dm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCkKICAgICB7CiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9qaXQuY29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChq
c1ZhbHVlU291cmNlLCBtX2ppdC52YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFp
bCwgdGhpcykpOworICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JF
eGl0KGtpbmQsIGpzVmFsdWVTb3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgp
LCBqdW1wVG9GYWlsLCB0aGlzKSk7CiAgICAgfQogICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxh
dGlvbiBjaGVja3Mgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5k
ZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCYganVtcHNUb0ZhaWwpCisgICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
Tm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFp
bCkKICAgICB7CiAgICAgICAgIFZlY3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgMTY+IEp1bXBW
ZWN0b3IgPSBqdW1wc1RvRmFpbC5qdW1wcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgSnVtcFZlY3Rvci5zaXplKCk7ICsraSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soanNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBKdW1wVmVjdG9yW2ldKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soa2luZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBKdW1wVmVj
dG9yW2ldKTsKICAgICB9CiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRp
dGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNl
IGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1w
IGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQorICAgIHZv
aWQgc3BlY3VsYXRpb25DaGVjayhFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVT
b3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0Zh
aWwsIGNvbnN0IFNwZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQogICAgIHsKICAgICAgICAg
aWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2ppdC5j
b2RlQmxvY2soKS0+YXBwZW5kU3BlY3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7Ci0gICAgICAg
IG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoanNWYWx1ZVNvdXJjZSwg
bV9qaXQudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1faml0
LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CisgICAgICAg
IG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNv
dXJjZSwgbV9qaXQudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMs
IG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CiAg
ICAgfQogCiAgICAgLy8gQ2FsbGVkIHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBh
IHNwZWN1bGF0aW9uIHdpbGwgZmFpbC4KLSAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEpTVmFsdWVSZWdzIGpzVmFsdWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAg
IHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1
ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogI2lmIERGR19F
TkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2
ZUpJVCB3YXMgdGVybWluYXRlZC5cbiIpOwogI2VuZGlmCiAgICAgICAgIGlmICghbV9jb21waWxl
T2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhqc1Zh
bHVlUmVncywgbm9kZUluZGV4LCBtX2ppdC5qdW1wKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKGtpbmQsIGpzVmFsdWVSZWdzLCBub2RlSW5kZXgsIG1faml0Lmp1bXAoKSk7CiAgICAgICAg
IG1fY29tcGlsZU9rYXkgPSBmYWxzZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDggQEAgZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOwog
dW5zaWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7CiB1bnNpZ25lZCBjb3Vs
ZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudDsKIAorZG91YmxlIG9zckV4aXRQcm9taW5lbmNlRm9y
RnJlcXVlbnRFeGl0U2l0ZTsKKwogdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNl
OwogdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKIApAQCAtMTQ3
LDYgKzE0OSw4IEBAIHZvaWQgaW5pdGlhbGl6ZUhldXJpc3RpY3MoKQogICAgIFNFVChjb3VsZFRh
a2VTbG93Q2FzZVRocmVzaG9sZCwgICAgICAgMC4wNSk7IC8vIFNob3VsZG4ndCBiZSB6ZXJvIGJl
Y2F1c2Ugc29tZSBvcHMgd2lsbCBzcHVyaW91c2x5IHRha2Ugc2xvdyBjYXNlLCBmb3IgZXhhbXBs
ZSBmb3IgbGlua2luZyBvciBjYWNoaW5nLgogICAgIFNFVChsaWtlbHlUb1Rha2VTbG93Q2FzZU1p
bmltdW1Db3VudCwgMTAwKTsKICAgICBTRVQoY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQs
ICAgIDEwKTsKKyAgICAKKyAgICBTRVQob3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRT
aXRlLCAwLjMpOwogCiAgICAgU0VUKGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZSwgICAgICAg
IDIwKTsKICAgICBTRVQobGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcCwgMSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lv
biAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgZXh0ZXJuIGRvdWJsZSBjb3VsZFRha2VT
bG93Q2FzZVRocmVzaG9sZAogZXh0ZXJuIHVuc2lnbmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWlu
aW11bUNvdW50OwogZXh0ZXJuIHVuc2lnbmVkIGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50
OwogCitleHRlcm4gZG91YmxlIG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZTsK
KwogZXh0ZXJuIHVuc2lnbmVkIGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZTsKIGV4dGVybiB1
bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCg==
</data>
<flag name="commit-queue"
          id="118857"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118973</attachid>
            <date>2011-12-13 01:17:22 -0800</date>
            <delta_ts>2011-12-13 01:33:36 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>countdfgfail_patch_7.diff</filename>
            <type>text/plain</type>
            <size>157017</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMyBA
QAorMjAxMS0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQga25vdyBleGFjdGx5IHdoeSByZWNvbXBpbGF0aW9uIHdhcyB0cmlnZ2VyZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
YWNoIE9TUiBleGl0IGlzIG5vdyBpbmRpdmlkdWFsbHkgY291bnRlZCwgYXMgd2VsbCBhcyBjb3Vu
dGluZyB0aGUgdG90YWwgbnVtYmVyIAorICAgICAgICBvZiBPU1IgZXhpdHMgdGhhdCBvY2N1cnJl
ZCBpbiBhIGNvZGUgYmxvY2suIElmIHJlY29tcGlsYXRpb24gaXMgdHJpZ2dlcmVkLCB3ZQorICAg
ICAgICBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIE9TUiBleGl0IHNpdGVzIHRoYXQgbWFrZSB1
cCBhIHN1ZmZpY2llbnRseSBsYXJnZQorICAgICAgICBwb3J0aW9uIG9mIHRoZSB0b3RhbCBPU1Ig
ZXhpdHMgdGhhdCBvY2N1cnJlZC4gRm9yIGFueSBzdWNoIE9TUiBleGl0IHNpdGVzLCB3ZQorICAg
ICAgICBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc2l0ZSAoYnl0ZWNvZGUgaW5kZXgsIGtpbmQp
IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgYmFzZWxp
bmUgQ29kZUJsb2NrLiBUaGVuLCB3aGVuIHdlIHJlY29tcGlsZSB0aGUgY29kZSwgd2UgaW1tZWRp
YXRlbHkKKyAgICAgICAga25vdyB3aGljaCBzcGVjdWxhdGlvbnMgd291bGQgYmUgdW53aXNlIGJh
c2VkIG9uIHRoZSBmYWN0IHRoYXQgcHJldmlvdXMgc3VjaAorICAgICAgICBzcGVjdWxhdGlvbnMg
cHJvdmVkIHRvIGJlIGZydWl0bGVzcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWVhbnMgMiUg
d2luIG9uIHR3byBvZiB0aGUgU3VuU3BpZGVyIHN0cmluZyB0ZXN0cywgYSA0JSB3aW4gb24gVjgn
cyBkZWx0YWJsdWUsCisgICAgICAgIGFuZCA1JSBvbiBLcmFrZW4ncyBpbWFnaW5nLWRhcmtyb29t
LiBJdCBpcyBvbmx5IGEgbWlub3Igd2luIGluIHRoZSBhdmVyYWdlcywgbGVzcworICAgICAgICB0
aGFuIDAuNSUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcyk6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6YWRkRnJlcXVlbnRFeGl0U2l0
ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZXhpdFByb2ZpbGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OnJlb3B0aW1pemUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5
RnJlcXVlbnRFeGl0U2l0ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OkV4aXRQcm9maWxlKToK
KyAgICAgICAgKEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6fkV4aXRQcm9maWxlKToKKyAgICAgICAg
KEpTQzo6REZHOjpFeGl0UHJvZmlsZTo6YWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFi
bGVFeGl0UHJvZmlsZTo6UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAoSlNDOjpERkc6
OlF1ZXJ5YWJsZUV4aXRQcm9maWxlOjp+UXVlcnlhYmxlRXhpdFByb2ZpbGUpOgorICAgICAgICAq
IGJ5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OmV4
aXRLaW5kVG9TdHJpbmcpOgorICAgICAgICAoSlNDOjpERkc6OmV4aXRLaW5kSXNDb3VudGFibGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OkZyZXF1ZW50RXhpdFNpdGUp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Om9wZXJhdG9yISk6CisgICAg
ICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChK
U0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZTo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJl
cXVlbnRFeGl0U2l0ZTo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGU6OmtpbmQpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZUhh
c2g6OmVxdWFsKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6aGFz
RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuaDoKKyAgICAgICAg
KEpTQzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5k
QmFzZWxpbmVDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkFzc2VtYmx5SGVscGVyczo6
YmFzZWxpbmVDb2RlQmxvY2tGb3IpOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1ha2VTYWZlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6bWFrZURpdlNhZmUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3cpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21waWxlUGVlcEhvbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUF0KToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdHJpbmcpOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JCeXRlQXJyYXkpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5dGVBcnJheSk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmF5
TGVuZ3RoKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5
VmFsT25JbnRUeXBlZEFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uRmxvYXRUeXBlZEFycmF5KToKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFy
cmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUluc3RhbmNl
T2ZGb3JPYmplY3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
U29mdE1vZHVsbyk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVB
cml0aE11bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJ
bmRleGVkUHJvcGVydHlTdG9yYWdlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6c3BlY3VsYXRpb25DaGVjayk6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OnRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVx
dWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJbnRlcm5h
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3Vi
bGUpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
ZWFuKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVx
dWFsaXR5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVj
dE9yT3RoZXJMb2dpY2FsTm90KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUxvZ2ljYWxOb3QpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpl
bWl0T2JqZWN0T3JPdGhlckJyYW5jaCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmVtaXRCcmFuY2gpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKToKKyAgICAgICAgKiBydW50aW1lL0hldXJpc3RpY3MuY3BwOgorICAgICAgICAoSlNDOjpI
ZXVyaXN0aWNzOjppbml0aWFsaXplSGV1cmlzdGljcyk6CisgICAgICAgICogcnVudGltZS9IZXVy
aXN0aWNzLmg6CisKIDIwMTEtMTItMTIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgRWxpbWluYXRlIER1cGxpY2F0ZSB3b3JkIGF0IGEgdGltZSBlcXVhbCBj
b2RlIGluIFN0cmluZ0ltcGwuY3BwIGFuZCBTdHJpbmdIYXNoLmgKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNzIsNiArNzIsOCBAQAogCQkwRjk2M0IyRDEzRjg1NDAyMDAwMkQ5QjIgLyogTWV0YUFs
bG9jYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY5NjNCMkExM0Y4NTNCRDAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjk2M0IyRjEzRkM2NkJCMDAw
MkQ5QjIgLyogTWV0YUFsbG9jYXRvckhhbmRsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMkUxM0ZDNjZBRTAwMDJEOUIyIC8qIE1ldGFBbGxv
Y2F0b3JIYW5kbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjk2M0IzNjEzRkM2RkRF
MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi87IH07CisJ
CTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCQzBBRTUxNDk2QzdDMTAwRDRG
QkREIC8qIERGR0V4aXRQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEZCRDdFNjkxNDQ3OTk5NjAwNDgxMzE1IC8qIENvZGVPcmlnaW4u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkQ3RTY3
MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERG
R09TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDMDk3NkQxNDY4QUI0RTAwQ0Yy
NDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZDMDk3NkMxNDY4QUI0QTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5
SGVscGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04NTEsNiArODUzLDggQEAKIAkJMEY5NjNCMkIxM0Y4NTNDNzAwMDJEOUIyIC8qIE1ldGFB
bGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWV0YUFs
bG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYzQjJFMTNGQzY2
QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1ldGFBbGxvY2F0b3JIYW5kbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTQxNDk2QzdDMTAwRDRGQkREIC8qIERGR0V4aXRQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERGR0V4aXRQcm9m
aWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCQzBBRTUxNDk2QzdDMTAw
RDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERGR0V4aXRQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQkQ3
RTY3MTQ0Nzk5OEYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENvZGVPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdC5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDMDk3NkIxNDY4QUI0QTAwQ0YyNDQyIC8q
IERGR0Fzc2VtYmx5SGVscGVycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBwYXRoID0gZGZnL0RGR0Fzc2VtYmx5SGVscGVy
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNDYwLDYgKzI0NjQsOCBAQAog
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAv
KiBERkdFeGl0UHJvZmlsZS5jcHAgKi8sCisJCQkJMEZCQzBBRTUxNDk2QzdDMTAwRDRGQkREIC8q
IERGR0V4aXRQcm9maWxlLmggKi8sCiAJCQkJMEY0MjZBNEExNDYwQ0Q2QjAwMTMxRjhGIC8qIERh
dGFGb3JtYXQuaCAqLywKIAkJCQkwRjQyNkE0NTE0NjBDQkFCMDAxMzFGOEYgLyogVmFsdWVSZWNv
dmVyeS5oICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0
ZXIuaCAqLywKQEAgLTI5ODEsNiArMjk4Nyw3IEBACiAJCQkJQTczQkUxN0UxNDg0MjA4NDAwOTEy
MDRCIC8qIFR5cGVkQXJyYXlCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzNCRTE4MDE0ODQy
MEE4MDA5MTIwNEIgLyogSW50ZWdyYWxUeXBlZEFycmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZCQzBBRTgxNDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKQEAgLTM1MTgsNiArMzUyNSw3IEBACiAJCQkJMEYyQzU1NzAxNDczOEYzNTAwMTIx
RTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczQkUxNjgxNDg0
MjA1MjAwOTEyMDRCIC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0JF
MTZBMTQ4NDIwNTIwMDkxMjA0QiAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZCQzBBRTcxNDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjQxLDYgKzIyNDEsMjggQEAg
Ym9vbCBDb2RlQmxvY2s6OnNob3VsZE9wdGltaXplTm93KCkKIH0KICNlbmRpZgogCisjaWYgRU5B
QkxFKERGR19KSVQpCit2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCit7
CisgICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpERkdKSVQpOworICAgIEFTU0VS
VChhbHRlcm5hdGl2ZSgpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwor
ICAgIEFTU0VSVCghIW1fZGZnRGF0YSk7CisgICAgCisgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrID0gYWx0ZXJuYXRpdmUoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9kZmdEYXRhLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgIERGRzo6T1NSRXhpdCYg
ZXhpdCA9IG1fZGZnRGF0YS0+b3NyRXhpdFtpXTsKKyAgICAgICAgCisgICAgICAgIGlmICghZXhp
dC5jb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSh0aGlzLCBwcm9maWxlZEJsb2NrKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZF
UkJPU0UpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT1NSIGV4aXQgIyV1IChiYyMldSwgQCV1
LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAgb2NjdXJyZWQgZnJlcXVlbnRseTsgY291bnRpbmcgYXMg
ZnJlcXVlbnQgZXhpdCBzaXRlLlxuIiwgaSwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRl
eCwgZXhpdC5tX25vZGVJbmRleCwgREZHOjpleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwg
dGhpcyk7CisjZW5kaWYKKyAgICB9Cit9CisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKICNp
ZiBFTkFCTEUoVkVSQk9TRV9WQUxVRV9QUk9GSUxFKQogdm9pZCBDb2RlQmxvY2s6OmR1bXBWYWx1
ZVByb2ZpbGVzKCkKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJDb21wYWN0SklUQ29kZU1hcC5oIgogI2luY2x1
ZGUgIkRGR0NvZGVCbG9ja3MuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1
ZGUgIkRGR09TUkVudHJ5LmgiCiAjaW5jbHVkZSAiREZHT1NSRXhpdC5oIgogI2luY2x1ZGUgIkV2
YWxDb2RlQ2FjaGUuaCIKQEAgLTc5Niw2ICs3OTcsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBBU1NFUlQoaGFzQ29kZU9yaWdpbnMoKSk7CiAgICAgICAgICAgICByZXR1cm4gYmlu
YXJ5U2VhcmNoPENvZGVPcmlnaW5BdENhbGxSZXR1cm5PZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxs
UmV0dXJuT2Zmc2V0Rm9yQ29kZU9yaWdpbj4oY29kZU9yaWdpbnMoKS5iZWdpbigpLCBjb2RlT3Jp
Z2lucygpLnNpemUoKSwgZ2V0SklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUo
KSkpLT5jb2RlT3JpZ2luOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFkZEZy
ZXF1ZW50RXhpdFNpdGUoY29uc3QgREZHOjpGcmVxdWVudEV4aXRTaXRlJiBzaXRlKQorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQoZ2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKKyAgICAgICAgICAgIHJldHVybiBtX2V4aXRQcm9maWxlLmFkZChzaXRlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIERGRzo6RXhpdFByb2ZpbGUmIGV4aXRQcm9maWxlKCkgeyByZXR1cm4g
bV9leGl0UHJvZmlsZTsgfQogI2VuZGlmCiAKICAgICAgICAgLy8gQ29uc3RhbnQgUG9vbApAQCAt
MTA2NSw2ICsxMDc0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgcmVvcHRpbWl6
ZSgpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudCgpICE9IHRoaXMp
OworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50KCktPmFsdGVybmF0aXZlKCkgPT0gdGhp
cyk7CisgICAgICAgICAgICByZXBsYWNlbWVudCgpLT50YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7
CiAgICAgICAgICAgICByZXBsYWNlbWVudCgpLT5qZXR0aXNvbigpOwogICAgICAgICAgICAgY291
bnRSZW9wdGltaXphdGlvbigpOwogICAgICAgICAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwpA
QCAtMTA5Myw2ICsxMTA0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByaXZhdGU6CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBERkdDb2RlQmxvY2tzOwogICAgICAgICAKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKyAgICAgICAgdm9pZCB0YWxseUZyZXF1ZW50RXhpdFNpdGVzKCk7CisjZWxzZQorICAg
ICAgICB2b2lkIHRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKSB7IH0KKyNlbmRpZgorICAgICAgICAK
ICNpZiAhZGVmaW5lZChOREVCVUcpIHx8IEVOQUJMRShPUENPREVfU0FNUExJTkcpCiAgICAgICAg
IHZvaWQgZHVtcChFeGVjU3RhdGUqLCBjb25zdCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9p
dGVyYXRvciYgYmVnaW4sIFZlY3RvcjxJbnN0cnVjdGlvbj46OmNvbnN0X2l0ZXJhdG9yJikgY29u
c3Q7CiAKQEAgLTEyMTIsNiArMTIyOSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfTsK
ICAgICAgICAgCiAgICAgICAgIE93blB0cjxERkdEYXRhPiBtX2RmZ0RhdGE7CisgICAgICAgIAor
ICAgICAgICAvLyBUaGlzIGlzIHJlbGV2YW50IHRvIG5vbi1ERkcgY29kZSBibG9ja3MgdGhhdCBz
ZXJ2ZSBhcyB0aGUgcHJvZmlsZWQgY29kZSBibG9jaworICAgICAgICAvLyBmb3IgREZHIGNvZGUg
YmxvY2tzLgorICAgICAgICBERkc6OkV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CiAjZW5kaWYK
ICNpZiBFTkFCTEUoVkFMVUVfUFJPRklMRVIpCiAgICAgICAgIFNlZ21lbnRlZFZlY3RvcjxWYWx1
ZVByb2ZpbGUsIDg+IG1fdmFsdWVQcm9maWxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxl
LmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK0V4aXRQcm9maWxlOjpFeGl0UHJvZmlsZSgpIHsgfQorRXhpdFByb2Zp
bGU6On5FeGl0UHJvZmlsZSgpIHsgfQorCitib29sIEV4aXRQcm9maWxlOjphZGQoY29uc3QgRnJl
cXVlbnRFeGl0U2l0ZSYgc2l0ZSkKK3sKKyAgICAvLyBJZiB3ZSd2ZSBuZXZlciBzZWVuIGFueSBm
cmVxdWVudCBleGl0cyB0aGVuIGNyZWF0ZSB0aGUgbGlzdCBhbmQgcHV0IHRoaXMgc2l0ZQorICAg
IC8vIGludG8gaXQuCisgICAgaWYgKCFtX2ZyZXF1ZW50RXhpdFNpdGVzKSB7CisgICAgICAgIG1f
ZnJlcXVlbnRFeGl0U2l0ZXMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+
KCkpOworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0ZSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBEb24ndCBhZGQgaXQgaWYgaXQncyBh
bHJlYWR5IHRoZXJlLiBUaGlzIGlzIE8obiksIGJ1dCB0aGF0J3MgT0ssIGJlY2F1c2Ugd2UKKyAg
ICAvLyBrbm93IHRoYXQgdGhlIHRvdGFsIG51bWJlciBvZiBwbGFjZXMgd2hlcmUgY29kZSBleGl0
cyB0ZW5kcyB0byBub3QgYmUgbGFyZ2UsCisgICAgLy8gYW5kIHRoaXMgY29kZSBpcyBvbmx5IHVz
ZWQgd2hlbiByZWNvbXBpbGF0aW9uIGlzIHRyaWdnZXJlZC4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0KGkpID09IHNpdGUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMtPmFwcGVuZChzaXRl
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJs
ZUV4aXRQcm9maWxlKGNvbnN0IEV4aXRQcm9maWxlJiBwcm9maWxlKQoreworICAgIGlmICghcHJv
ZmlsZS5tX2ZyZXF1ZW50RXhpdFNpdGVzKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHByb2ZpbGUubV9mcmVxdWVudEV4aXRTaXRlcy0+c2l6ZSgp
OyArK2kpCisgICAgICAgIG1fZnJlcXVlbnRFeGl0U2l0ZXMuYWRkKHByb2ZpbGUubV9mcmVxdWVu
dEV4aXRTaXRlcy0+YXQoaSkpOworfQorCitRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJs
ZUV4aXRQcm9maWxlKCkgeyB9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0RGR0V4aXRQcm9maWxl
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHRXhpdFByb2ZpbGVfaAorI2RlZmlu
ZSBERkdFeGl0UHJvZmlsZV9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKKworZW51bSBFeGl0S2luZCB7CisgICAgRXhpdEtpbmRVbnNldCwK
KyAgICBCYWRUeXBlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhIHR5cGUgcHJlZGljdGlvbiB3YXMg
d3JvbmcuCisgICAgQmFkQ2FjaGUsIC8vIFdlIGV4aXRlZCBiZWNhdXNlIGFuIGlubGluZSBjYWNo
ZSB3YXMgd3JvbmcuCisgICAgT3ZlcmZsb3csIC8vIFdlIGV4aXRlZCBiZWNhdXNlIG9mIG92ZXJm
bG93LgorICAgIE5lZ2F0aXZlWmVybywgLy8gV2UgZXhpdGVkIGJlY2F1c2Ugd2UgZW5jb3VudGVy
ZWQgbmVnYXRpdmUgemVyby4KKyAgICBVbmNvdW50YWJsZSwgLy8gV2UgZXhpdGVkIGZvciBub25l
IG9mIHRoZSBhYm92ZSByZWFzb25zLCBhbmQgd2Ugc2hvdWxkIG5vdCBjb3VudCBpdC4gTW9zdCB1
c2VzIG9mIHRoaXMgc2hvdWxkIGJlIHZpZXdlZCBhcyBhIEZJWE1FLgorfTsKKworI2lmbmRlZiBO
REVCVUcKK2lubGluZSBjb25zdCBjaGFyKiBleGl0S2luZFRvU3RyaW5nKEV4aXRLaW5kIGtpbmQp
Cit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAg
ICByZXR1cm4gIlVuc2V0IjsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgICAgIHJldHVybiAiQmFk
VHlwZSI7CisgICAgY2FzZSBCYWRDYWNoZToKKyAgICAgICAgcmV0dXJuICJCYWRDYWNoZSI7Cisg
ICAgY2FzZSBPdmVyZmxvdzoKKyAgICAgICAgcmV0dXJuICJPdmVyZmxvdyI7CisgICAgY2FzZSBO
ZWdhdGl2ZVplcm86CisgICAgICAgIHJldHVybiAiTmVnYXRpdmVaZXJvIjsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gIlVua25vd24iOworICAgIH0KK30KKyNlbmRpZgorCitpbmxpbmUg
Ym9vbCBleGl0S2luZElzQ291bnRhYmxlKEV4aXRLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBFeGl0S2luZFVuc2V0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICBjYXNlIEJhZFR5cGU6CisgICAgY2FzZSBVbmNvdW50YWJsZToKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
K30KKworY2xhc3MgRnJlcXVlbnRFeGl0U2l0ZSB7CitwdWJsaWM6CisgICAgRnJlcXVlbnRFeGl0
U2l0ZSgpCisgICAgICAgIDogbV9ieXRlY29kZU9mZnNldCgwKSAvLyAwID0gZW1wdHkgdmFsdWUK
KyAgICAgICAgLCBtX2tpbmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IEZyZXF1ZW50RXhpdFNpdGUoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fYnl0ZWNvZGVPZmZzZXQoMSkgLy8gMSA9IGRlbGV0ZWQgdmFsdWUKKyAgICAgICAgLCBt
X2tpbmQoRXhpdEtpbmRVbnNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEZy
ZXF1ZW50RXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEV4aXRLaW5kIGtpbmQpCisg
ICAgICAgIDogbV9ieXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCkKKyAgICAgICAgLCBtX2tp
bmQoa2luZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChleGl0S2luZElzQ291bnRhYmxlKGtpbmQp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZCA9PSBFeGl0S2luZFVuc2V0OworICAgIH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9ieXRlY29kZU9mZnNldCA9PSBvdGhlci5tX2J5dGVjb2RlT2Zmc2V0
CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OmludEhh
c2gobV9ieXRlY29kZU9mZnNldCkgKyBtX2tpbmQ7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlY29kZU9mZnNldDsgfQorICAg
IEV4aXRLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZCA9PSBFeGl0S2luZFVuc2V0ICYmIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgfQorCitwcml2YXRl
OgorICAgIHVuc2lnbmVkIG1fYnl0ZWNvZGVPZmZzZXQ7CisgICAgRXhpdEtpbmQgbV9raW5kOwor
fTsKKworc3RydWN0IEZyZXF1ZW50RXhpdFNpdGVIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGcmVxdWVudEV4aXRTaXRlJiBhLCBjb25zdCBG
cmVxdWVudEV4aXRTaXRlJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZT4geworICAgIHR5cGVkZWYgSlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGVIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGU+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlOworCitjbGFzcyBFeGl0
UHJvZmlsZSB7CitwdWJsaWM6CisgICAgRXhpdFByb2ZpbGUoKTsKKyAgICB+RXhpdFByb2ZpbGUo
KTsKKyAgICAKKyAgICAvLyBBZGQgYSBuZXcgZnJlcXVlbnQgZXhpdCBzaXRlLiBSZXR1cm4gdHJ1
ZSBpZiB0aGlzIGlzIGEgbmV3IG9uZSwgb3IgZmFsc2UKKyAgICAvLyBpZiB3ZSBhbHJlYWR5IGtu
ZXcgYWJvdXQgaXQuIFRoaXMgaXMgYW4gTyhuKSBvcGVyYXRpb24sIGJlY2F1c2UgaXQgZXJycwor
ICAgIC8vIG9uIHRoZSBzaWRlIG9mIGtlZXBpbmcgdGhlIGRhdGEgc3RydWN0dXJlIGNvbXBhY3Qu
IEFsc28sIHRoaXMgd2lsbCBvbmx5CisgICAgLy8gYmUgY2FsbGVkIGEgZml4ZWQgbnVtYmVyIG9m
IHRpbWVzIHBlciByZWNvbXBpbGF0aW9uLiBSZWNvbXBpbGF0aW9uIGlzCisgICAgLy8gcmFyZSB0
byBiZWdpbiB3aXRoLCBhbmQgaW1wbGllcyBkb2luZyBPKG4pIG9wZXJhdGlvbnMgb24gdGhlIENv
ZGVCbG9jaworICAgIC8vIGFueXdheS4KKyAgICBib29sIGFkZChjb25zdCBGcmVxdWVudEV4aXRT
aXRlJik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBRdWVyeWFibGVFeGl0UHJv
ZmlsZTsKKyAgICAKKyAgICBPd25QdHI8VmVjdG9yPEZyZXF1ZW50RXhpdFNpdGU+ID4gbV9mcmVx
dWVudEV4aXRTaXRlczsKK307CisKK2NsYXNzIFF1ZXJ5YWJsZUV4aXRQcm9maWxlIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBRdWVyeWFibGVFeGl0UHJvZmlsZShjb25zdCBFeGl0UHJvZmlsZSYp
OworICAgIH5RdWVyeWFibGVFeGl0UHJvZmlsZSgpOworICAgIAorICAgIGJvb2wgaGFzRXhpdFNp
dGUoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2ZyZXF1ZW50RXhpdFNpdGVzLmZpbmQoc2l0ZSkgIT0gbV9mcmVxdWVudEV4aXRTaXRl
cy5lbmQoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBoYXNFeGl0U2l0ZSh1bnNpZ25lZCBieXRl
Y29kZUluZGV4LCBFeGl0S2luZCBraW5kKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGhh
c0V4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwga2luZCkpOworICAgIH0K
K3ByaXZhdGU6CisgICAgSGFzaFNldDxGcmVxdWVudEV4aXRTaXRlPiBtX2ZyZXF1ZW50RXhpdFNp
dGVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gREZHRXhp
dFByb2ZpbGVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fzc2Vt
Ymx5SGVscGVycy5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fzc2VtYmx5SGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsMTQgKzI4NCwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
Y2FsbGVlLT5qc0V4ZWN1dGFibGUoKS0+aXNTdHJpY3RNb2RlKCk7CiAgICAgfQogICAgIAotICAg
IENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9y
aWdpbikKKyAgICBzdGF0aWMgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFu
ZEJhc2VsaW5lQ29kZUJsb2NrKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4sIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2spCiAgICAgewogICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUpIHsKICAgICAgICAgICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCk7CiAgICAgICAgICAg
ICBBU1NFUlQoZXhlY3V0YWJsZS0+c3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZGdW5jdGlv
bkV4ZWN1dGFibGU6OnNfaW5mbyk7CiAgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0YWJsZSktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25z
dHJ1Y3QpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9jaygpOwor
ICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2s7CisgICAgfQorICAgIAorICAgIENvZGVC
bG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29uc3QgQ29kZU9yaWdpbiYgY29kZU9yaWdpbikK
KyAgICB7CisgICAgICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2Vs
aW5lQ29kZUJsb2NrKGNvZGVPcmlnaW4sIGJhc2VsaW5lQ29kZUJsb2NrKCkpOwogICAgIH0KICAg
ICAKICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxMDI1
NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjMxLDExICs2MzEsMTMgQEAgcHJpdmF0ZToKIAogICAgIE5vZGVJ
bmRleCBtYWtlU2FmZShOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgaWYgKCFt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1f
Y3VycmVudEluZGV4KSkKKyAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAg
JiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50
SW5kZXgsIE92ZXJmbG93KQorICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhp
dFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpCiAgICAg
ICAgICAgICByZXR1cm4gbm9kZUluZGV4OwogICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVH
X1ZFUkJPU0UpCi0gICAgICAgIHByaW50ZigiTWFraW5nICVzIEAldSBzYWZlIGF0IGJjIyV1IGJl
Y2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIsIEdyYXBoOjpvcE5hbWUobV9ncmFw
aFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCht
X2N1cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgIHByaW50ZigiTWFraW5nICVzIEAl
dSBzYWZlIGF0IGJjIyV1IGJlY2F1c2Ugc2xvdy1jYXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4
aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3JhcGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRl
eF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3By
b2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudElu
ZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdyksIG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0aXZlWmVybykpOwogI2VuZGlm
CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fZ3JhcGhbbm9kZUluZGV4XS5vcCkgewpAQCAt
NjQ4LDEyICs2NTAsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCiAgICAgICAgIGNhc2UgQXJpdGhNdWw6Ci0gICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UobV9jdXJy
ZW50SW5kZXgpKSB7CisgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5saWtlbHlUb1Rha2VEZWVwZXN0U2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAg
ICAgICAgICAgICAgfHwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0
ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKSB7CiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJC
T1NFKQogICAgICAgICAgICAgICAgIHByaW50ZigiTWFraW5nIEFyaXRoTXVsIEAldSB0YWtlIGRl
ZXBlc3Qgc2xvdyBjYXNlLlxuIiwgbm9kZUluZGV4KTsKICNlbmRpZgogICAgICAgICAgICAgICAg
IG1fZ3JhcGhbbm9kZUluZGV4XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8
IE5vZGVNYXlOZWdaZXJvKTsKLSAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xv
d0Nhc2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICAgICAgICAgICAgIHx8IG1faW5saW5l
U3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE5lZ2F0
aXZlWmVybykpIHsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCJNYWtpbmcgQXJpdGhNdWwgQCV1IHRha2UgZmFzdGVyIHNsb3cgY2FzZS5cbiIs
IG5vZGVJbmRleCk7CiAjZW5kaWYKQEAgLTY3OSwxMyArNjgzLDE3IEBAIHByaXZhdGU6CiAgICAg
ICAgIC8vIGNhcmUgYWJvdXQgd2hlbiB0aGUgb3V0Y29tZSBvZiB0aGUgZGl2aXNpb24gaXMgbm90
IGFuIGludGVnZXIsIHdoaWNoCiAgICAgICAgIC8vIGlzIHdoYXQgdGhlIHNwZWNpYWwgZmFzdCBj
YXNlIGNvdW50ZXIgdGVsbHMgdXMuCiAgICAgICAgIAotICAgICAgICBpZiAoIW1faW5saW5lU3Rh
Y2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU3BlY2lhbEZhc3RDYXNlKG1fY3Vy
cmVudEluZGV4KSkKKyAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAg
ICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBPdmVyZmxvdykKKyAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5t
X2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKQog
ICAgICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgICAgICBwcmludGYoIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMl
dSBiZWNhdXNlIHNwZWNpYWwgZmFzdC1jYXNlIGNvdW50ZXIgaXMgYXQgJXVcbiIsIEdyYXBoOjpv
cE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwg
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxl
Rm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOworICAgICAgICBw
cmludGYoIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBiZWNhdXNlIHNwZWNpYWwgZmFzdC1j
YXNlIGNvdW50ZXIgaXMgYXQgJXUgYW5kIGV4aXQgcHJvZmlsZXMgc2F5ICVkLCAlZFxuIiwgR3Jh
cGg6Om9wTmFtZShtX2dyYXBoW25vZGVJbmRleF0ub3ApLCBub2RlSW5kZXgsIG1fY3VycmVudElu
ZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnNwZWNpYWxGYXN0Q2FzZVBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3Zl
cmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3Vy
cmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAgICAgICAKKyAgICAgICAgLy8g
RklYTUU6IEl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1ha2UgdGhpcyBtb3JlIGdyYW51bGFyLiBU
aGUgREZHIGNlcnRhaW5seSBjYW4KKyAgICAgICAgLy8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBuZWdh
dGl2ZSB6ZXJvIGFuZCBvdmVyZmxvdyBpbiBpdHMgZXhpdCBwcm9maWxlcy4KICAgICAgICAgbV9n
cmFwaFtub2RlSW5kZXhdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU92ZXJmbG93IHwgTm9k
ZU1heU5lZ1plcm8pOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIG5vZGVJbmRleDsKQEAgLTc5
Myw2ICs4MDEsOCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgU2NyaXB0RXhlY3V0YWJs
ZSogZXhlY3V0YWJsZSgpIHsgcmV0dXJuIG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKTsg
fQogICAgICAgICAKKyAgICAgICAgUXVlcnlhYmxlRXhpdFByb2ZpbGUgbV9leGl0UHJvZmlsZTsK
KyAgICAgICAgCiAgICAgICAgIC8vIFJlbWFwcGluZyBvZiBpZGVudGlmaWVyIGFuZCBjb25zdGFu
dCBudW1iZXJzIGZyb20gdGhlIGNvZGUgYmxvY2sgYmVpbmcKICAgICAgICAgLy8gaW5saW5lZCAo
aW5saW5lIGNhbGxlZSkgdG8gdGhlIGNvZGUgYmxvY2sgdGhhdCB3ZSdyZSBpbmxpbmluZyBpbnRv
CiAgICAgICAgIC8vICh0aGUgbWFjaGluZSBjb2RlIGJsb2NrLCB3aGljaCBpcyB0aGUgdHJhbnNp
dGl2ZSwgdGhvdWdoIG5vdCBuZWNlc3NhcmlseQpAQCAtODg3LDEyICs4OTcsMTQgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgIGVudW0geyBDb25zdGFudEZ1
bmN0aW9uLCBMaW5rZWRGdW5jdGlvbiwgVW5rbm93bkZ1bmN0aW9uIH0gY2FsbFR5cGU7CiAgICAg
ICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgcHJpbnRmKCJTbG93
IGNhc2UgY291bnQgZm9yIGNhbGwgYXQgQCVsdSBiYyMldTogJXUvJXUuXG4iLCBtX2dyYXBoLnNp
emUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+
cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50
ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+ZXhlY3V0aW9uRW50cnlDb3Vu
dCgpKTsKKyAgICBwcmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgY2FsbCBhdCBAJWx1IGJjIyV1
OiAldS8ldTsgZXhpdCBwcm9maWxlOiAlZC5cbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJ
bmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVG
b3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5leGVjdXRpb25FbnRyeUNvdW50KCksIG1faW5saW5lU3Rh
Y2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hl
KSk7CiAjZW5kaWYKICAgICAgICAgICAgIAogICAgIGlmIChtX2dyYXBoLmlzRnVuY3Rpb25Db25z
dGFudChtX2NvZGVCbG9jaywgY2FsbFRhcmdldCkpCiAgICAgICAgIGNhbGxUeXBlID0gQ29uc3Rh
bnRGdW5jdGlvbjsKLSAgICBlbHNlIGlmICghIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+Z2V0Q2FsbExpbmtJbmZvKG1fY3VycmVudEluZGV4KS5sYXN0U2VlbkNhbGxlZSAmJiAh
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRha2VTbG93Q2FzZShtX2N1
cnJlbnRJbmRleCkpCisgICAgZWxzZSBpZiAoISFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPmdldENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxsZWUKKyAg
ICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5jb3VsZFRh
a2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFj
a1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUp
KQogICAgICAgICBjYWxsVHlwZSA9IExpbmtlZEZ1bmN0aW9uOwogICAgIGVsc2UKICAgICAgICAg
Y2FsbFR5cGUgPSBVbmtub3duRnVuY3Rpb247CkBAIC0xMTY3LDcgKzExNzksMTAgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoIU1hY3JvQXNz
ZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRBYnMoKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aEFicywg
T3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDEpKSkpOworICAgICAgICBOb2RlSW5kZXggbm9kZUluZGV4ID0gYWRkVG9H
cmFwaChBcml0aEFicywgT3BJbmZvKE5vZGVVc2VCb3R0b20pLCBnZXRUb051bWJlcihyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CisgICAgICAgIGlmIChtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxv
dykpCisgICAgICAgICAgICBtX2dyYXBoW25vZGVJbmRleF0ubWVyZ2VBcml0aE5vZGVGbGFncyhO
b2RlTWF5T3ZlcmZsb3cpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgbm9kZUluZGV4KTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjY4LDcgKzE2ODMsMTAgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgU3RydWN0
dXJlU3R1YkluZm8mIHN0dWJJbmZvID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT5nZXRTdHViSW5mbyhtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICBNZXRob2RDYWxsTGlu
a0luZm8mIG1ldGhvZENhbGwgPSBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdl
dE1ldGhvZENhbGxMaW5rSW5mbyhtX2N1cnJlbnRJbmRleCk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGlmIChtZXRob2RDYWxsLnNlZW4gJiYgISFtZXRob2RDYWxsLmNhY2hlZFN0cnVjdHVy
ZSAmJiAhc3R1YkluZm8uc2VlbikgeworICAgICAgICAgICAgaWYgKG1ldGhvZENhbGwuc2Vlbgor
ICAgICAgICAgICAgICAgICYmICEhbWV0aG9kQ2FsbC5jYWNoZWRTdHJ1Y3R1cmUKKyAgICAgICAg
ICAgICAgICAmJiAhc3R1YkluZm8uc2VlbgorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNo
ZSkpIHsKICAgICAgICAgICAgICAgICAvLyBJdCdzIG1vbm9tb3JwaGljIGFzIGZhciBhcyB3ZSBj
YW4gdGVsbCwgc2luY2UgdGhlIG1ldGhvZF9jaGVjayB3YXMgbGlua2VkCiAgICAgICAgICAgICAg
ICAgLy8gYnV0IHRoZSBzbG93IHBhdGggKGkuZS4gdGhlIG5vcm1hbCBnZXRfYnlfaWQpIG5ldmVy
IGZpcmVkLgogCkBAIC0xNzExLDEyICsxNzI5LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBzdHViSW5m
byA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0U3R1YkluZm8obV9jdXJy
ZW50SW5kZXgpOwogICAgICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQot
ICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIEdldEJ5SWQgQCVsdSBiYyMl
dTogJXVcbiIsIG1fZ3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1
cnJlbnRJbmRleCktPm1fY291bnRlcik7CisgICAgICAgICAgICBwcmludGYoIlNsb3cgY2FzZSBj
b3VudCBmb3IgR2V0QnlJZCBAJWx1IGJjIyV1OiAldTsgZXhpdCBwcm9maWxlOiAlZFxuIiwgbV9n
cmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+
bV9jb3VudGVyLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1f
Y3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogI2VuZGlmCiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIHNpemVfdCBvZmZzZXQgPSBub3RGb3VuZDsKICAgICAgICAgICAgIFN0cnVjdHVyZVNldCBz
dHJ1Y3R1cmVTZXQ7Ci0gICAgICAgICAgICBpZiAoc3R1YkluZm8uc2VlbiAmJiAhbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJ
bmRleCkpIHsKKyAgICAgICAgICAgIGlmIChzdHViSW5mby5zZWVuCisgICAgICAgICAgICAgICAg
JiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nh
c2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkgewog
ICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgICAgICAg
ICAgICAgIGNhc2UgYWNjZXNzX2dldF9ieV9pZF9zZWxmOiB7CiAgICAgICAgICAgICAgICAgICAg
IFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1YkluZm8udS5nZXRCeUlkU2VsZi5iYXNlT2JqZWN0
U3RydWN0dXJlLmdldCgpOwpAQCAtMTgwNSwxMCArMTgyNSwxMiBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBib29sIGFscmVhZHlHZW5lcmF0
ZWQgPSBmYWxzZTsKICAgICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
LSAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBQdXRCeUlkIEAlbHUgYmMj
JXU6ICV1XG4iLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9j
dXJyZW50SW5kZXgpLT5tX2NvdW50ZXIpOworICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2Ug
Y291bnQgZm9yIFB1dEJ5SWQgQCVsdSBiYyMldTogJXU7IGV4aXQgcHJvZmlsZTogJWRcbiIsIG1f
Z3JhcGguc2l6ZSgpLCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxl
ZEJsb2NrLT5yYXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCkt
Pm1fY291bnRlciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZSht
X2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKTsKICNlbmRpZiAgICAgICAgICAgIAogCi0gICAgICAg
ICAgICBpZiAoc3R1YkluZm8uc2VlbiAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJs
b2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkpIHsKKyAgICAgICAgICAg
IGlmIChzdHViSW5mby5zZWVuCisgICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3At
Pm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpCisg
ICAgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhp
dFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkgewogICAgICAgICAgICAgICAgIHN3aXRj
aCAoc3R1YkluZm8uYWNjZXNzVHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2UgYWNjZXNzX3B1
dF9ieV9pZF9yZXBsYWNlOiB7CiAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gc3R1YkluZm8udS5wdXRCeUlkUmVwbGFjZS5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgp
OwpAQCAtMjQyNSw2ICsyNDQ3LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6
OklubGluZQogICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQogICAgICwgbV9wcm9maWxlZEJs
b2NrKHByb2ZpbGVkQmxvY2spCiAgICAgLCBtX2NhbGxlZVZSKGNhbGxlZVZSKQorICAgICwgbV9l
eGl0UHJvZmlsZShwcm9maWxlZEJsb2NrLT5leGl0UHJvZmlsZSgpKQogICAgICwgbV9jYWxsc2l0
ZUJsb2NrSGVhZChjYWxsc2l0ZUJsb2NrSGVhZCkKICAgICAsIG1fcmV0dXJuVmFsdWUocmV0dXJu
VmFsdWVWUikKICAgICAsIG1fZGlkUmV0dXJuKGZhbHNlKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyAr
MjgsMjAgQEAKIAogI2lmIEVOQUJMRShERkdfSklUKQogCisjaW5jbHVkZSAiREZHQXNzZW1ibHlI
ZWxwZXJzLmgiCiAjaW5jbHVkZSAiREZHU3BlY3VsYXRpdmVKSVQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgewogCi1PU1JFeGl0OjpPU1JFeGl0KEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIGNoZWNrLCBTcGVjdWxhdGl2ZUpJVCogaml0LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQor
T1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVj
aywgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKICAgICA6IG1f
anNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQ
cm9maWxlKQogICAgICwgbV9jaGVjayhjaGVjaykKICAgICAsIG1fbm9kZUluZGV4KGppdC0+bV9j
b21waWxlSW5kZXgpCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1Ip
CiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKKyAgICAsIG1fa2luZChraW5k
KQorICAgICwgbV9jb3VudCgwKQogICAgICwgbV9hcmd1bWVudHMoaml0LT5tX2FyZ3VtZW50cy5z
aXplKCkpCiAgICAgLCBtX3ZhcmlhYmxlcyhqaXQtPm1fdmFyaWFibGVzLnNpemUoKSkKICAgICAs
IG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQpAQCAtNjEsNiArNjQsMTQg
QEAgdm9pZCBPU1JFeGl0OjpkdW1wKEZJTEUqIG91dCkgY29uc3QKIH0KICNlbmRpZgogCitib29s
IE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sq
IGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKK3sKKyAgICBpZiAo
c3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0NvZGVCbG9jay0+c3BlY3VsYXRpdmVG
YWlsQ291bnRlcigpIDw9IEhldXJpc3RpY3M6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRF
eGl0U2l0ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBBc3NlbWJs
eUhlbHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
bV9jb2RlT3JpZ2luLCBwcm9maWxlZENvZGVCbG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoRnJl
cXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgbV9raW5kKSk7Cit9CisK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDEwMjU2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUg
IkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0NvcnJlY3RhYmxlSnVtcFBvaW50LmgiCisjaW5j
bHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCiAjaW5jbHVk
ZSAiREZHT3BlcmFuZHMuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgpAQCAtODEsNyAr
ODIsNyBAQCBwcml2YXRlOgogLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0
IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCiBz
dHJ1Y3QgT1NSRXhpdCB7Ci0gICAgT1NSRXhpdChKU1ZhbHVlU291cmNlLCBWYWx1ZVByb2ZpbGUq
LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCByZWNvdmVy
eUluZGV4ID0gMCk7CisgICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgVmFsdWVQ
cm9maWxlKiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQg
cmVjb3ZlcnlJbmRleCA9IDApOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2Nv
ZGU7CiAgICAgCkBAIC05NCw2ICs5NSw5IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAKICAgICB1
bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAg
IHVpbnQzMl90IG1fY291bnQ7CisgICAgCiAgICAgLy8gQ29udmVuaWVudCB3YXkgb2YgaXRlcmF0
aW5nIG92ZXIgVmFsdWVSZWNvdmVyaWVzIHdoaWxlIGJlaW5nCiAgICAgLy8gZ2VuZXJpYyBvdmVy
IGFyZ3VtZW50IHZlcnN1cyB2YXJpYWJsZS4KICAgICBpbnQgbnVtYmVyT2ZSZWNvdmVyaWVzKCkg
Y29uc3QgeyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpICsgbV92YXJpYWJsZXMuc2l6ZSgpOyB9
CkBAIC0xMjAsNiArMTI0LDEzIEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICAgICAgcmV0dXJuIGlu
ZGV4IC0gbV9hcmd1bWVudHMuc2l6ZSgpOwogICAgIH0KICAgICAKKyAgICBib29sIGNvbnNpZGVy
QWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFl
eGl0S2luZElzQ291bnRhYmxlKG1fa2luZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29k
ZUJsb2NrLCBwcm9maWxlZENvZGVCbG9jayk7CisgICAgfQorICAgIAogI2lmbmRlZiBOREVCVUcK
ICAgICB2b2lkIGR1bXAoRklMRSogb3V0KSBjb25zdDsKICNlbmRpZgpAQCAtMTI3LDYgKzEzOCw5
IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBWZWN0b3I8VmFsdWVSZWNvdmVyeSwgMD4gbV9hcmd1
bWVudHM7CiAgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fdmFyaWFibGVzOwogICAgIGlu
dCBtX2xhc3RTZXRPcGVyYW5kOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sq
IHByb2ZpbGVkQ29kZUJsb2NrKTsKIH07CiAKICNpZiBERkdfRU5BQkxFKFZFUkJPU0VfU1BFQ1VM
QVRJT05fRkFJTFVSRSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDUxLDYgKzQ1MSw4IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxl
RXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhlcndpc2Ugd2Ugc2V0IHRo
ZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9wdGltaXplQWZ0ZXJXYXJt
VXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OkltbTMyKDEpLCBB
c3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2NvdW50KSk7CisgICAgCiAg
ICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIobV9qaXQuY29kZUJs
b2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAgbV9qaXQubG9hZDMyKEFzc2VtYmx5
SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2NrOjpvZmZzZXRPZlNwZWN1
bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lv
biAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYxLDYgKzQ2MSw4IEBAIHZvaWQgT1NSRXhpdENv
bXBpbGVyOjpjb21waWxlRXhpdChjb25zdCAKICAgICAvLyAgICAgY291bnRlciB0byAwOyBvdGhl
cndpc2Ugd2Ugc2V0IHRoZSBjb3VudGVyIHRvCiAgICAgLy8gICAgIGNvdW50ZXJWYWx1ZUZvck9w
dGltaXplQWZ0ZXJXYXJtVXAoKS4KICAgICAKKyAgICBtX2ppdC5hZGQzMihBc3NlbWJseUhlbHBl
cnM6OkltbTMyKDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2Nv
dW50KSk7CisgICAgCiAgICAgbV9qaXQubW92ZShBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuY29kZUJsb2NrKCkpLCBHUFJJbmZvOjpyZWdUMCk7CiAgICAgCiAgICAgbV9qaXQu
bG9hZDMyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpyZWdUMCwgQ29kZUJsb2Nr
OjpvZmZzZXRPZlNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSksIEdQUkluZm86OnJlZ1QyKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCB2b2lkIGNv
bXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgcmVjb3ZlcnkgPSAmY29kZUJs
b2NrLT5zcGVjdWxhdGlvblJlY292ZXJ5KGV4aXQubV9yZWNvdmVyeUluZGV4IC0gMSk7CiAKICNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgZnByaW50ZihzdGRlcnIsICJHZW5lcmF0
aW5nIE9TUiBleGl0ICMldSBmb3IgY29kZSBibG9jayAlcC5cbiIsIGV4aXRJbmRleCwgY29kZUJs
b2NrKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkdlbmVyYXRpbmcgT1NSIGV4aXQgIyV1IChiYyMl
dSwgQCV1LCAlcykgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGV4aXQubV9jb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2RlSW5kZXgsIGV4aXRLaW5kVG9TdHJpbmco
ZXhpdC5tX2tpbmQpLCBjb2RlQmxvY2spOwogI2VuZGlmCiAKICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNDEsNyArMTM0MSw3IEBAIEdQ
UlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUludEkKICAgICAgICAgICAgICAgICBy
ZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAgICAgICAgICByZXR1cm4g
Z3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVj
dXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAg
ICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICBy
ZXR1cm4gYWxsb2NhdGUoKTsKICAgICAgICAgfQpAQCAtMTM1Myw3ICsxMzUzLDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogCiAgICAgICAgIC8vIElmIHdlIGtu
b3cgdGhpcyB3YXMgc3BpbGxlZCBhcyBhbiBpbnRlZ2VyIHdlIGNhbiBmaWxsIHdpdGhvdXQgY2hl
Y2tpbmcuCiAgICAgICAgIGlmIChzcGlsbEZvcm1hdCAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQot
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjph
ZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpKTsKIAogICAgICAgICBtX2ppdC5sb2FkMzIo
SklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAg
aW5mby5maWxsSW50ZWdlcihncHIpOwpAQCAtMTM2OSw3ICsxMzY5LDcgQEAgR1BSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIp
OwogICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKICAgICAgICAgaWYgKGluZm8ucmVn
aXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSAKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAg
ICAgICAgbV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5
bG9hZEdQUik7CkBAIC0xMzkzLDcgKzEzOTMsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVJbnRJCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNEb3VibGU6CiAgICAgY2FzZSBE
YXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjogewotICAgICAg
ICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOwor
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVn
ZXI7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAgLTE0NDQsNyArMTQ0NCw3
IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAgICAgICAgICAg
ICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZnByOwog
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBmcHJBbGxvY2F0ZSgpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewpAQCAtMTQ2MCw3ICsxNDYwLDcgQEAgRlBSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAgICAgICBGUFJSZWcgZnByID0gZnBy
QWxsb2NhdGUoKTsKICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6OkFib3ZlT3JFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgICAgICAgICAgbV9qaXQu
bG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIp
OwogICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0
Lmp1bXAoKTsKIApAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlRG91YgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNh
c2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICByZXR1
cm4gZnByQWxsb2NhdGUoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKQEAgLTE1MDEs
NyArMTUwMSw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKICAg
ICAgICAgaWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNJbnRlZ2VyKSB7
CiAgICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKICAgICAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCB0
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
dGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgICAgICAgICAg
dW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwogICAg
ICAgICAgICAgaGFzVW5ib3hlZERvdWJsZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgICAgIGlz
SW50ZWdlci5saW5rKCZtX2ppdCk7CkBAIC0xNTY0LDEyICsxNTY0LDEyIEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxD
ZWxsKGdwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBncHI7CiAg
ICAgICAgIH0KICAgICAgICAgQVNTRVJUKGluZm8uc3BpbGxGb3JtYXQoKSAmIERhdGFGb3JtYXRK
Uyk7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTQ2VsbCkK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6
YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NG
b3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZ3ByKTsKICAgICAgICAgbV9n
cHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogICAg
ICAgICBpbmZvLmZpbGxDZWxsKGdwcik7CkBAIC0xNTg5LDcgKzE1ODksNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQ
Uik7CiAgICAgICAgIG1fZ3Bycy5sb2NrKHBheWxvYWRHUFIpOwogICAgICAgICBpZiAoaW5mby5z
cGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0NlbGwpCi0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgbV9ncHJzLnVubG9jayh0YWdHUFIpOwogICAgICAgICBt
X2dwcnMucmVsZWFzZSh0YWdHUFIpOwogICAgICAgICBtX2dwcnMucmVsZWFzZShwYXlsb2FkR1BS
KTsKQEAgLTE2MDQsNyArMTYwNCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1
bGF0ZUNlbGwKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CiAgICAgY2FzZSBEYXRhRm9ybWF0
SlNCb29sZWFuOgogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46IHsKLSAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KIApAQCAtMTYzNywx
NCArMTYzNywxNCBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAg
ICAgICAgICAgICAgICAgaW5mby5maWxsQm9vbGVhbihncHIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7
CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpbmZv
LnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBtX2dwcnMucmV0YWluKGdw
ciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7CiAKICAgICAgICAgaWYgKGlu
Zm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNCb29sZWFuKQotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVn
aXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkJvb2xlYW5UYWcpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIGluZm8uZmlsbEJv
b2xlYW4oZ3ByKTsKQEAgLTE2NjQsNyArMTY2NCw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAg
bV9ncHJzLmxvY2socGF5bG9hZEdQUik7CiAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVhbikKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJvb2xlYW5UYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpT
VmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpC
b29sZWFuVGFnKSkpOwogCiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAgICAg
bV9ncHJzLnJlbGVhc2UodGFnR1BSKTsKQEAgLTE2ODAsNyArMTY4MCw3IEBAIEdQUlJlZyBTcGVj
dWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6
CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6IHsK
LSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAg
IH0KICAgICAgICAgCkBAIC0xNzIxLDkgKzE3MjEsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlT2JqZWN0RXF1YWxpCiAgICAgR1BSUmVnIHJlc3VsdFBheWxvYWRHUFIgPSByZXN1bHRQ
YXlsb2FkLmdwcigpOwogICAgIAogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9w
MkdQUiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFs
c2VDYXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BS
LCBvcDJHUFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwpA
QCAtMTc5Myw3ICsxNzkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9y
T3RoZQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2Fk
R1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5
cGUsIEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KHZwdHIpKSk7CiAgICAgbV9qaXQubW92ZShUcnVzdGVkSW1tMzIoMCksIHJlc3VsdFBheWxvYWRH
UFIpOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAg
CkBAIC0xODAzLDcgKzE4MDMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlT2JqZWN0
T3JPdGhlCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0Lm1v
dmUodmFsdWVUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIpOwogICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRQYXlsb2FkR1BS
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHJlc3Vs
dFBheWxvYWRHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgIH0KICAg
ICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigxKSwgcmVzdWx0UGF5bG9hZEdQUik7CiAgICAgCkBA
IC0xODgxLDcgKzE4ODEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JPdGhl
ckJyCiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbm90Q2VsbCA9IG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdmFsdWVUYWdHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSk7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRH
UFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVlUGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
dnB0cikpKTsKICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAg
bm90Q2VsbC5saW5rKCZtX2ppdCk7CkBAIC0xODkwLDcgKzE4OTAsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0T2JqZWN0T3JPdGhlckJyCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNr
KSB7CiAgICAgICAgIG1faml0Lm1vdmUodmFsdWVUYWdHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAg
ICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMigxKSwgc2NyYXRjaEdQUik7Ci0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5v
ZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNo
R1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BS
KSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNj
cmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgIH0KIAogICAg
IGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQpAQCAtMTk5OCw3ICsxOTk4LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIElmIHdl
IGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0IHRv
IGNvbXBpbGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lKSB7Ci0gICAg
ICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTIwODAsMTQgKzIwODAsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2Vs
bCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2Vs
bC5ncHIoKTsKICAgICAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5z
dG9yZVB0cihjZWxsR1BSLCBKSVRDb21waWxlcjo6cGF5bG9hZEZvcihub2RlLmxvY2FsKCkpKTsK
ICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIGlm
IChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAgICAgICAgICBpZiAoIWlzQnl0ZUFy
cmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNl
Ojp1bmJveGVkQ2VsbChjZWxsR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRl
QXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQUiwgSklUQ29t
cGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewpAQCAtMjE5Myw3ICsyMTkzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMs
IG9wMSk7CiAKICAgICAgICAgLy8gVGVzdCB0aGUgb3BlcmFuZCBpcyBwb3NpdGl2ZS4KLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AxLmdwcigpLCBUcnVzdGVkSW1tMzIoMCkpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgVHJ1
c3RlZEltbTMyKDApKSk7CiAKICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5n
cHIoKSk7CiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCwgb3AxLmZvcm1hdCgpKTsKQEAgLTIyNDEsNyArMjI0MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShv
cDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0LmFkZDMy
KEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIElt
bTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQz
MihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIoKSwgSW1tMzIoaW1tMSksIHJlc3Vs
dC5ncHIoKSkpOwogCiAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIyNTYsNyArMjI1
Niw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAg
ICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
ICAgICAgICAgICAgIG1faml0LmFkZDMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6
Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5n
cHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICAgICAgaW50
ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTIyODEsMTEgKzIyODEsMTEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNo
ZWNrID0gbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBncHIxLCBn
cHIyLCBncHJSZXN1bHQpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChn
cHIxID09IGdwclJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0
aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRp
b25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CiAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAoZ3ByMiA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25S
ZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIxKSk7CisgICAgICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
Y2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3By
MSkpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVj
ayk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZ3ByUmVzdWx0
LCBtX2NvbXBpbGVJbmRleCk7CkBAIC0yMzIxLDcgKzIzMjEsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUo
b3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5zdWIz
MihJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJ
bW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1
bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdwcigp
LCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzM1LDcgKzIz
MzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
ICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAg
ICAgICAgbV9qaXQuc3ViMzIob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdw
cigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3Vi
MzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0
LmdwcigpKSk7CiAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTIzNjgsMTMgKzIzNjgsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICAgICAgICAgIEdQUlJlZyBvcDJHUFIgPSBvcDIu
Z3ByKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9w
MkdQUikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGlsZXI6Olplcm8sIG9wMkdQ
UikpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZiB0aGUgdXNlciBjYXJlcyBhYm91
dCBuZWdhdGl2ZSB6ZXJvLCB0aGVuIHNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhYm91dAogICAg
ICAgICAgICAgLy8gdG8gcHJvZHVjZSBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICAgICAgaWYgKCFu
b2RlQ2FuSWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBudW1lcmF0b3JOb25aZXJvID0gbV9qaXQu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIpOwotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7
CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBv
cDJHUFIsIFRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgICAgIG51bWVyYXRvck5vblpl
cm8ubGluaygmbV9qaXQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0yMzk0LDcg
KzIzOTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAg
ICAgICAgICAgIC8vIENoZWNrIHRoYXQgdGhlcmUgd2FzIG5vIHJlbWFpbmRlci4gSWYgdGhlcmUg
aGFkIGJlZW4sIHRoZW4gd2UnZCBiZSBvYmxpZ2F0ZWQgdG8KICAgICAgICAgICAgIC8vIHByb2R1
Y2UgYSBkb3VibGUgcmVzdWx0IGluc3RlYWQuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpO
b25aZXJvLCBlZHguZ3ByKCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVy
OjpOb25aZXJvLCBlZHguZ3ByKCkpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChlYXguZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICNlbHNlIC8vIENQVShYODYpIC0+
IHNvIG5vbi1YODYgY29kZSBmb2xsb3dzCkBAIC0yNDE0LDcgKzI0MTQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAKICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBmYWlsdXJlQ2FzZXM7CiAgICAgICAgICAgICBtX2ppdC5i
cmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMihyZXN1bHRGUFIsIHJlc3VsdEdQUiwgZmFpbHVyZUNh
c2VzLCBzY3JhdGNoRlBSKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBmYWlsdXJlQ2FzZXMpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBmYWlsdXJlQ2FzZXMpOwogCiAgICAg
ICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogI2VuZGlm
IC8vIENQVShYODYpCkBAIC0yNDQ4LDcgKzI0NDgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5yc2hpZnQzMihyZXN1bHQuZ3By
KCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoLmdwcigpKTsKICAg
ICAgICAgICAgIG1faml0LmFkZDMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAg
ICAgICAgICBtX2ppdC54b3IzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92
ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEg
PDwgMzEpKSk7CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21w
aWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2ODUsMTUgKzI2
ODUsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAg
ICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAg
ICAgICAgICAgIEdQUlJlZyBiYXNlUmVnID0gYmFzZS5ncHIoKTsKICAgICAgICAgICAgIGlmICgh
aXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkp
Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9mZnNl
dCgpKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZywgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0KCkpKSk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJlIHN1YnNlcXVlbnQgYnlfdmFsIGFj
Y2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVscCB0byBjYWNoZQogICAgICAgICAv
LyB0aGUgc3RvcmFnZSBwb2ludGVyIC0gZXNwZWNpYWxseSBpZiB0aGVyZSBoYXBwZW5zIHRvIGJl
IGFub3RoZXIgcmVnaXN0ZXIgZnJlZSByaWdodCBub3cuIElmIHdlIGRvIHNvLAogICAgICAgICAv
LyB0aGVuIHdlJ2xsIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgdGVtcG9yYXJ5IGZvciByZXN1bHQu
CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VS
ZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV92ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnRhZykpLCByZXN1bHRUYWcuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCByZXN1bHRUYWcuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVl
VGFnKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0
VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKICAgICAg
ICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoc3RvcmFnZVJlZywgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpUaW1lc0VpZ2h0LCBPQkpFQ1RfT0ZGU0VUT0YoQXJy
YXlTdG9yYWdlLCBtX3ZlY3RvclswXSkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0Jp
dHMucGF5bG9hZCkpLCByZXN1bHRQYXlsb2FkLmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZy5ncHIoKSwgcmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwpAQCAtMjgwNCw3ICsyODA0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAvLyBDaGVjayB0aGF0IGJhc2UgaXMgYW4gYXJyYXksIGFuZCB0aGF0
IHByb3BlcnR5IGlzIGNvbnRhaW5lZCB3aXRoaW4gbV92ZWN0b3IgKDwgbV92ZWN0b3JMZW5ndGgp
LgogICAgICAgICAvLyBJZiB3ZSBoYXZlIHByZWRpY3RlZCB0aGUgYmFzZSB0byBiZSB0eXBlIGFy
cmF5LCB3ZSBjYW4gc2tpcCB0aGUgY2hlY2suCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rp
b24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogCiAgICAgICAgIGJh
c2UudXNlKCk7CiAgICAgICAgIHByb3BlcnR5LnVzZSgpOwpAQCAtMjk0OCwxMyArMjk0OCwxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIHdyaXRl
QmFycmllcihiYXNlR1BSLCB2YWx1ZVRhZ0dQUiwgbm9kZS5jaGlsZDIoKSwgV3JpdGVCYXJyaWVy
Rm9yUHJvcGVydHlBY2Nlc3MsIHN0b3JhZ2VHUFIsIHN0b3JhZ2VMZW5ndGhHUFIpOwogCiAgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9yYWdlR1BS
KTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VH
UFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3JhZ2VMZW5n
dGhHUFIpOwogICAgICAgICAKICAgICAgICAgLy8gUmVmdXNlIHRvIGhhbmRsZSBiaXphcnJlIGxl
bmd0aHMuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRy
dXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1i
bGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3RlZEltbTMyKDB4N2ZmZmZmZmUpKSk7
CiAgICAgICAgIAogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHN0b3JhZ2VMZW5ndGhHUFIs
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnZlY3Rvckxlbmd0aE9m
ZnNldCgpKSk7CiAgICAgICAgIApAQCAtMjk5NCw3ICsyOTk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgc3RvcmFnZUxlbmd0aEdQ
UiA9IHN0b3JhZ2VMZW5ndGguZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJh
c2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0
LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKQEAgLTMxMTUs
NyArMzExNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6IHsKICAgICAgICAgLy8gV2UgZXhwZWN0IHRoYXQg
dGhyb3cgc3RhdGVtZW50cyBhcmUgcmFyZSBhbmQgYXJlIGludGVuZGVkIHRvIGV4aXQgdGhlIGNv
ZGUgYmxvY2sKICAgICAgICAgLy8gYW55d2F5LCBzbyB3ZSBqdXN0IE9TUiBiYWNrIHRvIHRoZSBv
bGQgSklUIGZvciBub3cuCi0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAgICAgICAgIApAQCAtMzI2Myw3ICszMjYzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoMSksIHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgLy8gVGhpcyBpcyBoYXJkLiBJdCB3b3Vs
ZCBiZSBiZXR0ZXIgdG8gc2F2ZSB0aGUgdmFsdWUsIGJ1dCB3ZSBjYW4ndCBxdWl0ZSBkbyBpdCwK
ICAgICAgICAgICAgIC8vIHNpbmNlIHRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IG90aGVyd2lzZSBn
ZXQgdGhlIHBheWxvYWQuCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3Jh
dGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpOdWxsVGFnKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2Rl
LmNvZGVPcmlnaW4pKSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHNjcmF0
Y2hHUFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTMyNzcsNyArMzI3Nyw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghaXNPYmpl
Y3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
dGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVy
OjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbCh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklU
Q29tcGlsZXI6OkVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIpLCBKSVRD
b21waWxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHJl
c3VsdEdQUik7CiAgICAgICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5k
ZXgpOwpAQCAtMzMyMiw3ICszMzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVj
ay4KICAgICAgICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2Jq
ZWN0KCkpIHsKICAgICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChwcm90b0dQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
bV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHBy
b3RvR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RWUHRyKSkp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaDgoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBTdHJ1
Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihPYmplY3RUeXBlKSkpOwpAQCAtMzQzNCw3ICszNDM0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICBjYXNlIEdldEJ5SWQ6IHsKICAg
ICAgICAgaWYgKCFub2RlLnByZWRpY3Rpb24oKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0zNDk0
LDEyICszNDk0LDEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
ICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAg
ICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJy
YXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCByZXN1bHRHUFIp
OwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocmVzdWx0R1BS
LCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCByZXN1bHRHUFIpOwog
ICAgICAgICAKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMCkpKTsKICAgICAgICAgCiAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzUxMyw3ICszNTEzLDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc1N0cmluZ1ByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VH
UFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAg
IAogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwg
SlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLCByZXN1bHRHUFIpOwogCkBAIC0zNTI5LDcgKzM1
MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAo
IWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0
ZUFycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwg
cmVzdWx0R1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEJ5dGVBcnJheTo6b2Zmc2V0T2ZTaXplKCkpLCByZXN1bHRHUFIpOwpAQCAtMzU3
Miw3ICszNTcyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQog
CiAgICAgY2FzZSBDaGVja0Z1bmN0aW9uOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IGZ1bmN0aW9uKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUuZnVu
Y3Rpb24oKSkpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KQEAgLTM1ODgsNyArMzU4OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6
ZSgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9
PSAxKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6
QWRkcmVzcyhiYXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgbm9kZS5zdHJ1
Y3R1cmVTZXQoKVswXSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKICAgICAgICAgZWxzZSB7CiAg
ICAgICAgICAgICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICAgICAgCkBA
IC0zNTk5LDcgKzM1OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0
KCkuc2l6ZSgpIC0gMTsgKytpKQogICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJy
YW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3Ry
dWN0dXJlU2V0KClbaV0pKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1
Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICB9CkBAIC0zNzY1LDcgKzM3
NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAg
ICAgLy8gU3BlY3VsYXRlIHRoYXQgYmFzZSAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScu
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIo
KSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7Ci0gICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0
OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJl
LmdwcigpLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hUZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RydWN0dXJlLmdwcigpLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkp
KTsKIAogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMzg2MSw3ICszODYxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7Ci0gICAgICAgIHRlcm1pbmF0
ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRl
cm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTAyNTYy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTI4Miw3ICsxMjgyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SQogICAgIHN3aXRjaCAoaW5mby5yZWdpc3RlckZvcm1hdCgpKSB7
CiAgICAgY2FzZSBEYXRhRm9ybWF0Tm9uZTogewogICAgICAgICBpZiAoKG5vZGUuaGFzQ29uc3Rh
bnQoKSAmJiAhaXNJbnQzMkNvbnN0YW50KG5vZGVJbmRleCkpIHx8IGluZm8uc3BpbGxGb3JtYXQo
KSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7
CiAgICAgICAgICAgICByZXR1cm5Gb3JtYXQgPSBEYXRhRm9ybWF0SW50ZWdlcjsKICAgICAgICAg
ICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9CkBAIC0xMzMyLDcgKzEzMzIsNyBAQCBH
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgIC8vIENoZWNr
IHRoZSB2YWx1ZSBpcyBhbiBpbnRlZ2VyLgogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIo
KTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIGdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZv
cm1hdEpTSW50ZWdlcik7CiAgICAgICAgIC8vIElmICFzdHJpY3Qgd2UncmUgZG9uZSwgcmV0dXJu
LgogICAgICAgICBpZiAoIXN0cmljdCkgewpAQCAtMTM4OSw3ICsxMzg5LDcgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xl
YW46CiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9v
bGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNv
dW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgIH0KQEAg
LTE0NDgsNyArMTQ0OCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoZnByKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gZnByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUpOwogICAgICAgICAgICAgcmV0dXJuIGZwckFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC0xNDkxLDcgKzE0OTEsNyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVj
dWxhdGVEb3ViCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDoKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybiBmcHJB
bGxvY2F0ZSgpOwogCiAgICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgpAQCAtMTUwNCw3ICsxNTA0
LDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogCiAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVn
aXN0ZXIpOwogCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoanNWYWx1ZUdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywg
anNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoanNWYWx1ZUdwciksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywganNWYWx1ZUdwciwg
R1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CiAKICAgICAgICAgLy8gRmlyc3QsIGlm
IHdlIGdldCBoZXJlIHdlIGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKICAgICAg
ICAgbV9qaXQubW92ZShqc1ZhbHVlR3ByLCB0ZW1wR3ByKTsKQEAgLTE1NzgsNyArMTU3OCw3IEBA
IEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwKICAgICBzd2l0Y2ggKGlu
Zm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZvcm1hdE5vbmU6IHsKICAgICAg
ICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50ZWdlciB8fCBpbmZvLnNw
aWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAgICAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgICAgIH0KICAg
ICAgICAgCkBAIC0xNTkyLDcgKzE1OTIsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxT
cGVjdWxhdGVDZWxsCiAgICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKU0NlbGwpOwogICAgICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygp
LCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZ3By
OwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9y
bWF0SlMpOwpAQCAtMTYwMSw3ICsxNjAxLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQ2VsbAogCiAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0
SlMpOwogICAgICAgICBpZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0NlbGwp
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwog
ICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAg
IHJldHVybiBncHI7CiAgICAgfQpAQCAtMTYxNiw3ICsxNjE2LDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAogICAgIGNhc2UgRGF0YUZvcm1hdEpTOiB7CiAgICAg
ICAgIEdQUlJlZyBncHIgPSBpbmZvLmdwcigpOwogICAgICAgICBtX2dwcnMubG9jayhncHIpOwot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CiAgICAgICAgIGlu
Zm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsKICAgICAgICAgcmV0dXJuIGdw
cjsKICAgICB9CkBAIC0xNjI3LDcgKzE2MjcsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVDZWxsCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0
YUZvcm1hdEpTQm9vbGVhbjoKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7Ci0gICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7Cisg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAKQEAg
LTE2NTEsNyArMTY1MSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJv
b2wKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0YUZv
cm1hdE5vbmU6IHsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSA9PSBEYXRhRm9ybWF0
SW50ZWdlciB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdERvdWJsZSkgewotICAg
ICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xNjY1LDcgKzE2NjUsNyBAQCBHUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgICAgICAgICAgICAgaW5mby5maWxs
SlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICAgICAgICAgIHJldHVy
biBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAg
ICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAgICAgIEFTU0VSVChpbmZvLnNw
aWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwpAQCAtMTY3NSw3ICsxNjc1LDcgQEAgR1BSUmVn
IFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAh
PSBEYXRhRm9ybWF0SlNCb29sZWFuKSB7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgZ3ByKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihz
dGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3Bl
Y3VsYXRpb25DaGVjaywgZ3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1
bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykpOwogICAgICAgICAgICAgbV9qaXQueG9y
UHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7
CiAgICAgICAgIH0KICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0Jv
b2xlYW4pOwpAQCAtMTY5Myw3ICsxNjkzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxs
U3BlY3VsYXRlQm9vbAogICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIoKTsKICAgICAgICAg
bV9ncHJzLmxvY2soZ3ByKTsKICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0
aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywg
Z3ByLCBJbnZhbGlkR1BSUmVnKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3MoZ3ByKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCBncHIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSwgU3BlY3VsYXRpb25SZWNvdmVyeShCb29sZWFuU3BlY3VsYXRpb25DaGVjaywgZ3ByLCBJ
bnZhbGlkR1BSUmVnKSk7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICBpbmZvLmZpbGxKU1Zh
bHVlKGdwciwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CiAgICAgICAgIHJldHVybiBncHI7CkBAIC0x
NzA1LDcgKzE3MDUsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29s
CiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoK
ICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAgICAgICAgIApAQCAtMTc0OCw5ICsxNzQ4
LDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVxdWFsaQogICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgCiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hl
Y2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLmNoaWxk
MSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOwogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MigpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKG9wMkdQ
UiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNW
YWx1ZVJlZ3Mob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBmYWxzZUNhc2UgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBvcDFHUFIsIG9wMkdQUik7CiAgICAgbV9qaXQubW92ZShJbW0zMihWYWx1ZVRydWUpLCBy
ZXN1bHRHUFIpOwpAQCAtMTgxNyw3ICsxODE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZU9iamVjdE9yT3RoZQogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwg
PSBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2sp
Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1
ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cih2cHRyKSkpOwogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTgyNiw3ICsxODI2LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlmIChuZWVkU3Bl
Y3VsYXRpb25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlR1BSLCByZXN1bHRHUFIp
OwogICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMih+VGFn
Qml0VW5kZWZpbmVkKSwgcmVzdWx0R1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihy
ZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOworICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7
CiAgICAgfQogICAgIG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOwogICAgIApAQCAtMTg4Miw3ICsxODgyLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUxvZ2ljYWxOb3QoTgogICAgICAgICAKICAgICAgICAg
bV9qaXQubW92ZSh2YWx1ZS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgbV9qaXQueG9y
UHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHJlc3Vs
dC5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWUuZ3By
KCkpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpOb25a
ZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkp
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWUu
Z3ByKCkpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpO
b25aZXJvLCByZXN1bHQuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+
MSkpKSk7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVmFsdWVUcnVlKSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIAogICAgICAgICAvLyBJ
ZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgpAQCAtMTky
MSw3ICsxOTIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgog
ICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2hUZXN0
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB2YWx1ZUdQUiwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModmFsdWVHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkp
OwogICAgIGFkZEJyYW5jaChtX2ppdC5qdW1wKCksIHRha2VuKTsKICAgICAKICAgICBub3RDZWxs
LmxpbmsoJm1faml0KTsKQEAgLTE5MjksNyArMTkyOSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRPYmplY3RPck90aGVyQnIKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spIHsKICAg
ICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgIG1faml0LmFu
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3Jh
dGNoR1BSKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyh2YWx1ZUdQUiks
IG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2Ny
YXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKICAgICB9CiAgICAgaWYg
KG5vdFRha2VuICE9IChtX2Jsb2NrICsgMSkpCiAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5qdW1w
KCksIG5vdFRha2VuKTsKQEAgLTE5OTcsNyArMTk5Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRCcmFuY2goTm9kZSYgbm8KICAgICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0
cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKGZhbHNlKSkpKSwgbm90VGFrZW4pOwogICAgICAg
ICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHZh
bHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
dHJ1ZSkpKSksIHRha2VuKTsKIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncyh2YWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0Lmp1bXAoKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuanVtcCgpKTsKICAgICAgICAgICAgIHZhbHVlLnVzZSgpOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgYWRkQnJhbmNoKG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHZhbHVlR1BSLCBNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKEpTVmFsdWU6
OmVuY29kZShqc051bWJlcigwKSkpKSwgbm90VGFrZW4pOwpAQCAtMjA0Myw3ICsyMDQzLDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIElm
IHdlIGhhdmUgbm8gcHJlZGljdGlvbiBmb3IgdGhpcyBsb2NhbCwgdGhlbiBkb24ndCBhdHRlbXB0
IHRvIGNvbXBpbGUuCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFByZWRpY3ROb25lIHx8IHZh
bHVlLmlzQ2xlYXIoKSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRp
b24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0yMTEzLDE0ICsyMTEzLDE0IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAgICAgICAgICBpZiAoIWlzQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIo
Y2VsbEdQUiwgSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRl
QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVn
IGNlbGxHUFIgPSBjZWxsLmdwcigpOwogICAgICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhjZWxsR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3Jl
UHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAg
ICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYgKGlz
Qm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKQEAgLTIyMjUsNyArMjIyNSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAgICAgIC8vIFRlc3QgdGhlIG9wZXJhbmQg
aXMgcG9zaXRpdmUuCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwg
VHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NU
aGFuLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSkpOwogCiAgICAgICAgIG1faml0Lm1vdmUo
b3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQoKSk7CkBAIC0yMjczLDcgKzIyNzMsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUob3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
Zmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCks
IEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC0yMjg4LDcgKzIyODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0yKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKIAog
ICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzEzLDExICsyMzEzLDExIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBjaGVjayA9IG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVy
OjpPdmVyZmxvdywgZ3ByMSwgZ3ByMiwgZ3ByUmVzdWx0KTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBpZiAoZ3ByMSA9PSBncHJSZXN1bHQpCi0gICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRp
b25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0LCBncHIyKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwg
Z3ByMikpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGdwcjIgPT0gZ3ByUmVzdWx0KQotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
Y2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3By
MSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVjdWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZl
QWRkLCBncHJSZXN1bHQsIGdwcjEpKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjayk7
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgY2hlY2spOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnRl
Z2VyUmVzdWx0KGdwclJlc3VsdCwgbV9jb21waWxlSW5kZXgpOwpAQCAtMjM1Myw3ICsyMzUzLDcg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAg
ICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigp
LCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2Vy
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjM2Nyw3ICsyMzY3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN1YjMyKG9wMi5ncHIoKSwgcmVzdWx0Lmdw
cigpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxl
cjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AxLmdwcigp
LCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0y
Mzk5LDEzICsyMzk5LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBvcDEuZ3ByKCk7CiAgICAgICAgICAgICBH
UFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJ
VENvbXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
T3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENv
bXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gSWYg
dGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVybywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3
ZSdyZSBub3QgYWJvdXQKICAgICAgICAgICAgIC8vIHRvIHByb2R1Y2UgbmVnYXRpdmUgemVyby4K
ICAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLmFyaXRoTm9k
ZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJh
dG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
b3AxR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDJHUFIs
IFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVn
YXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIoMCkpKTsKICAgICAgICAgICAg
ICAgICBudW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0KTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtMjQyNSw3ICsyNDI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogCiAgICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZXJlIHdhcyBubyBy
ZW1haW5kZXIuIElmIHRoZXJlIGhhZCBiZWVuLCB0aGVuIHdlJ2QgYmUgb2JsaWdhdGVkIHRvCiAg
ICAgICAgICAgICAvLyBwcm9kdWNlIGEgZG91YmxlIHJlc3VsdCBpbnN0ZWFkLgotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgZWR4LmdwcigpKSk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZWF4LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTI0NTgsNyArMjQ1OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0LnJzaGlmdDMyKHJlc3Vs
dC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigzMSksIHNjcmF0Y2guZ3ByKCkp
OwogICAgICAgICAgICAgbV9qaXQuYWRkMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpKTsK
ICAgICAgICAgICAgIG1faml0LnhvcjMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCByZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoMSA8PCAzMSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkVxdWFsLCByZXN1bHQuZ3ByKCksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoMSA8PCAzMSkpKTsKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjY4OCwx
NSArMjY4OCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJv
cGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZlY3Rv
ckxlbmd0aE9mZnNldCgpKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJh
eVZQdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVh
bCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6
OnZlY3Rvckxlbmd0aE9mZnNldCgpKSkpOwogCiAgICAgICAgIC8vIEZJWE1FOiBJbiBjYXNlcyB3
aGVyZSB0aGVyZSBhcmUgc3Vic2VxdWVudCBieV92YWwgYWNjZXNzZXMgdG8gdGhlIHNhbWUgYmFz
ZSBpdCBtaWdodCBoZWxwIHRvIGNhY2hlCiAgICAgICAgIC8vIHRoZSBzdG9yYWdlIHBvaW50ZXIg
LSBlc3BlY2lhbGx5IGlmIHRoZXJlIGhhcHBlbnMgdG8gYmUgYW5vdGhlciByZWdpc3RlciBmcmVl
IHJpZ2h0IG5vdy4gSWYgd2UgZG8gc28sCiAgICAgICAgIC8vIHRoZW4gd2UnbGwgbmVlZCB0byBh
bGxvY2F0ZSBhIG5ldyB0ZW1wb3JhcnkgZm9yIHJlc3VsdC4KICAgICAgICAgR1BSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6U2NhbGVQdHIs
IE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fdmVjdG9yWzBdKSksIHJlc3VsdC5ncHIo
KSk7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCByZXN1bHQuZ3ByKCkp
KTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKQEAgLTI3OTksNyArMjc5OSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFu
IGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBjb250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8
IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8gSWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJh
c2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNraXAgdGhlIGNoZWNrLgogICAgICAgICBpZiAo
IWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKIAogICAgICAgICBiYXNlLnVzZSgpOwogICAg
ICAgICBwcm9wZXJ0eS51c2UoKTsKQEAgLTI5NDMsMTMgKzI5NDMsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
UiwgdmFsdWVHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNjZXNz
LCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAogICAgICAgICBpZiAoIWlzQXJyYXlQ
cmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwg
c3RvcmFnZUdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZGU0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBz
dG9yYWdlTGVuZ3RoR1BSKTsKICAgICAgICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUg
Yml6YXJyZSBsZW5ndGhzLgotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVu
Z3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdm
ZmZmZmZlKSkpOwogICAgICAgICAKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1Bh
dGggPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdl
TGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0
b3JMZW5ndGhPZmZzZXQoKSkpOwogICAgICAgICAKQEAgLTI5ODYsNyArMjk4Niw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHN0b3Jh
Z2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVuZ3RoLmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYg
KCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5s
b2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VP
ZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9s
ZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CkBAIC0zMDkxLDcgKzMwOTEsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOiB7CiAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRocm93IHN0YXRlbWVudHMgYXJl
IHJhcmUgYW5kIGFyZSBpbnRlbmRlZCB0byBleGl0IHRoZSBjb2RlIGJsb2NrCiAgICAgICAgIC8v
IGFueXdheSwgc28gd2UganVzdCBPU1IgYmFjayB0byB0aGUgb2xkIEpJVCBmb3Igbm93LgotICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUp
OworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAgICAKQEAg
LTMyMjQsNyArMzIyNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgIGlmICghaXNPdGhlclByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKHRoaXNW
YWx1ZUdQUiwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICAgICAgbV9qaXQuYW5kUHRyKE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCksIHNjcmF0Y2hHUFIpOwot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUuY29kZU9yaWdpbikpLCBzY3JhdGNoR1BSKTsKQEAgLTMyMzksNyArMzIzOSw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBy
ZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgh
aXNPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUp
KQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModGhpc1ZhbHVl
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJ
bW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBu
b2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoSklUQ29tcGlsZXI6OkVxdWFsLCBKSVRDb21w
aWxlcjo6QWRkcmVzcyh0aGlzVmFsdWVHUFIpLCBKSVRDb21waWxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHJlc3VsdEdQUik7CiAgICAgICAgICAgICAK
QEAgLTMyODMsNyArMzI4Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNlZCkgY2hlY2suCiAg
ICAgICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgp
KSB7CiAgICAgICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MocHJvdG9HUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90
b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhwcm90b0dQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBy
b3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVPZmZzZXQoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKQEAgLTMzOTAsNyArMzM5MCw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAg
Y2FzZSBHZXRCeUlkOiB7CiAgICAgICAgIGlmICghbm9kZS5wcmVkaWN0aW9uKCkpIHsKLSAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMzQ0NiwxMiArMzQ0NiwxMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3By
KCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJh
eVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsK
ICAgICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAg
bV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09G
RlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0g
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxl
LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAg
ICAgICAgIAogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKQEAgLTM0NjUsNyArMzQ2NSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3Vs
dC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3Rh
dGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdW
UHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsK
IApAQCAtMzQ4MSw3ICszNDgxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAg
ICAKICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQ
dHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBCeXRl
QXJyYXk6Om9mZnNldE9mU2l6ZSgpKSwgcmVzdWx0R1BSKTsKQEAgLTM1MjMsNyArMzUyMyw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAgICAgY2Fz
ZSBDaGVja0Z1bmN0aW9uOiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGZ1bmN0aW9u
KHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWws
IGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRy
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgZnVuY3Rpb24uZ3ByKCksIG5vZGUuZnVuY3Rpb24oKSkp
OwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTM1MzgsNyArMzUzOCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgQVNTRVJUKG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgpKTsKICAg
ICAgICAgCiAgICAgICAgIGlmIChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6QWRkcmVzcyhi
YXNlLmdwcigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgbm9kZS5zdHJ1Y3R1cmVTZXQo
KVswXSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
SklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQo
KSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBHUFJUZW1wb3Jhcnkgc3RydWN0dXJlKHRoaXMpOwogICAgICAgICAgICAgCkBAIC0zNTQ5LDcg
KzM1NDksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG5vZGUuc3RydWN0dXJlU2V0KCkuc2l6ZSgp
IC0gMTsgKytpKQogICAgICAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0LmJyYW5jaFdlYWtQ
dHIoSklUQ29tcGlsZXI6OkVxdWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0
KClbaV0pKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLCBzdHJ1Y3R1cmUuZ3ByKCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZENhY2hlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBzdHJ1Y3R1cmUuZ3By
KCksIG5vZGUuc3RydWN0dXJlU2V0KCkubGFzdCgpKSk7CiAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICB9CkBAIC0zNzA1LDcgKzM3MDUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAKICAgICAgICAgLy8gU3Bl
Y3VsYXRlIHRoYXQgYmFzZSAnSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZScuCiAgICAgICAg
IG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlNDZWxs
OjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHN0cnVjdHVyZS5ncHIoKSk7Ci0gICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0OChNYWNyb0Fz
c2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0dXJlLmdwcigpLCBT
dHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsKKyAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0OChNYWNyb0Fzc2VtYmxlcjo6WmVybywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RydWN0
dXJlLmdwcigpLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvRmxhZ3NPZmZzZXQoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoSW1wbGVtZW50c0RlZmF1bHRIYXNJbnN0YW5jZSkpKTsKIAogICAg
ICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc5NCw3
ICszNzk0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
IH0KIAogICAgIGNhc2UgRm9yY2VPU1JFeGl0OiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODI0LDkgKzgyNCw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQZWVwSG9sZU9i
amUKICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgIAogICAgIGlmICghcHJlZGlj
dGlvbkNoZWNrKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5v
ZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BS
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBpZiAoIXByZWRp
Y3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkKLSAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBu
b2RlLmNoaWxkMigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKG9wMkdQUiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQ
UiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgYWRk
QnJhbmNoKG1faml0LmJyYW5jaFB0cihjb25kaXRpb24sIG9wMUdQUiwgb3AyR1BSKSwgdGFrZW4p
OwogICAgIGlmIChub3RUYWtlbiAhPSAobV9ibG9jayArIDEpKQpAQCAtMTA1OSwxMjggKzEwNTks
MTI4IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAg
UHJlZGljdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0
aW9uKCk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJl
bG93LCBKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKICAgICAgICAgZWxzZSBpZiAoaXNBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwg
R1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0
ZUFycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgdGVtcC5ncHIoKSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0ludDhBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50OEFy
cmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0ludDE2QXJy
YXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jhcnkg
dGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0
Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCks
IEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigp
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQx
NkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0ludDMy
QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3Jh
cnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFk
ZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lz
dGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3By
KCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5p
bnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc1Vp
bnQ4QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1w
b3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6
OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAu
Z3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1w
LmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgp
LT51aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChp
c1VpbnQxNkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBp
bGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNl
IGlmIChpc1VpbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86
OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLm1f
dnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5n
bG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0Zsb2F0MzJBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9h
ZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigp
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBH
UFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0Zsb2F0NjRBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlw
ZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1w
LmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJy
YXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpLm1f
dnB0cikpKTsKICAgICAgICAgfQogI2Vsc2UKICAgICAgICAgaWYgKGlzSW50MzJQcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
SW50MzJUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9u
KHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsK
ICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdp
c3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
dGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRy
KSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRU
eXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAg
ICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1w
LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCks
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0
ZUFycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9y
KHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJvb2xl
YW5UYWcpKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW50OEFycmF5UHJlZGljdGlvbihwcmVkaWN0
ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAg
ICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0
ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3By
KCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihK
U1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVy
OjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3By
KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmlu
dDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQx
NkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRh
Z0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFn
KSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRl
bXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAgICAg
bV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRl
bXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsK
ICAgICAgICAgfSBlbHNlIGlmIChpc0ludDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxv
YWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJh
eURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVu
Y291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJy
YXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzVWludDhBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdw
cigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdw
cigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNVaW50MTZBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsK
ICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQu
bG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7
Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2Vs
bFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZv
cih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURl
c2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291
bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnVpbnQxNkFycmF5
RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSAgZWxzZSBpZiAoaXNVaW50MzJBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3Io
dmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdw
cigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0
LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdw
cigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciht
X2ppdC5nbG9iYWxEYXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAg
ICAgICAgfSAgZWxzZSBpZiAoaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUp
KSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1f
aml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3By
KCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxv
YWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFy
cmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSks
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQz
MkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKICAgICAgICAgfSAgIGVsc2UgaWYgKGlzRmxv
YXQ2NEFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6
OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxs
VGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwogICAgICAgICAg
ICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxSZWdpc3Rlciks
IHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIp
KSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKS5tX3Zw
dHIpKSk7CiAgICAgICAgIH0gCiAjZW5kaWYKICAgICB9CkBAIC0xMzU0LDEzICsxMzU0LDEzIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRDaGFyQ29kZUEKICAgICAKICAgICBpZiAo
IWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkgewogICAgICAgICBBU1NFUlQoIShhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgJiBQ
cmVkaWN0U3RyaW5nKSk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBub1Jlc3Vs
dChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyB1bnNp
Z25lZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5k
IGluZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1
YWwsIGluZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdSZWcsIEpTU3RyaW5n
OjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFi
b3ZlT3JFcXVhbCwgaW5kZXhSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cmluZ1JlZywg
SlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpKSk7CiAKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRj
aCh0aGlzKTsKICAgICBHUFJSZWcgc2NyYXRjaFJlZyA9IHNjcmF0Y2guZ3ByKCk7CkBAIC0xMzkz
LDEzICsxMzkzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QK
IAogICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKSB7CiAgICAgICAgIEFTU0VSVCghKGF0KG5vZGUuY2hpbGQxKCkpLnByZWRp
Y3Rpb24oKSAmIFByZWRpY3RTdHJpbmcpKTsKLSAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVF
eGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAg
ICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAog
ICAgIC8vIHVuc2lnbmVkIGNvbXBhcmlzb24gc28gd2UgY2FuIGZpbHRlciBvdXQgbmVnYXRpdmUg
aW5kaWNlcyBhbmQgaW5kaWNlcyB0aGF0IGFyZSB0b28gbGFyZ2UKLSAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VS
ZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOworICAgIHNwZWN1bGF0aW9uQ2hlY2so
VW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGJhc2VSZWcsIEpTU3RyaW5nOjpvZmZzZXRPZkxlbmd0aCgpKSkpOwogCiAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgR1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdw
cigpOwpAQCAtMTQxNyw3ICsxNDE3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdl
dEJ5VmFsT25TdAogICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0
b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNUd28sIDApLCBzY3Jh
dGNoUmVnKTsKIAogICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhc2NpaSBjaGFyYWN0ZXJzCi0gICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2hSZWcsIFRydXN0ZWRJbW0zMigweDEw
MCkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHNjcmF0
Y2hSZWcsIFRydXN0ZWRJbW0zMigweDEwMCkpKTsKIAogICAgIC8vIDggYml0IHN0cmluZyB2YWx1
ZXMgZG9uJ3QgbmVlZCB0aGUgaXNBU0NJSSBjaGVjay4KICAgICBjb250OEJpdC5saW5rKCZtX2pp
dCk7CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0
QnlWYWxPblN0CiAgICAgR1BSUmVnIHNtYWxsU3RyaW5nc1JlZyA9IHNtYWxsU3RyaW5ncy5ncHIo
KTsKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ3MoKSksIHNtYWxs
U3RyaW5nc1JlZyk7CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHNtYWxsU3RyaW5nc1JlZywgc2NyYXRjaFJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCAw
KSwgc2NyYXRjaFJlZyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykp
OworICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoUmVnKSk7
CiAgICAgY2VsbFJlc3VsdChzY3JhdGNoUmVnLCBtX2NvbXBpbGVJbmRleCk7CiB9CiAKQEAgLTE0
OTUsMTQgKzE0OTUsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9y
QgogICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMoKTsKICAgICAKICAgICBp
ZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUoYmFzZUluZGV4KS5tX3R5
cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKKyAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
KSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CiAgICAgR1BSVGVtcG9y
YXJ5IHZhbHVlOwogICAgIEdQUlJlZyB2YWx1ZUdQUjsKIAogICAgIGlmIChhdCh2YWx1ZUluZGV4
KS5pc0NvbnN0YW50KCkpIHsKICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gdmFsdWVPZkpTQ29u
c3RhbnQodmFsdWVJbmRleCk7CiAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKSB7Ci0g
ICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICBub1Jlc3VsdChtX2Nv
bXBpbGVJbmRleCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTE1NjMsNyAr
MTU2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uQnkKICAgICBH
UFJSZWcgcHJvcGVydHlSZWcgPSBwcm9wZXJ0eS5ncHIoKTsKIAogICAgIGlmICghaXNCeXRlQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKSB7Ci0g
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNTc0LDcgKzE1NzQsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0J5dGVBcnJheTo6b2Zmc2V0T2ZTdG9yYWdlKCkp
LCBzdG9yYWdlUmVnKTsKICAgICAKICAgICAvLyB1bnNpZ25lZCBjb21wYXJpc29uIHNvIHdlIGNh
biBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGluZGljZXMgdGhhdCBhcmUgdG9vIGxh
cmdlCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCeXRlQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSkp
OworICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgcHJvcGVydHlS
ZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIEJ5dGVBcnJheTo6b2Zmc2V0
T2ZTaXplKCkpKSk7CiAKICAgICBtX2ppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6VGltZXNPbmUsIEJ5dGVB
cnJheTo6b2Zmc2V0T2ZEYXRhKCkpLCBzdG9yYWdlUmVnKTsKICAgICBpbnRlZ2VyUmVzdWx0KHN0
b3JhZ2VSZWcsIG1fY29tcGlsZUluZGV4KTsKQEAgLTE1ODksNyArMTU4OSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRUeXBlZEFycmEKICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgIAogICAgIGlmIChuZWVkc1NwZWN1bGF0aW9uQ2hlY2spCi0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQUiks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGlsZDEo
KSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOwogICAgIAogICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSLCBkZXNjcmlwdG9yLm1fbGVuZ3RoT2Zmc2V0KSwgcmVzdWx0R1BSKTsK
ICAgICAKQEAgLTE2MTEsNyArMTYxMSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVH
ZXRCeVZhbE9uSW4KIAogICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVk
QXJyYXlUeXBlU3BlY0NoZWNrKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUp
OworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTY1MiwxNCArMTY1MiwxNCBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlUHV0QnlWYWxGb3JJCiAgICAgTm9kZUluZGV4IHZhbHVlSW5kZXgg
PSBub2RlLmNoaWxkMygpOwogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAh
PSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2Up
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2Vs
bChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgR1BSVGVtcG9yYXJ5IHZhbHVlOwog
ICAgIEdQUlJlZyB2YWx1ZUdQUjsKICAgICAKICAgICBpZiAoYXQodmFsdWVJbmRleCkuaXNDb25z
dGFudCgpKSB7CiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KHZh
bHVlSW5kZXgpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
KyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNzM0LDcgKzE3MzQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZsCiAgICAgCiAgICAgaWYg
KHNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzICE9IE5vVHlwZWRBcnJheVR5cGVTcGVjQ2hlY2spIHsK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwog
ICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xNzc1LDcgKzE3NzUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUHV0QnlW
YWxGb3JGCiAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZU9wKHRoaXMsIHZhbHVlSW5k
ZXgpOwogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJlcXVpcmVtZW50cyAhPSBOb1R5cGVkQXJy
YXlUeXBlU3BlY0NoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6
OnVuYm94ZWRDZWxsKGJhc2UpLCBiYXNlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFz
ZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVz
Y3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
ICAgICAKQEAgLTE4MTAsNyArMTgxMCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVJ
bnN0YW5jZU9mRm8KIHsKICAgICAvLyBDaGVjayB0aGF0IHByb3RvdHlwZSBpcyBhbiBvYmplY3Qu
CiAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b3R5cGVSZWcs
IEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoUmVnKTsKLSAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoSWZOb3RPYmplY3Qoc2Ny
YXRjaFJlZykpOworICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2hJZk5vdE9iamVjdChzY3JhdGNoUmVnKSk7CiAgICAgCiAgICAg
Ly8gSW5pdGlhbGl6ZSBzY3JhdGNoUmVnIHdpdGggdGhlIHZhbHVlIGJlaW5nIGNoZWNrZWQuCiAg
ICAgbV9qaXQubW92ZSh2YWx1ZVJlZywgc2NyYXRjaFJlZyk7CkBAIC0xOTY0LDcgKzE5NjQsNyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlU29mdE1vZHVsbyhOCiAgICAgU3BlY3VsYXRl
SW50ZWdlck9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwogICAgIEdQUlJlZyBvcDJH
cHIgPSBvcDIuZ3ByKCk7CiAKLSAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHcHIpKTsKKyAg
ICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7CiAKICNpZiBDUFUoWDg2
KSB8fCBDUFUoWDg2XzY0KQogICAgIEdQUlRlbXBvcmFyeSBlYXgodGhpcywgWDg2UmVnaXN0ZXJz
OjplYXgpOwpAQCAtMjA5MiwxMyArMjA5MiwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlQXJpdGhNdWwoTm9kCiAgICAgICAgIC8vIHRoZSBzZW1hbnRpY3MgYXJlIGFsd2F5cyBhcyBp
ZiB0aGUgbXVsdGlwbHkgaGFkIGJlZW4gcGVyZm9ybWVkIGluIHRoZSBkb3VibGUKICAgICAgICAg
Ly8gZG9tYWluLgogICAgICAgICAgICAgCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZs
b3csIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaE11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgcmVnMSwgcmVnMiwgcmVzdWx0LmdwcigpKSk7CiAgICAgICAg
ICAgICAKICAgICAgICAgLy8gQ2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIGlmIHRoZSB1c2VycyBv
ZiB0aGlzIG5vZGUgY2FyZSBhYm91dCBzdWNoIHRoaW5ncy4KICAgICAgICAgaWYgKCFub2RlQ2Fu
SWdub3JlTmVnYXRpdmVaZXJvKG5vZGUuYXJpdGhOb2RlRmxhZ3MoKSkpIHsKICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIHJlc3VsdE5vblplcm8gPSBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVkSW1tMzIoMCkpKTsKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhOZWdhdGl2ZVplcm8sIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCByZWcxLCBUcnVzdGVk
SW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcmVnMiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICByZXN1bHROb25aZXJv
LmxpbmsoJm1faml0KTsKICAgICAgICAgfQogCkBAIC0yMzIyLDcgKzIzMjIsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgUHJlZGljdGVkVHlwZSBiYXNl
UHJlZGljdGlvbiA9IGF0KG5vZGUuY2hpbGQyKCkpLnByZWRpY3Rpb24oKTsKICAgICBpZiAoIShi
YXNlUHJlZGljdGlvbiAmIFByZWRpY3RJbnQzMikgJiYgYmFzZVByZWRpY3Rpb24pIHsKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0
aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAg
ICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
MzMxLDYxICsyMzMxLDYxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRJbmRleGVk
UHIKICAgICBHUFJSZWcgc3RvcmFnZVJlZyA9IHN0b3JhZ2UuZ3ByKCk7CiAgICAgaWYgKGF0KG5v
ZGUuY2hpbGQxKCkpLnByZWRpY3Rpb24oKSA9PSBQcmVkaWN0U3RyaW5nKSB7CiAgICAgICAgIGlm
ICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5
cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdW
UHRyKSkpOwogCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
YmFzZVJlZywgSlNTdHJpbmc6Om9mZnNldE9mVmFsdWUoKSksIHN0b3JhZ2VSZWcpOwogICAgICAg
ICAKICAgICAgICAgLy8gU3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFjY2Vzc2luZyBhIHJvcGUK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZykpOworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc3RvcmFnZVJlZykpOwogCiAgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZVJlZywgU3Ry
aW5nSW1wbDo6ZGF0YU9mZnNldCgpKSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChu
b2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVCeXRlQXJyYXkoKSkgewogICAgICAgICBpZiAo
IWlzQnl0ZUFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90
eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hl
ZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0
ZUFycmF5VlB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBKU0J5dGVBcnJheTo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCBzdG9yYWdlUmVn
KTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDhB
cnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9y
ID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlm
ICghaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChi
YXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdl
T2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5z
aG91bGRTcGVjdWxhdGVJbnQxNkFycmF5KCkpIHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURl
c2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRhKCktPmludDE2QXJyYXlEZXNj
cmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNJbnQxNkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZv
ck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9y
Lm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikp
KTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
LCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBp
ZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlSW50MzJBcnJheSgpKSB7CiAgICAg
ICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzSW50MzJBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9y
YWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0
ZVVpbnQ4QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVz
Y3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURlc2NyaXB0b3IoKTsKICAg
ICAgICAgaWYgKCFpc1VpbnQ4QXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNo
aWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291
cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJl
ZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJv
eGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3Iu
bV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNo
aWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50MTZBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5
cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50
MTZBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc1VpbnQxNkFycmF5UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCks
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlw
dG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwog
ICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlVWludDMyQXJy
YXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9
IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlm
ICghaXNVaW50MzJBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVu
Ym94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3Jh
Z2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hpbGQxKCkp
LnNob3VsZFNwZWN1bGF0ZUZsb2F0MzJBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJy
YXlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5mbG9hdDMyQXJy
YXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNGbG9hdDMyQXJyYXlQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRl
c2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3Iu
bV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAg
fSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGbG9hdDY0QXJyYXko
KSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1f
aml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAo
IWlzRmxvYXQ2NEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSku
bV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5i
b3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
YmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFn
ZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICghaXNBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
YmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgIH0KICAgICBzdG9yYWdlUmVz
dWx0KHN0b3JhZ2VSZWcsIG1fY29tcGlsZUluZGV4KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDEwMjU2MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjAyOSwzNyArMjAyOSwzNyBAQCBwcml2YXRlOgogI2VuZGlmCiAKICAgICAvLyBBZGQg
YSBzcGVjdWxhdGlvbiBjaGVjayB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9p
ZCBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4
IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKKyAgICB2b2lkIHNw
ZWN1bGF0aW9uQ2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNl
LCBOb2RlSW5kZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBqdW1wVG9GYWlsKQog
ICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGpzVmFsdWVT
b3VyY2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlz
KSk7CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5hcHBlbmRPU1JFeGl0KE9TUkV4aXQoa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQudmFsdWVQcm9maWxlRm9yKG5vZGVJbmRleCksIGp1bXBU
b0ZhaWwsIHRoaXMpKTsKICAgICB9CiAgICAgLy8gQWRkIGEgc2V0IG9mIHNwZWN1bGF0aW9uIGNo
ZWNrcyB3aXRob3V0IGFkZGl0aW9uYWwgcmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKKyAgICB2b2lkIHNwZWN1bGF0aW9u
Q2hlY2soRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBOb2RlSW5k
ZXggbm9kZUluZGV4LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QmIGp1bXBzVG9GYWlsKQogICAg
IHsKICAgICAgICAgVmVjdG9yPE1hY3JvQXNzZW1ibGVyOjpKdW1wLCAxNj4gSnVtcFZlY3RvciA9
IGp1bXBzVG9GYWlsLmp1bXBzKCk7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBK
dW1wVmVjdG9yLnNpemUoKTsgKytpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhqc1Zh
bHVlU291cmNlLCBub2RlSW5kZXgsIEp1bXBWZWN0b3JbaV0pOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhraW5kLCBqc1ZhbHVlU291cmNlLCBub2RlSW5kZXgsIEp1bXBWZWN0b3JbaV0p
OwogICAgIH0KICAgICAvLyBBZGQgYSBzcGVjdWxhdGlvbiBjaGVjayB3aXRoIGFkZGl0aW9uYWwg
cmVjb3ZlcnkuCi0gICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRv
RmFpbCwgY29uc3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCisgICAgdm9pZCBzcGVj
dWxhdGlvbkNoZWNrKEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwg
Tm9kZUluZGV4IG5vZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCwgY29u
c3QgU3BlY3VsYXRpb25SZWNvdmVyeSYgcmVjb3ZlcnkpCiAgICAgewogICAgICAgICBpZiAoIW1f
Y29tcGlsZU9rYXkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIG1faml0LmNvZGVCbG9j
aygpLT5hcHBlbmRTcGVjdWxhdGlvblJlY292ZXJ5KHJlY292ZXJ5KTsKLSAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChqc1ZhbHVlU291cmNlLCBtX2ppdC52
YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQuY29kZUJs
b2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKKyAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChraW5kLCBqc1ZhbHVlU291cmNlLCBt
X2ppdC52YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcywgbV9qaXQu
Y29kZUJsb2NrKCktPm51bWJlck9mU3BlY3VsYXRpb25SZWNvdmVyaWVzKCkpKTsKICAgICB9CiAK
ICAgICAvLyBDYWxsZWQgd2hlbiB3ZSBzdGF0aWNhbGx5IGRldGVybWluZSB0aGF0IGEgc3BlY3Vs
YXRpb24gd2lsbCBmYWlsLgotICAgIHZvaWQgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24o
SlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5vZGVJbmRleCBub2RlSW5kZXgpCisgICAgdm9pZCB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihFeGl0S2luZCBraW5kLCBKU1ZhbHVlUmVncyBq
c1ZhbHVlUmVncywgTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7CiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlNwZWN1bGF0aXZlSklUIHdh
cyB0ZXJtaW5hdGVkLlxuIik7CiAjZW5kaWYKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGpzVmFsdWVSZWdz
LCBub2RlSW5kZXgsIG1faml0Lmp1bXAoKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVJlZ3MsIG5vZGVJbmRleCwgbV9qaXQuanVtcCgpKTsKICAgICAgICAgbV9jb21w
aWxlT2theSA9IGZhbHNlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuY3BwCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjcsNiArNjcsOCBAQCBkb3VibGUgY291bGRUYWtlU2xvd0Nhc2VUaHJlc2hvbGQ7CiB1bnNpZ25l
ZCBsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudDsKIHVuc2lnbmVkIGNvdWxkVGFrZVNs
b3dDYXNlTWluaW11bUNvdW50OwogCitkb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVu
dEV4aXRTaXRlOworCiB1bnNpZ25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2U7CiB1bnNp
Z25lZCBsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wOwogCkBAIC0xNDcsNiArMTQ5
LDggQEAgdm9pZCBpbml0aWFsaXplSGV1cmlzdGljcygpCiAgICAgU0VUKGNvdWxkVGFrZVNsb3dD
YXNlVGhyZXNob2xkLCAgICAgICAwLjA1KTsgLy8gU2hvdWxkbid0IGJlIHplcm8gYmVjYXVzZSBz
b21lIG9wcyB3aWxsIHNwdXJpb3VzbHkgdGFrZSBzbG93IGNhc2UsIGZvciBleGFtcGxlIGZvciBs
aW5raW5nIG9yIGNhY2hpbmcuCiAgICAgU0VUKGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNv
dW50LCAxMDApOwogICAgIFNFVChjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1Db3VudCwgICAgMTAp
OworICAgIAorICAgIFNFVChvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUsIDAu
Myk7CiAKICAgICBTRVQobGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlLCAgICAgICAgMjApOwog
ICAgIFNFVChsYXJnZUZhaWxDb3VudFRocmVzaG9sZEJhc2VGb3JMb29wLCAxKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHJldmlzaW9uIDEwMjU2
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0hldXJpc3RpY3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBleHRlcm4gZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNl
VGhyZXNob2xkCiBleHRlcm4gdW5zaWduZWQgbGlrZWx5VG9UYWtlU2xvd0Nhc2VNaW5pbXVtQ291
bnQ7CiBleHRlcm4gdW5zaWduZWQgY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQ7CiAKK2V4
dGVybiBkb3VibGUgb3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlOworCiBleHRl
cm4gdW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlOwogZXh0ZXJuIHVuc2lnbmVk
IGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZUZvckxvb3A7CiAK
</data>
<flag name="commit-queue"
          id="118863"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>118976</attachid>
            <date>2011-12-13 01:33:36 -0800</date>
            <delta_ts>2011-12-13 11:50:06 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>countdfgfail_patch_8.diff</filename>
            <type>text/plain</type>
            <size>158713</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTAyNjYxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNiBA
QAorMjAxMS0xMi0xMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IERGRyBzaG91bGQga25vdyBleGFjdGx5IHdoeSByZWNvbXBpbGF0aW9uIHdhcyB0cmlnZ2VyZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc0MzYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBF
YWNoIE9TUiBleGl0IGlzIG5vdyBpbmRpdmlkdWFsbHkgY291bnRlZCwgYXMgd2VsbCBhcyBjb3Vu
dGluZyB0aGUgdG90YWwgbnVtYmVyIAorICAgICAgICBvZiBPU1IgZXhpdHMgdGhhdCBvY2N1cnJl
ZCBpbiBhIGNvZGUgYmxvY2suIElmIHJlY29tcGlsYXRpb24gaXMgdHJpZ2dlcmVkLCB3ZQorICAg
ICAgICBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIE9TUiBleGl0IHNpdGVzIHRoYXQgbWFrZSB1
cCBhIHN1ZmZpY2llbnRseSBsYXJnZQorICAgICAgICBwb3J0aW9uIG9mIHRoZSB0b3RhbCBPU1Ig
ZXhpdHMgdGhhdCBvY2N1cnJlZC4gRm9yIGFueSBzdWNoIE9TUiBleGl0IHNpdGVzLCB3ZQorICAg
ICAgICBhZGQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgc2l0ZSAoYnl0ZWNvZGUgaW5kZXgsIGtpbmQp
IHRvIGEgZGF0YSBzdHJ1Y3R1cmUgaW4gdGhlCisgICAgICAgIGNvcnJlc3BvbmRpbmcgYmFzZWxp
bmUgQ29kZUJsb2NrLiBUaGVuLCB3aGVuIHdlIHJlY29tcGlsZSB0aGUgY29kZSwgd2UgaW1tZWRp
YXRlbHkKKyAgICAgICAga25vdyB3aGljaCBzcGVjdWxhdGlvbnMgd291bGQgYmUgdW53aXNlIGJh
c2VkIG9uIHRoZSBmYWN0IHRoYXQgcHJldmlvdXMgc3VjaAorICAgICAgICBzcGVjdWxhdGlvbnMg
cHJvdmVkIHRvIGJlIGZydWl0bGVzcy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgbWVhbnMgMiUg
d2luIG9uIHR3byBvZiB0aGUgU3VuU3BpZGVyIHN0cmluZyB0ZXN0cywgYSA0JSB3aW4gb24gVjgn
cyBkZWx0YWJsdWUsCisgICAgICAgIGFuZCA1JSBvbiBLcmFrZW4ncyBpbWFnaW5nLWRhcmtyb29t
LiBJdCBpcyBvbmx5IGEgbWlub3Igd2luIGluIHRoZSBhdmVyYWdlcywgbGVzcworICAgICAgICB0
aGFuIDAuNSUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtl
ZmlsZS5saXN0LmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBieXRlY29kZS9Db2Rl
QmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0
ZXMpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmFkZEZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmV4
aXRQcm9maWxlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpyZW9wdGltaXplKToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKToKKyAgICAgICAgKiBi
eXRlY29kZS9ERkdFeGl0UHJvZmlsZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpERkc6OkV4
aXRQcm9maWxlOjpFeGl0UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6
On5FeGl0UHJvZmlsZSk6CisgICAgICAgIChKU0M6OkRGRzo6RXhpdFByb2ZpbGU6OmFkZCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6UXVlcnlhYmxlRXhpdFByb2ZpbGU6OlF1ZXJ5YWJsZUV4aXRQcm9m
aWxlKToKKyAgICAgICAgKEpTQzo6REZHOjpRdWVyeWFibGVFeGl0UHJvZmlsZTo6flF1ZXJ5YWJs
ZUV4aXRQcm9maWxlKToKKyAgICAgICAgKiBieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6REZHOjpleGl0S2luZFRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
REZHOjpleGl0S2luZElzQ291bnRhYmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlOjpGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4
aXRTaXRlOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6Omhhc2gp
OgorICAgICAgICAoSlNDOjpERkc6OkZyZXF1ZW50RXhpdFNpdGU6OmJ5dGVjb2RlT2Zmc2V0KToK
KyAgICAgICAgKEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjpraW5kKToKKyAgICAgICAgKEpT
Qzo6REZHOjpGcmVxdWVudEV4aXRTaXRlOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZUhhc2g6Omhhc2gpOgorICAgICAgICAoSlND
OjpERkc6OkZyZXF1ZW50RXhpdFNpdGVIYXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OkRGRzo6
UXVlcnlhYmxlRXhpdFByb2ZpbGU6Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKiBkZmcvREZHQXNz
ZW1ibHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QXNzZW1ibHlIZWxwZXJzOjpiYXNl
bGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKToKKyAgICAgICAgKEpT
Qzo6REZHOjpBc3NlbWJseUhlbHBlcnM6OmJhc2VsaW5lQ29kZUJsb2NrRm9yKToKKyAgICAgICAg
KiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjptYWtlU2FmZSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Om1h
a2VEaXZTYWZlKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyk6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFj
a0VudHJ5KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29uc2lk
ZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhp
dC5oOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVu
dEV4aXRTaXRlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21w
aWxlRXhpdCk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVBlZXBIb2xlT2JqZWN0RXF1YWxpdHkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0Q2hhckNvZGVB
dCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9u
U3RyaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5
VmFsRm9yQnl0ZUFycmF5KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25CeXRlQXJyYXkpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjpjb21waWxlR2V0VHlwZWRBcnJheUxlbmd0aCk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uSW50VHlwZWRBcnJheSk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckludFR5cGVkQXJyYXkp
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkZs
b2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVQdXRCeVZhbEZvckZsb2F0VHlwZWRBcnJheSk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVJbnN0YW5jZU9mRm9yT2JqZWN0KToKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8pOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByb3BlcnR5U3RvcmFnZSk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRp
dmVKSVQ6OnNwZWN1bGF0aW9uQ2hlY2spOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZl
SklUOjp0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbik6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnJhbmNoKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
OjpmaWxsU3BlY3VsYXRlSW50SW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YmxlKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxh
dGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwpOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbGVhbik6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGl0eSk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGVyTG9naWNhbE5vdCk6CisgICAgICAgIChK
U0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVMb2dpY2FsTm90KToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcmFuY2gpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogcnVudGltZS9IZXVyaXN0
aWNzLmNwcDoKKyAgICAgICAgKEpTQzo6SGV1cmlzdGljczo6aW5pdGlhbGl6ZUhldXJpc3RpY3Mp
OgorICAgICAgICAqIHJ1bnRpbWUvSGV1cmlzdGljcy5oOgorCiAyMDExLTEyLTEyICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIEVsaW1pbmF0ZSBEdXBsaWNh
dGUgd29yZCBhdCBhIHRpbWUgZXF1YWwgY29kZSBpbiBTdHJpbmdJbXBsLmNwcCBhbmQgU3RyaW5n
SGFzaC5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
MDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDcgQEAgU0VUKEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBB
UEkvT3BhcXVlSlNTdHJpbmcuY3BwCiAKICAgICBieXRlY29kZS9Db2RlQmxvY2suY3BwCisgICAg
Ynl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcAog
ICAgIGJ5dGVjb2RlL09wY29kZS5jcHAKICAgICBieXRlY29kZS9QcmVkaWN0ZWRUeXBlLmNwcApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9u
IDEwMjU2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3
b3JraW5nIGNvcHkpCkBAIC04NSw2ICs4NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBcCiAJU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaCBcCiAJU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0RhdGFGb3JtYXQuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0RGR0V4aXRQcm9maWxlLmNwcCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0RGR0V4aXRQcm9maWxlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9F
dmFsQ29kZUNhY2hlLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvbi5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcCBc
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTAyNTYyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmNwcCBc
CiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyU0g0LmNwcCBcCiAgICAgYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcCBcCisgICAgYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwIFwKICAgICBieXRl
Y29kZS9KdW1wVGFibGUuY3BwIFwKICAgICBieXRlY29kZS9PcGNvZGUuY3BwIFwKICAgICBieXRl
Y29kZS9QcmVkaWN0ZWRUeXBlLmNwcCBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcyLDYgKzcy
LDggQEAKIAkJMEY5NjNCMkQxM0Y4NTQwMjAwMDJEOUIyIC8qIE1ldGFBbGxvY2F0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTYzQjJBMTNGODUz
QkQwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNCMkYxM0ZDNjZCQjAwMDJEOUIyIC8qIE1ldGFB
bGxvY2F0b3JIYW5kbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTYzQjJFMTNGQzY2QUUwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9ySGFuZGxlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5NjNC
MzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5NjNCMzYxM0ZDNkZERTAwMDJEOUIyIC8qIFZh
bHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGQkMwQUU3MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJDMEFFNDE0OTZD
N0MxMDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwICovOyB9OworCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGQkQ3RTY5MTQ0Nzk5OTYwMDQ4MTMxNSAvKiBDb2RlT3JpZ2luLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkJEN0U2NzE0NDc5OThGMDA0ODEz
MTUgLyogQ29kZU9yaWdpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkMwOTc2ODE0NjhB
NkVGMDBDRjI0NDIgLyogREZHT1NSRXhpdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGQzA5NzZEMTQ2OEFCNEUwMENGMjQ0MiAvKiBERkdBc3Nl
bWJseUhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGQzA5NzZDMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODUxLDYgKzg1
Myw4IEBACiAJCTBGOTYzQjJCMTNGODUzQzcwMDAyRDlCMiAvKiBNZXRhQWxsb2NhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0b3IuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjk2M0IyRTEzRkM2NkFFMDAwMkQ5QjIgLyog
TWV0YUFsbG9jYXRvckhhbmRsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZXRhQWxsb2NhdG9ySGFuZGxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTYz
QjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGQkMwQUU0MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBERkdFeGl0UHJvZmlsZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdF
eGl0UHJvZmlsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBERkdFeGl0UHJv
ZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkJEN0U2NzE0NDc5OThGMDA0
ODEzMTUgLyogQ29kZU9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
b2RlT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzA5NzY4MTQ2OEE2
RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IERGR09TUkV4aXQuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzA5NzZCMTQ2OEFCNEEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhl
bHBlcnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQXNzZW1i
bHlIZWxwZXJzLmNwcDsgcGF0aCA9IGRmZy9ERkdBc3NlbWJseUhlbHBlcnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ2MCw2ICsyNDY0LDggQEAKIAkJOTY5QTA3OEYwRUQx
RDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQlj
aGlsZHJlbiA9ICgKKwkJCQkwRkJDMEFFNDE0OTZDN0MxMDBENEZCREQgLyogREZHRXhpdFByb2Zp
bGUuY3BwICovLAorCQkJCTBGQkMwQUU1MTQ5NkM3QzEwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmls
ZS5oICovLAogCQkJCTBGNDI2QTRBMTQ2MENENkIwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggKi8s
CiAJCQkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKIAkJ
CQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCkBAIC0y
OTgxLDYgKzI5ODcsNyBAQAogCQkJCUE3M0JFMTdFMTQ4NDIwODQwMDkxMjA0QiAvKiBUeXBlZEFy
cmF5QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTczQkUxODAxNDg0MjBBODAwOTEyMDRCIC8q
IEludGVncmFsVHlwZWRBcnJheUJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MEJEODAxMTQ4
RUE2RjIwMDExMkIyRiAvKiBJbnRyaW5zaWMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQkMwQUU4
MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0z
NTE4LDYgKzM1MjUsNyBAQAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUwMDEyMUU0RiAvKiBERkdDb2Rl
QmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3M0JFMTY4MTQ4NDIwNTIwMDkxMjA0QiAv
KiBBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzNCRTE2QTE0ODQyMDUyMDA5
MTIwNEIgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGQkMwQUU3
MTQ5NkM3QzQwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZp
c2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDI4IEBAIGJvb2wgQ29kZUJsb2Nr
OjpzaG91bGRPcHRpbWl6ZU5vdygpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShERkdfSklUKQor
dm9pZCBDb2RlQmxvY2s6OnRhbGx5RnJlcXVlbnRFeGl0U2l0ZXMoKQoreworICAgIEFTU0VSVChn
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6REZHSklUKTsKKyAgICBBU1NFUlQoYWx0ZXJuYXRpdmUo
KS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKKyAgICBBU1NFUlQoISFt
X2RmZ0RhdGEpOworICAgIAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9IGFsdGVybmF0
aXZlKCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZGZnRGF0YS0+b3Ny
RXhpdC5zaXplKCk7ICsraSkgeworICAgICAgICBERkc6Ok9TUkV4aXQmIGV4aXQgPSBtX2RmZ0Rh
dGEtPm9zckV4aXRbaV07CisgICAgICAgIAorICAgICAgICBpZiAoIWV4aXQuY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGUodGhpcywgcHJvZmlsZWRCbG9jaykpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQorICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIk9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMpIGZvciBjb2Rl
IGJsb2NrICVwIG9jY3VycmVkIGZyZXF1ZW50bHk7IGNvdW50aW5nIGFzIGZyZXF1ZW50IGV4aXQg
c2l0ZS5cbiIsIGksIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIGV4aXQubV9ub2Rl
SW5kZXgsIERGRzo6ZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRoaXMpOworI2VuZGlm
CisgICAgfQorfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCiAjaWYgRU5BQkxFKFZFUkJP
U0VfVkFMVUVfUFJPRklMRSkKIHZvaWQgQ29kZUJsb2NrOjpkdW1wVmFsdWVQcm9maWxlcygpCiB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCiAjaW5jbHVkZSAiQ29tcGFjdEpJVENvZGVNYXAuaCIKICNpbmNsdWRlICJERkdDb2RlQmxv
Y2tzLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdPU1JFbnRy
eS5oIgogI2luY2x1ZGUgIkRGR09TUkV4aXQuaCIKICNpbmNsdWRlICJFdmFsQ29kZUNhY2hlLmgi
CkBAIC03OTYsNiArNzk3LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJU
KGhhc0NvZGVPcmlnaW5zKCkpOwogICAgICAgICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaDxDb2Rl
T3JpZ2luQXRDYWxsUmV0dXJuT2Zmc2V0LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9mZnNldEZv
ckNvZGVPcmlnaW4+KGNvZGVPcmlnaW5zKCkuYmVnaW4oKSwgY29kZU9yaWdpbnMoKS5zaXplKCks
IGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS0+Y29kZU9yaWdp
bjsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhZGRGcmVxdWVudEV4aXRTaXRl
KGNvbnN0IERGRzo6RnJlcXVlbnRFeGl0U2l0ZSYgc2l0ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKGdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9leGl0UHJvZmlsZS5hZGQoc2l0ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBERkc6OkV4aXRQcm9maWxlJiBleGl0UHJvZmlsZSgpIHsgcmV0dXJuIG1fZXhpdFByb2ZpbGU7
IH0KICNlbmRpZgogCiAgICAgICAgIC8vIENvbnN0YW50IFBvb2wKQEAgLTEwNjUsNiArMTA3NCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHJlb3B0aW1pemUoKQogICAgICAgICB7
CiAgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQoKSAhPSB0aGlzKTsKKyAgICAgICAgICAg
IEFTU0VSVChyZXBsYWNlbWVudCgpLT5hbHRlcm5hdGl2ZSgpID09IHRoaXMpOworICAgICAgICAg
ICAgcmVwbGFjZW1lbnQoKS0+dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOwogICAgICAgICAgICAg
cmVwbGFjZW1lbnQoKS0+amV0dGlzb24oKTsKICAgICAgICAgICAgIGNvdW50UmVvcHRpbWl6YXRp
b24oKTsKICAgICAgICAgICAgIG9wdGltaXplQWZ0ZXJXYXJtVXAoKTsKQEAgLTEwOTMsNiArMTEw
NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xh
c3MgREZHQ29kZUJsb2NrczsKICAgICAgICAgCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgICAg
IHZvaWQgdGFsbHlGcmVxdWVudEV4aXRTaXRlcygpOworI2Vsc2UKKyAgICAgICAgdm9pZCB0YWxs
eUZyZXF1ZW50RXhpdFNpdGVzKCkgeyB9CisjZW5kaWYKKyAgICAgICAgCiAjaWYgIWRlZmluZWQo
TkRFQlVHKSB8fCBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQogICAgICAgICB2b2lkIGR1bXAoRXhl
Y1N0YXRlKiwgY29uc3QgVmVjdG9yPEluc3RydWN0aW9uPjo6Y29uc3RfaXRlcmF0b3ImIGJlZ2lu
LCBWZWN0b3I8SW5zdHJ1Y3Rpb24+Ojpjb25zdF9pdGVyYXRvciYpIGNvbnN0OwogCkBAIC0xMjEy
LDYgKzEyMjksMTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH07CiAgICAgICAgIAogICAg
ICAgICBPd25QdHI8REZHRGF0YT4gbV9kZmdEYXRhOworICAgICAgICAKKyAgICAgICAgLy8gVGhp
cyBpcyByZWxldmFudCB0byBub24tREZHIGNvZGUgYmxvY2tzIHRoYXQgc2VydmUgYXMgdGhlIHBy
b2ZpbGVkIGNvZGUgYmxvY2sKKyAgICAgICAgLy8gZm9yIERGRyBjb2RlIGJsb2Nrcy4KKyAgICAg
ICAgREZHOjpFeGl0UHJvZmlsZSBtX2V4aXRQcm9maWxlOwogI2VuZGlmCiAjaWYgRU5BQkxFKFZB
TFVFX1BST0ZJTEVSKQogICAgICAgICBTZWdtZW50ZWRWZWN0b3I8VmFsdWVQcm9maWxlLCA4PiBt
X3ZhbHVlUHJvZmlsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZH
RXhpdFByb2ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9ERkdFeGl0UHJvZmlsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCisjaW5jbHVk
ZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitFeGl0UHJvZmlsZTo6RXhpdFByb2ZpbGUoKSB7IH0KK0V4aXRQcm9maWxlOjp+RXhpdFByb2Zp
bGUoKSB7IH0KKworYm9vbCBFeGl0UHJvZmlsZTo6YWRkKGNvbnN0IEZyZXF1ZW50RXhpdFNpdGUm
IHNpdGUpCit7CisgICAgLy8gSWYgd2UndmUgbmV2ZXIgc2VlbiBhbnkgZnJlcXVlbnQgZXhpdHMg
dGhlbiBjcmVhdGUgdGhlIGxpc3QgYW5kIHB1dCB0aGlzIHNpdGUKKyAgICAvLyBpbnRvIGl0Lgor
ICAgIGlmICghbV9mcmVxdWVudEV4aXRTaXRlcykgeworICAgICAgICBtX2ZyZXF1ZW50RXhpdFNp
dGVzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPigpKTsKKyAgICAgICAg
bV9mcmVxdWVudEV4aXRTaXRlcy0+YXBwZW5kKHNpdGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgLy8gRG9uJ3QgYWRkIGl0IGlmIGl0J3MgYWxyZWFkeSB0aGVyZS4g
VGhpcyBpcyBPKG4pLCBidXQgdGhhdCdzIE9LLCBiZWNhdXNlIHdlCisgICAgLy8ga25vdyB0aGF0
IHRoZSB0b3RhbCBudW1iZXIgb2YgcGxhY2VzIHdoZXJlIGNvZGUgZXhpdHMgdGVuZHMgdG8gbm90
IGJlIGxhcmdlLAorICAgIC8vIGFuZCB0aGlzIGNvZGUgaXMgb25seSB1c2VkIHdoZW4gcmVjb21w
aWxhdGlvbiBpcyB0cmlnZ2VyZWQuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZnJl
cXVlbnRFeGl0U2l0ZXMtPnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2ZyZXF1ZW50RXhp
dFNpdGVzLT5hdChpKSA9PSBzaXRlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICAKKyAgICBtX2ZyZXF1ZW50RXhpdFNpdGVzLT5hcHBlbmQoc2l0ZSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK1F1ZXJ5YWJsZUV4aXRQcm9maWxlOjpRdWVyeWFibGVFeGl0UHJvZmlsZShj
b25zdCBFeGl0UHJvZmlsZSYgcHJvZmlsZSkKK3sKKyAgICBpZiAoIXByb2ZpbGUubV9mcmVxdWVu
dEV4aXRTaXRlcykKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcm9maWxlLm1fZnJlcXVlbnRFeGl0U2l0ZXMtPnNpemUoKTsgKytpKQorICAgICAg
ICBtX2ZyZXF1ZW50RXhpdFNpdGVzLmFkZChwcm9maWxlLm1fZnJlcXVlbnRFeGl0U2l0ZXMtPmF0
KGkpKTsKK30KKworUXVlcnlhYmxlRXhpdFByb2ZpbGU6On5RdWVyeWFibGVFeGl0UHJvZmlsZSgp
IHsgfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvREZHRXhpdFByb2ZpbGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9ERkdFeGl0UHJvZmlsZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIERGR0V4aXRQcm9maWxlX2gKKyNkZWZpbmUgREZHRXhpdFByb2Zp
bGVfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CisKK2VudW0gRXhpdEtpbmQgeworICAgIEV4aXRLaW5kVW5zZXQsCisgICAgQmFkVHlwZSwg
Ly8gV2UgZXhpdGVkIGJlY2F1c2UgYSB0eXBlIHByZWRpY3Rpb24gd2FzIHdyb25nLgorICAgIEJh
ZENhY2hlLCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBhbiBpbmxpbmUgY2FjaGUgd2FzIHdyb25nLgor
ICAgIE92ZXJmbG93LCAvLyBXZSBleGl0ZWQgYmVjYXVzZSBvZiBvdmVyZmxvdy4KKyAgICBOZWdh
dGl2ZVplcm8sIC8vIFdlIGV4aXRlZCBiZWNhdXNlIHdlIGVuY291bnRlcmVkIG5lZ2F0aXZlIHpl
cm8uCisgICAgVW5jb3VudGFibGUsIC8vIFdlIGV4aXRlZCBmb3Igbm9uZSBvZiB0aGUgYWJvdmUg
cmVhc29ucywgYW5kIHdlIHNob3VsZCBub3QgY291bnQgaXQuIE1vc3QgdXNlcyBvZiB0aGlzIHNo
b3VsZCBiZSB2aWV3ZWQgYXMgYSBGSVhNRS4KK307CisKKyNpZm5kZWYgTkRFQlVHCitpbmxpbmUg
Y29uc3QgY2hhciogZXhpdEtpbmRUb1N0cmluZyhFeGl0S2luZCBraW5kKQoreworICAgIHN3aXRj
aCAoa2luZCkgeworICAgIGNhc2UgRXhpdEtpbmRVbnNldDoKKyAgICAgICAgcmV0dXJuICJVbnNl
dCI7CisgICAgY2FzZSBCYWRUeXBlOgorICAgICAgICByZXR1cm4gIkJhZFR5cGUiOworICAgIGNh
c2UgQmFkQ2FjaGU6CisgICAgICAgIHJldHVybiAiQmFkQ2FjaGUiOworICAgIGNhc2UgT3ZlcmZs
b3c6CisgICAgICAgIHJldHVybiAiT3ZlcmZsb3ciOworICAgIGNhc2UgTmVnYXRpdmVaZXJvOgor
ICAgICAgICByZXR1cm4gIk5lZ2F0aXZlWmVybyI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuICJVbmtub3duIjsKKyAgICB9Cit9CisjZW5kaWYKKworaW5saW5lIGJvb2wgZXhpdEtpbmRJ
c0NvdW50YWJsZShFeGl0S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNh
c2UgRXhpdEtpbmRVbnNldDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgY2Fz
ZSBCYWRUeXBlOgorICAgIGNhc2UgVW5jb3VudGFibGU6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2NsYXNzIEZy
ZXF1ZW50RXhpdFNpdGUgeworcHVibGljOgorICAgIEZyZXF1ZW50RXhpdFNpdGUoKQorICAgICAg
ICA6IG1fYnl0ZWNvZGVPZmZzZXQoMCkgLy8gMCA9IGVtcHR5IHZhbHVlCisgICAgICAgICwgbV9r
aW5kKEV4aXRLaW5kVW5zZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBGcmVxdWVudEV4aXRT
aXRlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2J5dGVjb2Rl
T2Zmc2V0KDEpIC8vIDEgPSBkZWxldGVkIHZhbHVlCisgICAgICAgICwgbV9raW5kKEV4aXRLaW5k
VW5zZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBGcmVxdWVudEV4aXRTaXRl
KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBFeGl0S2luZCBraW5kKQorICAgICAgICA6IG1fYnl0
ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAg
eworICAgICAgICBBU1NFUlQoZXhpdEtpbmRJc0NvdW50YWJsZShraW5kKSk7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tp
bmQgPT0gRXhpdEtpbmRVbnNldDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZyZXF1ZW50RXhpdFNpdGUmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYnl0ZWNvZGVPZmZzZXQgPT0gb3RoZXIubV9ieXRlY29kZU9mZnNldAorICAgICAgICAgICAg
JiYgbV9raW5kID09IG90aGVyLm1fa2luZDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fYnl0ZWNvZGVP
ZmZzZXQpICsgbV9raW5kOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZWNvZGVPZmZzZXQ7IH0KKyAgICBFeGl0S2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQgPT0gRXhpdEtpbmRV
bnNldCAmJiBtX2J5dGVjb2RlT2Zmc2V0OworICAgIH0KKworcHJpdmF0ZToKKyAgICB1bnNpZ25l
ZCBtX2J5dGVjb2RlT2Zmc2V0OworICAgIEV4aXRLaW5kIG1fa2luZDsKK307CisKK3N0cnVjdCBG
cmVxdWVudEV4aXRTaXRlSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRnJl
cXVlbnRFeGl0U2l0ZSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYgYSwgY29uc3QgRnJlcXVlbnRFeGl0U2l0
ZSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpERkc6OkZyZXF1
ZW50RXhpdFNpdGU+IHsKKyAgICB0eXBlZGVmIEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlSGFz
aCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6REZHOjpGcmVxdWVudEV4aXRTaXRlPiA6
IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkRGRzo6RnJlcXVlbnRFeGl0U2l0ZT4geyB9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewor
CitjbGFzcyBRdWVyeWFibGVFeGl0UHJvZmlsZTsKKworY2xhc3MgRXhpdFByb2ZpbGUgeworcHVi
bGljOgorICAgIEV4aXRQcm9maWxlKCk7CisgICAgfkV4aXRQcm9maWxlKCk7CisgICAgCisgICAg
Ly8gQWRkIGEgbmV3IGZyZXF1ZW50IGV4aXQgc2l0ZS4gUmV0dXJuIHRydWUgaWYgdGhpcyBpcyBh
IG5ldyBvbmUsIG9yIGZhbHNlCisgICAgLy8gaWYgd2UgYWxyZWFkeSBrbmV3IGFib3V0IGl0LiBU
aGlzIGlzIGFuIE8obikgb3BlcmF0aW9uLCBiZWNhdXNlIGl0IGVycnMKKyAgICAvLyBvbiB0aGUg
c2lkZSBvZiBrZWVwaW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBjb21wYWN0LiBBbHNvLCB0aGlzIHdp
bGwgb25seQorICAgIC8vIGJlIGNhbGxlZCBhIGZpeGVkIG51bWJlciBvZiB0aW1lcyBwZXIgcmVj
b21waWxhdGlvbi4gUmVjb21waWxhdGlvbiBpcworICAgIC8vIHJhcmUgdG8gYmVnaW4gd2l0aCwg
YW5kIGltcGxpZXMgZG9pbmcgTyhuKSBvcGVyYXRpb25zIG9uIHRoZSBDb2RlQmxvY2sKKyAgICAv
LyBhbnl3YXkuCisgICAgYm9vbCBhZGQoY29uc3QgRnJlcXVlbnRFeGl0U2l0ZSYpOworICAgIAor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUXVlcnlhYmxlRXhpdFByb2ZpbGU7CisgICAgCisg
ICAgT3duUHRyPFZlY3RvcjxGcmVxdWVudEV4aXRTaXRlPiA+IG1fZnJlcXVlbnRFeGl0U2l0ZXM7
Cit9OworCitjbGFzcyBRdWVyeWFibGVFeGl0UHJvZmlsZSB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgUXVlcnlhYmxlRXhpdFByb2ZpbGUoY29uc3QgRXhpdFByb2ZpbGUmKTsKKyAgICB+UXVlcnlh
YmxlRXhpdFByb2ZpbGUoKTsKKyAgICAKKyAgICBib29sIGhhc0V4aXRTaXRlKGNvbnN0IEZyZXF1
ZW50RXhpdFNpdGUmIHNpdGUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9mcmVxdWVu
dEV4aXRTaXRlcy5maW5kKHNpdGUpICE9IG1fZnJlcXVlbnRFeGl0U2l0ZXMuZW5kKCk7CisgICAg
fQorICAgIAorICAgIGJvb2wgaGFzRXhpdFNpdGUodW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgRXhp
dEtpbmQga2luZCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBoYXNFeGl0U2l0ZShGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIGtpbmQpKTsKKyAgICB9Citwcml2YXRlOgorICAg
IEhhc2hTZXQ8RnJlcXVlbnRFeGl0U2l0ZT4gbV9mcmVxdWVudEV4aXRTaXRlczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIERGR0V4aXRQcm9maWxlX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJseUhlbHBlcnMuaAko
cmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBc3NlbWJs
eUhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDE0ICsyODQsMTkgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS0+anNFeGVj
dXRhYmxlKCktPmlzU3RyaWN0TW9kZSgpOwogICAgIH0KICAgICAKLSAgICBDb2RlQmxvY2sqIGJh
c2VsaW5lQ29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgc3Rh
dGljIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luLCBDb2RlQmxvY2sqIGJhc2VsaW5lQ29k
ZUJsb2NrKQogICAgIHsKICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSA9IGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpOwogICAgICAgICAgICAgQVNTRVJUKGV4ZWN1
dGFibGUtPnN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmRnVuY3Rpb25FeGVjdXRhYmxlOjpz
X2luZm8pOwogICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KTsKICAgICAg
ICAgfQotICAgICAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2soKTsKKyAgICAgICAgcmV0dXJu
IGJhc2VsaW5lQ29kZUJsb2NrOworICAgIH0KKyAgICAKKyAgICBDb2RlQmxvY2sqIGJhc2VsaW5l
Q29kZUJsb2NrRm9yKGNvbnN0IENvZGVPcmlnaW4mIGNvZGVPcmlnaW4pCisgICAgeworICAgICAg
ICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhj
b2RlT3JpZ2luLCBiYXNlbGluZUNvZGVCbG9jaygpKTsKICAgICB9CiAgICAgCiAgICAgQ29kZUJs
b2NrKiBiYXNlbGluZUNvZGVCbG9jaygpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTYzMSwxMSArNjMxLDEzIEBAIHByaXZhdGU6CiAKICAgICBOb2RlSW5kZXggbWFrZVNhZmUo
Tm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7Ci0gICAgICAgIGlmICghbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkp
CisgICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlU
b1Rha2VTbG93Q2FzZShtX2N1cnJlbnRJbmRleCkKKyAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxv
dykKKyAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4
aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKQogICAgICAgICAgICAgcmV0dXJu
IG5vZGVJbmRleDsKICAgICAgICAgCiAjaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAg
ICAgICBwcmludGYoIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMldSBiZWNhdXNlIHNsb3ctY2Fz
ZSBjb3VudGVyIGlzIGF0ICV1XG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhbbm9kZUluZGV4XS5v
cCksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgp
LT5tX2NvdW50ZXIpOworICAgICAgICBwcmludGYoIk1ha2luZyAlcyBAJXUgc2FmZSBhdCBiYyMl
dSBiZWNhdXNlIHNsb3ctY2FzZSBjb3VudGVyIGlzIGF0ICV1IGFuZCBleGl0IHByb2ZpbGVzIHNh
eSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobV9ncmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUlu
ZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5y
YXJlQ2FzZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRl
ciwgbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJ
bmRleCwgT3ZlcmZsb3cpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRT
aXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKTsKICNlbmRpZgogICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChtX2dyYXBoW25vZGVJbmRleF0ub3ApIHsKQEAgLTY0OCwxMiArNjUwLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBj
YXNlIEFyaXRoTXVsOgotICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+bGlrZWx5VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KSkgewor
ICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5
VG9UYWtlRGVlcGVzdFNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgICAgIHx8
IG1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5k
ZXgsIE92ZXJmbG93KSkgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKICAgICAgICAg
ICAgICAgICBwcmludGYoIk1ha2luZyBBcml0aE11bCBAJXUgdGFrZSBkZWVwZXN0IHNsb3cgY2Fz
ZS5cbiIsIG5vZGVJbmRleCk7CiAjZW5kaWYKICAgICAgICAgICAgICAgICBtX2dyYXBoW25vZGVJ
bmRleF0ubWVyZ2VBcml0aE5vZGVGbGFncyhOb2RlTWF5T3ZlcmZsb3cgfCBOb2RlTWF5TmVnWmVy
byk7Ci0gICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVu
dEluZGV4KQorICAgICAgICAgICAgICAgICAgICAgICB8fCBtX2lubGluZVN0YWNrVG9wLT5tX2V4
aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBOZWdhdGl2ZVplcm8pKSB7CiAj
aWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQogICAgICAgICAgICAgICAgIHByaW50ZigiTWFr
aW5nIEFyaXRoTXVsIEAldSB0YWtlIGZhc3RlciBzbG93IGNhc2UuXG4iLCBub2RlSW5kZXgpOwog
I2VuZGlmCkBAIC02NzksMTMgKzY4MywxNyBAQCBwcml2YXRlOgogICAgICAgICAvLyBjYXJlIGFi
b3V0IHdoZW4gdGhlIG91dGNvbWUgb2YgdGhlIGRpdmlzaW9uIGlzIG5vdCBhbiBpbnRlZ2VyLCB3
aGljaAogICAgICAgICAvLyBpcyB3aGF0IHRoZSBzcGVjaWFsIGZhc3QgY2FzZSBjb3VudGVyIHRl
bGxzIHVzLgogICAgICAgICAKLSAgICAgICAgaWYgKCFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2Zp
bGVkQmxvY2stPmxpa2VseVRvVGFrZVNwZWNpYWxGYXN0Q2FzZShtX2N1cnJlbnRJbmRleCkpCisg
ICAgICAgIGlmICghbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5saWtlbHlUb1Rh
a2VTcGVjaWFsRmFzdENhc2UobV9jdXJyZW50SW5kZXgpCisgICAgICAgICAgICAmJiAhbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3Zl
cmZsb3cpCisgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5o
YXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVnYXRpdmVaZXJvKSkKICAgICAgICAgICAgIHJl
dHVybiBub2RlSW5kZXg7CiAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
LSAgICAgICAgcHJpbnRmKCJNYWtpbmcgJXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVj
aWFsIGZhc3QtY2FzZSBjb3VudGVyIGlzIGF0ICV1XG4iLCBHcmFwaDo6b3BOYW1lKG1fZ3JhcGhb
bm9kZUluZGV4XS5vcCksIG5vZGVJbmRleCwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+c3BlY2lhbEZhc3RDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zm
c2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyKTsKKyAgICAgICAgcHJpbnRmKCJNYWtpbmcg
JXMgQCV1IHNhZmUgYXQgYmMjJXUgYmVjYXVzZSBzcGVjaWFsIGZhc3QtY2FzZSBjb3VudGVyIGlz
IGF0ICV1IGFuZCBleGl0IHByb2ZpbGVzIHNheSAlZCwgJWRcbiIsIEdyYXBoOjpvcE5hbWUobV9n
cmFwaFtub2RlSW5kZXhdLm9wKSwgbm9kZUluZGV4LCBtX2N1cnJlbnRJbmRleCwgbV9pbmxpbmVT
dGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5zcGVjaWFsRmFzdENhc2VQcm9maWxlRm9yQnl0ZWNv
ZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSwgbV9pbmxp
bmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgTmVn
YXRpdmVaZXJvKSk7CiAjZW5kaWYKICAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJdCBtaWdo
dCBiZSBwb3NzaWJsZSB0byBtYWtlIHRoaXMgbW9yZSBncmFudWxhci4gVGhlIERGRyBjZXJ0YWlu
bHkgY2FuCisgICAgICAgIC8vIGRpc3Rpbmd1aXNoIGJldHdlZW4gbmVnYXRpdmUgemVybyBhbmQg
b3ZlcmZsb3cgaW4gaXRzIGV4aXQgcHJvZmlsZXMuCiAgICAgICAgIG1fZ3JhcGhbbm9kZUluZGV4
XS5tZXJnZUFyaXRoTm9kZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyB8IE5vZGVNYXlOZWdaZXJvKTsK
ICAgICAgICAgCiAgICAgICAgIHJldHVybiBub2RlSW5kZXg7CkBAIC03OTMsNiArODAxLDggQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIFNjcmlwdEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUo
KSB7IHJldHVybiBtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCk7IH0KICAgICAgICAgCisg
ICAgICAgIFF1ZXJ5YWJsZUV4aXRQcm9maWxlIG1fZXhpdFByb2ZpbGU7CisgICAgICAgIAogICAg
ICAgICAvLyBSZW1hcHBpbmcgb2YgaWRlbnRpZmllciBhbmQgY29uc3RhbnQgbnVtYmVycyBmcm9t
IHRoZSBjb2RlIGJsb2NrIGJlaW5nCiAgICAgICAgIC8vIGlubGluZWQgKGlubGluZSBjYWxsZWUp
IHRvIHRoZSBjb2RlIGJsb2NrIHRoYXQgd2UncmUgaW5saW5pbmcgaW50bwogICAgICAgICAvLyAo
dGhlIG1hY2hpbmUgY29kZSBibG9jaywgd2hpY2ggaXMgdGhlIHRyYW5zaXRpdmUsIHRob3VnaCBu
b3QgbmVjZXNzYXJpbHkKQEAgLTg4NywxMiArODk3LDE0IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoSW50ZXJwcmUKICAgICBlbnVtIHsgQ29uc3RhbnRGdW5jdGlvbiwgTGlua2Vk
RnVuY3Rpb24sIFVua25vd25GdW5jdGlvbiB9IGNhbGxUeXBlOwogICAgICAgICAgICAgCiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZv
ciBjYWxsIGF0IEAlbHUgYmMjJXU6ICV1LyV1LlxuIiwgbV9ncmFwaC5zaXplKCksIG1fY3VycmVu
dEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPnJhcmVDYXNlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+bV9jb3VudGVyLCBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmV4ZWN1dGlvbkVudHJ5Q291bnQoKSk7CisgICAgcHJp
bnRmKCJTbG93IGNhc2UgY291bnQgZm9yIGNhbGwgYXQgQCVsdSBiYyMldTogJXUvJXU7IGV4aXQg
cHJvZmlsZTogJWQuXG4iLCBtX2dyYXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5l
U3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZz
ZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+ZXhlY3V0aW9uRW50cnlDb3VudCgpLCBtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQ
cm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpOwogI2VuZGlmCiAg
ICAgICAgICAgICAKICAgICBpZiAobV9ncmFwaC5pc0Z1bmN0aW9uQ29uc3RhbnQobV9jb2RlQmxv
Y2ssIGNhbGxUYXJnZXQpKQogICAgICAgICBjYWxsVHlwZSA9IENvbnN0YW50RnVuY3Rpb247Ci0g
ICAgZWxzZSBpZiAoISFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldENhbGxM
aW5rSW5mbyhtX2N1cnJlbnRJbmRleCkubGFzdFNlZW5DYWxsZWUgJiYgIW1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKQor
ICAgIGVsc2UgaWYgKCEhbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRDYWxs
TGlua0luZm8obV9jdXJyZW50SW5kZXgpLmxhc3RTZWVuQ2FsbGVlCisgICAgICAgICAgICAgJiYg
IW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Y291bGRUYWtlU2xvd0Nhc2UobV9j
dXJyZW50SW5kZXgpCisgICAgICAgICAgICAgJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fZXhpdFBy
b2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIEJhZENhY2hlKSkKICAgICAgICAgY2Fs
bFR5cGUgPSBMaW5rZWRGdW5jdGlvbjsKICAgICBlbHNlCiAgICAgICAgIGNhbGxUeXBlID0gVW5r
bm93bkZ1bmN0aW9uOwpAQCAtMTE2Nyw3ICsxMTc5LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9y
dHNGbG9hdGluZ1BvaW50QWJzKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAg
ICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhBYnMsIE9wSW5mbyhOb2RlVXNl
Qm90dG9tKSwgZ2V0VG9OdW1iZXIocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgx
KSkpKTsKKyAgICAgICAgTm9kZUluZGV4IG5vZGVJbmRleCA9IGFkZFRvR3JhcGgoQXJpdGhBYnMs
IE9wSW5mbyhOb2RlVXNlQm90dG9tKSwgZ2V0VG9OdW1iZXIocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgT3ZlcmZsb3cpKQorICAgICAgICAg
ICAgbV9ncmFwaFtub2RlSW5kZXhdLm1lcmdlQXJpdGhOb2RlRmxhZ3MoTm9kZU1heU92ZXJmbG93
KTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGVJbmRleCk7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIApAQCAtMTY2OCw3ICsxNjgzLDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvJiBz
dHViSW5mbyA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+Z2V0U3R1YkluZm8o
bV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgTWV0aG9kQ2FsbExpbmtJbmZvJiBtZXRob2RD
YWxsID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5nZXRNZXRob2RDYWxsTGlu
a0luZm8obV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobWV0
aG9kQ2FsbC5zZWVuICYmICEhbWV0aG9kQ2FsbC5jYWNoZWRTdHJ1Y3R1cmUgJiYgIXN0dWJJbmZv
LnNlZW4pIHsKKyAgICAgICAgICAgIGlmIChtZXRob2RDYWxsLnNlZW4KKyAgICAgICAgICAgICAg
ICAmJiAhIW1ldGhvZENhbGwuY2FjaGVkU3RydWN0dXJlCisgICAgICAgICAgICAgICAgJiYgIXN0
dWJJbmZvLnNlZW4KKyAgICAgICAgICAgICAgICAmJiAhbV9pbmxpbmVTdGFja1RvcC0+bV9leGl0
UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwgQmFkQ2FjaGUpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gSXQncyBtb25vbW9ycGhpYyBhcyBmYXIgYXMgd2UgY2FuIHRlbGwsIHNpbmNl
IHRoZSBtZXRob2RfY2hlY2sgd2FzIGxpbmtlZAogICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGUg
c2xvdyBwYXRoIChpLmUuIHRoZSBub3JtYWwgZ2V0X2J5X2lkKSBuZXZlciBmaXJlZC4KIApAQCAt
MTcxMSwxMiArMTcyOSwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8gPSBtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmdldFN0dWJJbmZvKG1fY3VycmVudEluZGV4KTsKICAg
ICAgICAgICAgIAogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgIHBy
aW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBHZXRCeUlkIEAlbHUgYmMjJXU6ICV1XG4iLCBtX2dy
YXBoLnNpemUoKSwgbV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+cmFyZUNhc2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5t
X2NvdW50ZXIpOworICAgICAgICAgICAgcHJpbnRmKCJTbG93IGNhc2UgY291bnQgZm9yIEdldEJ5
SWQgQCVsdSBiYyMldTogJXU7IGV4aXQgcHJvZmlsZTogJWRcbiIsIG1fZ3JhcGguc2l6ZSgpLCBt
X2N1cnJlbnRJbmRleCwgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5yYXJlQ2Fz
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCktPm1fY291bnRlciwgbV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
QmFkQ2FjaGUpKTsKICNlbmRpZgogICAgICAgICAgICAgCiAgICAgICAgICAgICBzaXplX3Qgb2Zm
c2V0ID0gbm90Rm91bmQ7CiAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQgc3RydWN0dXJlU2V0Owot
ICAgICAgICAgICAgaWYgKHN0dWJJbmZvLnNlZW4gJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bGlrZWx5VG9UYWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7CisgICAg
ICAgICAgICBpZiAoc3R1YkluZm8uc2VlbgorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0
YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudElu
ZGV4KQorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBCYWRDYWNoZSkpIHsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHN0dWJJbmZvLmFjY2Vzc1R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIGFj
Y2Vzc19nZXRfYnlfaWRfc2VsZjogewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IHN0dWJJbmZvLnUuZ2V0QnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQo
KTsKQEAgLTE4MDUsMTAgKzE4MjUsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgYm9vbCBhbHJlYWR5R2VuZXJhdGVkID0gZmFsc2U7CiAg
ICAgICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICBw
cmludGYoIlNsb3cgY2FzZSBjb3VudCBmb3IgUHV0QnlJZCBAJWx1IGJjIyV1OiAldVxuIiwgbV9n
cmFwaC5zaXplKCksIG1fY3VycmVudEluZGV4LCBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPnJhcmVDYXNlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudEluZGV4KS0+
bV9jb3VudGVyKTsKKyAgICAgICAgICAgIHByaW50ZigiU2xvdyBjYXNlIGNvdW50IGZvciBQdXRC
eUlkIEAlbHUgYmMjJXU6ICV1OyBleGl0IHByb2ZpbGU6ICVkXG4iLCBtX2dyYXBoLnNpemUoKSwg
bV9jdXJyZW50SW5kZXgsIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+cmFyZUNh
c2VQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpLT5tX2NvdW50ZXIsIG1f
aW5saW5lU3RhY2tUb3AtPm1fZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgs
IEJhZENhY2hlKSk7CiAjZW5kaWYgICAgICAgICAgICAKIAotICAgICAgICAgICAgaWYgKHN0dWJJ
bmZvLnNlZW4gJiYgIW1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bGlrZWx5VG9U
YWtlU2xvd0Nhc2UobV9jdXJyZW50SW5kZXgpKSB7CisgICAgICAgICAgICBpZiAoc3R1YkluZm8u
c2VlbgorICAgICAgICAgICAgICAgICYmICFtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPmxpa2VseVRvVGFrZVNsb3dDYXNlKG1fY3VycmVudEluZGV4KQorICAgICAgICAgICAgICAg
ICYmICFtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVu
dEluZGV4LCBCYWRDYWNoZSkpIHsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0dWJJbmZvLmFj
Y2Vzc1R5cGUpIHsKICAgICAgICAgICAgICAgICBjYXNlIGFjY2Vzc19wdXRfYnlfaWRfcmVwbGFj
ZTogewogICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZv
LnUucHV0QnlJZFJlcGxhY2UuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKQEAgLTI0MjUsNiAr
MjQ0Nyw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAs
IG1fY29kZUJsb2NrKGNvZGVCbG9jaykKICAgICAsIG1fcHJvZmlsZWRCbG9jayhwcm9maWxlZEJs
b2NrKQogICAgICwgbV9jYWxsZWVWUihjYWxsZWVWUikKKyAgICAsIG1fZXhpdFByb2ZpbGUocHJv
ZmlsZWRCbG9jay0+ZXhpdFByb2ZpbGUoKSkKICAgICAsIG1fY2FsbHNpdGVCbG9ja0hlYWQoY2Fs
bHNpdGVCbG9ja0hlYWQpCiAgICAgLCBtX3JldHVyblZhbHVlKHJldHVyblZhbHVlVlIpCiAgICAg
LCBtX2RpZFJldHVybihmYWxzZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTcgKzI4LDIwIEBACiAKICNp
ZiBFTkFCTEUoREZHX0pJVCkKIAorI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgogI2lu
Y2x1ZGUgIkRGR1NwZWN1bGF0aXZlSklULmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKIAotT1NSRXhpdDo6T1NSRXhpdChKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIFZh
bHVlUHJvZmlsZSogdmFsdWVQcm9maWxlLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjaywgU3Bl
Y3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKK09TUkV4aXQ6Ok9TUkV4
aXQoRXhpdEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBWYWx1ZVByb2Zp
bGUqIHZhbHVlUHJvZmlsZSwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY2hlY2ssIFNwZWN1bGF0aXZl
SklUKiBqaXQsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCiAgICAgOiBtX2pzVmFsdWVTb3VyY2Uo
anNWYWx1ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAs
IG1fY2hlY2soY2hlY2spCiAgICAgLCBtX25vZGVJbmRleChqaXQtPm1fY29tcGlsZUluZGV4KQog
ICAgICwgbV9jb2RlT3JpZ2luKGppdC0+bV9jb2RlT3JpZ2luRm9yT1NSKQogICAgICwgbV9yZWNv
dmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fY291
bnQoMCkKICAgICAsIG1fYXJndW1lbnRzKGppdC0+bV9hcmd1bWVudHMuc2l6ZSgpKQogICAgICwg
bV92YXJpYWJsZXMoaml0LT5tX3ZhcmlhYmxlcy5zaXplKCkpCiAgICAgLCBtX2xhc3RTZXRPcGVy
YW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKQEAgLTYxLDYgKzY0LDE0IEBAIHZvaWQgT1NSRXhp
dDo6ZHVtcChGSUxFKiBvdXQpIGNvbnN0CiB9CiAjZW5kaWYKIAorYm9vbCBPU1JFeGl0Ojpjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRv
dWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPnNwZWN1bGF0aXZlRmFpbENvdW50ZXIoKSA8
PSBIZXVyaXN0aWNzOjpvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gQXNzZW1ibHlIZWxwZXJzOjpiYXNl
bGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKG1fY29kZU9yaWdpbiwg
cHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKEZyZXF1ZW50RXhpdFNpdGUo
bV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCkpOworfQorCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIK
ICNpbmNsdWRlICJERkdDb3JyZWN0YWJsZUp1bXBQb2ludC5oIgorI2luY2x1ZGUgIkRGR0V4aXRQ
cm9maWxlLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgogI2luY2x1ZGUgIkRGR09wZXJhbmRz
LmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKQEAgLTgxLDcgKzgyLDcgQEAgcHJpdmF0
ZToKIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRp
dmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgogc3RydWN0IE9TUkV4aXQg
ewotICAgIE9TUkV4aXQoSlNWYWx1ZVNvdXJjZSwgVmFsdWVQcm9maWxlKiwgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IDApOwor
ICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIFZhbHVlUHJvZmlsZSosIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgg
PSAwKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwogICAgIApAQCAt
OTQsNiArOTUsOSBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNv
dmVyeUluZGV4OwogICAgIAorICAgIEV4aXRLaW5kIG1fa2luZDsKKyAgICB1aW50MzJfdCBtX2Nv
dW50OworICAgIAogICAgIC8vIENvbnZlbmllbnQgd2F5IG9mIGl0ZXJhdGluZyBvdmVyIFZhbHVl
UmVjb3ZlcmllcyB3aGlsZSBiZWluZwogICAgIC8vIGdlbmVyaWMgb3ZlciBhcmd1bWVudCB2ZXJz
dXMgdmFyaWFibGUuCiAgICAgaW50IG51bWJlck9mUmVjb3ZlcmllcygpIGNvbnN0IHsgcmV0dXJu
IG1fYXJndW1lbnRzLnNpemUoKSArIG1fdmFyaWFibGVzLnNpemUoKTsgfQpAQCAtMTIwLDYgKzEy
NCwxMyBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgICAgIHJldHVybiBpbmRleCAtIG1fYXJndW1l
bnRzLnNpemUoKTsKICAgICB9CiAgICAgCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENv
ZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50
YWJsZShtX2tpbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmls
ZWRDb2RlQmxvY2spOworICAgIH0KKyAgICAKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBkdW1w
KEZJTEUqIG91dCkgY29uc3Q7CiAjZW5kaWYKQEAgLTEyNyw2ICsxMzgsOSBAQCBzdHJ1Y3QgT1NS
RXhpdCB7CiAgICAgVmVjdG9yPFZhbHVlUmVjb3ZlcnksIDA+IG1fYXJndW1lbnRzOwogICAgIFZl
Y3RvcjxWYWx1ZVJlY292ZXJ5LCAwPiBtX3ZhcmlhYmxlczsKICAgICBpbnQgbV9sYXN0U2V0T3Bl
cmFuZDsKKworcHJpdmF0ZToKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jayk7CiB9OwogCiAjaWYgREZHX0VOQUJMRShWRVJCT1NFX1NQRUNVTEFUSU9OX0ZBSUxVUkUp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjMyXzY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjMyXzY0LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
MSw2ICs0NTEsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAg
ICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0aGUgY291bnRlciB0bwog
ICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2FybVVwKCkuCiAgICAgCisg
ICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigxKSwgQXNzZW1ibHlIZWxwZXJz
OjpBYnNvbHV0ZUFkZHJlc3MoJmV4aXQubV9jb3VudCkpOworICAgIAogICAgIG1faml0Lm1vdmUo
QXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVCbG9jaygpKSwgR1BSSW5m
bzo6cmVnVDApOwogICAgIAogICAgIG1faml0LmxvYWQzMihBc3NlbWJseUhlbHBlcnM6OkFkZHJl
c3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVjdWxhdGl2ZUZhaWxDb3Vu
dGVyKCkpLCBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ2MSw2ICs0NjEsOCBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGls
ZUV4aXQoY29uc3QgCiAgICAgLy8gICAgIGNvdW50ZXIgdG8gMDsgb3RoZXJ3aXNlIHdlIHNldCB0
aGUgY291bnRlciB0bwogICAgIC8vICAgICBjb3VudGVyVmFsdWVGb3JPcHRpbWl6ZUFmdGVyV2Fy
bVVwKCkuCiAgICAgCisgICAgbV9qaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpJbW0zMigxKSwg
QXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3MoJmV4aXQubV9jb3VudCkpOworICAgIAog
ICAgIG1faml0Lm1vdmUoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1faml0LmNvZGVC
bG9jaygpKSwgR1BSSW5mbzo6cmVnVDApOwogICAgIAogICAgIG1faml0LmxvYWQzMihBc3NlbWJs
eUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6cmVnVDAsIENvZGVCbG9jazo6b2Zmc2V0T2ZTcGVj
dWxhdGl2ZUZhaWxDb3VudGVyKCkpLCBHUFJJbmZvOjpyZWdUMik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAx
MDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHJlY292ZXJ5ID0gJmNvZGVCbG9jay0+c3BlY3VsYXRp
b25SZWNvdmVyeShleGl0Lm1fcmVjb3ZlcnlJbmRleCAtIDEpOwogCiAjaWYgREZHX0VOQUJMRShE
RUJVR19WRVJCT1NFKQotICAgIGZwcmludGYoc3RkZXJyLCAiR2VuZXJhdGluZyBPU1IgZXhpdCAj
JXUgZm9yIGNvZGUgYmxvY2sgJXAuXG4iLCBleGl0SW5kZXgsIGNvZGVCbG9jayk7CisgICAgZnBy
aW50ZihzdGRlcnIsICJHZW5lcmF0aW5nIE9TUiBleGl0ICMldSAoYmMjJXUsIEAldSwgJXMpIGZv
ciBjb2RlIGJsb2NrICVwLlxuIiwgZXhpdEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4LCBleGl0Lm1fbm9kZUluZGV4LCBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwg
Y29kZUJsb2NrKTsKICNlbmRpZgogCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMDI1
NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQxLDcgKzEzNDEsNyBAQCBHUFJSZWcgU3BlY3VsYXRp
dmVKSVQ6OmZpbGxTcGVjdWxhdGVJbnRJCiAgICAgICAgICAgICAgICAgcmV0dXJuRm9ybWF0ID0g
RGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVy
bkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICAgICAgcmV0dXJuIGFsbG9jYXRl
KCk7CiAgICAgICAgIH0KQEAgLTEzNTMsNyArMTM1Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUludEkKIAogICAgICAgICAvLyBJZiB3ZSBrbm93IHRoaXMgd2FzIHNw
aWxsZWQgYXMgYW4gaW50ZWdlciB3ZSBjYW4gZmlsbCB3aXRob3V0IGNoZWNraW5nLgogICAgICAg
ICBpZiAoc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEpTSW50ZWdlcikKLSAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0
dWFsUmVnaXN0ZXIpKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6SW50MzJUYWcpKSk7CiAKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpw
YXlsb2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIGluZm8uZmlsbEludGVn
ZXIoZ3ByKTsKQEAgLTEzNjksNyArMTM2OSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bFNwZWN1bGF0ZUludEkKICAgICAgICAgbV9ncHJzLmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9n
cHJzLmxvY2socGF5bG9hZEdQUik7CiAgICAgICAgIGlmIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkg
IT0gRGF0YUZvcm1hdEpTSW50ZWdlcikgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOwogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5y
ZWxlYXNlKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxvYWRHUFIpOwpAQCAt
MTM5Myw3ICsxMzkzLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50
SQogICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2Vs
bDoKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKLSAgICAgICAgdGVybWluYXRlU3Bl
Y3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRlZ2VyOwogICAgICAgICBy
ZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CkBAIC0xNDQ0LDcgKzE0NDQsNyBAQCBGUFJSZWcgU3Bl
Y3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAgICAgICAgaW5mby5maWxs
RG91YmxlKGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsKICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
ICAgICAgICByZXR1cm4gZnByQWxsb2NhdGUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKQEAgLTE0NjAsNyArMTQ2MCw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZURvdWIKIAogICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7CiAg
ICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVy
KSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3Zl
T3JFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9y
RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoSklU
Q29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKICAgICAgICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAKQEAg
LTE0ODIsNyArMTQ4Miw3IEBAIEZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURv
dWIKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBjYXNlIERhdGFGb3JtYXRD
ZWxsOgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygp
LCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50
YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuIGZwckFsbG9jYXRl
KCk7CiAKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CkBAIC0xNTAxLDcgKzE1MDEsNyBAQCBG
UFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgIGlmIChpbmZv
LnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTSW50ZWdlcikgewogICAgICAgICAgICAg
RlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRhZ0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgdGFnR1BSLCBUcnVzdGVk
SW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKICAgICAgICAgICAgIHVuYm94RG91YmxlKHRh
Z0dQUiwgcGF5bG9hZEdQUiwgZnByLCBzY3JhdGNoLmZwcigpKTsKICAgICAgICAgICAgIGhhc1Vu
Ym94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgICAgICBpc0ludGVnZXIubGluaygm
bV9qaXQpOwpAQCAtMTU2NCwxMiArMTU2NCwxMiBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVDZWxsCiAgICAgICAgICAgICAgICAgaW5mby5maWxsQ2VsbChncHIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiBncHI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB0ZXJt
aW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAg
ICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSk7CiAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICB9CiAgICAg
ICAgIEFTU0VSVChpbmZvLnNwaWxsRm9ybWF0KCkgJiBEYXRhRm9ybWF0SlMpOwogICAgICAgICBp
ZiAoaW5mby5zcGlsbEZvcm1hdCgpICE9IERhdGFGb3JtYXRKU0NlbGwpCi0gICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Iodmly
dHVhbFJlZ2lzdGVyKSksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBUcnVzdGVkSW1tMzIoSlNW
YWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIGdwcik7CiAgICAgICAgIG1fZ3Bycy5yZXRhaW4oZ3By
LCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVkKTsKICAgICAgICAgaW5mby5maWxs
Q2VsbChncHIpOwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQ2VsbAogICAgICAgICBtX2dwcnMubG9jayh0YWdHUFIpOwogICAgICAgICBt
X2dwcnMubG9jayhwYXlsb2FkR1BSKTsKICAgICAgICAgaWYgKGluZm8uc3BpbGxGb3JtYXQoKSAh
PSBEYXRhRm9ybWF0SlNDZWxsKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncyh0YWdHUFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
dGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7
CiAgICAgICAgIG1fZ3Bycy51bmxvY2sodGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2Uo
dGFnR1BSKTsKICAgICAgICAgbV9ncHJzLnJlbGVhc2UocGF5bG9hZEdQUik7CkBAIC0xNjA0LDcg
KzE2MDQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0YUZvcm1hdEpTQm9vbGVhbjoKICAg
ICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOiB7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZl
RXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1
bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAg
ICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAKQEAgLTE2MzcsMTQgKzE2MzcsMTQgQEAg
R1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAgICAgICAg
IGluZm8uZmlsbEJvb2xlYW4oZ3ByKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAg
cmV0dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgp
ICYgRGF0YUZvcm1hdEpTKTsKICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwogCiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0
KCkgIT0gRGF0YUZvcm1hdEpTQm9vbGVhbikKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFs
dWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSksIG5vZGVJ
bmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxl
cjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFu
VGFnKSkpOwogCiAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2
aXJ0dWFsUmVnaXN0ZXIpLCBncHIpOwogICAgICAgICBpbmZvLmZpbGxCb29sZWFuKGdwcik7CkBA
IC0xNjY0LDcgKzE2NjQsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVC
b29sCiAgICAgICAgIG1fZ3Bycy5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5sb2NrKHBh
eWxvYWRHUFIpOwogICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpICE9IERhdGFGb3Jt
YXRKU0Jvb2xlYW4pCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCB0YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkp
OworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh0YWdH
UFIsIHBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsK
IAogICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7CiAgICAgICAgIG1fZ3Bycy5yZWxlYXNl
KHRhZ0dQUik7CkBAIC0xNjgwLDcgKzE2ODAsNyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZp
bGxTcGVjdWxhdGVCb29sCiAgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgogICAgIGNhc2UgRGF0
YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRDZWxsOiB7Ci0gICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAg
IHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUpOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CiAgICAgICAgIApA
QCAtMTcyMSw5ICsxNzIxLDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdEVx
dWFsaQogICAgIEdQUlJlZyByZXN1bHRQYXlsb2FkR1BSID0gcmVzdWx0UGF5bG9hZC5ncHIoKTsK
ICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDFHUFIpLCBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKG9wMUdQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZw
dHIpKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6
dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AyR1BSKSwgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDJHUFIpLCBub2RlLmNo
aWxkMigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2
cHRyKSkpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGZhbHNlQ2FzZSA9IG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIG9wMUdQUiwgb3AyR1BSKTsKICAg
ICBtX2ppdC5tb3ZlKEltbTMyKDEpLCByZXN1bHRQYXlsb2FkR1BSKTsKQEAgLTE3OTMsNyArMTc5
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICAKICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB2YWx1ZVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxU
YWcpKTsKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2spCi0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVJbmRl
eCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWVQYXlsb2FkR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIodnB0cikpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVn
cyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1
ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAg
IG1faml0Lm1vdmUoVHJ1c3RlZEltbTMyKDApLCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwogICAgIApAQCAtMTgwMyw3ICsx
ODAzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU9iamVjdE9yT3RoZQogICAgIGlm
IChuZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBtX2ppdC5tb3ZlKHZhbHVlVGFnR1BS
LCByZXN1bHRQYXlsb2FkR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoMSks
IHJlc3VsdFBheWxvYWRHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0UGF5bG9hZEdQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVJbmRleCwgbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCByZXN1bHRQYXlsb2FkR1BSLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKICAgICB9CiAgICAgbV9qaXQubW92ZShU
cnVzdGVkSW1tMzIoMSksIHJlc3VsdFBheWxvYWRHUFIpOwogICAgIApAQCAtMTg4MSw3ICsxODgx
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9iamVjdE9yT3RoZXJCcgogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIG5vdENlbGwgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIHZhbHVlVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpOwogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlUmVncyh2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSwgbm9kZUluZGV4
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh2YWx1ZVBheWxvYWRHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cih2cHRyKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdz
KHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
UGF5bG9hZEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAg
YWRkQnJhbmNoKG1faml0Lmp1bXAoKSwgdGFrZW4pOwogICAgIAogICAgIG5vdENlbGwubGluaygm
bV9qaXQpOwpAQCAtMTg5MCw3ICsxODkwLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdE9i
amVjdE9yT3RoZXJCcgogICAgIGlmIChuZWVkU3BlY3VsYXRpb25DaGVjaykgewogICAgICAgICBt
X2ppdC5tb3ZlKHZhbHVlVGFnR1BSLCBzY3JhdGNoR1BSKTsKICAgICAgICAgbV9qaXQub3IzMihU
cnVzdGVkSW1tMzIoMSksIHNjcmF0Y2hHUFIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpLCBub2RlSW5kZXgsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlw
ZSwgSlNWYWx1ZVJlZ3ModmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUiksIG5vZGVJbmRleCwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpKTsKICAgICB9CiAKICAgICBpZiAobm90VGFrZW4g
IT0gKG1fYmxvY2sgKyAxKSkKQEAgLTE5OTgsNyArMTk5OCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHByZWRp
Y3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgogICAg
ICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSkgewotICAgICAgICAgICAgdGVybWlu
YXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAg
ICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCkBA
IC0yMDgwLDE0ICsyMDgwLDE0IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYg
bm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGNlbGwodGhpcywgbm9kZS5j
aGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJSZWcgY2VsbEdQUiA9IGNlbGwuZ3ByKCk7CiAgICAg
ICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxk
MSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNv
dXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxH
UFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpz
QXJyYXlWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIoY2VsbEdQ
UiwgSklUQ29tcGlsZXI6OnBheWxvYWRGb3Iobm9kZS5sb2NhbCgpKSk7CiAgICAgICAgICAgICBu
b1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCeXRlQXJyYXlQ
cmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGNlbGxH
UFIgPSBjZWxsLmdwcigpOwogICAgICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVByZWRpY3Rpb24o
bV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChjZWxsR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoY2VsbEdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwo
Y2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNlbGxHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsK
ICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENvbXBpbGVyOjpwYXlsb2Fk
Rm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgp
OwogICAgICAgICB9IGVsc2UgaWYgKGlzQm9vbGVhblByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkp
IHsKQEAgLTIxOTMsNyArMjE5Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwogCiAgICAg
ICAgIC8vIFRlc3QgdGhlIG9wZXJhbmQgaXMgcG9zaXRpdmUuCi0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxl
cjo6TGVzc1RoYW4sIG9wMS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKSk7CisgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
MzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSkp
OwogCiAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgsIG9wMS5mb3JtYXQo
KSk7CkBAIC0yMjQxLDcgKzIyNDEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1faml0Lm1vdmUob3AyLmdwcigpLCByZXN1
bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0xKSwg
cmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFk
ZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwgcmVz
dWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok92ZXJmbG93LCBvcDIuZ3ByKCksIEltbTMyKGltbTEpLCByZXN1bHQuZ3ByKCkpKTsKIAog
ICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRl
eCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yMjU2LDcgKzIyNTYsNyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgICAgICBt
X2ppdC5hZGQzMihJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3Ax
LmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3ByKCksIEltbTMyKGlt
bTIpLCByZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgICAgIGludGVnZXJSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0y
MjgxLDExICsyMjgxLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjaGVjayA9IG1faml0LmJy
YW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgZ3ByMSwgZ3ByMiwgZ3ByUmVzdWx0
KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoZ3ByMSA9PSBncHJSZXN1
bHQpCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVz
dWx0LCBncHIyKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZs
b3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3Bl
Y3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMikpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGdwcjIgPT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3BlY3Vs
YXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVjdWxh
dGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjEpKTsKICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBjaGVjayk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2spOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwclJlc3VsdCwgbV9jb21waWxlSW5k
ZXgpOwpAQCAtMjMyMSw3ICsyMzIxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tMiks
IHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hT
dWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJl
c3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAK
ICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjMzNSw3ICsyMzM1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIG1faml0LnN1
YjMyKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigp
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJm
bG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFN1YjMyKE1hY3JvQXNzZW1i
bGVyOjpPdmVyZmxvdywgb3AxLmdwcigpLCBvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSkpOwogCiAg
ICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0yMzY4LDEzICsyMzY4LDEzIEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIEdQUlJlZyBvcDFHUFIgPSBv
cDEuZ3ByKCk7CiAgICAgICAgICAgICBHUFJSZWcgb3AyR1BSID0gb3AyLmdwcigpOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDJHUFIpKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgLy8gSWYgdGhlIHVzZXIgY2FyZXMgYWJvdXQgbmVnYXRpdmUgemVy
bywgdGhlbiBzcGVjdWxhdGUgdGhhdCB3ZSdyZSBub3QgYWJvdXQKICAgICAgICAgICAgIC8vIHRv
IHByb2R1Y2UgbmVnYXRpdmUgemVyby4KICAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5l
Z2F0aXZlWmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXAgbnVtZXJhdG9yTm9uWmVybyA9IG1faml0LmJyYW5jaFRlc3QzMihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCBvcDJHUFIsIFRydXN0ZWRJbW0zMigwKSkpOworICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVk
SW1tMzIoMCkpKTsKICAgICAgICAgICAgICAgICBudW1lcmF0b3JOb25aZXJvLmxpbmsoJm1faml0
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjM5NCw3ICsyMzk0LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgICAgICAvLyBD
aGVjayB0aGF0IHRoZXJlIHdhcyBubyByZW1haW5kZXIuIElmIHRoZXJlIGhhZCBiZWVuLCB0aGVu
IHdlJ2QgYmUgb2JsaWdhdGVkIHRvCiAgICAgICAgICAgICAvLyBwcm9kdWNlIGEgZG91YmxlIHJl
c3VsdCBpbnN0ZWFkLgotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgZWR4Lmdw
cigpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6Tm9uWmVybywgZWR4
LmdwcigpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGludGVnZXJSZXN1bHQoZWF4Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CiAjZWxzZSAvLyBDUFUoWDg2KSAtPiBzbyBub24tWDg2IGNv
ZGUgZm9sbG93cwpAQCAtMjQxNCw3ICsyNDE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgZmFpbHVyZUNhc2VzOwogICAgICAgICAgICAgbV9qaXQuYnJhbmNoQ29udmVydERv
dWJsZVRvSW50MzIocmVzdWx0RlBSLCByZXN1bHRHUFIsIGZhaWx1cmVDYXNlcywgc2NyYXRjaEZQ
Uik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
ZmFpbHVyZUNhc2VzKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soT3ZlcmZsb3csIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgZmFpbHVyZUNhc2VzKTsKIAogICAgICAgICAgICAgaW50ZWdl
clJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICNlbmRpZiAvLyBDUFUoWDg2KQpA
QCAtMjQ0OCw3ICsyNDQ4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICAgICAgbV9qaXQucnNoaWZ0MzIocmVzdWx0LmdwcigpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyKDMxKSwgc2NyYXRjaC5ncHIoKSk7CiAgICAgICAgICAgICBtX2pp
dC5hZGQzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgbV9qaXQu
eG9yMzIoc2NyYXRjaC5ncHIoKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIHJlc3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigx
IDw8IDMxKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJl
c3VsdC5ncHIoKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxIDw8IDMxKSkpOwogICAg
ICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yNjg1LDE1ICsyNjg1LDE1IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICBHUFJS
ZWcgYmFzZVJlZyA9IGJhc2UuZ3ByKCk7CiAgICAgICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0
aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwg
cHJvcGVydHlSZWcsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTQXJyYXk6OnZl
Y3Rvckxlbmd0aE9mZnNldCgpKSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRklYTUU6IElu
IGNhc2VzIHdoZXJlIHRoZXJlIGFyZSBzdWJzZXF1ZW50IGJ5X3ZhbCBhY2Nlc3NlcyB0byB0aGUg
c2FtZSBiYXNlIGl0IG1pZ2h0IGhlbHAgdG8gY2FjaGUKICAgICAgICAgLy8gdGhlIHN0b3JhZ2Ug
cG9pbnRlciAtIGVzcGVjaWFsbHkgaWYgdGhlcmUgaGFwcGVucyB0byBiZSBhbm90aGVyIHJlZ2lz
dGVyIGZyZWUgcmlnaHQgbm93LiBJZiB3ZSBkbyBzbywKICAgICAgICAgLy8gdGhlbiB3ZSdsbCBu
ZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHRlbXBvcmFyeSBmb3IgcmVzdWx0LgogICAgICAgICBtX2pp
dC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9wZXJ0eVJl
ZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzRWlnaHQsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3Jh
Z2UsIG1fdmVjdG9yWzBdKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy50YWcp
KSwgcmVzdWx0VGFnLmdwcigpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0
VGFnLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZykpKTsKKyAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHJlc3VsdFRhZy5ncHIoKSwgVHJ1
c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKSk7CiAgICAgICAgIG1faml0LmxvYWQz
MihNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KHN0b3JhZ2VSZWcsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6VGltZXNFaWdodCwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV92
ZWN0b3JbMF0pICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWcu
Z3ByKCksIHJlc3VsdFBheWxvYWQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKQEAgLTI4MDQsNyAr
MjgwNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGFuIGFycmF5LCBhbmQgdGhhdCBwcm9wZXJ0eSBpcyBj
b250YWluZWQgd2l0aGluIG1fdmVjdG9yICg8IG1fdmVjdG9yTGVuZ3RoKS4KICAgICAgICAgLy8g
SWYgd2UgaGF2ZSBwcmVkaWN0ZWQgdGhlIGJhc2UgdG8gYmUgdHlwZSBhcnJheSwgd2UgY2FuIHNr
aXAgdGhlIGNoZWNrLgogICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKIAogICAgICAgICBiYXNlLnVzZSgpOwogICAg
ICAgICBwcm9wZXJ0eS51c2UoKTsKQEAgLTI5NDgsMTMgKzI5NDgsMTMgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICB3cml0ZUJhcnJpZXIoYmFzZUdQ
UiwgdmFsdWVUYWdHUFIsIG5vZGUuY2hpbGQyKCksIFdyaXRlQmFycmllckZvclByb3BlcnR5QWNj
ZXNzLCBzdG9yYWdlR1BSLCBzdG9yYWdlTGVuZ3RoR1BSKTsKIAogICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgc3RvcmFnZUdQUik7CiAgICAgICAgIG1f
aml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdG9yYWdlR1BSLCBPQkpFQ1RfT0ZG
U0VUT0YoQXJyYXlTdG9yYWdlLCBtX2xlbmd0aCkpLCBzdG9yYWdlTGVuZ3RoR1BSKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIFJlZnVzZSB0byBoYW5kbGUgYml6YXJyZSBsZW5ndGhzLgotICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3
ZmZmZmZmZSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmUsIHN0
b3JhZ2VMZW5ndGhHUFIsIFRydXN0ZWRJbW0zMigweDdmZmZmZmZlKSkpOwogICAgICAgICAKICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2gzMihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzdG9yYWdlTGVuZ3RoR1BSLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQoKSkpOwogICAg
ICAgICAKQEAgLTI5OTQsNyArMjk5NCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
Tm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHN0b3JhZ2VMZW5ndGhHUFIgPSBzdG9yYWdlTGVu
Z3RoLmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAgICAgICBt
X2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0
b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwogICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwgT0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFn
ZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQUik7CkBAIC0zMTE1LDcgKzMxMTUsNyBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgY2FzZSBUaHJvd1Jl
ZmVyZW5jZUVycm9yOiB7CiAgICAgICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRocm93IHN0YXRlbWVu
dHMgYXJlIHJhcmUgYW5kIGFyZSBpbnRlbmRlZCB0byBleGl0IHRoZSBjb2RlIGJsb2NrCiAgICAg
ICAgIC8vIGFueXdheSwgc28gd2UganVzdCBPU1IgYmFjayB0byB0aGUgb2xkIEpJVCBmb3Igbm93
LgotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKQEAgLTMyNjMsNyArMzI2Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNo
R1BSKTsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgaGFyZC4gSXQgd291bGQgYmUgYmV0dGVyIHRv
IHNhdmUgdGhlIHZhbHVlLCBidXQgd2UgY2FuJ3QgcXVpdGUgZG8gaXQsCiAgICAgICAgICAgICAv
LyBzaW5jZSB0aGlzIG9wZXJhdGlvbiBkb2VzIG5vdCBvdGhlcndpc2UgZ2V0IHRoZSBwYXlsb2Fk
LgotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgc2NyYXRjaEdQUiwgVHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6Ok51bGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRh
ZykpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSks
IHNjcmF0Y2hHUFIpOwogICAgICAgICAgICAgY2VsbFJlc3VsdChzY3JhdGNoR1BSLCBtX2NvbXBp
bGVJbmRleCk7CkBAIC0zMjc3LDcgKzMyNzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHRoaXNWYWx1ZUdQUiks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRy
KG1faml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwodGhpc1Zh
bHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVh
bCwgSklUQ29tcGlsZXI6OkFkZHJlc3ModGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIG1faml0Lm1vdmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAg
ICAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKQEAgLTMzMjIs
NyArMzMyMiw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgLy8gZG8gdGhlIHNsb3cgKHN0cnVjdHVyZS1iYXNlZCkgY2hlY2suCiAgICAgICAgIGlm
IChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKSB7CiAgICAg
ICAgICAgICBpZiAoIWlzRmluYWxPYmplY3RQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwocHJvdG9HUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhwcm90b0dQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERh
dGEoKS0+anNGaW5hbE9iamVjdFZQdHIpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChwcm90b0dQUiksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0ZpbmFsT2JqZWN0VlB0cikpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
cHJvdG9HUFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKICAgICAg
ICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxv
dywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5m
b1R5cGVPZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkp
KTsKQEAgLTM0MzQsNyArMzQzNCw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9k
ZSYgbm9kZSkKICAgICAgICAgCiAgICAgY2FzZSBHZXRCeUlkOiB7CiAgICAgICAgIGlmICghbm9k
ZS5wcmVkaWN0aW9uKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMzQ5NCwxMiArMzQ5NCwxMiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJl
ZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIWlzQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
R1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAg
ICAgICAgCiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZUdQUiwgSlNBcnJheTo6c3RvcmFnZU9mZnNldCgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHJlc3VsdEdQUiwgT0JKRUNUX09GRlNF
VE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgcmVzdWx0R1BSKTsKICAgICAgICAgCi0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigwKSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKSk7CiAgICAg
ICAgIAogICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKQEAgLTM1MTMsNyArMzUxMyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5n
cHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNTdHJpbmdQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlR1BSKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9q
aXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSwgcmVzdWx0R1BSKTsKIApAQCAtMzUyOSw3ICszNTI5LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAKICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7
CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VHUFIsIEpTQnl0ZUFycmF5OjpvZmZzZXRPZlN0b3JhZ2UoKSksIHJlc3VsdEdQUik7CiAg
ICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBCeXRl
QXJyYXk6Om9mZnNldE9mU2l6ZSgpKSwgcmVzdWx0R1BSKTsKQEAgLTM1NzIsNyArMzU3Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIGNhc2UgQ2hl
Y2tGdW5jdGlvbjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlz
LCBub2RlLmNoaWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5j
dGlvbi5ncHIoKSwgbm9kZS5mdW5jdGlvbigpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRD
b21waWxlcjo6Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKICAg
ICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC0zNTg4LDcgKzM1ODgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5v
ZGUpCiAgICAgICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hX
ZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5n
cHIoKSwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0p
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENv
bXBpbGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBu
b2RlLnN0cnVjdHVyZVNldCgpWzBdKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgICAgIApAQCAtMzU5OSw3ICszNTk5
LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7
ICsraSkKICAgICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpW2ld
KSk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwg
c3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBu
b2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKICAgICAgICAgfQpAQCAtMzc2NSw3ICszNzY1LDcgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIFNwZWN1bGF0
ZSB0aGF0IGJhc2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgogICAgICAgICBtX2pp
dC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3Ry
dWN0dXJlT2Zmc2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0
dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMy
KEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5n
cHIoKSwgU3RydWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CiAKICAgICAgICAg
bm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM4NjEsNyArMzg2
MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAK
ICAgICBjYXNlIEZvcmNlT1NSRXhpdDogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4
ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxh
dGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDEwMjU2MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyODIsNyArMTI4Miw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0
ZUludEkKICAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewogICAgIGNhc2UgRGF0
YUZvcm1hdE5vbmU6IHsKICAgICAgICAgaWYgKChub2RlLmhhc0NvbnN0YW50KCkgJiYgIWlzSW50
MzJDb25zdGFudChub2RlSW5kZXgpKSB8fCBpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1h
dERvdWJsZSkgewotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAg
cmV0dXJuRm9ybWF0ID0gRGF0YUZvcm1hdEludGVnZXI7CiAgICAgICAgICAgICByZXR1cm4gYWxs
b2NhdGUoKTsKICAgICAgICAgfQpAQCAtMTMzMiw3ICsxMzMyLDcgQEAgR1BSUmVnIFNwZWN1bGF0
aXZlSklUOjpmaWxsU3BlY3VsYXRlSW50SQogICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMg
YW4gaW50ZWdlci4KICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1f
Z3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBncHIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXIpKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0ludGVnZXIp
OwogICAgICAgICAvLyBJZiAhc3RyaWN0IHdlJ3JlIGRvbmUsIHJldHVybi4KICAgICAgICAgaWYg
KCFzdHJpY3QpIHsKQEAgLTEzODksNyArMTM4OSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6
ZmlsbFNwZWN1bGF0ZUludEkKICAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgogICAgIGNhc2Ug
RGF0YUZvcm1hdEpTQ2VsbDoKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46IHsKLSAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsK
KyAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CiAgICAgICAgIHJldHVybkZvcm1hdCA9IERhdGFGb3JtYXRJbnRl
Z2VyOwogICAgICAgICByZXR1cm4gYWxsb2NhdGUoKTsKICAgICB9CkBAIC0xNDQ4LDcgKzE0NDgs
NyBAQCBGUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVEb3ViCiAgICAgICAgICAg
ICAgICAgaW5mby5maWxsRG91YmxlKGZwcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZwcjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2
ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAg
ICAgIHJldHVybiBmcHJBbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTQ5MSw3
ICsxNDkxLDcgQEAgRlBSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlRG91YgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0g
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICByZXR1cm4gZnByQWxsb2NhdGUoKTsKIAog
ICAgIGNhc2UgRGF0YUZvcm1hdEpTQ2VsbDoKQEAgLTE1MDQsNyArMTUwNCw3IEBAIEZQUlJlZyBT
cGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZURvdWIKIAogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JF
cXVhbCwganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKIAotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgs
IG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEJhZFR5cGUsIEpTVmFsdWVSZWdzKGpzVmFsdWVHcHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIGpzVmFsdWVHcHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOwogCiAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3
ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCiAgICAgICAgIG1faml0Lm1vdmUo
anNWYWx1ZUdwciwgdGVtcEdwcik7CkBAIC0xNTc4LDcgKzE1NzgsNyBAQCBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVDZWxsCiAgICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9y
bWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAgICAgICAgIGlmIChpbmZvLnNw
aWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgaW5mby5zcGlsbEZvcm1hdCgpID09
IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhl
Y3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAg
ICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTU5
Miw3ICsxNTkyLDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2VsbAog
ICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNDZWxsKTsK
ICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
dGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAg
ICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1Zh
bHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0dXJuIGdwcjsKICAgICAgICAgfQog
ICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYgRGF0YUZvcm1hdEpTKTsKQEAgLTE2
MDEsNyArMTYwMSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUNlbGwK
IAogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVlKGdwciwgRGF0YUZvcm1hdEpTKTsKICAgICAgICAg
aWYgKGluZm8uc3BpbGxGb3JtYXQoKSAhPSBEYXRhRm9ybWF0SlNDZWxsKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5j
aFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1Jl
Z2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVS
ZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgZ3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKICAgICAgICAgaW5mby5m
aWxsSlNWYWx1ZShncHIsIERhdGFGb3JtYXRKU0NlbGwpOwogICAgICAgICByZXR1cm4gZ3ByOwog
ICAgIH0KQEAgLTE2MTYsNyArMTYxNiw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNw
ZWN1bGF0ZUNlbGwKICAgICBjYXNlIERhdGFGb3JtYXRKUzogewogICAgICAgICBHUFJSZWcgZ3By
ID0gaW5mby5ncHIoKTsKICAgICAgICAgbV9ncHJzLmxvY2soZ3ByKTsKLSAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVy
KSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3ByKSwg
bm9kZUluZGV4LCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBn
cHIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwogICAgICAgICBpbmZvLmZpbGxKU1ZhbHVl
KGdwciwgRGF0YUZvcm1hdEpTQ2VsbCk7CiAgICAgICAgIHJldHVybiBncHI7CiAgICAgfQpAQCAt
MTYyNyw3ICsxNjI3LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQ2Vs
bAogICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xl
YW46CiAgICAgY2FzZSBEYXRhRm9ybWF0Qm9vbGVhbjogewotICAgICAgICB0ZXJtaW5hdGVTcGVj
dWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
KTsKICAgICAgICAgcmV0dXJuIGFsbG9jYXRlKCk7CiAgICAgfQogCkBAIC0xNjUxLDcgKzE2NTEs
NyBAQCBHUFJSZWcgU3BlY3VsYXRpdmVKSVQ6OmZpbGxTcGVjdWxhdGVCb29sCiAgICAgc3dpdGNo
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKICAgICBjYXNlIERhdGFGb3JtYXROb25lOiB7CiAg
ICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgPT0gRGF0YUZvcm1hdEludGVnZXIgfHwgaW5m
by5zcGlsbEZvcm1hdCgpID09IERhdGFGb3JtYXREb3VibGUpIHsKLSAgICAgICAgICAgIHRlcm1p
bmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAg
ICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJl
Z3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZSgpOwogICAgICAgICB9
CiAgICAgICAgIApAQCAtMTY2NSw3ICsxNjY1LDcgQEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpm
aWxsU3BlY3VsYXRlQm9vbAogICAgICAgICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBE
YXRhRm9ybWF0SlNCb29sZWFuKTsKICAgICAgICAgICAgICAgICByZXR1cm4gZ3ByOwogICAgICAg
ICAgICAgfQotICAgICAgICAgICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0
aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgcmV0
dXJuIGdwcjsKICAgICAgICAgfQogICAgICAgICBBU1NFUlQoaW5mby5zcGlsbEZvcm1hdCgpICYg
RGF0YUZvcm1hdEpTKTsKQEAgLTE2NzUsNyArMTY3NSw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJ
VDo6ZmlsbFNwZWN1bGF0ZUJvb2wKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKUyk7CiAgICAgICAgIGlmIChpbmZvLnNwaWxsRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpT
Qm9vbGVhbikgewogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIGdwcik7Ci0gICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVSZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4ofjEpKSksIFNwZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ss
IGdwciwgSW52YWxpZEdQUlJlZykpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRU
eXBlLCBKU1ZhbHVlUmVncyhncHIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIGdwciwgVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMy
X3Q+KH4xKSkpLCBTcGVjdWxhdGlvblJlY292ZXJ5KEJvb2xlYW5TcGVjdWxhdGlvbkNoZWNrLCBn
cHIsIEludmFsaWRHUFJSZWcpKTsKICAgICAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCBncHIpOwogICAgICAgICB9CiAg
ICAgICAgIGluZm8uZmlsbEpTVmFsdWUoZ3ByLCBEYXRhRm9ybWF0SlNCb29sZWFuKTsKQEAgLTE2
OTMsNyArMTY5Myw3IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbFNwZWN1bGF0ZUJvb2wK
ICAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7CiAgICAgICAgIG1fZ3Bycy5sb2NrKGdw
cik7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJf
dD4oVmFsdWVGYWxzZSkpLCBncHIpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKGdwciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNw
ZWN1bGF0aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQ
UlJlZykpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKGdw
ciksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVy
bywgZ3ByLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSksIFNwZWN1bGF0
aW9uUmVjb3ZlcnkoQm9vbGVhblNwZWN1bGF0aW9uQ2hlY2ssIGdwciwgSW52YWxpZEdQUlJlZykp
OwogICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+
KFZhbHVlRmFsc2UpKSwgZ3ByKTsKICAgICAgICAgaW5mby5maWxsSlNWYWx1ZShncHIsIERhdGFG
b3JtYXRKU0Jvb2xlYW4pOwogICAgICAgICByZXR1cm4gZ3ByOwpAQCAtMTcwNSw3ICsxNzA1LDcg
QEAgR1BSUmVnIFNwZWN1bGF0aXZlSklUOjpmaWxsU3BlY3VsYXRlQm9vbAogICAgIGNhc2UgRGF0
YUZvcm1hdERvdWJsZToKICAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6CiAgICAgY2FzZSBEYXRh
Rm9ybWF0Q2VsbDogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1Zh
bHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlv
bihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgcmV0dXJuIGFs
bG9jYXRlKCk7CiAgICAgfQogICAgICAgICAKQEAgLTE3NDgsOSArMTc0OCw5IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RFcXVhbGkKICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgIAogICAgIGlmICghcHJlZGljdGlvbkNoZWNrKG1fc3RhdGUuZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJh
bmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
b3AxR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBpZiAo
IXByZWRpY3Rpb25DaGVjayhtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDIoKSkubV90eXBlKSkK
LSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhvcDJHUFIpLCBub2RlLmNoaWxk
MigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRy
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKG9wMkdQ
UiksIG5vZGUuY2hpbGQyKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMkdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZmFsc2VD
YXNlID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBv
cDJHUFIpOwogICAgIG1faml0Lm1vdmUoSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R1BSKTsKQEAg
LTE4MTcsNyArMTgxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVPYmplY3RPck90
aGUKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01h
c2tSZWdpc3Rlcik7CiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2
YWx1ZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5k
ZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKHZhbHVlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0
cikpKTsKICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihW
YWx1ZUZhbHNlKSksIHJlc3VsdEdQUik7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZG9uZSA9
IG1faml0Lmp1bXAoKTsKICAgICAKQEAgLTE4MjYsNyArMTgyNiw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGVPYmplY3RPck90aGUKICAgICBpZiAobmVlZFNwZWN1bGF0aW9uQ2hlY2sp
IHsKICAgICAgICAgbV9qaXQubW92ZSh2YWx1ZUdQUiwgcmVzdWx0R1BSKTsKICAgICAgICAgbV9q
aXQuYW5kUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoflRhZ0JpdFVuZGVmaW5lZCks
IHJlc3VsdEdQUik7Ci0gICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVH
UFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IHJlc3VsdEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oVmFsdWVOdWxsKSkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGVJbmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgcmVzdWx0R1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgIH0KICAgICBt
X2ppdC5tb3ZlKFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihWYWx1ZVRydWUpKSwg
cmVzdWx0R1BSKTsKICAgICAKQEAgLTE4ODIsNyArMTg4Miw3IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVMb2dpY2FsTm90KE4KICAgICAgICAgCiAgICAgICAgIG1faml0Lm1vdmUodmFs
dWUuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVGYWxzZSkpLCByZXN1bHQuZ3ByKCkpOwotICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0Lmdw
cigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOworICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHZhbHVlLmdwcigpKSwgbm9kZS5j
aGlsZDEoKSwgbV9qaXQuYnJhbmNoVGVzdFB0cihKSVRDb21waWxlcjo6Tm9uWmVybywgcmVzdWx0
LmdwcigpLCBUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4ofjEpKSkpOwogICAgICAg
ICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1
ZSkpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAKICAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0
YUZvcm1hdEJvb2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KQEAgLTE5MjEsNyArMTkyMSw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRPYmplY3RPck90aGVyQnIKICAgICAKICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBub3RDZWxsID0gbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm9uWmVybywgdmFsdWVHUFIsIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CiAgICAg
aWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKHZhbHVlR1BSKSwgbm9kZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZUdQUiksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHZhbHVl
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsKICAgICBhZGRCcmFu
Y2gobV9qaXQuanVtcCgpLCB0YWtlbik7CiAgICAgCiAgICAgbm90Q2VsbC5saW5rKCZtX2ppdCk7
CkBAIC0xOTI5LDcgKzE5MjksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0T2JqZWN0T3JP
dGhlckJyCiAgICAgaWYgKG5lZWRTcGVjdWxhdGlvbkNoZWNrKSB7CiAgICAgICAgIG1faml0Lm1v
dmUodmFsdWVHUFIsIHNjcmF0Y2hHUFIpOwogICAgICAgICBtX2ppdC5hbmRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMih+VGFnQml0VW5kZWZpbmVkKSwgc2NyYXRjaEdQUik7Ci0gICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIpLCBub2RlSW5kZXgsIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZhbHVlTnVs
bCkpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModmFs
dWVHUFIpLCBub2RlSW5kZXgsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KFZhbHVlTnVsbCkpKSk7CiAgICAgfQogICAgIGlmIChub3RUYWtlbiAhPSAo
bV9ibG9jayArIDEpKQogICAgICAgICBhZGRCcmFuY2gobV9qaXQuanVtcCgpLCBub3RUYWtlbik7
CkBAIC0xOTk3LDcgKzE5OTcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0QnJhbmNoKE5v
ZGUmIG5vCiAgICAgICAgICAgICBhZGRCcmFuY2gobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpFcXVhbCwgdmFsdWVHUFIsIE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoSlNWYWx1ZTo6ZW5j
b2RlKGpzQm9vbGVhbihmYWxzZSkpKSksIG5vdFRha2VuKTsKICAgICAgICAgICAgIGFkZEJyYW5j
aChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCB2YWx1ZUdQUiwgTWFjcm9B
c3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKHRydWUpKSkpLCB0YWtl
bik7CiAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3ModmFsdWVHUFIp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5qdW1wKCkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyh2YWx1ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0
Lmp1bXAoKSk7CiAgICAgICAgICAgICB2YWx1ZS51c2UoKTsKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIGFkZEJyYW5jaChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkVxdWFs
LCB2YWx1ZUdQUiwgTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIoMCkpKSksIG5vdFRha2VuKTsKQEAgLTIwNDMsNyArMjA0Myw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHBy
ZWRpY3Rpb24gZm9yIHRoaXMgbG9jYWwsIHRoZW4gZG9uJ3QgYXR0ZW1wdCB0byBjb21waWxlLgog
ICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBQcmVkaWN0Tm9uZSB8fCB2YWx1ZS5pc0NsZWFyKCkp
IHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSk7CisgICAgICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMjExMywxNCArMjExMywxNCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBTcGVjdWxhdGVDZWxsT3Bl
cmFuZCBjZWxsKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICAgICAgR1BSUmVnIGNlbGxH
UFIgPSBjZWxsLmdwcigpOwogICAgICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhjZWxsR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxs
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0FycmF5VlB0cikpKTsKICAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKGNlbGxHUFIsIEpJVENv
bXBpbGVyOjphZGRyZXNzRm9yKG5vZGUubG9jYWwoKSkpOwogICAgICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQnl0ZUFycmF5UHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2Vs
bCh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgIEdQUlJlZyBjZWxsR1BSID0gY2Vs
bC5ncHIoKTsKICAgICAgICAgICAgIGlmICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUu
Zm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoY2VsbEdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNl
bGxHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQnl0ZUFycmF5VlB0cikpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJh
ZFR5cGUsIEpTVmFsdWVSZWdzKGNlbGxHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjZWxs
R1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5q
c0J5dGVBcnJheVZQdHIpKSk7CiAgICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihjZWxsR1BSLCBK
SVRDb21waWxlcjo6YWRkcmVzc0Zvcihub2RlLmxvY2FsKCkpKTsKICAgICAgICAgICAgIG5vUmVz
dWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgfSBlbHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0
aW9uKHByZWRpY3RlZFR5cGUpKSB7CkBAIC0yMjI1LDcgKzIyMjUsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQo
dGhpcywgb3AxKTsKIAogICAgICAgICAvLyBUZXN0IHRoZSBvcGVyYW5kIGlzIHBvc2l0aXZlLgot
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigw
KSkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBO
b05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AxLmdwcigp
LCBUcnVzdGVkSW1tMzIoMCkpKTsKIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVz
dWx0LmdwcigpKTsKICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGls
ZUluZGV4LCBvcDEuZm9ybWF0KCkpOwpAQCAtMjI3Myw3ICsyMjczLDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
YWRkMzIoSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMi5ncHIo
KSwgSW1tMzIoaW1tMSksIHJlc3VsdC5ncHIoKSkpOworICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywgb3AyLmdwcigpLCBJbW0zMihpbW0xKSwg
cmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5n
cHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjI4OCw3
ICsyMjg4LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAg
ICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAg
ICAgICAgICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2Vt
Ymxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiksIHJlc3VsdC5ncHIoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
b3AxLmdwcigpLCBJbW0zMihpbW0yKSwgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAgICAgICAg
ICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMjMxMywxMSArMjMxMywxMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgY2hlY2sgPSBtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIGdw
cjEsIGdwcjIsIGdwclJlc3VsdCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
aWYgKGdwcjEgPT0gZ3ByUmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2ssIFNwZWN1bGF0aW9uUmVjb3ZlcnkoU3Bl
Y3VsYXRpdmVBZGQsIGdwclJlc3VsdCwgZ3ByMikpOworICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVj
dWxhdGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjIpKTsKICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChncHIyID09IGdwclJlc3VsdCkKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIGNoZWNrLCBTcGVjdWxh
dGlvblJlY292ZXJ5KFNwZWN1bGF0aXZlQWRkLCBncHJSZXN1bHQsIGdwcjEpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBjaGVjaywgU3BlY3VsYXRpb25SZWNvdmVyeShTcGVjdWxhdGl2ZUFkZCwgZ3ByUmVzdWx0
LCBncHIxKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgY2hlY2spOworICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IGNoZWNrKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChncHJS
ZXN1bHQsIG1fY29tcGlsZUluZGV4KTsKQEAgLTIzNTMsNyArMjM1Myw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgICAgICAgICAgICAgbV9qaXQu
bW92ZShvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICAgICAgICAgIG1faml0
LnN1YjMyKEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBvcDEuZ3By
KCksIEltbTMyKGltbTIpLCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgSW1tMzIoaW1tMiks
IHJlc3VsdC5ncHIoKSkpOwogCiAgICAgICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIzNjcs
NyArMjM2Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKICAgICAg
ICAgICAgICAgICBtX2ppdC5zdWIzMihvcDIuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBv
cDEuZ3ByKCksIG9wMi5ncHIoKSwgcmVzdWx0LmdwcigpKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIG9wMS5ncHIoKSwgb3AyLmdwcigpLCBy
ZXN1bHQuZ3ByKCkpKTsKIAogICAgICAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjM5OSwxMyArMjM5OSwx
MyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgICAgICAgICAgR1BSUmVnIG9wMkdQUiA9
IG9wMi5ncHIoKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVy
bywgb3AyR1BSKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywg
b3AyR1BSKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyIGNhcmVz
IGFib3V0IG5lZ2F0aXZlIHplcm8sIHRoZW4gc3BlY3VsYXRlIHRoYXQgd2UncmUgbm90IGFib3V0
CiAgICAgICAgICAgICAvLyB0byBwcm9kdWNlIG5lZ2F0aXZlIHplcm8uCiAgICAgICAgICAgICBp
ZiAoIW5vZGVDYW5JZ25vcmVOZWdhdGl2ZVplcm8obm9kZS5hcml0aE5vZGVGbGFncygpKSkgewog
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIG51bWVyYXRvck5vblplcm8gPSBt
X2ppdC5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUik7Ci0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3AyR1BSLCBUcnVzdGVkSW1tMzIo
MCkpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1Ro
YW4sIG9wMkdQUiwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICAgICAgbnVtZXJhdG9y
Tm9uWmVyby5saW5rKCZtX2ppdCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTI0
MjUsNyArMjQyNSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkK
IAogICAgICAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGVyZSB3YXMgbm8gcmVtYWluZGVyLiBJZiB0
aGVyZSBoYWQgYmVlbiwgdGhlbiB3ZSdkIGJlIG9ibGlnYXRlZCB0bwogICAgICAgICAgICAgLy8g
cHJvZHVjZSBhIGRvdWJsZSByZXN1bHQgaW5zdGVhZC4KLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29tcGls
ZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhP
dmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoSklUQ29t
cGlsZXI6Ok5vblplcm8sIGVkeC5ncHIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBp
bnRlZ2VyUmVzdWx0KGVheC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICAgICAgYnJl
YWs7CkBAIC0yNDU4LDcgKzI0NTgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgICAgICBtX2ppdC5yc2hpZnQzMihyZXN1bHQuZ3ByKCksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMzEpLCBzY3JhdGNoLmdwcigpKTsKICAgICAgICAgICAg
IG1faml0LmFkZDMyKHNjcmF0Y2guZ3ByKCksIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgICAgICBt
X2ppdC54b3IzMihzY3JhdGNoLmdwcigpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3Jv
QXNzZW1ibGVyOjpFcXVhbCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKDEgPDwgMzEpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE92ZXJmbG93LCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpFcXVh
bCwgcmVzdWx0LmdwcigpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEgPDwgMzEpKSk7
CiAgICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTI2ODgsMTUgKzI2ODgsMTUgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIGlmICghaXNBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5v
ZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikp
KTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhPZmZzZXQo
KSkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3Mo
YmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVn
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5Ojp2ZWN0b3JMZW5ndGhP
ZmZzZXQoKSkpKTsKIAogICAgICAgICAvLyBGSVhNRTogSW4gY2FzZXMgd2hlcmUgdGhlcmUgYXJl
IHN1YnNlcXVlbnQgYnlfdmFsIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIGJhc2UgaXQgbWlnaHQgaGVs
cCB0byBjYWNoZQogICAgICAgICAvLyB0aGUgc3RvcmFnZSBwb2ludGVyIC0gZXNwZWNpYWxseSBp
ZiB0aGVyZSBoYXBwZW5zIHRvIGJlIGFub3RoZXIgcmVnaXN0ZXIgZnJlZSByaWdodCBub3cuIElm
IHdlIGRvIHNvLAogICAgICAgICAvLyB0aGVuIHdlJ2xsIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcg
dGVtcG9yYXJ5IGZvciByZXN1bHQuCiAgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdl
UmVnLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlNjYWxlUHRyLCBPQkpFQ1RfT0ZGU0VU
T0YoQXJyYXlTdG9yYWdlLCBtX3ZlY3RvclswXSkpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0
cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
VGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0LmdwcigpKSk7CiAKICAgICAgICAg
anNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkBAIC0yNzk5LDcgKzI3OTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIC8vIENoZWNrIHRoYXQgYmFzZSBpcyBhbiBhcnJheSwgYW5kIHRo
YXQgcHJvcGVydHkgaXMgY29udGFpbmVkIHdpdGhpbiBtX3ZlY3RvciAoPCBtX3ZlY3Rvckxlbmd0
aCkuCiAgICAgICAgIC8vIElmIHdlIGhhdmUgcHJlZGljdGVkIHRoZSBiYXNlIHRvIGJlIHR5cGUg
YXJyYXksIHdlIGNhbiBza2lwIHRoZSBjaGVjay4KICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1f
aml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9i
YWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhC
YWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFz
ZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
anNBcnJheVZQdHIpKSk7CiAKICAgICAgICAgYmFzZS51c2UoKTsKICAgICAgICAgcHJvcGVydHku
dXNlKCk7CkBAIC0yOTQzLDEzICsyOTQzLDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGUoTm9kZSYgbm9kZSkKICAgICAgICAgd3JpdGVCYXJyaWVyKGJhc2VHUFIsIHZhbHVlR1BSLCBu
b2RlLmNoaWxkMigpLCBXcml0ZUJhcnJpZXJGb3JQcm9wZXJ0eUFjY2Vzcywgc3RvcmFnZUdQUiwg
c3RvcmFnZUxlbmd0aEdQUik7CiAKICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CiAgICAgICAgIAogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKGJhc2VHUFIsIEpTQXJyYXk6OnN0b3JhZ2VPZmZzZXQoKSksIHN0b3JhZ2VHUFIpOwog
ICAgICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RvcmFnZUdQUiwg
T0JKRUNUX09GRlNFVE9GKEFycmF5U3RvcmFnZSwgbV9sZW5ndGgpKSwgc3RvcmFnZUxlbmd0aEdQ
Uik7CiAgICAgICAgIAogICAgICAgICAvLyBSZWZ1c2UgdG8gaGFuZGxlIGJpemFycmUgbGVuZ3Ro
cy4KLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZSwgc3RvcmFnZUxlbmd0aEdQUiwgVHJ1c3Rl
ZEltbTMyKDB4N2ZmZmZmZmUpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlLCBzdG9yYWdlTGVuZ3RoR1BSLCBUcnVzdGVkSW1tMzIoMHg3ZmZmZmZmZSkpKTsKICAg
ICAgICAgCiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNsb3dQYXRoID0gbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgc3RvcmFnZUxlbmd0aEdQUiwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgSlNBcnJheTo6dmVjdG9yTGVuZ3RoT2Zmc2V0
KCkpKTsKICAgICAgICAgCkBAIC0yOTg2LDcgKzI5ODYsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyBzdG9yYWdlTGVuZ3RoR1BSID0g
c3RvcmFnZUxlbmd0aC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlmICghaXNBcnJheVByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
QmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmpzQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0FycmF5OjpzdG9yYWdlT2Zmc2V0KCkpLCBzdG9y
YWdlR1BSKTsKICAgICAgICAgbV9qaXQubG9hZDMyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0
b3JhZ2VHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0b3JhZ2UsIG1fbGVuZ3RoKSksIHN0b3Jh
Z2VMZW5ndGhHUFIpOwpAQCAtMzA5MSw3ICszMDkxLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlJiBub2RlKQogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjogewogICAg
ICAgICAvLyBXZSBleHBlY3QgdGhhdCB0aHJvdyBzdGF0ZW1lbnRzIGFyZSByYXJlIGFuZCBhcmUg
aW50ZW5kZWQgdG8gZXhpdCB0aGUgY29kZSBibG9jawogICAgICAgICAvLyBhbnl3YXksIHNvIHdl
IGp1c3QgT1NSIGJhY2sgdG8gdGhlIG9sZCBKSVQgZm9yIG5vdy4KLSAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCkBAIC0zMjI0LDcgKzMyMjQs
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAg
ICBpZiAoIWlzT3RoZXJQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKSB7CiAgICAgICAgICAgICAgICAgbV9qaXQubW92ZSh0aGlzVmFsdWVHUFIsIHNjcmF0
Y2hHUFIpOwogICAgICAgICAgICAgICAgIG1faml0LmFuZFB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKH5UYWdCaXRVbmRlZmluZWQpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hpbGQx
KCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIs
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KFZh
bHVlTnVsbCkpKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBK
U1ZhbHVlUmVncyh0aGlzVmFsdWVHUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBzY3JhdGNoR1BSLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihWYWx1ZU51bGwpKSkpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4p
KSwgc2NyYXRjaEdQUik7CkBAIC0zMjM5LDcgKzMyMzksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
Ojpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0UHJlZGlj
dGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKHRoaXNWYWx1ZUdQUiksIG5vZGUuY2hp
bGQxKCksIG1faml0LmJyYW5jaFB0cihKSVRDb21waWxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKHRoaXNWYWx1ZUdQUiksIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmds
b2JhbERhdGEoKS0+anNTdHJpbmdWUHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3ModGhpc1ZhbHVlR1BSKSwgbm9kZS5jaGlsZDEoKSwg
bV9qaXQuYnJhbmNoUHRyKEpJVENvbXBpbGVyOjpFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3Mo
dGhpc1ZhbHVlR1BSKSwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT5qc1N0cmluZ1ZQdHIpKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIG1faml0Lm1v
dmUodGhpc1ZhbHVlR1BSLCByZXN1bHRHUFIpOwogICAgICAgICAgICAgCkBAIC0zMjgzLDcgKzMy
ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAg
IC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgogICAgICAgICBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgewogICAgICAgICAg
ICAgaWYgKCFpc0ZpbmFsT2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKHByb3RvR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzRmluYWxPYmplY3RW
UHRyKSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVJlZ3MocHJvdG9HUFIpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNGaW5hbE9iamVj
dFZQdHIpKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgp
KSwgc2NyYXRjaEdQUik7CiAgICAgICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNo
OChNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2hH
UFIsIFN0cnVjdHVyZTo6dHlwZUluZm9UeXBlT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKE9iamVjdFR5cGUpKSk7CkBAIC0zMzkwLDcgKzMzOTAsNyBAQCB2b2lkIFNwZWN1
bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgIGNhc2UgR2V0QnlJZDog
ewogICAgICAgICBpZiAoIW5vZGUucHJlZGljdGlvbigpKSB7Ci0gICAgICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICAg
ICAgdGVybWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKQEAg
LTM0NDYsMTIgKzM0NDYsMTIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBu
b2RlKQogICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICAK
ICAgICAgICAgaWYgKCFpc0FycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGls
ZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3Mo
YmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlWUHRyKSkpOworICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwg
bm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CiAgICAgICAgIAogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIsIEpTQXJy
YXk6OnN0b3JhZ2VPZmZzZXQoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIG1faml0LmxvYWQzMihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhyZXN1bHRHUFIsIE9CSkVDVF9PRkZTRVRPRihBcnJheVN0
b3JhZ2UsIG1fbGVuZ3RoKSksIHJlc3VsdEdQUik7CiAgICAgICAgIAotICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuLCByZXN1bHRHUFIsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIo
MCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3Mo
KSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlc3Vs
dEdQUiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAKICAgICAg
ICAgaW50ZWdlclJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJl
YWs7CkBAIC0zNDY1LDcgKzM0NjUsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5v
ZGUmIG5vZGUpCiAgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAg
ICAgIAogICAgICAgICBpZiAoIWlzU3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9k
ZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1
ZVJlZ3MoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoYmFz
ZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKICAgICAg
ICAgCiAgICAgICAgIG1faml0LmxvYWQzMihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BS
LCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSksIHJlc3VsdEdQUik7CiAKQEAgLTM0ODEsNyAr
MzQ4MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAg
ICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgCiAgICAgICAgIGlm
ICghaXNCeXRlQXJyYXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5t
X3R5cGUpKQotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncyhiYXNlR1BS
KSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOworICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhiYXNlR1BSKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgICAgICAKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlR1BSLCBKU0J5
dGVBcnJheTo6b2Zmc2V0T2ZTdG9yYWdlKCkpLCByZXN1bHRHUFIpOwogICAgICAgICBtX2ppdC5s
b2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQUiwgQnl0ZUFycmF5OjpvZmZzZXRP
ZlNpemUoKSksIHJlc3VsdEdQUik7CkBAIC0zNTIzLDcgKzM1MjMsNyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgfQogICAgIGNhc2UgQ2hlY2tGdW5jdGlv
bjogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBmdW5jdGlvbih0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFdlYWtQdHIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBmdW5jdGlvbi5ncHIo
KSwgbm9kZS5mdW5jdGlvbigpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6
Tm90RXF1YWwsIGZ1bmN0aW9uLmdwcigpLCBub2RlLmZ1bmN0aW9uKCkpKTsKICAgICAgICAgbm9S
ZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0zNTM4LDcg
KzM1MzgsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAg
ICAgIEFTU0VSVChub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSk7CiAgICAgICAgIAogICAgICAg
ICBpZiAobm9kZS5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OkFkZHJlc3MoYmFzZS5ncHIoKSwgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIG5vZGUuc3RydWN0dXJlU2V0KClbMF0pKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkQ2FjaGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoV2Vha1B0cihKSVRDb21waWxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjpB
ZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBub2RlLnN0cnVj
dHVyZVNldCgpWzBdKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5
IHN0cnVjdHVyZSh0aGlzKTsKICAgICAgICAgICAgIApAQCAtMzU0OSw3ICszNTQ5LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBub2RlLnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkKICAg
ICAgICAgICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVy
OjpFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpW2ldKSk7CiAgICAg
ICAgICAgICAKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9O
b2RlLCBtX2ppdC5icmFuY2hXZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJl
LmdwcigpLCBub2RlLnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhCYWRDYWNoZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hX
ZWFrUHRyKEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgc3RydWN0dXJlLmdwcigpLCBub2RlLnN0cnVj
dHVyZVNldCgpLmxhc3QoKSkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBkb25lLmxpbmso
Jm1faml0KTsKICAgICAgICAgfQpAQCAtMzcwNSw3ICszNzA1LDcgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogCiAgICAgICAgIC8vIFNwZWN1bGF0ZSB0aGF0IGJh
c2UgJ0ltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UnLgogICAgICAgICBtX2ppdC5sb2FkUHRy
KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2UuZ3ByKCksIEpTQ2VsbDo6c3RydWN0dXJlT2Zm
c2V0KCkpLCBzdHJ1Y3R1cmUuZ3ByKCkpOwotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3NlbWJsZXI6Olplcm8s
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3RydWN0dXJlOjp0eXBl
SW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKEltcGxlbWVu
dHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdDgoTWFjcm9Bc3Nl
bWJsZXI6Olplcm8sIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0cnVjdHVyZS5ncHIoKSwgU3Ry
dWN0dXJlOjp0eXBlSW5mb0ZsYWdzT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKEltcGxlbWVudHNEZWZhdWx0SGFzSW5zdGFuY2UpKSk7CiAKICAgICAgICAgbm9SZXN1bHQo
bV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKQEAgLTM3OTQsNyArMzc5NCw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IEZvcmNlT1NSRXhpdDogewotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihK
U1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyNCw5ICs4MjQs
OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUGVlcEhvbGVPYmplCiAgICAgR1BSUmVn
IG9wMkdQUiA9IG9wMi5ncHIoKTsKICAgICAKICAgICBpZiAoIXByZWRpY3Rpb25DaGVjayhtX3N0
YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChvcDFHUFIpLCBub2RlLmNoaWxkMSgpLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhvcDFHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwor
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRD
ZWxsKG9wMUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMUdQUiksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKHZwdHIpKSk7CiAgICAgaWYgKCFwcmVkaWN0aW9uQ2hlY2sobV9z
dGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQyKCkpLm1fdHlwZSkpCi0gICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AyR1BSKSwgbm9kZS5jaGlsZDIoKSwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3Mob3AyR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIodnB0cikpKTsK
KyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVk
Q2VsbChvcDJHUFIpLCBub2RlLmNoaWxkMigpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhvcDJHUFIpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cih2cHRyKSkpOwogICAgIAogICAgIGFkZEJyYW5jaChtX2ppdC5i
cmFuY2hQdHIoY29uZGl0aW9uLCBvcDFHUFIsIG9wMkdQUiksIHRha2VuKTsKICAgICBpZiAobm90
VGFrZW4gIT0gKG1fYmxvY2sgKyAxKSkKQEAgLTEwNTksMTI4ICsxMDU5LDEyOCBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAgICAgICAgIFByZWRpY3RlZFR5cGUg
cHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5
cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwg
dGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVt
cC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQ
dHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblpl
cm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc0J5dGVBcnJh
eVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVz
c0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIp
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRl
c3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01h
c2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwg
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7
CiAgICAgICAgIH0gZWxzZSBpZiAoaXNCb29sZWFuUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkg
ewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2pp
dC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAu
Z3ByKCkpOwogICAgICAgICAgICAgbV9qaXQueG9yUHRyKFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90PihWYWx1ZUZhbHNlKSksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRh
YmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQz
Ml90Pih+MSkpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQ4QXJyYXlQcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJl
Z2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRy
KE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5n
cHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+
aW50OEFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDhBcnJheURlc2NyaXB0b3Io
KS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQxNkFycmF5UHJlZGljdGlvbihw
cmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAg
ICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0
cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAu
Z3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCkt
PmludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hU
ZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdN
YXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUs
IEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0
b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNJbnQzMkFycmF5UHJlZGljdGlv
bihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7
CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1
YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAgICAg
ICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFi
bGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJBcnJheURlc2Ny
aXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50OEFycmF5UHJlZGlj
dGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhp
cyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZp
cnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOwotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZv
Ojp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1i
bGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDhBcnJheURl
c2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50MTZBcnJheVBy
ZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1w
KHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRkcmVzc0Zv
cih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNz
ZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1f
aml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3ByKCksIEdQ
UkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZB
cnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNVaW50MzJB
cnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6YWRk
cmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0UHRyKE1h
Y3JvQXNzZW1ibGVyOjpOb25aZXJvLCB0ZW1wLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0
ZXIpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9q
aXQuZ2xvYmFsRGF0YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05v
ZGUsIG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIHRlbXAuZ3By
KCksIEdQUkluZm86OnRhZ01hc2tSZWdpc3RlcikpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdw
cigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51
aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXNG
bG9hdDMyQXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJU
ZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIoSklUQ29tcGls
ZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVz
dFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFz
a1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCks
IE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdz
KCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
dGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAgICAgICBzcGVj
dWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxE
YXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNGbG9hdDY0QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWRQdHIo
SklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5m
bzo6dGFnTWFza1JlZ2lzdGVyKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVh
bCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQ2NEFycmF5RGVzY3JpcHRvcigp
Lm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybywgdGVtcC5ncHIoKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUs
IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC5nbG9iYWxEYXRhKCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAg
ICAgIH0KICNlbHNlCiAgICAgICAgIGlmIChpc0ludDMyUHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdG
b3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIEpJVENvbXBp
bGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMy
VGFnKSkpOwogICAgICAgICBlbHNlIGlmIChpc0FycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBl
KSkgewogICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBt
X2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdw
cigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25D
aGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpDZWxsVGFnKSkpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXls
b2FkRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQXJyYXlW
UHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAg
fSBlbHNlIGlmIChpc0J5dGVBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAg
ICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMy
KEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJh
bmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3Vu
dGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykp
KTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0
dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2so
SlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7
CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzQnl0ZUFycmF5VlB0cikpKTsKICAgICAgICAgfSBl
bHNlIGlmIChpc0Jvb2xlYW5QcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKQotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgSklUQ29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0
ZXIpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZykpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBKSVRDb21waWxlcjo6dGFnRm9yKHZp
cnR1YWxSZWdpc3RlciksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOwogICAg
ICAgICBlbHNlIGlmIChpc0ludDhBcnJheVByZWRpY3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAg
ICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwogICAgICAgICAgICAgbV9qaXQubG9h
ZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5j
b3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRh
ZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2
aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQ4QXJyYXlEZXNjcmlw
dG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSW50MTZBcnJheVByZWRpY3Rp
b24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMp
OwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJl
Z2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwg
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihK
SVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAg
ICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFs
RGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50MTZBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gZWxz
ZSBpZiAoaXNJbnQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmludDMyQXJyYXlEZXNjcmlwdG9yKCku
bV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQzMkFycmF5RGVzY3JpcHRvcigp
Lm1fdnB0cikpKTsKICAgICAgICAgfSBlbHNlIGlmIChpc1VpbnQ4QXJyYXlQcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVt
cC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVt
cC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDhBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRl
bXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRh
KCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzVWludDE2QXJyYXlQcmVkaWN0aW9uKHByZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21w
aWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1h
Y3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAg
ICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29tcGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lz
dGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVS
ZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVtcC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlwdG9yKCkubV92
cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1
ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT51aW50MTZBcnJheURlc2NyaXB0b3IoKS5t
X3ZwdHIpKSk7CiAgICAgICAgIH0gIGVsc2UgaWYgKGlzVWludDMyQXJyYXlQcmVkaWN0aW9uKHBy
ZWRpY3RlZFR5cGUpKSB7CiAgICAgICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKICAg
ICAgICAgICAgIG1faml0LmxvYWQzMihKSVRDb21waWxlcjo6dGFnRm9yKHZpcnR1YWxSZWdpc3Rl
ciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVt
cC5ncHIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0
LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgdGVtcC5ncHIoKSwgVHJ1c3RlZElt
bTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklUQ29t
cGlsZXI6OnBheWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNo
UHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModGVt
cC5ncHIoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2JhbERhdGEo
KS0+dWludDMyQXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh0
ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0
YSgpLT51aW50MzJBcnJheURlc2NyaXB0b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gIGVsc2Ug
aWYgKGlzRmxvYXQzMkFycmF5UHJlZGljdGlvbihwcmVkaWN0ZWRUeXBlKSkgewogICAgICAgICAg
ICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAgICAgICAgICAgICBtX2ppdC5sb2FkMzIoSklU
Q29tcGlsZXI6OnRhZ0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpDZWxsVGFnKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
Tm90RXF1YWwsIHRlbXAuZ3ByKCksIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSkpOwog
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjpwYXlsb2FkRm9yKHZpcnR1YWxS
ZWdpc3RlciksIHRlbXAuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1Zh
bHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0b3Io
KS5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHRlbXAuZ3ByKCkpLCBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmZsb2F0MzJBcnJheURlc2NyaXB0
b3IoKS5tX3ZwdHIpKSk7CiAgICAgICAgIH0gICBlbHNlIGlmIChpc0Zsb2F0NjRBcnJheVByZWRp
Y3Rpb24ocHJlZGljdGVkVHlwZSkpIHsKICAgICAgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRo
aXMpOwogICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVh
bFJlZ2lzdGVyKSwgdGVtcC5ncHIoKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpT
VmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCB0ZW1wLmdwcigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCB0ZW1wLmdwcigpLCBU
cnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpKTsKICAgICAgICAgICAgIG1faml0LmxvYWQz
MihKSVRDb21waWxlcjo6cGF5bG9hZEZvcih2aXJ0dWFsUmVnaXN0ZXIpLCB0ZW1wLmdwcigpKTsK
LSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xv
YmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBt
X2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh0ZW1wLmdwcigpKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5mbG9hdDY0QXJyYXlEZXNjcmlwdG9yKCkubV92cHRyKSkpOwogICAgICAg
ICB9IAogI2VuZGlmCiAgICAgfQpAQCAtMTM1NCwxMyArMTM1NCwxMyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlR2V0Q2hhckNvZGVBCiAgICAgCiAgICAgaWYgKCFpc1N0cmluZ1ByZWRp
Y3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpIHsKICAgICAgICAg
QVNTRVJUKCEoYXQobm9kZS5jaGlsZDEoKSkucHJlZGljdGlvbigpICYgUHJlZGljdFN0cmluZykp
OwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBO
b05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJs
ZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5k
ZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNv
biBzbyB3ZSBjYW4gZmlsdGVyIG91dCBuZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQg
YXJlIHRvbyBsYXJnZQotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2Rl
LCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBpbmRleFJlZywg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc3RyaW5nUmVnLCBKU1N0cmluZzo6b2Zmc2V0T2ZMZW5n
dGgoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygp
LCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGlu
ZGV4UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzdHJpbmdSZWcsIEpTU3RyaW5nOjpvZmZz
ZXRPZkxlbmd0aCgpKSkpOwogCiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAgICAg
R1BSUmVnIHNjcmF0Y2hSZWcgPSBzY3JhdGNoLmdwcigpOwpAQCAtMTM5MywxMyArMTM5MywxMyBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPblN0CiAKICAgICBpZiAoIWlz
U3RyaW5nUHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkg
ewogICAgICAgICBBU1NFUlQoIShhdChub2RlLmNoaWxkMSgpKS5wcmVkaWN0aW9uKCkgJiBQcmVk
aWN0U3RyaW5nKSk7Ci0gICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFs
dWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9u
KFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUpOwogICAgICAgICBub1Jlc3VsdCht
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyB1bnNpZ25l
ZCBjb21wYXJpc29uIHNvIHdlIGNhbiBmaWx0ZXIgb3V0IG5lZ2F0aXZlIGluZGljZXMgYW5kIGlu
ZGljZXMgdGhhdCBhcmUgdG9vIGxhcmdlCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVn
cygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU1N0cmluZzo6
b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKKyAgICBzcGVjdWxhdGlvbkNoZWNrKFVuY291bnRhYmxlLCBK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92
ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBK
U1N0cmluZzo6b2Zmc2V0T2ZMZW5ndGgoKSkpKTsKIAogICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOwogICAgIEdQUlJlZyBzY3JhdGNoUmVnID0gc2NyYXRjaC5ncHIoKTsKQEAgLTE0MTcs
NyArMTQxNyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVHZXRCeVZhbE9uU3QKICAg
ICBtX2ppdC5sb2FkMTYoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBwcm9w
ZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzVHdvLCAwKSwgc2NyYXRjaFJlZyk7CiAKICAg
ICAvLyBXZSBvbmx5IHN1cHBvcnQgYXNjaWkgY2hhcmFjdGVycwotICAgIHNwZWN1bGF0aW9uQ2hl
Y2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVkSW1tMzIoMHgxMDApKSk7CisgICAgc3Bl
Y3VsYXRpb25DaGVjayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBzY3JhdGNoUmVnLCBUcnVzdGVk
SW1tMzIoMHgxMDApKSk7CiAKICAgICAvLyA4IGJpdCBzdHJpbmcgdmFsdWVzIGRvbid0IG5lZWQg
dGhlIGlzQVNDSUkgY2hlY2suCiAgICAgY29udDhCaXQubGluaygmbV9qaXQpOwpAQCAtMTQyNiw3
ICsxNDI2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25TdAogICAg
IEdQUlJlZyBzbWFsbFN0cmluZ3NSZWcgPSBzbWFsbFN0cmluZ3MuZ3ByKCk7CiAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPnNt
YWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdzKCkpLCBzbWFsbFN0cmluZ3NSZWcpOwog
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzbWFsbFN0cmluZ3NS
ZWcsIHNjcmF0Y2hSZWcsIE1hY3JvQXNzZW1ibGVyOjpTY2FsZVB0ciwgMCksIHNjcmF0Y2hSZWcp
OwotICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFu
Y2hUZXN0MzIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hSZWcpKTsKKyAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaFJlZykpOwogICAgIGNlbGxSZXN1
bHQoc2NyYXRjaFJlZywgbV9jb21waWxlSW5kZXgpOwogfQogCkBAIC0xNDk1LDE0ICsxNDk1LDE0
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckIKICAgICBOb2RlSW5k
ZXggdmFsdWVJbmRleCA9IG5vZGUuY2hpbGQzKCk7CiAgICAgCiAgICAgaWYgKCFpc0J5dGVBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKGJhc2VJbmRleCkubV90eXBlKSkKLSAgICAgICAg
c3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlKSwgYmFzZUlu
ZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQu
Z2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hl
Y2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwg
bV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1faml0Lmdsb2Jh
bERhdGEoKS0+anNCeXRlQXJyYXlWUHRyKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAg
ICBHUFJSZWcgdmFsdWVHUFI7CiAKICAgICBpZiAoYXQodmFsdWVJbmRleCkuaXNDb25zdGFudCgp
KSB7CiAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IHZhbHVlT2ZKU0NvbnN0YW50KHZhbHVlSW5k
ZXgpOwogICAgICAgICBpZiAoIWpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAg
ICAgICAgIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKFVuY291bnRhYmxlLCBKU1ZhbHVl
UmVncygpLCBOb05vZGUpOwogICAgICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0xNTYzLDcgKzE1NjMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkJ5CiAgICAgR1BSUmVnIHByb3BlcnR5
UmVnID0gcHJvcGVydHkuZ3ByKCk7CiAKICAgICBpZiAoIWlzQnl0ZUFycmF5UHJlZGljdGlvbiht
X3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkgewotICAgICAgICB0ZXJtaW5h
dGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpAQCAtMTU3NCw3ICsxNTc0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZUdldEJ5VmFsT25CeQogICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZVJlZywgSlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7
CiAgICAgCiAgICAgLy8gdW5zaWduZWQgY29tcGFyaXNvbiBzbyB3ZSBjYW4gZmlsdGVyIG91dCBu
ZWdhdGl2ZSBpbmRpY2VzIGFuZCBpbmRpY2VzIHRoYXQgYXJlIHRvbyBsYXJnZQotICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6QWJvdmVPckVxdWFsLCBwcm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Moc3RvcmFnZVJlZywgQnl0ZUFycmF5OjpvZmZzZXRPZlNpemUoKSkpKTsKKyAgICBzcGVjdWxh
dGlvbkNoZWNrKFVuY291bnRhYmxlLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHByb3BlcnR5UmVnLCBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhzdG9yYWdlUmVnLCBCeXRlQXJyYXk6Om9mZnNldE9mU2l6ZSgpKSkpOwog
CiAgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleChzdG9yYWdlUmVnLCBw
cm9wZXJ0eVJlZywgTWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25lLCBCeXRlQXJyYXk6Om9mZnNldE9m
RGF0YSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgaW50ZWdlclJlc3VsdChzdG9yYWdlUmVnLCBtX2Nv
bXBpbGVJbmRleCk7CkBAIC0xNTg5LDcgKzE1ODksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlR2V0VHlwZWRBcnJhCiAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsK
ICAgICAKICAgICBpZiAobmVlZHNTcGVjdWxhdGlvbkNoZWNrKQotICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VHUFIpLCBub2RlLmNoaWxkMSgp
LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhiYXNlR1BSKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3Jp
cHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1
ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZUdQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5j
aFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJh
c2VHUFIpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikp
KTsKICAgICAKICAgICBtX2ppdC5sb2FkMzIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZUdQ
UiwgZGVzY3JpcHRvci5tX2xlbmd0aE9mZnNldCksIHJlc3VsdEdQUik7CiAgICAgCkBAIC0xNjEx
LDcgKzE2MTEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0QnlWYWxPbkluCiAK
ICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWND
aGVjaykgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgdGVybWluYXRl
U3BlY3VsYXRpdmVFeGVjdXRpb24oSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKKyAgICAgICAgdGVy
bWluYXRlU3BlY3VsYXRpdmVFeGVjdXRpb24oVW5jb3VudGFibGUsIEpTVmFsdWVSZWdzKCksIE5v
Tm9kZSk7CiAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTE2NTIsMTQgKzE2NTIsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZVB1dEJ5VmFsRm9ySQogICAgIE5vZGVJbmRleCB2YWx1ZUluZGV4ID0gbm9kZS5jaGlsZDMo
KTsKICAgICAKICAgICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5
VHlwZVNwZWNDaGVjaykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1
bmJveGVkQ2VsbChiYXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJ
bmRleCwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2Ny
aXB0b3IubV92cHRyKSkpOwogICAgIEdQUlRlbXBvcmFyeSB2YWx1ZTsKICAgICBHUFJSZWcgdmFs
dWVHUFI7CiAgICAgCiAgICAgaWYgKGF0KHZhbHVlSW5kZXgpLmlzQ29uc3RhbnQoKSkgewogICAg
ICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudCh2YWx1ZUluZGV4KTsKICAg
ICAgICAgaWYgKCFqc1ZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIHRlcm1pbmF0ZVNw
ZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzKCksIE5vTm9kZSk7CisgICAgICAgICAgICB0
ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlKTsKICAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTczNCw3ICsxNzM0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZUdldEJ5VmFsT25GbAogICAgIAogICAgIGlmIChzcGVjdWxhdGlvblJl
cXVpcmVtZW50cyAhPSBOb1R5cGVkQXJyYXlUeXBlU3BlY0NoZWNrKSB7CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihK
U1ZhbHVlUmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1
dGlvbihVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1
bHQobV9jb21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTc3NSw3ICsx
Nzc1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRgogICAgIFNw
ZWN1bGF0ZURvdWJsZU9wZXJhbmQgdmFsdWVPcCh0aGlzLCB2YWx1ZUluZGV4KTsKICAgICAKICAg
ICBpZiAoc3BlY3VsYXRpb25SZXF1aXJlbWVudHMgIT0gTm9UeXBlZEFycmF5VHlwZVNwZWNDaGVj
aykKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChi
YXNlKSwgYmFzZUluZGV4LCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFk
VHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZSksIGJhc2VJbmRleCwgbV9qaXQu
YnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoYmFzZSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRy
KSkpOwogICAgIAogICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgCkBAIC0xODEw
LDcgKzE4MTAsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlSW5zdGFuY2VPZkZvCiB7
CiAgICAgLy8gQ2hlY2sgdGhhdCBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LgogICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG90eXBlUmVnLCBKU0NlbGw6OnN0cnVj
dHVyZU9mZnNldCgpKSwgc2NyYXRjaFJlZyk7Ci0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVl
UmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaElmTm90T2JqZWN0KHNjcmF0Y2hSZWcpKTsKKyAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQu
YnJhbmNoSWZOb3RPYmplY3Qoc2NyYXRjaFJlZykpOwogICAgIAogICAgIC8vIEluaXRpYWxpemUg
c2NyYXRjaFJlZyB3aXRoIHRoZSB2YWx1ZSBiZWluZyBjaGVja2VkLgogICAgIG1faml0Lm1vdmUo
dmFsdWVSZWcsIHNjcmF0Y2hSZWcpOwpAQCAtMTk2NCw3ICsxOTY0LDcgQEAgdm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVNvZnRNb2R1bG8oTgogICAgIFNwZWN1bGF0ZUludGVnZXJPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMigpKTsKICAgICBHUFJSZWcgb3AyR3ByID0gb3AyLmdwcigp
OwogCi0gICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJy
YW5jaFRlc3QzMihKSVRDb21waWxlcjo6WmVybywgb3AyR3ByKSk7CisgICAgc3BlY3VsYXRpb25D
aGVjayhPdmVyZmxvdywgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIo
SklUQ29tcGlsZXI6Olplcm8sIG9wMkdwcikpOwogCiAjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82
NCkKICAgICBHUFJUZW1wb3JhcnkgZWF4KHRoaXMsIFg4NlJlZ2lzdGVyczo6ZWF4KTsKQEAgLTIw
OTIsMTMgKzIwOTIsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoTXVsKE5v
ZAogICAgICAgICAvLyB0aGUgc2VtYW50aWNzIGFyZSBhbHdheXMgYXMgaWYgdGhlIG11bHRpcGx5
IGhhZCBiZWVuIHBlcmZvcm1lZCBpbiB0aGUgZG91YmxlCiAgICAgICAgIC8vIGRvbWFpbi4KICAg
ICAgICAgICAgIAotICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9k
ZSwgbV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCByZWcxLCByZWcy
LCByZXN1bHQuZ3ByKCkpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVjayhPdmVyZmxvdywgSlNW
YWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hNdWwzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIHJlZzEsIHJlZzIsIHJlc3VsdC5ncHIoKSkpOwogICAgICAgICAgICAgCiAgICAgICAg
IC8vIENoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCBpZiB0aGUgdXNlcnMgb2YgdGhpcyBub2RlIGNh
cmUgYWJvdXQgc3VjaCB0aGluZ3MuCiAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZl
WmVybyhub2RlLmFyaXRoTm9kZUZsYWdzKCkpKSB7CiAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6SnVtcCByZXN1bHROb25aZXJvID0gbV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhK
U1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNz
VGhhbiwgcmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7Ci0gICAgICAgICAgICBzcGVjdWxhdGlvbkNo
ZWNrKEpTVmFsdWVSZWdzKCksIE5vTm9kZSwgbV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6
Okxlc3NUaGFuLCByZWcyLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0
aW9uQ2hlY2soTmVnYXRpdmVaZXJvLCBKU1ZhbHVlUmVncygpLCBOb05vZGUsIG1faml0LmJyYW5j
aDMyKE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgcmVnMSwgVHJ1c3RlZEltbTMyKDApKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKE5lZ2F0aXZlWmVybywgSlNWYWx1ZVJlZ3MoKSwg
Tm9Ob2RlLCBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHJlZzIsIFRy
dXN0ZWRJbW0zMigwKSkpOwogICAgICAgICAgICAgcmVzdWx0Tm9uWmVyby5saW5rKCZtX2ppdCk7
CiAgICAgICAgIH0KIApAQCAtMjMyMiw3ICsyMzIyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZUdldEluZGV4ZWRQcgogICAgIFByZWRpY3RlZFR5cGUgYmFzZVByZWRpY3Rpb24gPSBh
dChub2RlLmNoaWxkMigpKS5wcmVkaWN0aW9uKCk7CiAgICAgaWYgKCEoYmFzZVByZWRpY3Rpb24g
JiBQcmVkaWN0SW50MzIpICYmIGJhc2VQcmVkaWN0aW9uKSB7CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihKU1ZhbHVl
UmVncygpLCBOb05vZGUpOworICAgICAgICB0ZXJtaW5hdGVTcGVjdWxhdGl2ZUV4ZWN1dGlvbihV
bmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlKTsKICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjMzMSw2MSArMjMzMSw2
MSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlR2V0SW5kZXhlZFByCiAgICAgR1BSUmVn
IHN0b3JhZ2VSZWcgPSBzdG9yYWdlLmdwcigpOwogICAgIGlmIChhdChub2RlLmNoaWxkMSgpKS5w
cmVkaWN0aW9uKCkgPT0gUHJlZGljdFN0cmluZykgewogICAgICAgICBpZiAoIWlzU3RyaW5nUHJl
ZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAg
ICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyks
IG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWws
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFz
ZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90
RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihtX2ppdC5nbG9iYWxEYXRhKCktPmpzU3RyaW5nVlB0cikpKTsKIAogICAg
ICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIEpTU3Ry
aW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzdG9yYWdlUmVnKTsKICAgICAgICAgCiAgICAgICAgIC8v
IFNwZWN1bGF0ZSB0aGF0IHdlJ3JlIG5vdCBhY2Nlc3NpbmcgYSByb3BlCi0gICAgICAgIHNwZWN1
bGF0aW9uQ2hlY2soSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIoTWFj
cm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcpKTsKKyAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhVbmNvdW50YWJsZSwgSlNWYWx1ZVJlZ3MoKSwgTm9Ob2RlLCBtX2ppdC5icmFuY2hUZXN0MzIo
TWFjcm9Bc3NlbWJsZXI6Olplcm8sIHN0b3JhZ2VSZWcpKTsKIAogICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHN0b3JhZ2VSZWcsIFN0cmluZ0ltcGw6OmRhdGFP
ZmZzZXQoKSksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlQnl0ZUFycmF5KCkpIHsKICAgICAgICAgaWYgKCFpc0J5dGVBcnJheVBy
ZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcp
LCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7CisgICAgICAg
ICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxs
KGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6
Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW1QdHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0J5dGVBcnJheVZQdHIpKSk7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
SlNCeXRlQXJyYXk6Om9mZnNldE9mU3RvcmFnZSgpKSwgc3RvcmFnZVJlZyk7CiAgICAgfSBlbHNl
IGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVJbnQ4QXJyYXkoKSkgewogICAg
ICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2Jh
bERhdGEoKS0+aW50OEFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzSW50OEFycmF5
UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAg
ICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9u
Q2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUu
Y2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3Jh
Z2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
SW50MTZBcnJheSgpKSB7CiAgICAgICAgIGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yID0gbV9qaXQuZ2xvYmFsRGF0YSgpLT5pbnQxNkFycmF5RGVzY3JpcHRvcigpOwogICAg
ICAgICBpZiAoIWlzSW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hp
bGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3Vy
Y2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIo
TWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVn
KSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7Cisg
ICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94
ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1f
aml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5t
X3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYgKGF0KG5vZGUuY2hp
bGQxKCkpLnNob3VsZFNwZWN1bGF0ZUludDMyQXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBl
ZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+aW50MzJB
cnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0ludDMyQXJyYXlQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRl
c2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBl
LCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGRlc2NyaXB0b3Iu
bV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3RvcmFnZVJlZyk7CiAgICAg
fSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxhdGVVaW50OEFycmF5KCkp
IHsKICAgICAgICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2pp
dC5nbG9iYWxEYXRhKCktPnVpbnQ4QXJyYXlEZXNjcmlwdG9yKCk7CiAgICAgICAgIGlmICghaXNV
aW50OEFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBl
KSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKKyAgICAgICAgICAgIHNw
ZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJl
ZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1
YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAgICAgICAgbV9qaXQubG9hZFB0cihN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNjcmlwdG9yLm1fc3RvcmFnZU9mZnNl
dCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxk
U3BlY3VsYXRlVWludDE2QXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+dWludDE2QXJyYXlEZXNjcmlw
dG9yKCk7CiAgICAgICAgIGlmICghaXNVaW50MTZBcnJheVByZWRpY3Rpb24obV9zdGF0ZS5mb3JO
b2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNr
KEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2pp
dC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRk
cmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5t
X3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVT
b3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQ
dHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNl
UmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7
CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZywg
ZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9yYWdlUmVnKTsKICAgICB9IGVsc2UgaWYg
KGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZVVpbnQzMkFycmF5KCkpIHsKICAgICAg
ICAgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxE
YXRhKCktPnVpbnQzMkFycmF5RGVzY3JpcHRvcigpOwogICAgICAgICBpZiAoIWlzVWludDMyQXJy
YXlQcmVkaWN0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAg
ICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNl
UmVnKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RF
cXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOworICAgICAgICAgICAgc3BlY3VsYXRp
b25DaGVjayhCYWRUeXBlLCBKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9k
ZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGRlc2NyaXB0b3IubV92cHRyKSkpOwogICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcsIGRlc2NyaXB0b3IubV9zdG9yYWdlT2Zmc2V0KSwgc3Rv
cmFnZVJlZyk7CiAgICAgfSBlbHNlIGlmIChhdChub2RlLmNoaWxkMSgpKS5zaG91bGRTcGVjdWxh
dGVGbG9hdDMyQXJyYXkoKSkgewogICAgICAgICBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYg
ZGVzY3JpcHRvciA9IG1faml0Lmdsb2JhbERhdGEoKS0+ZmxvYXQzMkFycmF5RGVzY3JpcHRvcigp
OwogICAgICAgICBpZiAoIWlzRmxvYXQzMkFycmF5UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUo
bm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soSlNW
YWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KGJhc2VSZWcpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0
cikpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVNvdXJj
ZTo6dW5ib3hlZENlbGwoYmFzZVJlZyksIG5vZGUuY2hpbGQxKCksIG1faml0LmJyYW5jaFB0cihN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGJhc2VSZWcp
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihkZXNjcmlwdG9yLm1fdnB0cikpKTsKICAg
ICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBkZXNj
cmlwdG9yLm1fc3RvcmFnZU9mZnNldCksIHN0b3JhZ2VSZWcpOwogICAgIH0gZWxzZSBpZiAoYXQo
bm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRlRmxvYXQ2NEFycmF5KCkpIHsKICAgICAgICAg
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBtX2ppdC5nbG9iYWxEYXRh
KCktPmZsb2F0NjRBcnJheURlc2NyaXB0b3IoKTsKICAgICAgICAgaWYgKCFpc0Zsb2F0NjRBcnJh
eVByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAg
ICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VS
ZWcpLCBub2RlLmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVx
dWFsLCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoZGVzY3JpcHRvci5tX3ZwdHIpKSk7CiAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZywgZGVzY3JpcHRvci5tX3N0b3JhZ2VPZmZzZXQpLCBzdG9y
YWdlUmVnKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoIWlzQXJyYXlQcmVkaWN0aW9uKG1f
c3RhdGUuZm9yTm9kZShub2RlLmNoaWxkMSgpKS5tX3R5cGUpKQotICAgICAgICAgICAgc3BlY3Vs
YXRpb25DaGVjayhKU1ZhbHVlU291cmNlOjp1bmJveGVkQ2VsbChiYXNlUmVnKSwgbm9kZS5jaGls
ZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MoYmFzZVJlZyksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKG1f
aml0Lmdsb2JhbERhdGEoKS0+anNBcnJheVZQdHIpKSk7CisgICAgICAgICAgICBzcGVjdWxhdGlv
bkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKGJhc2VSZWcpLCBub2Rl
LmNoaWxkMSgpLCBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnKSwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIobV9qaXQuZ2xvYmFsRGF0YSgpLT5qc0FycmF5VlB0cikpKTsKICAgICAgICAgbV9qaXQubG9h
ZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhiYXNlUmVnLCBKU0FycmF5OjpzdG9yYWdlT2Zm
c2V0KCkpLCBzdG9yYWdlUmVnKTsKICAgICB9CiAgICAgc3RvcmFnZVJlc3VsdChzdG9yYWdlUmVn
LCBtX2NvbXBpbGVJbmRleCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTIwMjksMzcg
KzIwMjksMzcgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgLy8gQWRkIGEgc3BlY3VsYXRpb24g
Y2hlY2sgd2l0aG91dCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25D
aGVjayhKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1h
Y3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwpCisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNr
KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5v
ZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXAganVtcFRvRmFpbCkKICAgICB7CiAgICAgICAg
IGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbV9qaXQu
Y29kZUJsb2NrKCktPmFwcGVuZE9TUkV4aXQoT1NSRXhpdChqc1ZhbHVlU291cmNlLCBtX2ppdC52
YWx1ZVByb2ZpbGVGb3Iobm9kZUluZGV4KSwganVtcFRvRmFpbCwgdGhpcykpOworICAgICAgICBt
X2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kT1NSRXhpdChPU1JFeGl0KGtpbmQsIGpzVmFsdWVTb3Vy
Y2UsIG1faml0LnZhbHVlUHJvZmlsZUZvcihub2RlSW5kZXgpLCBqdW1wVG9GYWlsLCB0aGlzKSk7
CiAgICAgfQogICAgIC8vIEFkZCBhIHNldCBvZiBzcGVjdWxhdGlvbiBjaGVja3Mgd2l0aG91dCBh
ZGRpdGlvbmFsIHJlY292ZXJ5LgotICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291
cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYganVtcHNUb0ZhaWwpCisgICAgdm9pZCBzcGVjdWxhdGlvbkNoZWNrKEV4aXRLaW5k
IGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTm9kZUluZGV4IG5vZGVJbmRleCwg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0JiBqdW1wc1RvRmFpbCkKICAgICB7CiAgICAgICAgIFZl
Y3RvcjxNYWNyb0Fzc2VtYmxlcjo6SnVtcCwgMTY+IEp1bXBWZWN0b3IgPSBqdW1wc1RvRmFpbC5q
dW1wcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgSnVtcFZlY3Rvci5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soanNWYWx1ZVNvdXJjZSwgbm9k
ZUluZGV4LCBKdW1wVmVjdG9yW2ldKTsKKyAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soa2lu
ZCwganNWYWx1ZVNvdXJjZSwgbm9kZUluZGV4LCBKdW1wVmVjdG9yW2ldKTsKICAgICB9CiAgICAg
Ly8gQWRkIGEgc3BlY3VsYXRpb24gY2hlY2sgd2l0aCBhZGRpdGlvbmFsIHJlY292ZXJ5LgotICAg
IHZvaWQgc3BlY3VsYXRpb25DaGVjayhKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJ
bmRleCBub2RlSW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNw
ZWN1bGF0aW9uUmVjb3ZlcnkmIHJlY292ZXJ5KQorICAgIHZvaWQgc3BlY3VsYXRpb25DaGVjayhF
eGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2UsIE5vZGVJbmRleCBub2Rl
SW5kZXgsIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGp1bXBUb0ZhaWwsIGNvbnN0IFNwZWN1bGF0aW9u
UmVjb3ZlcnkmIHJlY292ZXJ5KQogICAgIHsKICAgICAgICAgaWYgKCFtX2NvbXBpbGVPa2F5KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBtX2ppdC5jb2RlQmxvY2soKS0+YXBwZW5kU3Bl
Y3VsYXRpb25SZWNvdmVyeShyZWNvdmVyeSk7Ci0gICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoanNWYWx1ZVNvdXJjZSwgbV9qaXQudmFsdWVQcm9maWxlRm9y
KG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1faml0LmNvZGVCbG9jaygpLT5udW1iZXJP
ZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CisgICAgICAgIG1faml0LmNvZGVCbG9jaygpLT5h
cHBlbmRPU1JFeGl0KE9TUkV4aXQoa2luZCwganNWYWx1ZVNvdXJjZSwgbV9qaXQudmFsdWVQcm9m
aWxlRm9yKG5vZGVJbmRleCksIGp1bXBUb0ZhaWwsIHRoaXMsIG1faml0LmNvZGVCbG9jaygpLT5u
dW1iZXJPZlNwZWN1bGF0aW9uUmVjb3ZlcmllcygpKSk7CiAgICAgfQogCiAgICAgLy8gQ2FsbGVk
IHdoZW4gd2Ugc3RhdGljYWxseSBkZXRlcm1pbmUgdGhhdCBhIHNwZWN1bGF0aW9uIHdpbGwgZmFp
bC4KLSAgICB2b2lkIHRlcm1pbmF0ZVNwZWN1bGF0aXZlRXhlY3V0aW9uKEpTVmFsdWVSZWdzIGpz
VmFsdWVSZWdzLCBOb2RlSW5kZXggbm9kZUluZGV4KQorICAgIHZvaWQgdGVybWluYXRlU3BlY3Vs
YXRpdmVFeGVjdXRpb24oRXhpdEtpbmQga2luZCwgSlNWYWx1ZVJlZ3MganNWYWx1ZVJlZ3MsIE5v
ZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkK
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJTcGVjdWxhdGl2ZUpJVCB3YXMgdGVybWluYXRlZC5c
biIpOwogI2VuZGlmCiAgICAgICAgIGlmICghbV9jb21waWxlT2theSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgc3BlY3VsYXRpb25DaGVjayhqc1ZhbHVlUmVncywgbm9kZUluZGV4LCBt
X2ppdC5qdW1wKCkpOworICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKGtpbmQsIGpzVmFsdWVSZWdz
LCBub2RlSW5kZXgsIG1faml0Lmp1bXAoKSk7CiAgICAgICAgIG1fY29tcGlsZU9rYXkgPSBmYWxz
ZTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVy
aXN0aWNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9I
ZXVyaXN0aWNzLmNwcAkocmV2aXNpb24gMTAyNTYyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSGV1cmlzdGljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDggQEAg
ZG91YmxlIGNvdWxkVGFrZVNsb3dDYXNlVGhyZXNob2xkOwogdW5zaWduZWQgbGlrZWx5VG9UYWtl
U2xvd0Nhc2VNaW5pbXVtQ291bnQ7CiB1bnNpZ25lZCBjb3VsZFRha2VTbG93Q2FzZU1pbmltdW1D
b3VudDsKIAorZG91YmxlIG9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZTsKKwog
dW5zaWduZWQgbGFyZ2VGYWlsQ291bnRUaHJlc2hvbGRCYXNlOwogdW5zaWduZWQgbGFyZ2VGYWls
Q291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcDsKIApAQCAtMTQ3LDYgKzE0OSw4IEBAIHZvaWQgaW5p
dGlhbGl6ZUhldXJpc3RpY3MoKQogICAgIFNFVChjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZCwg
ICAgICAgMC4wNSk7IC8vIFNob3VsZG4ndCBiZSB6ZXJvIGJlY2F1c2Ugc29tZSBvcHMgd2lsbCBz
cHVyaW91c2x5IHRha2Ugc2xvdyBjYXNlLCBmb3IgZXhhbXBsZSBmb3IgbGlua2luZyBvciBjYWNo
aW5nLgogICAgIFNFVChsaWtlbHlUb1Rha2VTbG93Q2FzZU1pbmltdW1Db3VudCwgMTAwKTsKICAg
ICBTRVQoY291bGRUYWtlU2xvd0Nhc2VNaW5pbXVtQ291bnQsICAgIDEwKTsKKyAgICAKKyAgICBT
RVQob3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlLCAwLjMpOwogCiAgICAgU0VU
KGxhcmdlRmFpbENvdW50VGhyZXNob2xkQmFzZSwgICAgICAgIDIwKTsKICAgICBTRVQobGFyZ2VG
YWlsQ291bnRUaHJlc2hvbGRCYXNlRm9yTG9vcCwgMSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSGV1cmlzdGljcy5oCShyZXZpc2lvbiAxMDI1NjIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9IZXVyaXN0aWNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDYgKzUzLDggQEAgZXh0ZXJuIGRvdWJsZSBjb3VsZFRha2VTbG93Q2FzZVRocmVzaG9sZAogZXh0
ZXJuIHVuc2lnbmVkIGxpa2VseVRvVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwogZXh0ZXJuIHVu
c2lnbmVkIGNvdWxkVGFrZVNsb3dDYXNlTWluaW11bUNvdW50OwogCitleHRlcm4gZG91YmxlIG9z
ckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZTsKKwogZXh0ZXJuIHVuc2lnbmVkIGxh
cmdlRmFpbENvdW50VGhyZXNob2xkQmFzZTsKIGV4dGVybiB1bnNpZ25lZCBsYXJnZUZhaWxDb3Vu
dFRocmVzaG9sZEJhc2VGb3JMb29wOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>